グラフィックLCDの活用

LCD KG057QV 京セラ 320×240 

CXA−L0612A  バックライト電源

はじめに、仕様書に従い、クロック信号CP、 LOAD信号 フレーム信号FRMを作り
LCDに絶え間なく(70〜80HZ)で入れる。
プログラムを簡単にするため、

回路図

10.73Mのクリスタルを分周して735nS のCPを作り出す
ATTINY2313で LOAD、FRM信号を作る。
基本的には LOAD信号を基準にして、 74HC08でcont信号により
CPを80個送出し、LOAD信号で 2行目 80個を表示する。
240行後は 最初に戻りFRM信号でスタートさせる。

4ビットずつクロックCPにあわせてデータを送出するにあたり、約700nSでメモリーから
データを送出しなければならない。
4ビット(1バイト)とすると、 19200バイトのメモリが必要になる

ATmega64 に256ビット(32Kbyte)のメモリーを増設して、700nS以内に送出
すれば、表示可能である。

ATmega64 は 16MHz で動作させると 1クロック 62,5nS であるため
10クロックのプログラムで動作させる。

メモリ転送は、CPが LOWに落ちる時に転送されるため、HIGH状態で メモリから
転送し、PORTに出力し、CPがLOWになるのを待つ。
SBIS命令は時間がかかるので要注意である。
プログラムを工夫することで、外部メモリーはウェイトを+1してあるが、十分転送
することが可能になった。

外部メモリは SRM2B256SLM55を使用することで 55nSアクセスタイムを確保する
ウェイトは+1することで、R/W可能であった。

表示文字は 8×7dot で 数字やアルファベットを自作した。

概略を説明すると
32KBYTEのメモリ空間に 19200バイトのLCD表示データ空間を作成する。
表示文字の最初の8ビットのドットを表示し、+80バイト後に表示文字の2行目ドット
を転送する。
7行表示すれば、1キャラクタ表示可能となる

ドット表示は、X軸 320 Y軸240 をメモリに変換して転送する。
4ビット 同時に表示するため、ORを取って、転送する。

全てメモリー空間にデータを転送したら、
KG057QVへ データ転送し、繰り返し表示させる。


難点は、データを取り込んだり、メモリ空間にデータを転送させたり、計算中は、表示画面が
リアルタイムで表示されない事である。
これは、専用LSIを使用していないため、いたしかたない事だが、
安価でグラフィックディスプレイに表示させることができた。



回路サンプルである。
完全なディスクリートで組んだものと、AVR ATTINY2313で組んだものである。
CPは700NSほどであるため、AVRのスピードでは一定で作り出せないため
HC393によって分周して作成している。 水平方向 80クロックを制御するため、
7408でコントロールしている。

FRM信号まで、作り出しているので、本体AVRのソフトは簡単になる。
FRM信号の立ち上がりで、80×240のデータをCPパルスの立下りで送り出してやればよい。

AVR TINY2313 プログラムである

main:
   cbi PORTD,KG_LOAD ; LOAD off
   cbi PORTD,KG_FRM ; FRM off
   cbi PORTD,KG_CONT ; CP off
main00:
   sbic pinb,KG_CP ;CP IN
   rjmp main00
main01:
   sbis pinb,KG_CP ;CP IN
   rjmp main01
main02:
   sbic pinb,KG_CP ;CP IN
   rjmp main02
;**************************************************
; cntr = n+3 =X240
; cnt = 80
;-----------start-------------------

mains:
   sbi PORTD,KG_LOAD ; LOAD on
   ldi cntr,237 ;240 Line
   ldi cnt,80
   nop
   rjmp pc+1
   cbi PORTD,KG_LOAD ; LOAD off
   sbi PORTD,KG_FRM ; FRM on
   sbi PORTD,KG_CONT ; CP on
main_1L:
   sbic pinb,KG_CP ;CP IN
   rjmp main_1L
main_1H:
   sbis pinb,KG_CP ;CP IN
   rjmp main_1H
   dec cnt
   brne main_1L
   rjmp pc+1
;------ 1 line end ---------
   cbi PORTD,KG_CONT ; CP off
main_12L:
   sbis pinb,KG_CP ;CP IN
   rjmp main_12L
main_12H:
   sbic pinb,KG_CP ;CP IN
   rjmp main_12H

   rjmp pc+1
;------ 2 line -----------------------------------
   sbi PORTD,KG_LOAD ; LOAD on
   sbi pinD,KG_led ; L (LED-off-on)
   rjmp pc+1
;-----------------------
   cbi PORTD,KG_LOAD ; LOAD off
   cbi PORTD,KG_FRM ; FRM off
   sbi PORTD,KG_CONT ; CP on
main_21:
   ldi cnt,80
main_21L:
   sbic pinb,KG_CP ;CP IN
   rjmp main_21L
main_21H:
   sbis pinb,KG_CP ;CP IN
   rjmp main_21H
   dec cnt
   brne main_21L
;------ 2 line end -------------
   rjmp pc+1
   cbi PORTD,KG_CONT ; CP off
main_22L:
   sbis pinb,KG_CP ;CP IN
   rjmp main_22L
main_22H:
   sbic pinb,KG_CP ;CP IN
   rjmp main_22H
;------ 3 line ---------------------------------
main_LP:
   sbi PORTD,KG_LOAD ; LOAD on
   rjmp pc+1
   rjmp pc+1
   cbi PORTD,KG_LOAD ; LOAD off
   nop
   ldi cnt,80
   sbi PORTD,KG_CONT ; CP on
main_LP3:
   sbic pinb,KG_CP ;CP IN
   rjmp main_LP3
main_LP4:
   sbis pinb,KG_CP ;CP IN
   rjmp main_LP4
   dec cnt
   brne main_LP3
;------ 3- line end -------------
   rjmp pc+1
   cbi PORTD,KG_CONT ; CP off
main_LP5:
   sbis pinb,KG_CP ;CP IN
   rjmp main_LP5
main_LP6:
   sbic pinb,KG_CP ;CP IN
   rjmp main_LP6
   dec cntr
   brne main_LP
;-------- line end ------------------------------
main_e:
   sbi PORTD,KG_LOAD ; LOAD on
   rjmp pc+1
   rjmp pc+1
   cbi PORTD,KG_LOAD ; LOAD off
   nop
   ldi cnt,80
   sbi PORTD,KG_CONT ; CP on
main_e1:
   sbic pinb,KG_CP ;CP IN
   rjmp main_e1
main_e2:
   sbis pinb,KG_CP ;CP IN
   rjmp main_e2
   dec cnt
   brne main_e1
;------ line end +1 -------------
   nop
   cbi PORTD,KG_CONT ; CP off
main_e3:
   sbis pinb,KG_CP ;CP IN
   rjmp main_e3
main_e4:
   sbic pinb,KG_CP ;CP IN
   rjmp main_e4
   rjmp mains


;*** TEST *******************************************
   dec w6
   breq main_ee
   rjmp mains
main_ee:
   rjmp main_ee