نمایش نتایج: از 1 به 2 از 2
Like Tree2 لایک
  • 2 Post By Homayon

موضوع: راه اندازی EEPROM خارجی AT24C16 یا AT24Cxx

  1. #1
    Junior Member
    تاریخ عضویت
    Jan 2015
    نوشته ها
    3

    Question راه اندازی EEPROM خارجی AT24C16 یا AT24Cxx

    سلام دوستان
    بنده در حال تلاش براس راه اندازی حافظه EEPROM خارجی با پروتکل I2C بر روی برد ARDUINO UNO هستم. از حافظه AT24C16 دارم استفاده می کنم.
    نمونه برنامه یا کتابخانه ای برای راه اندازی این سری از حافظه ها موجود دارید؟

    یک برنامه ساده برای نوشتن یک بایت در یک خانه حافظه نوشتم ولی متاسفانه فقط عدد A3 را به صورت هگز باز میگردونه

    کد:
    #include <Wire.h>
    
    void setup()
    {
      Wire.begin();                        // join I2C bus (address optional for master)
      Serial.begin(9600);
      Serial.println("I2C Test");
      
      Wire.beginTransmission(0x50);
      Wire.write(0x00);   // MSB
      Wire.write(0x01); // LSB
      Wire.write(0x02);
      Wire.endTransmission();
      delay(20);
    }
    
    void loop()
    {
      byte data;
      Wire.beginTransmission(0x50);
      Wire.write(0x00);   // MSB
      Wire.write(0x01); // LSB
      Wire.endTransmission();
      Wire.requestFrom(0x50,1);
      if (Wire.available()) data = Wire.read();
    
      Serial.println(data , HEX);
      delay(5000);
    }

  2. #2
    Junior Member
    تاریخ عضویت
    Jan 2015
    نوشته ها
    3
    دوستان مشکل رو تونستم حل کنم
    به این شکل که به میکرو یک لاجیک آنالایزر وصل کردم و کل مراحل ارتباط بین میکروکنترلر و AT24C16 رو آنالیز کردم. فرایند نوشتن بر روی IC به درستی انجام میشد و مشکل بر رو خواندن بود.
    مشکل از این قسمت شروع میشد که بعد از ارسال آدرس خواندن یعنی A1 حافظه EEprom پاسخ NACK میداد.
    برای حل مشکل باید در هنگام فراخوانی این تابع در ورودی تابع کلمه false را مینوشتیم.
    کد:
    Wire.endTransmission(false);
    screenshot-117-.jpg
    در این عکس مراحل خواندن از روی خانه 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);
    }

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

SEO by vBSEO