記事

ArduinoにLCDキャラクタ・ディスプレイ・モジュールを接続する(8)利用できる電源電圧

I2CインターフェースのLCDキャラクタ・モジュールをArduinoで使う(1)利用できる電源電圧を整理して接続(その1)


 通常のパラレル・インターフェースのLCDキャラクタ・ディスプレイ・モジュールは、Arduinoと接続して利用するためにディジタル・ポートが最小限六つ必要です。センサやスイッチなど複数のデバイスを接続する場合、ディジタル・ポートの数が足りなくなる可能性があります。
 そのような場合、2本のディジタル・ポートの接続だけで済み、2本のディジタル・ポートに複数のデバイスが接続できるI2CインターフェースのLCDキャラクタ・ディスプレイ・モジュールが便利です。

電源電圧が異なるI2CインターフェースのLCDキャラクタ・モジュール
 現在手元にある、I2Cキャラクタ・ディスプレイ・モジュールを次に示します。

 左から、
(1) I2C接続キャラクタLCDモジュール16×2行白色バックライト付き
 [ACM1602NI-FLW-FBW-M01](秋月電子通商)
 3.3V電源で5Vの電圧は加えられないので、直接Arduinoと接続する場合は3.3V電源のArduinoと接続する。5V電源のArduinoと接続する場合はI2Cバスの電圧レベルを変換するものが必要。これについては別に説明します。
(2)I2C接続小型キャラクタLCDモジュール(16×2行・3.3V/5V)
 ピッチ変換キット付き[AE-AQM1602A(KIT)](秋月電子通商)
  本体のピンは1.5mm間隔だが2.54mm間隔のピッチ変換キットが付属しているので、ブレッドボード、ユニバーサル・ボードで容易にテストできます。
  3.3V、5V電源のArduinoに直接接続できます。
(3)I2C接続小型キャラクタLCDモジュール 8×2行
  [AQM0802A-RN-GBW](秋月電子通商)
 3.3V電源なので、5V電源のArduinoには直接接続はできません。小型で8列2行の表示となります。
(4)I2C低電圧キャラクタ液晶モジュール(16×2行)
 メーカ品番;SB1602B(ストロベリーリナックス)
 3.3V電源です。3.3V電源で5V電源のArduinoには直接接続はできません。小型で8列2行の表示となります。その上段にいくつかのアイコンが表示できます。
 今回はこのうち、(1)の「I2C接続キャラクタLCDモジュール16×2行白色バックライト付き」のモジュールを使用します。今後、ACM1602NIと呼びます。
 次に示すのはACM1602NIの裏面です。右下の丸いランドのRX、CLK、DAT、MCR、TXは内部のPIC16F689用の端子で、そのままの何も接続しないでおきます。
 中央大き目の1から7の端子にピンヘッダをはんだ付けし、ブレッドボードに挿し込むなどしてArduinoと接続します。

 この七つの端子は、次のような役割を担っています。

◆電源関連

1 2 3
GND(VSS) 3.3V(VDD) Vo 輝度調整

     
◆I2C(Wire)用

4 5
SCL SDA


  SCL、SDAは3.3kΩの抵抗で3.3V電源にプルアップします。


◆バックライト用

6 7
BL+ BL-



ピンのはんだ付け
 8ピンのピンヘッダと8ピンの丸ピンソケットが添付されています。ブレッドボードに挿し込んで利用する予定なので、8ピンのピンヘッダをはんだ付けします。
 ピンヘッダをブレッドボードに挿し込み、まず両端を順番にはんだ付けし、それぞれがしっかりはんだ付けされているか、浮きがないか確認します。両端をはんだ付けした後、浮きがないことを確認し、残りを次のようにはんだ付けします。

 はんだ付けした後、裏面のピンと表面のはんだとの間の導通もテスタを使って念のため確認しました。全ピン導通がありました。

利用したマイコン・ボード
 Arduinoのマイコン・ボードは、手元にArduino M0とArduino Pro328/3.3があります。テストはArduino M0で行います。Arduino Proでも同じように接続し、同じプログラムで同じ結果が得られます。

LCDとマイコン間の配線
 ACM1602NIとArduino M0との接続は次に示すように行います。Arduino M0の3.3VとGND端子から、赤と黒のジャンパ線でブレッドボードに3.3Vの電源を供給します。ブレッドボードのジャンパ線は、左から順番に次のように接続しています。

1 2 3 4 5 6 7
GND(黒) 3.3V電源(赤) Vo(輝度調整) SCL SDA バックライトのプラス電源(赤) バックライトのマイナス電源(黒)

 電源ラインに、輝度調整用に電源を分圧する半固定抵抗の端子を接続します。半固定抵抗の中間タップの摺動子は、LCDの3ピンに接続します。ブレッドボードの左側の赤色と黒色のケーブルは、画面上側の電源ラインへの配線で、ここでは利用していません。

I2Cの信号線
 Arduino M0のI2Cの信号線は、Arduinoのディジタル・ポートのD13の左側GND、Arefの次にあります。ブレッドボード側でI2Cバスがプルアップしてあるので、ジャンパ線の接続だけで済みます。

ACM1602NIのI2Cインターフェースの仕様
 今回使用するI2CインターフェースLCDモジュールACM1602NIは、HD44780互換のLCDコントローラにPIC16F689でI2Cのインターフェースが追加されたものです。I2Cバス経由でACM1602NIのHD44780互換のLCDモジュールにLCDモジュールを制御するコマンド、表示するデータを書き込みます。ACM1602NIモジュール内のPIC16F689がI2Cバス経由で受信したデータをLCDコントローラに転送します。
 そのため、ArduinoのWireライブラリを利用して、LCD制御のためのコマンドやデータをACM1602NIに送信してLCDへの書き込みを行います。
 LCDモジュールに対するコマンドまたは表示データを、Arduinoからは「Wire」と呼ばれるライブラリを使用してI2C通信の仕様に従って送信します。

I2Cデバイスのアドレス
 I2Cのバスには、複数のスレーブ・デバイスが接続されています。スレーブ・デバイスにはそれぞれ7ビットのアドレスが割り当てられています。マスタ(この場合はArduino)はI2Cバスにメッセージを通信相手のスレーブ・デバイスに向けて送信します。自分あてのマスタからのデータを受信したスレーブ・デバイスはそのメッセージを解読し、その指示に従った処理を行い、場合によってはマスタにメッセージを送信します。

ACM1602NIのスレーブ・アドレス
 ACM1602NIのI2Cのスレーブ・アドレスは0xA0と設定されています。この値は固定されているので、同一のI2Cバスには1台しか接続できません。複数のACM1602NIを接続すると同じスレーブ・アドレスとなり、区別できないので1台のみの接続となります。

送信フォーマット
 I2CでLCDモジュールに送るデータのフォーマットは、次の3バイトで構成されます。

   アドレス部、制御バイト、コマンドまたはデータ
アドレス  0xA0   LCDモジュールのI2Cのスレーブ・アドレス
制御バイト 0x00の場合次のバイトが書き込みデータ
0x80の場合次のバイトはLCDモジュールへのコマンド
コマンド/データ 制御バイトに従いコマンドまたはデータ

 データは、LCDモジュールに表示される文字のコードと解釈されます。0x31のデータの場合文字 "0" が1文字表示されます。0x41の場合は "A" が表示されます。

 次回、LCDコントローラの初期化の方法、書き込みの手順を調べ初期化及び文字表示の関数をWireライブラリを利用して作成します。

(2016/5/22 V1.0)


<神崎康宏>

バックグラウンド

Arduino M0;8ビット・マイコンではなく、ARMの32ビット・マイコンCortex-M0+を搭載しているので、メモリなどの容量が大きくなっています。

連載メニュー ArduinoにLCDキャラクタ・ディスプレイ・モジュールを接続する

(1)  ArduinoにLCDディスプレイを接続する準備

(2)  アナログ入力ポートのデータをLCDに表示する

(3)  LiquidCrystalライブラリを使用したテスト・プログラム

(4)  超小型LCDキャラクタ・ディスプレイ・モジュールをArduinoで使う(1)接続

(5)  超小型LCDキャラクタ・ディスプレイ・モジュールをArduinoで使う(2)測定した温度をLCDに表示する

(6)  超小型LCDキャラクタ・ディスプレイ・モジュールをArduinoで使う(3)A-Dコンバータの基準電圧を変更して分解能を上げる

(7)  超小型LCDキャラクタ・ディスプレイ・モジュールをArduinoで使う(4)SPIインターフェースのK型熱電対で温度を測定する(その1)

(8)  I2CインターフェースのLCDキャラクタ・モジュールをArduinoで使う(1)利用できる電源電圧を整理して接続(その1)

(9)  I2CインターフェースのLCDキャラクタ・モジュールをArduinoで使う(2)Wire ライブラリを使用してLCD処理の関数を作る

(10)  I2CインターフェースのLCDキャラクタ・モジュールをArduinoで使う(3)I2Cバス双方向電圧レベル変換モジュール