Library for LCD ACM1602NI connected using I2C on Nucleo F401 is not to be found. Using I2C class offered by mbed, I cannot program for this LCD on Nucleo F401. So I programmed for this LCD to control by direct accsessing registors for I2C in STM32F401RE. Nucleo F401 で使用できる,I2C 接続の LCD ACM1602NI 用のライブラリ.このライブラリでは,I2C クラスのコンストラクタとクロック周波数設定のメンバ関数は使っているが,その他のメンバ関数などは使っていない.その理由は,タイミングの関係だと思うが,I2C クラスのメンバ関数では正常に動くプログラムを,どうしても作れないことによる.しょうがないので,MCU の I2C 関係のレジスタに直接アクセスするようなプログラムを作ったたところ,動くようになった.Nucleo の F401RE 以外については確認していない.動かない場合は,I2C 用のレジスタのアドレスを,使っている MCU に応じて書きかえる必要がある.

Dependents:   ACM1602NI_Nucleo_Demo

Committer:
MikamiUitOpen
Date:
Sun Nov 30 06:10:19 2014 +0000
Revision:
2:edf345c86b3b
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 2:edf345c86b3b 1 //-------------------------------------------------------
MikamiUitOpen 2:edf345c86b3b 2 // Class for LCD, AQM0802A (Header)
MikamiUitOpen 2:edf345c86b3b 3 //
MikamiUitOpen 2:edf345c86b3b 4 // Default pin assignments
MikamiUitOpen 2:edf345c86b3b 5 // D14 SDA ---- to pin4 of LCD module
MikamiUitOpen 2:edf345c86b3b 6 // D15 SCL ---- to pin3 of LCD module
MikamiUitOpen 2:edf345c86b3b 7 //
MikamiUitOpen 2:edf345c86b3b 8 // Assignment of I2C ports
MikamiUitOpen 2:edf345c86b3b 9 // SDA SCL
MikamiUitOpen 2:edf345c86b3b 10 // I2C1 PB_7 or PB_9(D14) PB_6(D10) or PB_8(D15)
MikamiUitOpen 2:edf345c86b3b 11 // I2C2 PB_3(D3) PB_10(D6)
MikamiUitOpen 2:edf345c86b3b 12 // I2C3 PB_4(D5) or PC_9 PA_8(D7)
MikamiUitOpen 2:edf345c86b3b 13 //
MikamiUitOpen 2:edf345c86b3b 14 // 2014/11/30, Copyright (c) 2014 MIKAMI, Naoki
MikamiUitOpen 2:edf345c86b3b 15 //-------------------------------------------------------
MikamiUitOpen 2:edf345c86b3b 16
MikamiUitOpen 2:edf345c86b3b 17 #ifndef AQM0802A_HPP
MikamiUitOpen 2:edf345c86b3b 18 #define AQM0802A_HPP
MikamiUitOpen 2:edf345c86b3b 19
MikamiUitOpen 2:edf345c86b3b 20 #include "mbed.h"
MikamiUitOpen 2:edf345c86b3b 21
MikamiUitOpen 2:edf345c86b3b 22 namespace Mikami
MikamiUitOpen 2:edf345c86b3b 23 {
MikamiUitOpen 2:edf345c86b3b 24 class Aqm0802A
MikamiUitOpen 2:edf345c86b3b 25 {
MikamiUitOpen 2:edf345c86b3b 26 public:
MikamiUitOpen 2:edf345c86b3b 27 // Constructor
MikamiUitOpen 2:edf345c86b3b 28 Aqm0802A(PinName sda = D14, // SDA
MikamiUitOpen 2:edf345c86b3b 29 PinName scl = D15, // SCL
MikamiUitOpen 2:edf345c86b3b 30 uint32_t clock = 100000, // clock: 100 kHz
MikamiUitOpen 2:edf345c86b3b 31 bool cursor = false, // cursor: off
MikamiUitOpen 2:edf345c86b3b 32 bool blink = false); // blink: off
MikamiUitOpen 2:edf345c86b3b 33
MikamiUitOpen 2:edf345c86b3b 34 // All clear
MikamiUitOpen 2:edf345c86b3b 35 void Clear();
MikamiUitOpen 2:edf345c86b3b 36 // Send command
MikamiUitOpen 2:edf345c86b3b 37 void WriteCmd(uint8_t cmd) { LcdTx(0x00, cmd); }
MikamiUitOpen 2:edf345c86b3b 38 // Write character (Not 0x80 but 0x40)
MikamiUitOpen 2:edf345c86b3b 39 void WriteChar(char data) { LcdTx(0x40, data); }
MikamiUitOpen 2:edf345c86b3b 40 // Specify display position, x: 0 - 7, y: 0, 1
MikamiUitOpen 2:edf345c86b3b 41 void SetXY(uint8_t x = 0, uint8_t y = 0)
MikamiUitOpen 2:edf345c86b3b 42 { WriteCmd(x + y*0x40 | 0x80);}
MikamiUitOpen 2:edf345c86b3b 43 // Write string
MikamiUitOpen 2:edf345c86b3b 44 void WriteString(const char str[]);
MikamiUitOpen 2:edf345c86b3b 45 // Write string from specified position
MikamiUitOpen 2:edf345c86b3b 46 void WriteStringXY(const char str[], uint8_t x, uint8_t);
MikamiUitOpen 2:edf345c86b3b 47 // Clear of specified line
MikamiUitOpen 2:edf345c86b3b 48 void ClearLine(uint8_t line)
MikamiUitOpen 2:edf345c86b3b 49 { WriteStringXY(" ", 0, line); }
MikamiUitOpen 2:edf345c86b3b 50 void SetContrast(uint8_t c);
MikamiUitOpen 2:edf345c86b3b 51
MikamiUitOpen 2:edf345c86b3b 52 private:
MikamiUitOpen 2:edf345c86b3b 53 // Slave address of AQM0802A
MikamiUitOpen 2:edf345c86b3b 54 // left-justified 7-bit address
MikamiUitOpen 2:edf345c86b3b 55 static const uint8_t LCD_ADDRESS_ = 0x7C;
MikamiUitOpen 2:edf345c86b3b 56
MikamiUitOpen 2:edf345c86b3b 57 I2C i2c_; // Object of I2C
MikamiUitOpen 2:edf345c86b3b 58
MikamiUitOpen 2:edf345c86b3b 59 void LcdTx(uint8_t cmdData, uint8_t data);
MikamiUitOpen 2:edf345c86b3b 60
MikamiUitOpen 2:edf345c86b3b 61 // Forbid to use copy constructor
MikamiUitOpen 2:edf345c86b3b 62 Aqm0802A(const Aqm0802A&);
MikamiUitOpen 2:edf345c86b3b 63 // Forbid to use substitution operator
MikamiUitOpen 2:edf345c86b3b 64 Aqm0802A& operator=(const Aqm0802A&);
MikamiUitOpen 2:edf345c86b3b 65 };
MikamiUitOpen 2:edf345c86b3b 66 }
MikamiUitOpen 2:edf345c86b3b 67 #endif // AQM0802A_HPP