Sim's blog

電子工作はじめてみました

DWM付録基板をboundary scanする

2007-06-08 22:09:08 | FPGA
CQ出版Design Wave Magazine2007年7月号を買ってきました。XilinxのSpartan-3E XC3250Eの載ったFPGA基板が付録についています。

いつものごとく、袋から出してそのまま動くわけではなくて、いくつか部品を足してやる必要があります。

電源は安定した3.3Vを使うか、5Vを3端子レギュレータで3.3Vにして使うのと2通りを選べます。3端子レギュレータ(LM317T)と電解コンデンサ(25V10μF)は実装されていません。LM317Tは外付けの抵抗を使って出力電圧を可変にできる可変出力の3端子れキュレータですが、抵抗は実装されています。安定した3.3Vの電源は?ということでInterface 5月号付録のV850基板から3.3Vを取りました(写真右上)。

FPGAの中身を書き換えるためのJTAGケーブルを接続するためのコネクタも実装する必要があります。これも2系統あって、1つは2.54mmピッチの6pinヘッダで、もう一つが2.0mmピッチの14pin(2x7)ヘッダです。14pinの方はXilinx純正のJTAGケーブルに対応したもののようです。2.0mmピッチのボックスコネクタは秋葉では見つけることはできませんでした。ボックスにこだわらなければ、2.0mmピッチの2列ピンヘッダは千石電商若松通商で売っていました。
2.54mmの方ですが、Platform Cableとかだとフライリード線をつなげばいいです。とりあえず手元にあるSpartan-3 Starter Kitのおまけケーブルにつないでみました。ピン配置が違うので順番を入れ替えています。このケーブルはParallel Cable III互換でプリンタポートに接続します。
JTAG関係の信号はCN3にも出ているので、ベースボードとか作ってそちらからつなぐこともできます。

電源とJTAGコネクタだけあれば、一応コンフィグレーションはできます。しかし実際に動かそうとすると困ったことがあります。この基板はクロックも実装されていません。クロックには3.3V動作の発振器を実装しないといけません。DWM誌のお勧めは京セラキンセキのFXO-31FLです。一応33MHzということになっていますが、どうせDCMで周波数を変えれるので周波数は適当でよさそうです。ラジオデパート2Fのサンエレクトロで売っていました。そのものずばりの33MHzはありませんでしたが他のは色々ありました。聞いてみたら33MHzはなかなかないと言っていました。とりあえず50MHzのを買ってきました(400円)。使えるかどうか分かりませんが秋月にも3.3V用33MHzの発振器SG-645PCPを売ってます(4個で300円)。表面実装用なのではんだづけが難しそうです。他に売っている場所はRSオンラインとフルタカパーツセンターを見つけました。
GCLKがI/Oピンに出ているので、そちらから入力してやってもいいかもしれません。
6/10 追記 秋月発振器でも動作確認しました。マルツの通販でもあつかっているようです。

その他にいりそうなものはI/O用のピンヘッダです。CN2が34pin、CN3が40pinです。CN3の8pin分はJTAGにつながっているので、32pinでも平気です。

Spartan-3E自身はRAMタイプなので、電源を切ると中身を忘れてしまいます。電源を切っても中身を覚えておくためのコンフィグROMも実装されていません。型番はXCF02SVO20Cです。秋葉だと千石電商で売っていますが、RSオンラインやdigi-keyでも買えるようです。国内で買えるかどうか分かりませんがXilinxのオンラインストアではAVNetとNuHorizonにリンクしています。

まとめると

- 電源は3.3Vか、レギュレータをつけて5V。
- JTAGコネクタは2.54mmピッチ6pinか、2.0mmピッチ2x7
- クロックはFXO-31FL(または互換品)を実装するか、外部クロック入力
- コンフィグROMをつけなくてもいいはず

さて、おまけケーブルでコンフィグできそうか見てみるためになひたふさんのMITOUJTAGでboudary scanしてみました(なひたふさんの所は今は特殊電子回路株式会社です)。

チェーンも認識してIDも返してくれています。INTESTで基板に実装されているLEDも点けたり消したりできました(LEDはピン番号98につながっています)。とりあえず動くかどうかの確認にはとても便利です。



平日でも秋葉原は結構混んでいました。日差しが強かったので駅前にいるメイドさん達も日傘をさしていました。

7セグの16進カウンター

2007-06-08 10:59:59 | V850
0.5秒毎に16進カウンターがカウントアップするプログラムを作ってみました。回路とかはここと同じです。

まずはappliletです。
- システムはウォッチドッグタイマーなし、(オンチップデバッグあり)
- 時計タイマーは、使用する、(サブクロックを使用する)、時計タイマー割り込みの許可、(0.5s)
- ポートはP90-P97が出力で初期値は1、P98を出力で初期値は0

サブクロックの方が正確なのでサブクロックを実装しているときはサブクロックを使用するにします。

プログラムはmain.cがこんな感じです。時計タイマーをスタートして無限ループしているだけです。カウントアップは割り込みルーチンで行います。ポートの初期設定もappliletにまかせています。
void  main( void )
{
    WT_Start();        // 時計タイマースタート

    while(1) __halt(); // 無限ループ
}


割り込み処理はappliletが自動生成してくれるWATCHTIMER_user.cを書き換えます。
// 数字パターン(0-F)
const UCHAR pat[16] = {
    0x81, 0xcf, 0x92, 0x86, 0xcc, 0xa4, 0xa0, 0x8f,
    0x80, 0x84, 0x88, 0xe0, 0xb1, 0xc2, 0xb0, 0xb8,
};

// 0.5秒毎の割り込み処理
__interrupt void MD_INTWT( void )
{
    static int ctr = 0;

    P9L = pat[ctr];      // パターンを表示
    ctr = ++ctr & 0x0f;  // 次のパターンにする
}

1端子に流れている電流は2.8mAくらいでした。

そういえば電気特性とか、ちゃんと見てなかったなと思って(ォィォィ)、ユーザーズマニュアルを見てみました。28章の「電気的特性」に出ています(p.799)。1端子4mA、全端子合計50mA。え? こんなに少なかったんですね・・・。あぶないあぶない、全然きづいていませんでした><

7セグメントLEDにつないでみる

2007-06-08 01:00:58 | V850
V850付録基板に7セグメントLEDをつないでみました。7セグは秋月で売っているGL9A040Gというアノードコモン(+側共通)のものです。10個で100円でした。

回路図はトラ技2007/2月号のp.219を参考にしました。抵抗値を変えています。トランジスタにつながっているのは10kΩですが、トラ技のは6.8kΩでした。マイコンと7セグをつないでいる抵抗は510Ωですが、トラ技のは200Ωです。

BSch3Vで回路図を描いてみました。

流れている電流ですが、全部点灯した状態で21mAくらいでした。これでもかなり明るいので、電流制限用の抵抗は抵抗値をもっと大きくしてもよさそうです。

この7セグの最大定格はセグメントあたり20mAです。1つだけセグメントを点けて測ってみると3.2mAくらい流れていたので定格内です。最大定格はデューティ比1/10でパルス幅0.1m秒で動かしたときは100mAまて流せるようです。
7/8 追記 V850の1端子の定格は4mA(合計50mA)なので、定格を超えないようにしてください。最悪、CPUを壊します。

回路はいつものようにブレッドボード上で組みました。ブレッドボードだと並べるわけにいかないので1個だけです。

テスト用プログラムは、appliletで雛形を作ります。
- システムはウォッチドッグを使用しない、オンチップデバッグを使用する
- ポートはP90~P97とP98が出力で初期値は1にしました。

プログラムです。オンチップデバッグを使うので簡単です。
void main(void)
{
    UCHAR pat = 0x00;  // 7segに出力する値
    P9H.0 = 0;         // 0:点灯 1:消灯

    while(1){
        P9L = pat;     // 7segLEDに出力
    }
}




ジャンパをJ3とJ2につけて、PM+でF5を押すとコンパイルが始まってデバッガが起動します。ダイアログはOKボタンを押すとオンチップデバッグが開始します。

F10を押すと1ステップずつ実行します。写真は左側がソースで右側がローカル変数です。デフォルトではローカル変数のウインドウは表示されていないので、メニューのブラウズからローカル変数を選びます。ローカル変数ウインドウの値のところをダブルクリックすると値を編集できます。

F10を何回か押してwhileループにはいったらpatの値を書き換えて、F10を何回か押すと7セグの表示も変わるのが確認できます。オンチップデバッグを使うとコンパイルしなおさなくてもいいので便利です。

7セグは対応するビットを0にしたとき点灯、1にしたとき消灯します。P9L=0x00にすると全部点きます。

V850のP9を1ビット単位でアクセスするときは、16bitのP9は使えず、上位と下位の8bitレジスタP9HとP9Lを使う必要があります。

7セグ自体の解説はトラ技の2007/6月号のP.184-185が参考になりました。7セグを使うのは初めてでしたが無事点灯できました。複数個つないでダイナミック点灯とか、秋月で売っている青色のとかも試してみたいです。