I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリ. Library for LCD 1602XA-RN-GBW connected using I2C interface.

Dependents:   UIT2_MovingAv_Intr UIT2_VariableFIR UIT2_VowelSynthesizer UIT2_ALE_LeakyLMS ... more

Revision:
11:f650f1e809a9
Parent:
10:6e6c0f24e81f
Child:
12:21830002e12d
diff -r 6e6c0f24e81f -r f650f1e809a9 AQM1602.cpp
--- a/AQM1602.cpp	Sat Dec 24 02:36:19 2016 +0000
+++ b/AQM1602.cpp	Sat Jul 22 01:56:41 2017 +0000
@@ -1,8 +1,10 @@
 //---------------------------------------------------------------
 //  Class for LCD, AQM1602XA-RN-GBW
 //      Use mbed Rev.129 for Nucleo-F401/446/746 and DISCO-F746
+//  mbed Rev.130 以降で起こる,割り込み処理での動作不良を修正
+//  DISCO-F746 では動作不良は修正できないようだ
 //
-//  2016/12/24, Copyright (c) 2016 MIKAMI, Naoki
+//  2017/07/21, Copyright (c) 2016 MIKAMI, Naoki
 //---------------------------------------------------------------
 
 #include "AQM1602.hpp"
@@ -91,9 +93,20 @@
     // Send command and data
     bool Aqm1602::LcdTx(uint8_t cmdData, uint8_t data)
     {
+/*
+        // mbed Rev.130 以降では割り込み処理でうまく動作しない場合がある
         char tx[2] = { cmdData, data };
         int rt = i2c_.write(LCD_ADDRESS_, tx, 2);
         wait_us(30);
         return (rt == 0) ? true : false;
+*/
+        // mbed Rev.130 以降は下記を使う
+        i2c_.start();
+        int ack = i2c_.write(LCD_ADDRESS_);
+        ack &= i2c_.write(cmdData);
+        ack &= i2c_.write(data);
+        i2c_.stop();
+        wait_us(30);
+        return (ack == 1) ? true : false;
     }
 }