秋月のグラフィックLCDを使う
秋月電子で、
SG12232CというLCDグラフィック・ディスプレイモジュールが売られています。
よくある液晶ではキャラクタLCDありますが、グラフィック液晶は文字だけでなく画像も表示できるので自由度が格段にあがります。
そんな秋月のグラフィックLCDをAKI-H8/3048Fで使ってみた。
ハード
全てはLCDを買ったときに付いてきたデータシートに書いてあったりするんで、その中で気になった所を特に。
端子説明(~は負論理)
1 |
VSS |
GNDに |
2 |
VCC |
4.5-5.5V。 |
3 |
Vo |
コントラスト。関係ないけど私は毎回コントラストの罠にはまります。調整を忘れずに。 |
4 |
A0 |
送るデータがコマンドかLCDに表示させるデータかを示すピン。コマンドの時L、LCDに表示させるデータの時H。 |
5 |
CS1 |
LCDの左半分の制御ICにデータを送るときにLにする。 |
6 |
CS2 |
LCDの右半分の制御ICにデータを送るときにLにする。 |
7 |
CL |
液晶用クロック。起動したときから2kHzを入れつづける。ちなみに1k-3kHzまでいいらしい。結構適当。 |
8 |
E |
RES=Hのとき。H→LでDB0-7から取り込み/DB0-7に出力される。 |
|
RD |
RES=Lのとき。LであるときDB0-7が液晶からの出力になる |
9 |
R/W |
RES=Hのとき。Hの時液晶からデータ読込み。Lのとき液晶にデータ出力。 |
|
WR |
RES=Lのとき。L→Hで液晶にDB0-7が書き込まれる。 |
9-17 |
DB0-7 |
データ/コマンド信号 |
18 |
RES |
Lのとき68系,HのときZ80系。 |
19 |
A |
バックライトのアノード |
20 |
K |
バックライトのカソード |
8,9番ピンはRESピンの状態によって二通りの機能を割り当てられてますが、
68系の制御方法はキャラクタ液晶でおなじみだったので今回はRESピンをLに固定して68系のピン割り当てにしてます。
5,6番ピンは両方Lにしてデータを送ると両方の制御ICに反映されます。初期化には楽かも。
あとバックライトは光らせなくても問題はないです。光らせる場合は基板背面のR9に47オーム抵抗、J1をショートさせても光ります。
そして
回路図
見た感じバラバラなのが分かると思うけどそれはご愛嬌で。
端子を変える場合はソースのGLCD_*の定義を変えてやってください。
液晶のCL端子はTIOCA-0につないでソフトの方で2kHzを作ってます。
ソフト
このグラフィック液晶は左半分、右半分に制御ICが分かれていてそれぞれ液晶の横61ドット縦32ドット分を制御しています。
そして、その左右それぞれに縦8ドット横61ドットのページと言うのが縦に4つ並んでます。
CPUからはこのページ単位で制御をします。その際にページの中にはカラムアドレスというものがあります。カラムアドレスは0からページの横幅である61まであります。
つまり液晶に表示するにはCS1,CS2によって液晶の左右どちらかを選択し、ページを選択し、カラムアドレスを選択し、それから実際に表示するデータを送ることになります。
まぁ構造について詳しくは秋月の資料を見てください。
初期化と表示
初期化には次のコマンドを左右の制御ICに送る必要があります。コマンドはA0=Lにして送る。
- 表示リセット(0xE2)
- スタティック表示OFF(0xA4)
- 表示開始ライン選択(0xC0)
- 表示ON(0xAF)
この初期化の後、表示するデータの位置を指定するために
- ページ指定(0xB8の下位2ビットでページ0〜3を指定)
- カラムアドレス指定(0x00の下位7ビットで指定。)
そして実際に表示するデータをA0=Hにして送っていきます。
送るごとにカラムアドレスはインクリメントされ、その後ページを変えてもカラムアドレスは保持されます。
それをふまえて今回作ったプログラムが
glcd.lzh。GDLもしくはGCC用。
動作風景
あと表示するビットマップをC言語配列にするのを手作業でやるのも面倒なので練習をかねてRubyで書いてみた。
bmp2array.rb
windowsビットマップで24,32ビットのビットマップ専用というどうしようもない仕様。
余裕のある人は好きにいじってみてください。
参考サイト様
- 「RES Lのとき68系,HのときZ80系。」とありますが、L->Hで68系、H->LでZ80系ではないでしょうか? -- とおりすがり・・・ (2012-05-09 05:19:03)
最終更新:2012年05月09日 05:19