本帖最后由 shuimeiya 于 2013-10-14 09:20 编辑
昨天拿到了板子,晚上按要求搭建了一下电路,然后用arduino写了一段iic代码,上电,无反应。
再次确认代码和连线没问题,上示波器,发现在送出地址信号后,收不到COG模块的ACK信号。百思不得其解,回去睡觉,感觉该模块的IIC接口一定不是常规的……
今天早上,把datasheet的第9节“bus interfaces" IIC部分详细读了一下,这一读大吸一口凉气,这么明显的坑竟然没看到(见文后截图)。注意最下面红线部分,只有将SDAOUT和ADI/SDAIN连接到一起时候,才是一个完整的IIC-bus。“磨刀不误砍柴工,细读手册再行动”——N年前就知道的道理,今天又在这里栽倒。
上电,屏幕点亮,WFK。
附arduino点亮代码:- #include <Wire.h>
- const byte COG_ADDRESS = 0x70>>1;
- const byte InitialCommand[] = {
- 0x80, 0x3A, //Initialize
- 0x80, 0xD8, //OTP refresh
- 0x80, 0x18, //Device Select 0
- 0x80, 0xD4, //CLKOUT disable
- 0x80, 0xC9, //Charge pump enabled, VLCD = 3*Vdd2
- 0x80, 0x45, //set VLCD, MSB
- 0x80, 0x73, //set VLCD, LSB, VLCD = 6.4v
- 0x80, 0x00, //temp, comp, measurement disable
- 0x80, 0xD0, //set 1/4 bias
- 0x80, 0xB3, //Dirving scheme C, 3-line inversion
- 0x80, 0x39, //Display enable
- 0x80, 0x80, //Set Data pointer x-MSB = 0
- 0x80, 0x90, //Set Data pointer x-LSB = 0
- 0x80, 0xA0, //Set Data pointer y = 0
- 0x20, //Write to DDRAM
- 0x55, 0x55, 0x55, 0x55, //random write ram to test
- 0xFF //end of the config array
- };
- void setup() {
- Wire.begin();
- Serial.begin(9600);
- while(!Serial.available());
- }
- void loop() {
- Wire.beginTransmission(COG_ADDRESS);
- while(InitialCommand[i] != 0xFF) {
- <span style="font-size: 14px; line-height: 1.5;"> </span><span style="font-size: 14px; line-height: 1.5;"> </span><span style="font-size: 14px; line-height: 1.5;">Wire.write(InitialCommand[i++]);</span>
复制代码 |