<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 メニューに戻る