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