LoginSignup
1
0

More than 3 years have passed since last update.

CY8CKIT-042-BLE-A でLCD表示

Last updated at Posted at 2019-12-06

これは、PSoC Advent Calendar 2019の7日目に突っ込まれた記事です。

LCD表示器が入ってる

前回の記事では、Groveスターターキットに入っていたGrove LEDというボードを使いました。

Grove Starter Kit

スターターキットには、他のボードも入っています。その中で、一番大きいのがGrove LCD RGB Backlightです。

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 CreatorCharacter LCD with I2C Interfaceというコンポーネントを持っている事に気が付きました。

I2C LCD Configuration

Configuration Toolを見てみると、"NXP PCF2119x + custom commands"というラジオボタンがありました。もしかしたら、このPCF2119xというのがデファクトスタンダードで、このコマンド体系を使えばいけるんじゃね?

とりあえず表示させる

というわけで、PCF2119Xであるという前提で表示させてみることにしました。

回路図

回路図は、必要なコンポーネントを並べただけです。

回路図

このCharacter LCD with I2C Interfaceというコンポーネントは、I2C Masterを操作してLCDコントローラと通信をするソフトウェアコンポーネントです。そのため、外付けのI2C Masterコンポーネントが別途必要です。

I2C Masterの設定

I2C Masterの設定は、以下のようにしました。

I2C Masterの設定

項目 設定 概要
Name I2CM このインスタンスの名前です。
Mode Master Slaveデバイスを制御します。

別途、端子の割り当てが必要です。CY8CKIT-042-BLE-Aでは、以下の端子がSCLSDAに接続されています。

I2CMの端子割り当て

I2Cバスのプルアップは、どこ?

通常、I2Cバスを使用する時には、SCL, SDA 信号線にプルアップ抵抗を付ける必要があります。この実験でもプルアップ抵抗が必要になるはずなのですが、無くても動いてしまいます。これは、CY8CKIT-042-BLE-Aのボード上に搭載されているKitProgがプルアップ抵抗を付けてくれるためです。

プルアップ回路

このため、他のポートをI2Cバスに使用する場合や、USBコネクタ以外から電源を供給する場合には、プルアップ抵抗を追加しなくてはなりません。I2Cバスを使用する場合には、一般的に注意が必要です。

LCDコントローラの設定

Character LCD with I2C Interfaceの設定は、以下のようにしました。

LCDコントローラの設定

項目 設定 概要
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"フォーマットで入れます。

ソフトウェア

ソフトウェアは、表示器いっぱいに文字を表示させるプログラムとしました。

main.c
#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"設定を使って試してみました。

custom format設定

ちょっと良くなった

フォントの乱れは無くなりました。が、2行表示になりません。

"Custom format"に設定すると、"Custom Command"タブにデフォルトのコマンド情報が入り、変更できるようになります。

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 リポジトリ

GitHub Repository

関連サイト

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 で気圧を送信

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0