サイキット液晶JHD622-12864Eの調査
このグラフィック液晶(以下LCD)に関しては、製作過程を記録することにより多くの人と情報共有し、製作の手助けになればと思います。調査過程および製作過程なので間違っている情報を書くかもしれません。そのときは、ここ間違っているということを掲示板に書いていただけると幸いです。では、よろしくお付き合いください。
免責事項: このページの情報が間違っている可能性もあります。製作される場合は、各自の責任においておこなってください。
1)きっかけ
CQ出版 Interface 2007.5月号 付録基板V850は内蔵SRAMが24Kバイトもあるので、グラフィック液晶の表示メモリとして使えないかと思い始めました。そこで、そこそこ表示ドットがあるものでかっこよさそうなものをネットで探しました。
128×64ドット 反転青色LCD というのを見つけました。これなら、1ドット1ビットに割り当てても128×64=8192ビット=1Kバイトにしかなりません。さっそくこのLCDを購入しました。
2)詳細不明
送られてきたLCDはドライバーのICがわかっているだけで詳細不明でした。サイキット(株)という販売会社とメールでやりとりし、LCDの型名とメーカーサイトを教えてもらいました。これでJHD622-12864Eだということがわかりました。なお、メーカーサイトからはピンアサイン表(下記、表1)とかなり簡単なブロック図しか情報はありませんでした。
ドライバーICはKS0107Bが使われているという販売会社の情報で、KS0107Bを調べてみるとKS0108BというドライバーICとセットで使われることがわかりました。 そこで、KS0107BとKS0108Bと12864と622でネットで検索してみると、12864が型名でKS0107BとKS0108Bが使われているLCDが存在することが判明しました。どうも、12864LCDの互換品だということがわかってきました。またSimさんからの情報でも確信がもてました。
ドライバーICの構成は KS0107B 1個 KS0108B 2個
3)負電源の調査
ネットで見つけたドライバーICのデータシートによると、LCDにはVEE端子がありどうやら負電源が必要?のようです。-10Vどこから調達しようかと思考錯誤してMAX232が使えるかもということで実験をしてみました。負荷が無いときには-10Vでますが、負荷を入れるとたちまち電圧が上昇し使えない可能性大でした。
ここで、今回のLCDとは別の詳細不明のグラフィックLCDを調査されたサイトにたどりつき、必ずしもドラーバーICの端子がLCDの基板端子に出ているわけではないことを認識しました。また、最近のLCDは負電源を内蔵しているそうで、もう一度12864LCDの互換品ということで資料をネットで検索しました。
ようやくみつけた12864LCDの資料によると、負電源は端子から出力されているらしい!
メーカーのピンアサイン表を注意してみると、VEEのところはSUPPLY(供給)という記述がありません。出力の可能性大です。これはもうやってみるしかありません。壊れるのを覚悟で実験をおこないました。
メーカーサイトにあったピンアサイン表 (表1) 赤字は私のコメント
|
PIN NO |
SYMBOL |
DESCRIPTION |
FUNCTION |
|
1 |
VSS |
GROUND |
0V(GND) |
|
2 |
VDD |
POWER SUPPLY FOR LOGIC CIRCUIT |
+5V (+3.3Vでも動作しました) |
|
3 |
V0 |
LCD CONTRAST ADJUSTMENT |
|
|
4 |
RS |
INSTRUCTION DATA REGISTER SELECTION |
RS=0:INSTRUCTION REGISTER RS=1:DATA REGISTER |
|
5 |
R/W |
READ WRITE SELECTION |
RW=0:REGISTER WRITE RW=1:REGISTER READ |
|
6 |
E |
ENABLE SIGNAL |
|
|
7 |
DB0 |
DATA INPUT/OUTPUT LINES |
8 BIT:DB0-DB7 |
|
8 |
DB1 |
||
|
9 |
DB2 |
||
|
10 |
DB3 |
||
|
11 |
DB4 |
||
|
12 |
DB5 |
||
|
13 |
DB6 |
||
|
14 |
DB7 |
||
|
15 |
CS1 |
CHIP SELECTION |
CS1=1、CHIP SELECT SIGNAL FOR IC1 |
|
16 |
CS2 |
CHIP SELECTION |
CS2=1、CHIP SELECT SIGNAL FOR IC2 |
|
17 |
RST |
RESET SIGNAL |
RSTB=0、 DISPLAY OFF、 DISPLAY FROM LINE0 |
|
18 |
VEE |
NEGATIVE VOLTAGE FOR LCD DRIVING |
−10V (VDD5V時、実際は−15Vなので注意) VDD3.3V時は−10V 近くでてます |
|
19 |
LED+ |
SUPPLY VOLTAGE FOR LED+ |
+5V |
|
20 |
LED- |
SUPPLY VOLTAGE FOR LED- |
0V |
販売店サイトにあった規格表 (表2)
|
PARAMETER |
Symbol |
Temp |
Standard Values |
UNIT |
|
|
MIN |
MAX |
||||
|
Supply Voltage |
VDD-VSS |
Ta=25℃ |
0 |
6.5 |
V |
|
LCD Voltage |
VDD-V0 |
0 |
15.0 |
V |
|
|
Input Voltage |
V1 |
0 |
VDD |
V |
|
4)LCDの初起動
V850のCON5から+5V電源を供給し、LCDを起動してみます。本来はコントラスト調整なので、VDDとVEEの間に半固定抵抗をいれV0に接続するものです。
(V0とVEEは直結しなでください)
最初にVEEとV0を繋がずに、VEEの電圧を測定しました。予想通り、負電圧の-15V出力されています。
では、VEEとV0と接続してみます。 訂正(2007.5.8) 本来はVEEに−10V出力されるはずです。VEEとV0を直結すると最大定格(VDD-V0が15V以下)を超えます。 念のため、VEEとV0は直結しないほうがいいと思われます。-15V出力されるということは、最大定格が変更になったのかもしれませんが不明です。この後おこなう抵抗入りの回路にて実験してください。
|
USBからの電源接続前 |
USBからの電源接続後 |
無事LCD面が反転しました。
このLCDは反転青色液晶なので、電源を入れるまえは、青色一色です。普通の液晶とは逆になります。これで、無事、初起動が成功しました。 もう一度VEEを計ると、-14.4Vでした。
5)LEDの点灯
LCDの19、20ピンにLED端子があるので、5VとGNDを接続してみました。
(V0とVEEは直結しなでください)
|
|
かなり明るい感じです。場合により電流制限抵抗を入れて暗くしても良いです。なお、LED端子の電流は55mAあり、かなり流れています。USBから取れる電流は決まっているので外部電源を検討しなくてはなりません。
6)コントラスト調整

V0とVEEを直結すると最大定格を超えるので、かならずVR1とR2の抵抗を入れてください。VR1=20K、R2=7KでV0が最低電圧=-9V (VDD-V0=14V)となり定格範囲内になります。 (注意:計算上はV0の最低電圧は-10Vになりますが、負荷があるときの実測値は-9Vでした。)
|
V0=-5.2Vのときのコントラスト 室温27度 |
今回はLCDバックライト用のLED点灯SWをつけました。また電源ON確認用にLED1をつけました。下の3つのタクトスイッチはまだダミーです。
7)LCDとV850の接続

LCDの電源まわりは終わったので、いよいよ信号を接続していきます。
LCDは5V回路ですが、V850は3.3V回路です。ただしV850のポート0,3,4,5,9はNチャンネルオープン・ドレインにて出力にすることができます。この出力を10Kオームで+5Vにプルアップすれば、5VのLCDへ信号出力できます。今回は、V850←LCDの入力は省略し、V850→LCDの出力だけのR/W=L(WriteMode)で動かすことにします。
V850はポート9のP90からP911を使用します。ここは、本来アドレスバスのラインでA0からA11にあたります。外部メモリを使用しなければ自由に使用できます。このV850にはSDカードを取り付ける予定ですが、SDカードはSPI通信?なのでアドレスバスやデータバスは使用しません。
====================================================================================
ここから先の回路ではLCDのVDDを+5Vから+3.3Vに変更しています。ご注意ください。
====================================================================================
8)LCDを+3.3V駆動に変更

LCDのドライバーICのデータシートを見ると、+3.3Vでも駆動できることがわかりました。 さっそく回路変更をしました。
VDD=+3.3Vのとき、VEEからは−10V出力(V0負荷時は−9V)されます。 今、考えるとこのLCDは3.3Vでも使えるようにVDDの3倍の負電圧がVEEからでるようになっているのかもしれません。
LCDが3.3V駆動のため、+5V回路のためのV850のNチャンネルオープン・ドレイン出力は不要になりました。
入出力を固定にする必要がなくなったので、DB[7:0]のデータポートの入出力を切り替えられるようにし、LCDのBusyを監視できるようにします。また、LCDのResetもV850から制御します。
9)動作テスト
|
|
左写真のLCD表示は写真に撮影すると明るく見えますが、実際は上のような色に見えます。 |
実際のファームウエアは漢字出力できるものをこれから作るのですが、その前にLCDの動作テストだけしておこうと思います。お決まりのメッセージです。
動作テストに使用したLCD用のソースファイルは、Stephane REY さんが作成した12864LCDの汎用ソースでネット検索で見つけたものです。なお、これをV850用に若干修正したプロジェクトファイルは、LCDソースが自分で作成したものでないため公開できません。欲しい方はメールで連絡いただければお送りできます。
現在、漢字フォントの選定をおこなっています。当然ビットマップフォントになるのですが、漢字フォントはデータが大きいのでROMに入りきりません。SDカードに入れようと検討しています。表示方法も含め、まだまだ調べることがたくさんありますが、一つずつ載せていこうと思っています。
12864LCD汎用ソースの修正箇所があります。追記2007.5.21
Simさんより、Eの論理の使い方が違うとのご連絡をいただきました。ありがとうございます。
GLCD.Cのオリジナル
void LcdWaitBusy ()
{
LCD_DATA=0xFF; /* set LCD_DATA port in input mode */
LCD_DI = 0; /* Instruction mode */
LCD_RW = 1; /* Read mode */
LCD_E = 0; /* strobe */
LcdDelay(1);
LCD_E = 1;
while (LCD_DATA & 0x7F == BUSY); /* mask the other status bits and test the
BUSY bit */
}
GLCD.Cの修正版
void LcdWaitBusy ()
{
// P9L input
PM9L = 0xff;//DATA[7:0]
LCD_DI = 0; /* Instruction mode */
LCD_RW = 1; /* Read mode */
LCD_E = 1; /* strobe */
LcdDelay(1);
LCD_E = 0;
while (LCD_DATA & BUSY); /* mask the other status bits and test the BUSY bit */
LCD_RW = 0; /* Write mode */
// P9L output
PM9L = 0;//DATA[7:0]
}
10)画面構成

ファームウエアを作っていく前にLCDの画面構成を紹介したいと思います。このLCDは128×64ドットですが、64×64を1個のドラーバーICが受け持っているため、V850からコマンド出す際には、CS1かCS2をどちらかをLowにしてからおこないます。
1pageは縦8dotを表し、8pegeあるので縦64dotということになります。

横方向はY addressというのがあり、CS1で0〜63までの64dot、連続してCS2で0〜63までの64dot、あわせると、横128dotとなっています。pageのビット構成は上がbit0で、下がbit7となります。
なお1bitが1dotです。
こうしてみると、pageおよびY addresで位置を指定して1データ(=1バイト)を書き込むことになるので、点を打つという感じでは無く、縦8dotの1本のパターンを書くという感じになります。当然pageをまたがる書き込みは2page分、使うので、書き込む前に読み出してORする等の対策が必要になってきます。
フォントに関して言うと、pageに収まるという意味で、縦が8ドットの倍数のフォントが適していることがわかります。それでも少なくても1ドット以上は隣または上下の文字と間隔を空けないと読みづらいため、スペースも含めて2pageに収まるフォントでもいいことになります。なお、恵梨沙フォントは8x8ドットという限界まで小さいフォントなのでスペース分は含まないフォントです。k12×10フォントという文字通り12×10ドットのフォントはスペースを入れて作られています。フォントに関しては別途、フォントの解説で詳しく説明する予定です。
今回ここまで、次回をお楽しみに!
●参考リンク
The Weekly Herald | グラフィックLCDモジュール 日本語フォント編
scieさんの日本語表示の解説です。とても詳しいので参考になります。
日本語表示をお考えの方は一読をお勧めします。