最終更新日: 2012年8月20日

Arduino用汎用USBインターフェースを作っておく

Arduino基板からATMega168を抜いて他の基板にマウントし、スタンドアロンで動かす…その時でも、Serial.print()で出力したデータを確認したかったり、そのボード上でプログラムを書き換えたりなどやりたいものです。ATMega168を抜いたArduino基板から必要な信号線を接続すればいいのですが、面倒なので汎用のインターフェースを作成しました。

まずは汎用インターフェースの規格を

Arduino DuemilanoveはFDTIのチップでUSB-Serial変換を行ってます。ということで同じくFDTIのチップを使っている秋月電子のUSB-Serial変換基板を使えば、そのまま使えてしまいます。
最低限GNDは接続し、その他にはシリアル出力をモニタするだけならTxD→RxDの1本だけ、書き換えもするならばRxD→TxDと、RESET信号も接続します。RESETはUSB-Serial変換のDTR端子から0.1μFのコンデンサを経由して接続。このあたりはArduinoの回路図のとおりです。
しかし、それらを汎用的に接続するためにインターフェースの簡単な規格を作っておくことにしました。各基板にこのインターフェースの端子を用意しておけば、あとは汎用ケーブルを接続するだけでOK、という状況にしたいです。
Arduinoの汎用シリアルインターフェースと言えばFTDIの6ピンがデファクトスタンダードでしょう。しかしあえてオリジナルにした理由は、まずDTR信号ではなくReset信号にしたいこと(Reset信号を作るためのCRをUSB-Serial変換基板上に置くこと)、そして「双方向」です。

いろいろ考えた結果、インターフェースのピン配置は以下のように決定しました。

PIN番号 信号名
1
TxD
2
RxD
3
RESET
4
GND
5
+V IN
6
+V OUT

TxD, RxDの方向、および+V IN, +V OUTの方向は、それぞれの基板上のデバイスから見て、という事にします。つまり基板間を接続するケーブルは1,2ピン、5,6ピンはそれぞれクロスにすることで統一します。+V INと+V OUTは、その基板が外部に電源を供給する能力があるか、外部から電源を供給する必要があるか…で、接続状態は異なります。
ATMega168は1pinから順にRESET, RxD, TxDとなっているので、インターフェースの3〜1ピンをその順にすることで配線を容易にしています。ブレッドボード上に配線することも容易です。
基板間用、ブレッドボード用にそれぞれのケーブルを制作しました。

基板間用。1と2、5と6がクロスになってます。汎用インターフェース端子を備えた基板同士の接続にはこのケーブルを使います。 ブレッドボード用。1,2,3が3端子のピンに、4,5,6が2端子のピンに配線されています(5,6ピンはショート)。

今後製作する基板にこの規格に沿ったコネクタを装備しておけば、1本のケーブルで接続するだけでプログラミングやモニタリングができるようになり、とても便利です。

そして汎用USB-Serial変換を

ということで、この汎用インターフェース規格のコネクタを持たせてUSB-Serialインターフェースを作りました。

モニタだけしたい場合にはRESET信号は不要になります。そこでRESET信号にはスイッチを設けました。Arduino基板上でもこの部分はパターンカットすることも想定していますが、要はそれと同一のコンセプトです。さらにUSBの電源端子から5Vを供給するか否かにもスイッチを設けました。これで、別途電源を供給してスタンドアロンで動く基板にも、ブレッドボード上で仮組みの基板にも対応できるようにしました。
さらに秋月の基板には、FT232の汎用I/O端子にデフォルトでRxLEDとTxLEDの信号が設定されています。ここにLEDを接続しました。これでプログラミング時やモニタ時にはArduino基板と全く同様にLEDが点滅するのでわかりやすいです。

9VバッテリーチャージャーをUSB-Serial変換に接続。この状態でArduino IDEからプログラムの書き換えが可能です。 同じ9VバッテリーチャージャーをLCDシリアルモニターに接続。どちらも汎用インターフェースなので同じケーブルで接続するだけで、内部状況のモニタリングができます。 そのLCDシリアルモニターにUSB-Serial変換を接続すれば、LCDシリアルモニタのプログラムを書き換えることができます。




home | Elec top

inserted by FC2 system