2018年7月4日水曜日

なんでもI2C接続 LCDの場合

秋月電子でソーラーコントローラ(PHOCOSのちっこいの)を購入するついでに、I2C接続の16x2キャラクタ液晶を購入してみました。ArduinoとかRaspPiとかに接続して使えばセンサのデータとか直接表示できるので便利ですね。

佐川の配達員さん、ごめんなさいごめんなさい

発注したのが2日前で、いつもなら受け取りまでに1週間くらいかかるのに、今回に限って秋月電子さんが頑張ってくれたおかげで、部品到着が台風とぶつかってしまいました。
佐川の配達員さん、本当に申し訳ないです!

購入した部品

I2C接続小型キャラクタLCDモジュール+ピッチ変換キット
http://akizukidenshi.com/catalog/g/gK-08896/

従来(?)のパラレル接続のLCDモジュール(SC1602)より薄いので、ミンティアのケースなんかに収まりそうです。ただしバックライトが付いていないので、暗いところでは見えません。

LCDキャラクタディスプレイモジュール(16×2行バックライト付)
http://akizukidenshi.com/catalog/g/gP-00038/

変換基板には、LCDを動かすのに必要なキャパシタやプルアップ抵抗なども実装しているのでとても便利。

基板の半田付け

普通に半田付けすると、秋月電子のHPの写真のように、液晶から基板がはみ出てしまい、なんかカッコ悪いので、LCDモジュールの足を曲げて液晶サイズに収まるようにしてみました。

ピンヘッダとモジュールの足が触れないよう、間に絶縁テープを挟んでいます。
モジュールの足が長くなった分、変換基板がガタつきますが、ホットボンドで固定すれば大丈夫でしょう。
基板裏側にプルアップ用のジャンパパッドがありますので、あとで半田を盛りたくなっても大丈夫。ピンヘッダのところにG,D,C,Vとピン名を書いてみましたが、小さすぎて読めない。あとでプリンタで印刷して貼っておこう・・

Arduinoとの接続


FritzingにLCDのモデルがなかったので、なんとなく、雰囲気だけ感じてください。

図では10kのプルアップ抵抗をI2CのSDA、SCLに付けていますが、これはあとでRaspPiでも使ってみようと思っているからです。なのでArduinoでしか使わない方なら変換基板のプルアップ用ジャンパパッドに半田を盛れば10kは必要ありません。

図ではI2Cの電源は3.3Vに接続していますが、5Vでも動作します。ただしLCDのコントラストの設定が異なります。

サンプルコードを実行してみる

LCDのサンプルコードはLCDモジュール単体のページにありました。
http://akizukidenshi.com/catalog/g/gP-08779/

サンプルコードではSCLとSDAがA5とA4ピンに接続するように記述されていますが、ArduinoUNOボード上で接続されているので、どちらに接続しても動きます。詳しくはarduino-uno-schematic.pdfあたりで検索してみてください。

I2Cの電源を3.3Vにする場合、init_LCD()のコントラスト設定部分を書き換えます

5Vの場合
writeCommand(0x7A); // Contrast set 0,1,2,3
writeCommand(0x54); // Contrast set 4,5

3.3Vの場合
writeCommand(0x73); // Contrast set 0,1,2,3
writeCommand(0x56); // Contrast set 4,5

動かしてるとこ



左側にあるカラーセンサーもI2C接続。先日使ったBME280もI2C接続。もう全てのデバイスはI2C接続でいいんじゃないかと思う。

RaspPiに繋いでみる

このとおり何事もなく表示できました。I2Cサイコー!
ブレッドボード上にBME280があり、ロギングと同時に液晶に表示。ログ周期は10分。まあ1分でも1秒でもいいのですが、そんなに記録しても仕方ないので。
ソースコードはそのうちアップします。

サンプルコードの間違い? LCDモジュールの不具合?

マニュアルでは、初期化コマンドの間に20uSecほどディレイをあけるように記載されていますが、マニュアルと異なるようなのでメモしておきます。

マニュアルによると、電源投入時に40mSec以上待ち、初期化コマンドの間に26.3uSecの待ちが必要。また、0x6C FollowerControlコマンド実行後は電源が安定するまで200mSecの待ちが必要。26.3Sec以上となっているので、delay(1)にすると多少初期化が早くなります。全削除するとちゃんと初期化されません。

その後いろいろ試してはいるのですが、再現しない表示ミスが何度も発生中。orz
解決した模様→https://pitslaboratory.blogspot.com/2018/07/i2clcd_26.html

↑I2Cの送信がうまくいかず、表示がおかしくなっている様子


0 件のコメント:

コメントを投稿