ArduinoでLCDに表示させる [Arduino]
これまでArduinoからの出力はシリアルでPCを経由してモニタに出力していました。Serial.print()ってやつね。
いつまでもPCモニタに頼るわけにはいきませんので、今回はArduinoから文字を液晶ディスプレイ(LCD)にて表示させたいと思います。
使うのは、16×2行のキャラクタLCDモジュール、バックライト付きです。
これです↓
LCD16×2行 白色バックライト付 AQM1602Y-FLW-FBW
"https://akizukidenshi.com/catalog/g/gP-12619/"
インタフェースはI2C接続で、液晶コントローラはST7032iです。電源電圧は5V動作も可能なようですが、推奨の3.3Vで動作させることにしました。
ユニバーサル基板へLCDモジュールを実装します。
回路図とPCBEで作成した実装図を示します。
【回路図】
回路図の各値はマニュアルを参考に設計しましたが、バックライトの抵抗は計算して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[Ω]に決定です!
【実装図】
白色で塗り潰してある領域はLCDモジュールが載る部分をマークしています。(配置配線不可)。
実際にユニバーサル基板上に実装した写真です。事前にPCBEで実装図を作成していたので、きれいに収まりました。
【配線図】
マニュアルに掲載されている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
いつまでもPCモニタに頼るわけにはいきませんので、今回はArduinoから文字を液晶ディスプレイ(LCD)にて表示させたいと思います。
使うのは、16×2行のキャラクタLCDモジュール、バックライト付きです。
これです↓
LCD16×2行 白色バックライト付 AQM1602Y-FLW-FBW
"https://akizukidenshi.com/catalog/g/gP-12619/"
インタフェースはI2C接続で、液晶コントローラはST7032iです。電源電圧は5V動作も可能なようですが、推奨の3.3Vで動作させることにしました。
ユニバーサル基板へLCDモジュールを実装します。
回路図とPCBEで作成した実装図を示します。
【回路図】
回路図の各値はマニュアルを参考に設計しましたが、バックライトの抵抗は計算して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[Ω]に決定です!
【実装図】
白色で塗り潰してある領域はLCDモジュールが載る部分をマークしています。(配置配線不可)。
実際にユニバーサル基板上に実装した写真です。事前にPCBEで実装図を作成していたので、きれいに収まりました。
【配線図】
マニュアルに掲載されている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); }
2022-05-13 18:59
nice!(0)
コメント(0)
コメント 0