I2C接続型LCDモジュールのコントロール
Strawberry Linux社で販売している液晶モジュール (同社販売ページより画像を引用)
今回は、i2cバスマスターのモジュールを使用して、i2c接続型LCDモジュールを制御します。
i2c接続型LCDモジュールについてはHardware Extensionの記事を参照ください。
このモジュールは使用するにあたって、次の処理を行う必要があります。
1. 初期化処理
これは、LCDモジュールのLCDコントローラが持っているレジスタにアクセスして初期設定を行います。
2. 文字、アイコンの制御
16文字x2+アイコンの表示データを制御します。今回は外部に作成したLCDメモリの内容を読み取り、一定間隔ごとにリフレッシュを行います。
ここからは実際のverilogコードを使って説明します。
構造は次のようになります。
まずstage変数とcounter変数を定義して、全体のシーケンスを制御します。
stage変数は、初期化処理とLCD文字/アイコンののリフレッシュ処理を分けます。
counter変数は、各ステージでのシーケンス処理に使用します。
case (stage)
0: // 初期化処理
begin
case (counter)
0:
1:
...
endcase
end
1: // LCD表示データリフレッシュ処理
begin
case (counter)
0:
1:
...
endcase
end
endcase
初期化処理。
リセット入力によって、stage変数とcounter変数は共に0に初期化されます。
また、データ、コマンドを出力するために、lcd_cmd配列を定義してきます。
*定義方法: reg [7:0]lcd_cmd[0:20];
下記は、初期化処理のcounterが0のときに事前に設定しています。
lcd_cmd[9]以降は最初に表示する文字をセットしています。
*この場合は"Hello,World."を表示するようにあらかじめセットしています。
0: // stage : 0 initialize process
begin
stat_stage = 0;
case (counter)
0:
begin
busy = 1;
lcd_cmd[0] = 8'B0011_1000; // function set
lcd_cmd[1] = 8'B0011_1001; // function set
lcd_cmd[2] = 8'B0001_0100; // interval osc
lcd_cmd[3] = 8'B0111_1111; // contrast low
lcd_cmd[4] = 8'B0101_1110; // contrast high/icon/power
lcd_cmd[5] = 8'B0110_1100; // follower control
lcd_cmd[6] = 8'B0011_1000; // function set @IS=0
lcd_cmd[7] = 8'B0000_1100; // display on
lcd_cmd[8] = 8'B0000_0001; // clear display
lcd_cmd[9] ="H";
lcd_cmd[10]="e";
lcd_cmd[11]="l";
lcd_cmd[12]="l";
lcd_cmd[13]="o";
lcd_cmd[14]=",";
lcd_cmd[15]="W";
lcd_cmd[16]="o";
lcd_cmd[17]="r";
lcd_cmd[18]="l";
lcd_cmd[19]="d";
lcd_cmd[20]=".";
idx = 0;
counter = 1;
end
LCD表示データリフレッシュ処理。