2017年4月25日火曜日

通常の LCD を I2C 化する

 プログラミングの容易さと情報の多さから ARDUINO を使うことが私にとって日常的になってきました。もう少し高度なことは Raspberry Pi を徐々に使いこなしていこうと思っています。

 AVRとしては ATMECA328P を基本的に使いますが、時として入出力端子が不足する場合があります。こんなとき入力ピン増設には 74HC165 、出力ピン増設には 74HC595 をそれぞれ使ってきました。

 またこのところI2C((Inter-Integrated Circuit))によるデータ通信をおこなう周辺デバイスが増えてきています。これはフィリップス社が提唱した2本の通信線をつかった周辺デバイスとのシリアル通信の方式です。

 そこで ARDUINO(ATMECA328P) でI2Cを使うトレーニングをかねて通常のLCD(液晶キャラクター・)ディスプレイをI2Cで動作させてみることにしました。普通6+2(電源)本必要な接続線を2+2(電源)本として節約によって生じた4本の入出力端子をさらに有効に使えるようにしようと言うものです。
 このことはLCDと ARDUINO(ATMECA328P) との脱着を容易にし、デバックにつかい易くすることができます。

 最も簡単にI2Cを試すにはご本家フィリップス社が開発した専用IC・PCF8574(I2C バス 対応、リモート 8 ビット I/O エクスパンダ)をつかうのがよいようです、で過日例によってebayからこれを調達しておきました。

 上写真の右側が件のICで、ジャンクボックスから出てきたような代物でしたが、後ほどすべて完動品であることを確認しました、写真中に見られる白丸は私がつけた1番ピンのマーキングです。
 中央部下にきれいなマーキング・プリントが見られるICが一個だけ混ざっていました、今となっては懐かしいなー。
 
 一方左側は PCF8574 IO Expansion Board
 といい、いろいろ応用できるように小さな基板の上に PCF8574T と部品を載せたものです。



 と言うことで早速右図のような回路を組み、お定まりの「 Hello world 」を走らせて見ました、下に実験中の写真を掲げます。


 写真左下に ATMECA328P 右下に PCF8574 があり、LCDにお目当ての文字がディスプレイされています。

 と言えば簡単なのですが、恥ずかしながらここに至るまでいくつかの苦労がありましたので備忘のため顛末を残しておきます。

 まずは接続する PCF8574 のアドレスをきめる A0、A1、A2 端子ですが、このところサービスの行き届いたICをつかっているのでプルアップの処理を忘れていました。

 テスト中に不安定になった原因がこれでした。

 下右表に示すように PCF8574 や PCF8574T の場合デフォルトで 0X27 だとおもっていたのですが、正しくは4.7kΩ程度で各端子を5V(Vcc)に予め接続しておく必要があったのです。

 ほかに PCF8574 が接続してなければA0、A1、A2 端子をすべてGNDにおとせば抵抗3本が節約できます、もちろんこの場合のアドレスは 0X20 となります。

 このときのトラブルシュートで有効だったのが、I2CScanner というスケッチです。 ARDUINO にI2Cデバイスを接続してスケッチを走らせればシリアル・モニタにそのアドレスを表示してくれます。

 次の必要なのは ARDUINO ライブラリです。
  ARDUINO Forum でいろいろ探した結果、NewliquidCrystal_1.3.4 と言うものを見つけました。


 このファイルにある LIquidCrystal_I2C.h  が探していたライブラリで他にも従来の LIquidCrystal.h なども同梱されており有効です。

 何よりありがたいのはスケッチの冒頭に宣言さえしておけば、I2C・LCDも従来のLCDも具体的操作は同じ記述が許されていることでしょう。 

 左にスケッチのサンプルを示します。
 最初の
 #include <Wire.h>
  #include <LiquidCrystal_I2C.h>

 はライブラリ宣言で次いで PCF8574 とLCDの接続を記述しますが、これは
 LiquidCrystal_I2C lcd(oX27,2,1,0,4,5,6,7);と記述します。カッコ内はADDS,EN,R/W,RS,DB4、DB5,DB6,DB7 の順で上記回路図をそのまま表現しています。

 これらは結果から見るときわめて簡単ですが、実際にいろいろやってみるとたいへんでした。でもこれでまた ARDUINO の世界が広がります。

0 件のコメント: