27867| 17
|
[讨论] 求教Arduino外置EEPROM的代码 |
Youyou 发表于 2014-8-28 13:19 感谢大神的提点,现在遇到一个问题(我用的是AT24C
02N),根据你提供的库写代码,却无法将数据写入EEPROM中,每次读取都为255,求指点 |
Youyou 发表于 2014-8-29 11:17 经过部分修改,能写入24C02中,但读取出问题——不管读取
地址为多少,读取结果为最后一个写入结果,代码及电路图如下,求赐教 |
本帖最后由 Youyou 于 2014-8-29 22:52 编辑 你的连线图没有问题,按照此图,你的地址0X57也是对的。你参考下我的代码试试看,我经过测试,成功写入并读取的。 我的连线是:A0到A2全部接地,WP管脚也接地。串口看读取的值,每一次按下复位键,打印的值就会增长一次。 #include "Wire.h" #include "i2cEEPROM.h" void setup() { i2cEEPROM.begin(0x50); byte num = i2cEEPROM.readByte(0)+1; i2cEEPROM.writeByte(0,num); Serial.begin(9600); } void loop() { Serial.println(i2cEEPROM.readByte(0)); delay(1000); } 注:该连线图只适用于Arduino UNO! 顺便说一下,我发现如果先初始化串口再初始化I2C,在这中间需要加入一些延时,否则读出的数据也不对,一直是255。 也就是说,需要改成这样: void setup() { Serial.begin(9600); delay(10); i2cEEPROM.begin(0x50); byte num = i2cEEPROM.readByte(0)+1; i2cEEPROM.writeByte(0,num); } |
加饭 发表于 2014-8-29 19:53 我用的是Arduino UNO,所以,SDA和SCL就是A4和A5。 你用的是mega2560,那么SDA和SCL就是D20和D21,注意板子的区别。你修改下连线。 还有,根据你的连线图,AT24C02的地址设置管脚(A0A1A2)都接成了高电平,那么器件地址就是0x57。我的连线方式是将他们全部置为低电平,所以器件地址为0x50。你修改下代码就可以用了。 |
本帖最后由 加饭 于 2014-9-1 11:15 编辑 Youyou 发表于 2014-8-29 22:50 我不用那个库文件,改用共用体,但出了个奇怪的问题——我AT24C02明明全接低电平(代码中硬件地址应该0x50),但经过write_data(0x57 ,0x00 ,0x11);这一句后,读取的内容变成0x11,怎么会这样呢?而且,只要软件中编写硬件地址在0x50~0x57之间,都能写入EEPROM中,已经确定SDA和SCL的引脚没有接错,求大神指点
|
本帖最后由 Youyou 于 2014-9-5 12:25 编辑 加饭 发表于 2014-9-5 09:27
|
本帖最后由 Abelwong 于 2019-4-24 01:59 编辑 目前手中僅有24LC02,實測24C02改善讀取一直都是0xFF的方式是必須修改read的地址設定方式才能正常讀取,讀取部分如下: byte readData(unsigned int address) { byte result; Wire.beginTransmission(0x50); Wire.write(address); Wire.endTransmission(); //此行務必要在Wire.write(address)之後 Wire.requestFrom(0x50, 1); result = Wire.read(); return result; } |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed