ATmega328P内蔵のTWI(I2C)を使って「有機ELキャラクタディスプレイモジュール 16×2行 黄色」SO1602AWYB-UC-WB-U に文字を表示させた。
SO1602Aと文字数だけが違うだけで使い方が同じ
stm32とI2C接続の有機ELディスプレイSO2002AでHello worldした。
のページも併せてどうぞ。
I2Cディスプレイモジュールドライバを作る
I2C(TWI)制御フローはメーカーが用意してくれているアプリケーションノート1に書いてある。
フローチャートを参考にして書いたソースコード2
TWI(I2C)基本フロー
TWI(I2C)ドライバフロー
スレーブアドレスとR/Wビット
I2Cバス仕様およびユーザーマニュアル3より
3.1.10 スレーブアドレスとR/Wビット
データ転送の形式を下図(図9)に示します。
スタートコンディション(S)の後、スレーブアドレスが送信されます。
このアドレスは7ビット長で、8ビット目にデータ転送の方向を示すビット(R/W)が続きます。
「0」は、送信(WRITE、書き込み)を、「1」はデータのリクエスト(READ、読み出し)を示します(図10)。
スタートプロセス後の最初のオクテットがスレーブアドレス このディスプレイモジュールのスレーブアドレスは011110[SA0], SA0は今回GNDに接続しているので011 1100 = 0x3C となり, 8ビット目がR/Wフラグとなっているので, アドレス0x3Cはデーターとしては0x78をバスへ送り出します。
I2CディスプレイモジュールSO1602の仕様
マイクロコントローラからSO1602Aディスプレイモジュールが接続されたバスにスレーブアドレス コントロールバイト データーバイト の順番で送り出します。
コントロールバイト
Co | D/C# | 0 | 0 | 0 | 0 | 0 | 0 | |
---|---|---|---|---|---|---|---|---|
Data | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
Cmd | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Co
Continuation bitD/C#
Data(1) / Command(0) Selection bit
コントロールバイトは続くデーターバイトがデーターかコマンドかをディスプレイモジュールに指示しています。
データーバイト
D | a | t | a | b | y | t | e |
---|---|---|---|---|---|---|---|
x | x | x | x | x | x | x | x |
これは単なる8bitデーターです
I2Cバスにコマンド送信
スレーブアドレス, 0x00,データーバイトの順にバスに送り出します。
|
|
I2Cバスにデーター送信
スレーブアドレス, 0x40,データーバイトの順にバスに送り出します。
|
|
SO1602ディスプレイモジュールの使いかた
このモジュールはHD44780コントローラの使い方で使えるので
キャラクタLCDモジュールの使いかた - ELM by ChaN
を参考に書きました
SO1602Aデーターシートよりコマンド表
ディスプレイモジュールに外字を登録する
レベルメーター表示の外字データー をPROGMEMに配置して
|
|
このループで登録してます。
付記
i2c_display.h
i2c_display.c
制御にはATMEGA328Pに内蔵されているI2C(TWI)機能を使います,I2C割り込みは難しそうなので今回は無し。