2010年4月21日水曜日

LCDの3線接続-改

Arduinoにどれだけ周辺デバイスを接続できるか、ピン数が少ないため結構苦労することもあると思う。

無茶な例とは思うが、Ethernet shield、XBee shield、SDカードを 4bit I/Oで接続すると、アナログピンを除いたデジタルピンは 4本しか残らない。キャラクターLCDを標準ライブラリで使用するには最低 6ピン必要だから、アナログピンも使う予定であれば、足らない。

ここまで極端な例は置いておくとしても、まりすさんの「Arduino にLCDを信号線3本で繋ぐ」は一つの解だろう。で、記事を読んで、もしやと思った。

例に挙げた Ethernet shieldと SDカードは、先日の実験で共用可能となっている。SPI はモード 0だ。モード 0のタイミングと 74HC164の動作を見比べると、データ転送に使えそうだ。実験してみよう。
いろいろと省略した回路図だが、要点は 74HC164へのデータとクロックを SPIで共用して、4ビットのデータと RS信号をセットする、ということだ。LCDのための追加は E信号 1ピンで済む。この手法を使えば、先の無茶な例に LCDを追加しても、デ ジタルピンは 6本空く。

ライブラリの改造には手間取ったが、無事使えることは分った。LCDを 4bitモードで使用するためパフォーマンスは落ちるが、ソフトでビットシフト制御することを考えれば負荷は軽くなるのではないだろうか。

問題はライブラリだ。現状の Arduinoでは SPIの扱いがデバイス個別になっているため、複数のデバイスを使用する場合は複雑になってしまう。後日公開する予定にしているが、うまくまとまるだろうか。
試してみたい方へのヒントとしては、AVRの SPI機能の初期化はイーサネットライブラリ等に任せて、データ送信部分のみ実装するということだ。

最近 USB Host shieldが出てきたが、あれは割り込みを使っているようなので、今のやりかたでの共存は難しいのだろうな、と考えている。

0 件のコメント:

コメントを投稿