(DE0-CV) DE0拡張キットのLCDモジュールを使う (3)
前
(DE0-CV) DE0拡張キットのLCDモジュールを使う (2)
タイミングチャート
データシートからタイミングを確認します。
DE0拡張キットのLCDモジュールに使われているのはST7066UというICです。
ST7066Uは基本的に一般的に使われるHD44780と互換性があるようですが、
AC特性が改善されているようです。
HD44780より早く動作させることができるみたいですが、お遊びで使う分には
他のLCDモジュールでも動かせるほうが良いのでHD44780をベースに
タイミングを確認します。
HD44780のデータシートはこちらからダウンロードできます。
HD44780 データシート(PDF) - Hitachi Semiconductor
まず文字を表示するだけなので、Write Operationを実装します。
Write Operationのタイミングは下図の通りです。
大事な箇所にタイミングの仕様を記載しています。
それぞれの意味は次の通りです。
Eの変化(立ち上がり/立ち下がり)を起点として考えるとわかりやすいです。
シンボル | 意味 |
---|---|
tAS | RSとRWの変化開始は、短くともEの立ち上がりより60nsは早くなくてはならない |
tAH | RSとRWの変化終了は、短くともEの立ち下がりより20nsは遅くなくてはならない |
PWEH | EがHighとなる時間は、短くとも450nsなくてはならない |
tDSW | Dataの変化開始は、短くともEの立ち下がりより195nsは早くなくてはならない |
tH | Dataの変化終了は、短くともEの立ち下がりより10nsは遅くなくてはならない |
tcycE | Eの周期(立ち上がりから次の立ち上がりまで)は、短くとも1000nsはなくてはならない |
この情報を踏まえて、FPGAでは下図のようなタイミングで信号を出力するように設計します。
LCD_RSがRS, LCD_ENがE、LCD_DがDB0 to DB7に対応します。WriteではRW=0固定のため記載していません。
1clock=20nsです。
sClockCounter(18bit)が1clockごとに1加算されます。この値でLCD_RS,LCD_EN,LCD_Dを制御します。
LCD_RSはsClockCounter=0x000でHighとし、sClockCounter=0x070でLowにします。
LCD_ENはsClockCounter=0x010でHighとし、sClockCounter=0x050でLowにします。
LCD_DはsClockCounter=0x030でHighとし、sClockCounter=0x070でLowにします。
sWakeUpCounterとsModuleEnableは、電源投入後に初期化処理を待機するためのものです。 初期化処理の開始は、電源電圧が2.7Vを超えてから40ms以上待つ必要があります。 21bitのカウンタがフルカウントしたらsModuleEnable='1'となり、初期化処理を開始します。 (21bitカウンタのフルカウントにかかる時間は、221 *20ns=約42msです)
次の記事では、これをVHDLに記述します。