FC2カウンター FPGAの部屋 スパルタン3EスターターキットのLCD表示回路その後
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

スパルタン3EスターターキットのLCD表示回路その後

スタータキットのユーザーズマニュアルに書いてあるLCD操作タイミングとST7066Uのタイミングが違うのではないかというコメントをSimさんからいただいた。
確かにスタータキットのユーザーズマニュアルを見るとST7066Uを使っていると書いてある。
ためしにST7066Uをターゲットにタイミングを書き換えてみた。
ST7066UのE(イネーブル)パルス幅は140nsなので、きりの良い160nsとした。(実際は1クロック遅れるので180nsだが良しとした)
イネーブルクロックのサイクル時間は1.2usなのだが、元から1.28us程度waitしているのでそのままとした。(これはupper 4bit書き込んだ後にlower 4bitを書き込むためのwait時間)

初期化の手順は

1. 40ms待つ
2. 3を書いて37us以上待つ(Function set)
3. 2を書いて、8を書いて37us以上待つ(Function set)
4. 2を書いて、8を書いて37us以上待つ(Function set)
5. 0を書いて、Cを書いて37us以上待つ(Display ON/OFF)
6. 0を書いて、1を書いて1.52ms以上待つ(Display Clear)
7. 0を書いて、6を書いて37us以上待つ(Entry mode set)


実際は37us待つところはインターバルタイマーの粒度の関係から82us程度待っている。
前回からの変更点はLCD_operation.vhdがイネーブルのためのカウントを16から8とした。(160nsカウント)
LCDOPESM.DIAとLCDOPESM.vhdはタイミングの変更に従って、右のステートマシンのみ変更した。
LCD_ST7066U_1_060513.png


instrom.psmの初期化の手順を上の手順に従って変更した。

LOAD s0, F4 ; 20msインターバルタイマーセット
CALL TIMEOUT_CHK

LOAD s0, F4 ; 20msインターバルタイマーセット
CALL TIMEOUT_CHK ; 合計40ms wait

XOR s1, s1 ; s1をクリア LCD_RS, LCD_RW=0
OR s1, ACCESS_4BIT_POS ; 4bitアクセスビットを立てる
OUTPUT s1, OUT_LCD_CTL_PORT
LOAD s2, 03 ; 0x03を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 01 ; 書き込む時間も入れて80us wait
CALL TIMEOUT_CHK

XOR s1, s1 ; s1をクリア LCD_RS, LCD_RW=0, 4bit access bitもクリア
OUTPUT s1, OUT_LCD_CTL_PORT

LOAD s2, 28 ; 8ビットデータ28(Function Set)を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 01 ; 書き込む時間も入れて80us wait
CALL TIMEOUT_CHK

LOAD s2, 28 ; 8ビットデータ28(Function Set)を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 01 ; 書き込む時間も入れて80us wait
CALL TIMEOUT_CHK

LOAD s2, 0C ; 8ビットデータ0C(Display Control)を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 01 ; 書き込む時間も入れて80us wait
CALL TIMEOUT_CHK

LOAD s2, 01 ; 8ビットデータ01(Display Clear)を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 15 ; 書き込む時間も入れて1.65ms wait
CALL TIMEOUT_CHK

LOAD s2, 06 ; 8ビットデータ06(Entry Mode)を書き込む
OUTPUT s2, OUT_LCD_WR_DATA_PORT
LOAD s0, 01 ; 書き込む時間も入れて80us wait
CALL TIMEOUT_CHK

; 初期化終了


この変更をしてインプリメントして実際にやってみたところ、問題ないようである。前の初期化シーケンスと書き込みタイミングが違うが、どっちを使っても問題ないようである。
一応ここにおいておくのでよろしければどうぞ。例によって無保証である。
2006.05.19 注:LCD_sample_for_ST7066U/LCD_4hex_dispフォルダの中のLCD_4hex_disp.ipfを消してください。これを消さないとiMPACTでコンフィギュレーションする場合に絶対パスで指定されたbitファイルを見に行ってエラーとなるようだ。
やはり、ソフトウェアで直すのはハードに比べて楽チンだと思った。

書き忘れていたが、BTN South(RESET)がリセットスイッチだ。ただいまのところ定数しか表示していないので押しても変化なしである。

もう1つ追加。最初にミスって初期化手順のうちの
4. 2を書いて、8を書いて37us以上待つ(Function set)
を忘れていた。そうするとコンフィグ2回に1回くらい表示がおかしくなった。結構初期化手順は厳密にやらないといけないようだ。
  1. 2006年05月13日 06:10 |
  2. Spartan3E Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/218-e1c5fb72
この記事にトラックバックする(FC2ブログユーザー)