2001. 05. 20
更新: 2014. 5. 5
AVRマイコンにはISP機能(ボードに実装したままプログラムを書き換える機能)があります。このため、AVRボードにはISP用のコネクタを設けておくのが普通です。このISPコネクタには汎用I/Oポート3本とリセット信号と電源が直接出ているだけで、マイコンの特別な専用端子を使用しているわけではありません。つまり、書き込み時以外は単純なI/Oコネクタとして使うことができるのです。
このISPピンは、I/Oポートとの共有となっているため、ボード上で他の機能に使われているかも知れません。そのような場合は別の用途に使うことはできませんが、I/Oピン数に余裕がある場合は、ISP機能の付いたI/Oピンは空きにしておくことが多いものです。
I/Oポートが3本もあればいろいろなことができますので、これを使わないでおくのはもったいないです。いろいろ応用を考えてみるのも面白いと思います。参考までに私が実際にやっている方法をいくつかご紹介しましょう。
既にICEをお持ちの方にはあまり意味のないことですが、製作した周辺回路が正常に動いているかどうかISPコネクタを使ってチェックすることができます。
それにはまず最初に確実に動作することが分かっている単純なモニタプログラムを書き込んでおきます。このプログラムはISPケーブル経由のシリアル通信で制御されます。これによりAVRのI/Oポートや内蔵ペリフェラルを端末から自在に操ることができるのです。
ボードの配線が終わって最初に動作させるまでは結構手こずることが多いものですが、直接操作しながら周辺回路の確認ができるのはハードウェアのデバッグにはとても有効なことです。
AVR DEBUG MONITOR
O<pa><d> - Output port
I<pa> - Input port
IR<pa> - Input port until break
D[<sa>] - Dump memory
E<sa>[<d>] - Edit memory
F<sa><ea><d> - Fill memory
%
サンプルのモニタプログラムは、AVRライタで紹介したものと同じです。AT90S8515ならそのまま変更せずに使用できます。通信速度は 8MHzの場合、38.4kbpsです。他のデバイスや通信速度ではソースコード中のデバイス定義等を適宜書き換えてください。
モニタプログラムを書き込んで、そのまま適当な通信ソフトを起動するとAVRのリセットが解除されて右に示すような起動メッセージが端末に表示されるはずです。あとは端末からコマンドを打ち込んでポートを叩くなどして内蔵ペリフェラルや周辺回路を操作できます。
デバッグモニタのサンプル(ASM)
ソフトウェアUARTのサンプル(GCC)
なお、実際のプログラムをデバッグする際もISPケーブルでの通信機能を使うことができます。しかし、単純なソフトウェアUARTでは受信タイミング生成のため、受信待ちは割り込みを禁止しておく必要があります。したがって、プログラムで割り込みを使う場合はソフトウェアUARTを使うことはできなくなります。
でも、送信動作だけなら割り込み応答時間の許容値と通信速度によっては割り込みに影響を与えずに使用することができます。例えば、38.4kbpsの場合、送信時の割り込み禁止時間は260μsecとなり、ソフトウェアUARTで送信しても1kHz程度のタイマ割り込みなら処理が落ちたりすることはありません。
送信だけでも使えればかなりデバッグのサポートになります。変数やステータスを随時端末に送ることで、内部の動作状態を外部から把握できるからです。簡単に数値を出力するコーディング例はAVRライブラリを参照してください。
端末によるモニタのほか、ISPコネクタに直結できる8桁LEDディスプレイを製作してみました。単純な割にはパソコンより手軽で結構使えます。
3本のI/Oだけでどうやって8桁も制御するのかというと、シフトレジスタの応用によります。セグメントデータを1ビットづつシフトレジスタに送り込み、表示を保持するようにしているのです。桁数はシフトレジスタを追加しただけ増やすことができますが、スタティック点灯ではシフトレジスタが桁数分必要になってしまうので、ダイナミック点灯にして部品数を減らしています。桁選択も同様にシフトレジスタで制御しています。
このLED駆動回路は、I/Oポート数が足りないときなどにボード上に組み込む回路としても適しています。
実際の運用に入ったらISPコネクタの使い道はあまり無いのですが、2回路のジャンパスイッチとして使うことができます。AVRはI/Oポートに個別にプルアップを設定できるので、コネクタにジャンパチップを挿してGNDに落とすことで、動作モードの設定などに使用できます。
MOSIとMISOは入力としてプルアップ、SCKにはLレベルを出力しておき、MOSIとMISOの入力値を読みとります。
最近は、機器の小型化に対応するため、回路基板を低背の面実装部品で統一することが多くなっています。ところが、マイコンのISPコネクタとしてよく使われるピンヘッダは高さが9mm程度あり、これでは基板をケースに収めるときに突出したコネクタが邪魔になってしまいます。この問題に対応するには、次のような方法が有効です。
最後の「ピンヘッダを実装しないって一体何だ?」という方のために簡単に紹介してみます。つまり、これはスルーホールをソケットとして使うということです。MAC8からコンスルーというスルーホールをソケットとして使うタイプのプラグが出ているので、これを利用して基板にケーブルを接続するのです。右の写真に製作したスルーホール接続アダプタを示します。特に数を作る場合は、一度しか使わない部品を基板に実装するのはムダなので、このように簡単に省けるならそのメリットは大きいと言えるでしょう。
コンスルーはプリント基板用ですが、もちろん、一品モノのプロト基板でも利用可能です。実は、これはかなり前からやっていたことで、公開している基板の写真にISPコネクタが見あたらないモノは全てこの方式だったりします(これとかそれとかあれなど)。右の写真にプロト基板での例を示します。ワイヤの接続には少しコツが必要で、半田づけのとき穴に半田が流れ込まないように手早く作業しなければなりません。
2014. 5. 5