<Raspberry Pi-23> 今回、AQM0802A(8文字2行)のLCDを使って文字表示させたいと思います。 注意としてRaspberryでは、i2c対応のLCDを使わなければいけない点です。 (i2c通信を使うため) <準備> <ハード関連> 追記2017/5/30 ここ<えっなんで?LCDバッファ>を参照してください。 LCDはAQM0802A(2016.1.21時点 320円)を購入し、手持ちの抵抗、コンデンサ、基板で組立てました。 LCDは秋月電子ここから購入出来ます。 作りやすい基板も付いた「I2C接続小型LCDモジュール(8x2行)ピッチ変換キット」もあるようです。 回路図 <ソフト関連> 1.RaspberryのOSのRaspbianは初期状態ではI2Cが無効なので有効に設定する。 2.設定は、sudo raspi-configを実行してメニューのAdvanced Options→I2Cを選択して、はい(YES)を選択 3.次のWould・・・by defalut?は、はい(YES)を選択 4.sudo nano /etc/modulesを開いて最下位行にi2c-devを追加 5.次に/etc/modprobe.d/raspi-blacklist.conf を開いてblacklist i2c-bcm2708があれば #blacklist i2c-bmc2708のようにコメントアウトする(無い場合もある) 6.sudo apt-get install i2c-tools libi2c-dev でi2c-toolsをインストールする 7.モジュール読込みと設定反映のため、Raspberryを再起動する 次に、RaspberryとLCDの接続(上の回路図参照)をしたらLCDモジュールのI2Cデバイスのアドレスを調べる i2cdetect -y 1 を実行する 検出すると下のように今回は3eのアドレス値が表示 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- いよいよ、文字表示です。 とりあえず次の2行をコマンドラインから実行して見てください。 sudo i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0C 0x01 i sudo i2cset -y 1 0x3e 0x40 0x41 0x51 0x4D 0x30 0x38 0x30 0x32 0x41 i LCDの1行目にAQM0802が表示されたと思います。 <i2csetコマンドについて> (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0C 0x01 i (1)のy :確認メッセージを表示させない (2)の1 :i2cバス番号でRaspberryでは1(ls /dev/i2c-*を実行するとバス番号が返ってくる) (3)の0x3e :デバイスアドレス(上記i2cdetect -y 1を実行を参照) (4)の0x00 :0x00は制御コマンド(0x40ならデータ書込みコマンド) (5)から(13)は初期化用データ(LCD AQM0802のデータシート参照) (14)のi :入力した複数バイトデータ(5)から(13)をブロック送信(1バイト送信のときは b を指定) 上記コマンドラインから入力した最初の行は、LCDの初期化を行っています。(制御コマンド) AQM0802のデーターシートに初期設定シーケンスが記載されていて下記のようになっています。 Function set→Function set→internal OSC frequency→Contrast set→途中省略しますが9ステップある (0x38) (0x39) (0x14) (0x70) そして次の行はAQM0802Aを表示させるためのものです (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) i2cset -y 1 0x3e 0x40 0x41 0x51 0x4D 0x30 0x38 0x30 0x32 0x41 i (1)のy :確認メッセージを表示させない (2)の1 :i2cバス番号でRaspberryでは1(ls /dev/i2c-*を実行するとバス番号が返ってくる) (3)の0x3e :デバイスアドレス(i2cdetect -y 1を実行するとデバイスアドレスが返ってくる) (4)の0x40 :0x40はデータ書込みコマンド(0x00なら制御コマンド) (5)から(12)は表示文字用データ (13)のi :入力した複数バイトデータ(5)から(12)をブロック送信(1バイト送信のときは b を指定) i2cset -y 1 0x3e 0x40 0x41 0x51 0x4D 0x30 0x38 0x30 0x32 0x41 i データ部分 0x41 :A 0x51 :Q 0x4D :M 0x30 :0 0x38 :8 0x30 :0 0x32 :2 0x41 :A <制御コマンドのいろいろ> 初期化コマンドを送ってから次の4行を実行してみてください sudo i2cset -y 1 0x3e 0x00 0x0D b sudo i2cset -y 1 0x3e 0x00 0x0E b sudo i2cset -y 1 0x3e 0x00 0x0F b sudo i2cset -y 1 0x3e 0x00 0x01 b ブリンクしたり、カーソル表示したりしたと思います。 上から4つ目0x01は表示をクリアします。 <AQM0802のDDRAMアドレスについて> 8文字/1行が2行あり、アドレスデータは次のようになっています。 1列 2列 3列 4列 5列 6列 7列 8列 1行目:0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 2行目:0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 初期化コマンドを送ってから次の2行を実行してみてください。 sudo i2cset -y 1 0x3e 0x00 0x81 b sudo i2cset -y 1 0x3e 0x40 0x31 0xB7 0xD6 0xB3 0x32 0xDA 0xC2 i 1行目2列目の位置から1キヨウ2レツと表示したと思います 従って、2行目1列目の位置から表示させるには次のようになります。 sudo i2cset -y 1 0x3e 0x00 0xC0 b sudo i2cset -y 1 0x3e 0x40 0x32 0xB7 0xD6 0xB3 0x31 0xDA 0xC2 i 2行目1列目の位置から2キヨウ1レツと表示したと思います <アドレスデータの設定> データシートを見ると7bit目を1にすればアドレス設定になり6-0bitがアドレスデータとなります。 7bit目はアドレスデータとしないので0x81、0xC0のアドレスデータは下のようになる。 421 8421 0x81は、1000 0001なので0x01となる 0xC0は、1100 0000なので0x40となる Raspberry Pi-24に続く・・・ Raspberry メニューに戻る