AQM1602(I2C LCD)をNucleo-F446REで動作させようとmbedに以下のソースコードを作成。
ビルド後、書き込んでも、LCDが全然反応しません。
SCL,SDAの端子をモニタしたら、L => H => Lと一回だけ変化し、それ以降、変化しません。
なお、LCDはPICマイコンで正常に動作しています。
原因を教えてください。
ソースコード
#include "mbed.h"
//I2C i2c(I2C_SDA, I2C_SCL);
//I2CSlave slave(PB_9,PB_8);
I2C i2c(PB_9,PB_8);
//Serial pc(USBTX, USBRX); // tx, rx
DigitalOut myled(LED1);
DigitalOut LED(PA_1);
const int addr = 0x73; // define the I2C Address
//const int addr = 0x3E; // define the I2C Address
int main() {
// spi.format(8,3);
// spi.frequency(100000);
char cmd[4]; cmd[0] = 0x00;//制御コード
//Init Start
wait_ms(200);
cmd[1] = 0x38;i2c.write(addr, cmd, 2); //8bitバス 2行表示 5*7フォント
wait_us(50);
cmd[1] = 0x39;i2c.write(addr, cmd, 2); //IS=1(拡張コマンドを許可)
wait_us(50);
cmd[1] = 0x14;i2c.write(addr, cmd, 2); //拡張コマンドで内部周波数設定
wait_us(50);
cmd[1] = 0x73;i2c.write(addr, cmd, 2); //拡張コマンドでコントラスト設定
wait_us(50);
cmd[1] = 0x56;i2c.write(addr, cmd, 2); //拡張コマンドで電源,コントラスト設定
wait_us(50);
cmd[1] = 0x6C;i2c.write(addr, cmd, 2); //拡張コマンドでフォロアをON
wait_ms(300);
cmd[1] = 0x38;i2c.write(addr, cmd, 2);//IS=0 (拡張コマンドの処理を終了)
wait_us(50);
cmd[1] = 0x01;i2c.write(addr, cmd, 2);// Display clear
wait_us(50);
cmd[1] = 0x0C;i2c.write(addr, cmd, 2);// Display on
// end Init wait_ms(100); /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ cmd[1]=0x02;i2c.write(addr, cmd, 2); //カーソルHome wait_us(50); cmd[0]=0x40;cmd[1]=0x31;i2c.write(addr, cmd, 2); //"1"表示
while(1) {
myled = 1;LED=0;
wait(1);
myled = 0;LED=1;
wait(1);
} // end while
} //end main
回答3件
あなたの回答
tips
プレビュー