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表示データリフレッシュ処理。

counter

アクセスカウンター