SSブログ

ArduinoでLCDに表示させる [Arduino]

これまでArduinoからの出力はシリアルでPCを経由してモニタに出力していました。Serial.print()ってやつね。
いつまでもPCモニタに頼るわけにはいきませんので、今回はArduinoから文字を液晶ディスプレイ(LCD)にて表示させたいと思います。


使うのは、16×2行のキャラクタLCDモジュール、バックライト付きです。
これです↓
LCD16×2行 白色バックライト付 AQM1602Y-FLW-FBW
I2CキャラクタLCD_AQM1602Y.jpg
"https://akizukidenshi.com/catalog/g/gP-12619/"
インタフェースはI2C接続で、液晶コントローラはST7032iです。電源電圧は5V動作も可能なようですが、推奨の3.3Vで動作させることにしました。

ユニバーサル基板へLCDモジュールを実装します。
回路図とPCBEで作成した実装図を示します。
【回路図】
I2CキャラクタLCD_AQM1602Y回路図.png
回路図の各値はマニュアルを参考に設計しましたが、バックライトの抵抗は計算して100[Ω]としています。マニュアルを読むと順電圧Vf=3.1[V]、順電流If=30[mA]となっていたので、バックライトにかける電源電圧を5[V]とした場合、
 5.0 - 3.1 = 1.9[V] 1.9 / 30×1E-3 = 63.3[Ω]  手持ちの近い抵抗100[Ω]に決定です!

【実装図】
I2CキャラクタLCD_AQM1602Y実装図.jpg
白色で塗り潰してある領域はLCDモジュールが載る部分をマークしています。(配置配線不可)。

I2CキャラクタLCD_AQM1602Y実装.jpg
実際にユニバーサル基板上に実装した写真です。事前にPCBEで実装図を作成していたので、きれいに収まりました。

【配線図】
I2CキャラクタLCD_AQM1602Y-Arduino配線図.jpg
マニュアルに掲載されているArduino UNOとの接続例そのままの配線図です。
UNOは5[V]でLCDモジュールは3.3[V]のため、SDAとSCL信号にはUNOとLCDモジュールの間に電圧レベル変換モジュールを挟んでいます。
I2Cバス用双方向電圧レベル変換モジュール(FXMA2102)
"https://akizukidenshi.com/catalog/g/gM-05825/"

【スケッチ】
動作確認用のテストスケッチは、秋月のAQM1602XA-RN-GBWの取説に掲載のArduino用のプログラムを少し変更を加えたものです。
"https://akizukidenshi.com/catalog/g/gP-08779/"

LCDのスレーブアドレス( LCD_ADRS = 0x3E)は以下のArduino IDEのスケッチ例にあるスケッチを使うことで確認することができますので、確認後実物のアドレスと書き換えてください。
ファイル>スケッチ例>Wire>i2c_scanner

/*******************************************************************************
I2Cキャラクタ液晶(ST7032i)の動作テスト用プログラム
・駆動用IC:ST7032i
・インタフェース:I2C
・電源電圧=3.3V, SCL=A5, SDA=A4

*******************************************************************************/
#include 
#define LCD_ADRS 0x3E
 
char moji[] = "AQM1602Y-FLW-FBW";

//SCL=A5=LCDNo2 SDA=A4=LCDNo3
 
void setup() {
  Wire.begin();
  init_LCD();                       //液晶(ST7032i)初期化
}
 
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);
  }
  while(1){}//stop
}
//----main end----

//データ書き込み 
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);
}

//液晶(ST7032i)初期化
void init_LCD() {
  delay(100);
  writeCommand(0x38);   // FUNCTION SET
  delay(20);
  writeCommand(0x39);   // FUNCTION SET(IS=1)
  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(IS=0)
  delay(20);
  writeCommand(0x01);   // Clear Display
  delay(20);
  writeCommand(0x0C);   // Display ON/OFF control
  delay(20);
}




profile_picture_40×40.JPG
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

PCBgogoで基板を作ってみた|- ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。