LQ020B8UB02

aitendoで売ってるTFT液晶 LQ020B8UB02

SHARP製、2.0インチ、TFT 132×162、8bit bus


上の写真はAtmega328Pを1.8V、8MHz内蔵クロックで駆動させた時。
描画には約1秒かかった(SDカード上のBMPファイル)


この液晶はなんといっても初期化が簡単で。


・30ms待つ
・0x94をコマンド送信 (Sleep Disable)
・200ms待つ

画面のごみを消したいならそのあとに


・0x15をコマンド送信 (Column Address)
・0x00をデータ送信
・0x00をデータ送信
・0x07をデータ送信
・0x01をデータ送信
・0x75をコマンド送信 (Page Address)
・0x00をデータ送信
・0xA1をデータ送信
・0x5Cをコマンド送信 (Write RAM)
・0x00を132×162×2=42768回データ送信
・0xAFをコマンド送信 (Display On)

全ドットに黒を描画する感じで。
132×162×2の×2は、1ピクセルあたり2バイトで構成されているから
デフォルトのRB modeだと
[MSB] R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0 [LSB]


コマンドの送信方法は


・D0〜D7のデータセット
・A0をL
WRXをL
WRXをH
・A0をH

データは


・D0〜D7のデータセット
WRXをL
WRXをH
表記にはないけどA0はH
一応、両方とも各操作の間に1usのwaitを入れてる。


発色がよくないからコントラストかなんか操作できないかなーって思って調べてたら
後閑さんの 電子工作の実験室→PIC24F製作例→TFTカラー液晶の表示制御 その2 でタイミングコントロールやらを行っていた。
これはSleep Disableを送って200ms待った後の操作で


・0xCAをコマンド送信 (Timing Control)
・0x0Cをデータ送信
・0x03をデータ送信
・0x00をデータ送信
・0x0Dをデータ送信
・0x03をデータ送信
・0x28をデータ送信
・0x00をデータ送信
これを行ったところ発色がよくなった。


・作った初期化のプログラム


void init_lcd(void){
unsigned short i;
_delay_ms(30);
lcd_cmd(0x94); //Sleep Disable
_delay_ms(200);
lcd_cmd(0xCA); //Timing Control
lcd_dat(0x0C);
lcd_dat(0x03);
lcd_dat(0x00);
lcd_dat(0x0D);
lcd_dat(0x03);
lcd_dat(0x28);
lcd_dat(0x00);
lcd_cmd(0x15); //Column Address
lcd_dat(0x00);
lcd_dat(0x00);
lcd_dat(0x07);
lcd_dat(0x01);
lcd_cmd(0x75); //Page Address
lcd_dat(0x00);
lcd_dat(0xA1);
lcd_cmd(0xA6); //Display Normal 0xA7にすると色が反転する。
lcd_cmd(0x5C); //Write RAM
for(i=0;i<42768;i++){
lcd_dat(0x00);
}
lcd_cmd(0xAF); //Display On;
}


まぁ、よーく考えたら俺が試した時の上の写真、液晶が逆さまだけどね(爆)