دوستان مشکل رو تونستم حل کنم
به این شکل که به میکرو یک لاجیک آنالایزر وصل کردم و کل مراحل ارتباط بین میکروکنترلر و AT24C16 رو آنالیز کردم. فرایند نوشتن بر روی IC به درستی انجام میشد و مشکل بر رو خواندن بود.
مشکل از این قسمت شروع میشد که بعد از ارسال آدرس خواندن یعنی A1 حافظه EEprom پاسخ NACK میداد.
برای حل مشکل باید در هنگام فراخوانی این تابع در ورودی تابع کلمه false را مینوشتیم.
کد:
Wire.endTransmission(false);
در این عکس مراحل خواندن از روی خانه 0x0001 حافظه را مشاهده میکنید.
کد:
#include <Wire.h>
void setup()
{
Wire.begin(); // join I2C bus (address optional for master)
Serial.begin(9600);
Serial.println("I2C Test");
delay(2000);
Wire.beginTransmission(0x50);
Wire.write(0x00); // MSB
Wire.write(0x01); // LSB
Wire.write(0xBB);
Wire.endTransmission();
Wire.endTransmission();
delay(200);
}
void loop()
{
byte data;
Wire.beginTransmission(0x50);
Wire.write(0x00); // MSB
Wire.write(0x01); // LSB
Wire.endTransmission(false);
Wire.requestFrom(0x50,1);
if (Wire.available()) data = Wire.read();
Serial.println(data , HEX);
delay(2000);
}