SpresenseでLチカから始める (4) Wireライブラリ キャラクタLCD

 海外と日本では、キャラクタLCDディスプレイの中で、特にI2Cインターフェースをもつ製品は、電子工作市場に出回っているデバイスの種類が異なります。キャラクタLCDディスプレイはもともとパラレル・インターフェースで接続していましたが、ArduinoのI/Oピンの大半を使ってしまうため、最近はI2Cインターフェースが好まれます。中に入っているコントロールICのオリジナルは日立製作所製で、その後利用されるデバイスも命令体系はほぼ保たれています。

 液晶の特徴は電力をほとんど消費しないことです。国内で入手しやすい秋月電子通商のAQMシリーズは1mA程度の消費電流です。しかし、ラズパイのI2C信号は1.8kΩでプルアップされているため、ACK信号をLOWレベルにできません。SpresenseもI2C信号は1kΩでプルアップされているので、信号と電源をつないだだけでは、ACKがデバイスから返えらないと判断されてデータのやり取りが成立せず、文字が表示されません。

接続

 キャラクタLCDは、秋月電子通商のAE-AQM0802+PCA9515を使います。バス・リピータは単独の基板もあります。この基板を利用し、AQM1602も利用できます。ただし、ピンの並びが異なるので、はんだ付けは面倒です。

スケッチ

 Cortex-Mシリーズと電源が3.3Vという同じ条件のArduinoにMicro:bitがあります。1行に8文字、2行表示のコンパクトなキャラクタ表示LCD AQM0802を利用する記事のスケッチを流用、修正します。

#include <Wire.h>
#define lcd_address 0x3e // LCD slave

int i2cwritecmd(byte cmd) {
Wire.beginTransmission(lcd_address);
Wire.write((byte)0x00);
Wire.write(cmd);
return Wire.endTransmission();
}

int i2cwritedata(byte data) {
Wire.beginTransmission(lcd_address);
Wire.write(0x40);
Wire.write(data);
return Wire.endTransmission();
}

void lcdcu_set(int x, int y) {
byte ca = (x + y * 0x40) | (0x80); i2cwritecmd(ca);
}

void lcdclear() {
i2cwritecmd(0x01);
}

void lcdhome() {
i2cwritecmd(0x02);
}

void dsift_l() {
i2cwritecmd(0x1C);
}

void dsift_r() {
i2cwritecmd(0x18);
}

void i2cprint( String pdata) {
int n = pdata.length();
for (int i = 0; i < n; i = i + 1) {
i2cwritedata(pdata.charAt(i));
delay(1);
}
}

void init_lcd() {
delay(145);
i2cwritecmd(0x38);delay(1);
i2cwritecmd(0x39);delay(1);
i2cwritecmd(0x14);delay(1);
i2cwritecmd(0x71);delay(1);
i2cwritecmd(0x56); //3.3V
delay(1);
i2cwritecmd(0x6c);delay(300);
i2cwritecmd(0x38);delay(1);
i2cwritecmd(0x01);delay(2);
i2cwritecmd(0x0C);delay(2);
}

#define sensorPin A0

void setup() {
Wire.begin();
init_lcd();
Serial.begin(9600);
}

void loop() {
lcdhome();
int sensorValue = analogRead(sensorPin);
Serial.println(sensorValue);
i2cprint(String(sensorValue));i2cprint(String(" "));
i2cprint(String(sensorValue/1024.0*5));
delay(1000);
}



 実行結果です。アルカリ電池1本を入力A0-GNDにつないでいます。





前へ

SpresenseでLチカから始める (3) Wireライブラリ A-DコンバータMCP3421

次へ

SpresenseでLチカから始める (5) Wireライブラリ グラフィック・ディスプレイ