これは、PSoC Advent Calendar 2019の7日目に突っ込まれた記事です。
LCD表示器が入ってる
前回の記事では、**Groveのスターターキットに入っていたGrove LED**というボードを使いました。
スターターキットには、他のボードも入っています。その中で、一番大きいのが**Grove LCD RGB Backlight**です。
良く見かけるパラレルバスのボードとは違って、これはI2Cインターフェイスの表示器です。これなら、**Grove**の4ピンコネクタにぴったりです。今回は、このボードを使ってみます。
ハードウェアを接続してみる
さっそく、**CY8CKIT-042-BLE-A**につないでみます。接続する場所は、I2Cと書いてあるコネクタです。
I2Cの規格では、一つのバスに複数のデバイスを接続することができます。**Base Shield V2**には、I2Cコネクタが4個並んでいるので、4個同時にバスに接続することができます。
このI2Cのバスは、CY8CKIT-042-BLE-A評価ボード上で、KitProgのUSB-I2C変換ポートにも接続されています。そのため、PSoC Creatorと一緒にインストールされているBridge Control Panelアプリケーションを使用してI2CのSlaveデバイスを直接操作することもできます。例えば、**Bridge Control Panel**の"List"ボタンをクリックすると、I2Cバス上に接続されたSlaveデバイスの一覧が出てきます。
これによると、**Bridge Control Panel**から三つのSlaveアドレスが見えていることがわかります。それぞれのアドレスは、以下のように使われています。
8bit | 7bit | デバイス |
---|---|---|
7C | 3E | LCD Controller |
C4 | 62 | LED Driver |
E0 | 70 | LED Driver |
I2C接続のLCDコントローラがあるじゃないか
**Groveシリーズのボードは、回路図やサンプルソフトウェアが提供されているのですが、このGrove LCD RGB Backlight**に限っては回路図が提供されていません。そのため、使用されているLCDコントローラの型番もわからず、仕様書も取り寄せられません。こりゃ、サンプルソフトウェアを読んで推測するしかなさそうです。
と悩んでいましたが、PSoC CreatorがCharacter LCD with I2C Interfaceというコンポーネントを持っている事に気が付きました。
Configuration Toolを見てみると、"NXP PCF2119x + custom commands"というラジオボタンがありました。もしかしたら、この**PCF2119x**というのがデファクトスタンダードで、このコマンド体系を使えばいけるんじゃね?
とりあえず表示させる
というわけで、**PCF2119X**であるという前提で表示させてみることにしました。
回路図
回路図は、必要なコンポーネントを並べただけです。
このCharacter LCD with I2C Interfaceというコンポーネントは、I2C Masterを操作してLCDコントローラと通信をするソフトウェアコンポーネントです。そのため、外付けのI2C Masterコンポーネントが別途必要です。
I2C Masterの設定
I2C Masterの設定は、以下のようにしました。
項目 | 設定 | 概要 |
---|---|---|
Name | I2CM | このインスタンスの名前です。 |
Mode | Master | Slaveデバイスを制御します。 |
別途、端子の割り当てが必要です。CY8CKIT-042-BLE-Aでは、以下の端子がSCLとSDAに接続されています。
I2Cバスのプルアップは、どこ?
通常、I2Cバスを使用する時には、SCL, SDA 信号線にプルアップ抵抗を付ける必要があります。この実験でもプルアップ抵抗が必要になるはずなのですが、無くても動いてしまいます。これは、**CY8CKIT-042-BLE-Aのボード上に搭載されているKitProg**がプルアップ抵抗を付けてくれるためです。
このため、他のポートをI2Cバスに使用する場合や、USBコネクタ以外から電源を供給する場合には、プルアップ抵抗を追加しなくてはなりません。I2Cバスを使用する場合には、一般的に注意が必要です。
LCDコントローラの設定
Character LCD with I2C Interfaceの設定は、以下のようにしました。
項目 | 設定 | 概要 |
---|---|---|
Name | I2C_LCD | このインスタンスの名前です。 |
I2C master instance name | I2CM | 操作対象であるI2C Masterの名前です。 |
Default I2C address (8 bit) | 0x7C | LCDコントローラのSlaveアドレスです。 |
Command format | NXP PCF2119x + custom commands | ひとまず**PCF2119x**だと思って使います。 |
I2C master instance nameには、先ほど作ったI2C Masterコンポーネントの名前を入れます。
Slaveアドレスは、**Bridge Control Panel**が調べてくれたアドレスを"8 bit"フォーマットで入れます。
ソフトウェア
ソフトウェアは、表示器いっぱいに文字を表示させるプログラムとしました。
# include "project.h"
int main(void) {
CyGlobalIntEnable; /* Enable global interrupts. */
I2CM_Start();
I2C_LCD_Start();
for (uint32_t i = 0x30; i <= 0x6F; i++) {
I2C_LCD_PutChar(i);
}
for (;;) {
/* Place your application code here. */
}
}
初期設定したら、0x3F ('0') から 0x6F ('o') までの48文字を送り込むだけのプログラムです。
うまく表示されない
実行させてみましたが、うまく表示されませんでした。
フォントが間違っているうえに1行しか表示されていません。
つまり、LCDコントローラが**PCF2119x**ではないという事を意味しているのですね。
とはいえ、何かを表示させようとする努力は見られるので何とかなるでしょう。
Custom formatを使う
とりあえず、**PCF2119x**としては動いていないらしいので、"Custom format"設定を使って試してみました。
フォントの乱れは無くなりました。が、2行表示になりません。
"Custom format"に設定すると、"Custom Command"タブにデフォルトのコマンド情報が入り、変更できるようになります。
これらのコマンドを見ていて、"Set display for 2 lines and 16 characters"というコマンドを見つけました。設定値は、0x24となっています。これは、"Function_set"というコマンドで、**PCF2119x**のデータシートでは以下のように書かれています。
|Instruction|RS|R/W|bit7|bit6|bit5|bit4|bit3|bit2|bit1|bit0|
|:--|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|Function_set|0|0|0|0|1|DL|-|M|SL|H|
DL: データバス幅 0:4bit 1:8bit
M: 表示行数 0:1-line 1:2-line
SL: multiplexモード 0:18-multiplex 1:9-multiplex
H: 命令セット 0:標準命令 1:拡張命令
I2Cの場合には、DLは関係ないので、**PCF2119x**であれば、確かに2行表示ができる設定です。
これに対して、一般的な**HD44780 (SC1602)**コントローラのコマンドを調べると、このようになっていました。
|Instruction|RS|R/W|bit7|bit6|bit5|bit4|bit3|bit2|bit1|bit0|
|:--|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|Function_set|0|0|0|0|1|DL|N|F|-|-|
DL: データバス幅 0:4bit 1:8bit
N: 表示行数 0:1-line 1:2-line
F: フォントのドット数 0:5x8 1:5x10
比較してみるとわかりますが、2行表示設定にするためのビット位置が異なっています。
もし、このLCDコントローラのコマンド体系が**HD44780 (SC1602)**同等だったとすると、0x24を送ると1-line, 5x10フォントという妙な設定になってしまいます。2行表示をしたいのであれば、0x28を送らなくてはなりません。コマンドを0x28に変更してみました。
すると、思った通りの出力になりました。
GitHub リポジトリ
関連サイト
32-bit Arm® Cortex®-M0 PSoC® 4
PSoC® 4 BLE (Bluetooth Smart)
スイッチサイエンスのスターターキットのページ
関連記事
CY8CKIT-042-BLE-A でLチカ
CY8CKIT-042-BLE-A でLCD表示
CY8CKIT-042-BLE-A でバックライト点灯
CY8CKIT-042-BLE-A で気圧を表示
CY8CKIT-042-BLE-A で気圧を送信