AQM0802A に文字を表示してみる
ミミィ
とにかく試しに動かしてみるわよ!
考えてるヒマがあったら手を動かすのよ手を!
タマちー
手順説明の下に『オコゲ』のブロックで組み立てたプログラムコードを畳んで置いてあります。クリックすると開きます。
※一部ブロックの形状が現行バージョンと異なります。
【「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典 】
ユルくて好き・・・
I2C アドレス
次のコマンドで確認します。
$ i2cdetect -y 6
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: -- -- -- -- -- -- -- --
AQM0802A の I2C アドレスは 0x3e と分かりました。
『オコゲ』ブロックプログラム:I2C デバイスを開く
コマンド書き込み
レジスタ 0x00 にコマンドコード(1バイト)を書き込むことで、AQM0802A にコマンド(命令)を送信することができます。
『オコゲ』ブロックプログラム:コマンドを書き込む
データ書き込み
レジスタ 0x40 にバイトコードを書き込むことで、AQM0802A 内蔵の RAM (DDRAM/CGRAM) にデータを書き込むことができます。DDRAM にデータを書き込むと画面に文字を表示することができます。CGRAM は自作文字のデータを登録しておくことができます。
『オコゲ』ブロックプログラム:データを書き込む
初期化
秋月電子のデータシート に従って初期化します。
以下のコマンドコードを、順にレジスタ 0x00 に書き込みます。
- 0x38 (機能設定:表示行数とか文字の大きさとか)
- 0x39 (拡張コマンドモード開始)
- 0x14 (内蔵発振器周波数)
- 0x70 (コントラスト)
- 0x56 (3V動作)
- 0x6c (フォロワ回路のオンオフと増幅率)
- 0x38 (拡張コマンドモード終了)
- 0x0c (ディスプレイオン・カーソルオフ)
- 0x01 (ディスプレイクリア)
『オコゲ』ブロックプログラム:AQM0802A を初期化
文字表示
DDRAM にデータを書き込むと画面に文字を表示します。
DDRAM アドレスを指定
文字を表示するディスプレイ上の位置(2行目の3文字目とか)を指定します。
(データシートコマンドコード表より)
Instruction | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
---|---|---|---|---|---|---|---|---|
Set DDRAM address | 1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 |
データシートではコマンドは8桁(8ビット)の2進数で書かれています。それぞれのビットに役割があり、最上位ビットを立てると DDRAM アドレス指定コマンドとして働きます。残りの7ビットでアドレス値を指定します。DDRAM アドレス値と表示位置の対応は次の通りです。(横の〇文字目を便宜上「列」と表現することにします)
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 |
以上から、ディスプレイ上の文字表示位置を指定するには以下のようにします。
- レジスタ 0x00 に、「0x80(最上位ビット) +(上の表のアドレス値)」を書き込む
文字表示
DDRAM アドレス指定コマンドを書き込んだのちにデータ書き込みを行うことで、指定した位置に文字を表示することができます。文字コードは以下の通りです。
コード 0010 0000
からコード 0111 1101
まで、すなわちキーボードで入力できる半角(1バイト)の英数字・記号の大部分は UTF-8 (ascii) のコードと一致していますので、表示したい文字列がこの範囲内であれば、そのままデータとして(レジスタ 0x40 へ)書き込めば良いでしょう。
『オコゲ』ブロックプログラム:AQM0802A に文字を表示する
まとめ
今回作成したプログラムはこのようになりました。
バックライトは点灯させていません。期待通りの動作をしているようです。メデタシ。
次回はゲームのルール確認と自作文字(UFO と残機表示)の作成をしましょう。