秋月電子のSG12864ASLB-GBというグラフィックLCDモジュールを購入したので、Arduino UnoにつないでMGLCDライブラリで動かしてみました。
また、densikit.comさんからOnBoardという、ブレッドボードを使ったプロトタイピングに特化したArduinoクローン機の試作基板をいただきましたので、OnBoardでも回路を組み、Arduino Unoを使った場合との使用感を比較しました。
SG12864ASLB-GBは秋月電子で1,600円で販売されている、横128ピクセル、縦64ピクセルのモノクログラフィック液晶です。次に、SG12864ASLB-GBの外観の写真を示します。
一番下側に、20ピンの端子が2.54mmピッチで一列に並んでいます。そのためブレッドボードでの試作がとてもやりやすいLCDモジュールです。また、5Vの電源だけで動作するので、5V系のArduinoに直結でき、DC-DCコンバータや信号レベルの変換器なども不要です。内蔵されているLCDコントローラはKS0107です。
SG12864ASLB-GBにはLEDバックライトもついていますが、300~500mAも電流を流す必要があり、それなりの電源を用意する必要があります。またバックライト点灯時に、電源の配線を細い線で長く引き回すと、配線における電圧降下が無視できなくなります。
これから、しばらくSG12864ASLB-GBのハードウェアの説明をしますが、単にArduinoで画面表示をしたいとう人は、ハードのややこしい制御はMGLCDライブラリが全てやってくれるので、細かい事は理解できなくてもOKです。
各端子の名称と働きを次の表に示します。
番号 | 名称 | 働き |
---|---|---|
1 | VSS | GND電源端子(0Vを入力)。 |
2 | VDD | ロジック電源入力(5Vを入力)。 |
3 | VO | コントラスト調整用アナログ電圧入力。 |
4 | D/I | ロジック入力。Hの場合はDB0~DB7のバスはデータを表わす。Lの場合は、命令コードを表わす。 |
5 | R/W | ロジック入力。Hの場合はリードアクセスを表わす。Lの場合はライトアクセスを表わす。 |
6 | E | イネーブル信号。 |
7 | DB0 | ロジック入出力。データバスの0ビット目(LSB)。 |
8 | DB1 | ロジック入出力。データバスの1ビット目。 |
9 | DB2 | ロジック入出力。データバスの2ビット目。 |
10 | DB3 | ロジック入出力。データバスの3ビット目。 |
11 | DB4 | ロジック入出力。データバスの4ビット目。 |
12 | DB5 | ロジック入出力。データバスの5ビット目。 |
13 | DB6 | ロジック入出力。データバスの6ビット目。 |
14 | DB7 | ロジック入出力。データバスの7ビット目(MSB)。 |
15 | CS1 | ロジック入力。画面の左半分を制御するコントローラICのチップセレクト信号。アクティブハイ。 |
16 | CS2 | ロジック入力。画面の右半分を制御するコントローラICのチップセレクト信号。アクティブハイ。 |
17 | /RES | ロジック入力。Lにするとリセットがかかる。 |
18 | VOUT | LCD駆動用の負電源出力。 |
19 | A | バックライトLEDのアノード端子(4.2V)。 |
20 | K | バックライトLEDのカソード端子(0V)。 |
制御の仕方は、以前紹介したSG12232Cを68系インターフェースで使った場合ととても似ています。
また、SG12232Cでは2kHzのクロックを外部から供給する必要がありましたが、SG12864ASLB-GBはクロックを要求しないので、使いやすくなっています。
また、同じく以前紹介したS12232ZAの場合はVO端子に負の電圧を印加するために、外部に負電源回路を設ける必要がありましたが、SG12864ASLB-GBの場合はVOUT端子に負電圧が出てくるので、外部に負電源回路を設ける必要がありません。VOUTには、実測値で-9.8V程度の電圧が出ていました。おそらく、-2倍のチャージポンプ回路が内蔵されているのでしょう。
SG12232Cと比較した場合、SG12864ASLB-GBを制御する上での主な注意点は次の様になります。
最後のステータスリードについて少し説明します。SG12232Cの場合は、発行された命令を一つだけ記憶しておくバッファが、コントローラICに内蔵されており、他の命令を実行中でも、とりあえず次の命令を受け付けてくれました。その結果、バスサイクル時間を守っていれば、前の命令の実行が終わっている事を確認しなくても、次の命令を発行できました。
しかし、SG12864ASLB-GBは、SG12232Cにあるような命令バッファがないため、前の命令の実行中に次の命令を発行しても、受け付けてくれません。そのため、ステータスリードコマンドをポーリングし、命令が実行中でないことを確認してから次の命令を実行する必要があります。もちろん、ステータスリードのポーリングを行わずに、余裕を持った遅延時間の後に次の命令を発行する方法もありますが、安定した動作を保証するには遅延時間をかなり多めに取る必要があり、パフォーマンスが低下します。
LCDのコントロール法の詳細についてはLCDモジュールに付属の資料に載っているので省略するとして、次にArduinoとLCDの配線法について説明します。Arduino UnoとSG12864ASLB-GBの標準的な配線を表わす回路図を、次に示します。
Arduino Unoとブレッドボードを使って上の回路図の結線をすると、次の写真の様になります。
後述する方法でMGLCDライブラリのサンプルスケッチを実行すると、上の写真のように、表示がうまくいくことを確認できました。
なお、上の写真ではArduino Unoを使いましたが、Arduino Mega 2560、Arduino LeonardoおよびArduino Pro 328 5V 16MHzでも同じ結線でLCDを制御できます。
次のページでは、Arduinoの互換機であるOnBoardの説明をします。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |