google-site-verification: google3bd66dd162ef54c7.html

ArduinoでI2Cキャラクタ液晶を使う(その1) 基本動作確認

 I2Cインターフェイスのキャラクタ液晶のストックが増えてきたので、これをちゃんと使えるようにしたいと思います。なお、使う環境はArduino です。

▼I2Cキャラクタ液晶のストック
I2C液晶
 キャラクタ液晶は作った物に組み込んでしまうことが多いので、ある程度ストックを持っていないと不安です。ということで、秋月に行った時にちょこちょこと買っていたらこんなに増えてました。これ以外にパラレルのキャラクタ液晶のストックもいくつかあります。

 この液晶にちょっと数字を表示させるくらいならライブラリを使わないでも何とかなります。でも数値や文字などを整った書式で表示させようとすると、やはりライブラリの助けを借りた方が楽です。実は以前 I2C キャラクタ液晶用のライブラリを使おうとしたのですが、私の経験不足のためにうまくいきませんでした。

 いつまでもそんな状態では情けないので、今回 I2Cキャラクタ液晶をライブラリから動かすことに真面目に取り組むことにしました。最初のターゲットは次の写真のキャラクタ液晶です。これが動けば他は似たような物のはずです。

▼秋月のI2Cキャラクタ液晶(16文字×2行)
秋月のI2C液晶
 インターフェイスは一般的なST7032i です。変換基板を使うとVdd,GND,SCA,SCLの4ピンを接続するだけで動きます。

◆I2Cバスの疎通確認
 キャラクタ液晶として動かす前に、I2Cバスの疎通を自作のI2Cアドレススキャナープログラムで確認しておきました。
I2Cアドレススキャン
 I2Cアドレスの0x3E にデバイスがあるのでインターフェイスは大丈夫そうです。

◆基本動作確認
 次に、基本的な動作の確認のためにライブラリを使わないで動かしてみます。そのために秋月のpdfの取説(AQM1602XA-GBW)に書かれているスケッチを下記のように少しアレンジして使いました。なおArduino のボードは UNO を使い配線は取説に記載された通りで、電源電圧は5Vで動かしました。
/*
I2Cキャラクタ液晶(ST7032)の動作テスト
電源電圧=5.0V, SCL=A5, SDA=A4
これは秋月のAQM1602XA-RN-GBWの取説に掲載のArduino用のプログラムを
アレンジしたものです。
2017/06/05 ラジオペンチ http://radiopench.blog96.fc2.com/
*/

#include <Wire.h>
#define LCD_ADRS 0x3E

char moji[] = "AQM1602XA-RN-GBW";

void setup() {
Wire.begin();
init_LCD(); // ST7032初期化
}

void loop() {
for (int i = 0; i < 16; i++) {
writeData(moji[i]); // 文字列表示
}
writeCommand(0x40 + 0x80); // 2行目先頭
for (int i = 0; i < 16; i++) {
writeData(i + 0xb1);
}
for (;;) { // 無限ループで
writeCommand(0x0C); // 表示ON
delay(1000);
writeCommand(0x08); // 表示OFF
delay(1000);
}
}

void writeData(byte t_data) { //データ書き込み
Wire.beginTransmission(LCD_ADRS);
Wire.write(0x40);
Wire.write(t_data);
Wire.endTransmission();
delay(1);
}

void writeCommand(byte t_command) { //コマンド書き込み
Wire.beginTransmission(LCD_ADRS);
Wire.write(0x00);
Wire.write(t_command);
Wire.endTransmission();
delay(10);
}

void init_LCD() { // ST7032i初期化
delay(100);
writeCommand(0x38);
delay(20);
writeCommand(0x39);
delay(20);
writeCommand(0x14); // Internal OSC freq.
delay(20);
writeCommand(0x73); // Contrast set(上位と合わせて0x23)
delay(20);
// writeCommand(0x56); // Power/ION/Contrast control(Bon ON,3.3V用)
writeCommand(0x52); // Power/ION/Contrast control(Bon OFF,5V用)
delay(20);
writeCommand(0x6C); // Follower control
delay(20);
writeCommand(0x38); // Function set
delay(20);
writeCommand(0x01); // Clear Display
delay(20);
writeCommand(0x0C); // Display ON/OFF control
delay(20);
}
27~31行目は追加した部分で、ここで表示を点滅させています。init_LCD()でモジュールの初期化を行っています。

▼画面表示
秋月のデモプログラム
 上のような画面の点滅を繰り返します。

◆トラブルと対策
 ここで問題が起きたのは、61行目の、writeCommand(0x56); の部分です。オリジナルのプログラムでは61行目はそのまま(コメントアウト無し)で、62行目はありません。この状態で動かすとコントラストが強すぎて黒い■表示になって文字が読めませんでした。但し、この状態でもコントラストの値をうんと下げる(0x0Aくらい)と文字が読めるようになりました。

 どうも61行目は電源電圧が3.3Vの場合の設定のようです。ということで、61行目をコメントアウトし、62行目で writeCommand(0x52); としてBonビットを0にしてbooster circuit をOFFにしました。これで電源電圧が5Vでも正常に表示されるようになります。なお、このあたりのプログラムのコメントは私が追加したものです。

 ところで電源電圧5VでBonがONのままでもコントラストの設定をうんと下げる(例えば0x0A)と表示が見えるようになるので、この状態で使うことが出来るかも知れません。でも、電源電圧5Vで Booster circuit を動かすと液晶の駆動電圧(V0ピン)が8Vくらいまで上昇してしまうので最悪は壊れるかも知れません。ちなみにV0の絶対最大定格はmax.7Vです。ということであまり変な使い方はしない方がいいと思います。

 こんなところで基本的な動作は大丈夫そうなので、いよいよライブラリを使ってみます。長くなったので続きは次の記事で、
関連記事

コメントの投稿

管理者にだけ表示を許可する

バリバリのプログラマーですね!

これって「C言語」ですよね?
ラジオペンチさん、バリバリのプログラマーですね!
ハードの技術も凄いけど、ソフトもですか…
正に両刀使い、私も見習わなくては!

re:バリバリのプログラマーですね!

はい、C言語です。でもArduinoなのでポインターとか構造体とかは使わないので判り易いです。
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード