AVRでUSB接続のLCDを
秋月で白抜きのキャラクタLCDを買ったので試しに使ってみました.PCからメッセージを表示できるようにUSBで接続.
秋月のキャラクタLCDモジュール
色々種類がありますが,同じコントローラを使ったものが多いので同じように使えます.
今回は超小型LCDキャラクタディスプレイモジュール(16×2行 白抜き)を使いました.
以前からあった,キャラクタLCDモジュールと比べると,ピンが1列に並んでいるのでブレッドボードなどで手軽に接続できるのが良いです.
8ビットモードと4ビットモードが使えますが,ピンを節約するために4ビットモードを使います.
AVRでUSBデバイスを作る
USBデバイスを作る場合,USBのペリフェラルが乗ったマイコンや,専用チップを使うことが多いですが,AVRの場合V-USBというソフトウェアでUSBデバイスとしての機能を実装してしまう便利なライブラリがあります.昔はAVR-USBと呼ばれていましたが,名前が変わったようです.
電源
USBでは,5Vの電源が供給されます.
ただし,データを送るための信号は3.3Vとなっているので今回は3.6Vのツェナーダイオードを入れて調整します.保護回路があるはずなので,5Vでも壊れることはないと思いますが,一部のPCでは電圧をチェックしているのか認識してくれないことがあります.
通信速度
USB2.0では以下の通信速度が用意されています.このうち,USB1.1で利用できるのは,Full Speedまでです.
- Low Speed (1.5Mbps)
- Full Speed (12Mbps)
- High Speed (480Mbps)
V-USBでは信号をソフトウェアで処理するのでLow Speedデバイスにしか対応できませんが,ちょっとした情報をやり取りするには十分です.
ホスト(PC)にデバイスを認識させる
USBデバイスの存在をPCに認識させるためには,まずD+,D-のどちらかを1.5kΩでプルアップしてやる必要があります.D+をプルアップするとFull Speed,D-をプルアップするとLow Speedのデバイスとして判断され,機器の識別のための通信を開始します.USB2.0のHigh Speedは,認識された後に通信速度をネゴシエーションする必要があります.
D+,D-のどちらもプルアップせずにハイインピーダンスにしておけば,PCには認識されないので,このプルアップ抵抗を制御すれば普段は電源だけ取っていて必要な時だけUSBデバイスとして振る舞うことが可能です.
回路
構成
- AVR: ATMEGA88
- LCD: SD1602VBWB
回路図
色々抜けてる気がしますが,こんな感じに.ボタンとかも空いているピンに適当に接続してください.上の写真には,回路図に無い温度センサーとか載っていますが,それも適当に.
解説
LCDのバックライトは,AVRから制御できるようにPD6に繋いでおきます.トランジスタは通さなくて直結でもなんとかなるかもしれません.
USBも同じく,1.5kのプルアップ抵抗をPB2に接続しています.普段はPB2を入力モードにしてハイインピーダンスにしておいて,USBデバイスとして振舞う場合はPB2に5Vを出力してください.
ファームウェア
TBD
- lcd_test.c LCDに文字を表示
- usblcd.zip V-USBは含まれません
USBはV-USBとか使ってください.
リンク
履歴
- 2010-02-28 書きかけだけど公開