mega2560外部EEPROM地址出错
2014-09-011万
AI 快速预览详细
本文讨论了Mega2560与AT24C02外部EEPROM之间的I2C通信地址错误问题。通过具体代码示例和故障排查步骤,解决了数据写入地址错误的问题。文章提供了详细的解决方案,包括在每次I2C通信后添加10毫秒的延迟,以确保数据正确写入和读取。
|
#include <Wire.h> void setup() { Serial.begin(9600); delay(10); Wire.begin(); } byte val = 0; int index = 0; void loop() { byte a0 = 0x00; byte b0 = 0x00; write_data(0x50 ,0x00 ,0xbb); //write_data(0x57 ,0x00 ,0x22); a0 = read_data(0x50 ,0x00); //byte b0 = read_data(0x57 ,0x00); Serial.print("a=");delay(10); Serial.println(a0,HEX);delay(10); Serial.print("b=");delay(10); Serial.println(b0,HEX);delay(10); delay(2000); } void write_data(byte num ,byte add ,byte data) { // write Wire.beginTransmission(int(num)); Wire.write(add); // send address ww Wire.write(data); // send data ww Wire.endTransmission(); // delay(10); //very import ww } byte read_data(byte num ,byte add) { // read Wire.beginTransmission(int(num)); Wire.write(add); // send address Wire.endTransmission(); // Wire.requestFrom(int(num), 1); // request 2 bytes from slave device #112 if(1 <= Wire.available()) { val = Wire.read(); // receive high byte (overwrites previous reading) } delay(10); return val; } 我用AT24C02作为外部EEPROM,板子是mega2560,(SDA为Pin20,SCL为Pin21——这没错吧?)错误如下: 不管AT24C02硬件地址(A0A1A2)为多少,数据照样写入AT24C02中~ 即: write_data(0x50,0x00,0xaa); write_data(0x57,0x00,0x11); 接着读取数据时 read_data(0x50,0x00)的值为0x11; read_data(0x57,0x00)的值也为0x11~ 我AT24C02的硬件地址为0x50~ 求大神指教 |
-
QQ图片20140901094813.jpg (50.86 KB, 下载次数: 3223)




