اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

    سلام دوستان
    من برای راه اندازی یک حافظه خارجی EEPROM به شماره AT24C16 با برد ARDUINO UNO به مشکل عجیب بر خورده ام.
    دو تابع برای Write و Read این حافظه نوشتم.
    مشکل اینجاست که اگر 10 بایت را به صورت پشت سر هم بر روی حافظه Write کنم و سپس همین 10 بایت را دوباره از حافظه Read کنم، در تمام مراحل خواندن حافظه آخرین بایتی که بر روی حافظه نوشته شده بود را باز می گرداند.
    در این بین اگر خانه ای از حافظه به جز این 10 خانه را هم بخوانیم باز همان بایت آخری که بر روی حافظه رایت شده بود را برمیگرداند.


    [code=c]#include <Wire.h>

    /*
    * Write a byet in EEPROM Memory
    */
    void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {
    Wire.beginTransmission(deviceaddress);
    Wire.write((int)(eeaddress >> 8)); // MSB
    Wire.write((int)(eeaddress & 0xFF)); // LSB
    Wire.write(data);
    Wire.endTransmission();
    delay(200);
    }

    /************************************************** ********************
    * Read a byte from EEPROM memory *
    ************************************************** *******************/
    byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
    byte rdata = 0xFF;

    Wire.beginTransmission(deviceaddress);
    Wire.write((byte)(eeaddress >> 8)); // MSB
    Wire.write((byte)(eeaddress & 0xFF)); // LSB
    Wire.endTransmission(false);
    Wire.requestFrom(deviceaddress,1);
    if (Wire.available()) rdata = Wire.read();
    //Wire.endTransmission();
    delay(100);
    return rdata;
    }



    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(0xBB);
    // Wire.endTransmission();
    // Wire.endTransmission();

    }

    void loop()
    {

    byte data;

    writeEEPROM(0x50,1,10);
    writeEEPROM(0x50,2,20);
    writeEEPROM(0x50,3,30);
    writeEEPROM(0x50,4,40);

    writeEEPROM(0x50,5,50);
    writeEEPROM(0x50,6,60);
    writeEEPROM(0x50,7,70);
    writeEEPROM(0x50,8,80);
    writeEEPROM(0x50,9,90);
    writeEEPROM(0x50,10,100);

    data = readEEPROM(0x50,1);
    Serial.print("ADD: 1 "
    Serial.println(data , DEC);

    data = readEEPROM(0x50,2);
    Serial.print("ADD: 2 "
    Serial.println(data , DEC);


    // data = readEEPROM(0x50,3);
    // Serial.print("ADD: 3 "
    // Serial.println(data , DEC);

    // Wire.beginTransmission(0x50);
    // Wire.write(0x00); // MSB
    // Wire.write(0x01); // LSB
    // Wire.endTransmission(false);
    // Wire.requestFrom(0x50,1);
    // if (Wire.available()) data = Wire.read();


    //delay(2000);
    }
    [/code]
لطفا صبر کنید...
X