نمایش نتایج: از 1 به 2 از 2

موضوع: eeprom 24c08خواندن و نوشتن

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

    eeprom 24c08خواندن و نوشتن

    سلام
    دوستان چطوری میتونم روی ایپی روم خارجی داده بنویسم یا بخونم و پاک کنم ؟

  2. #2
    Junior Member
    تاریخ عضویت
    Apr 2018
    نوشته ها
    3
    البته من خودم این کد ها رو پیدا کردم ولی این که بر چه اساس پین های ای سی رو تعریف کرده متوجه نمیشم در واقع رو هر پینی که میزنی کار میکنه

    /*
    Reading and writing data to 24C08 EEPROM over I2C
    CC0

    Datasheet for 24C08 HTTP 301 This page has been moved

    WIRING
    __ __
    PRE -| |- VCC
    NC -| |- MODE
    E -| |- SCL
    VSS -|_____|- SDA

    PRE = Write Protect -> GROUND
    NC = Not connected
    E = Chip Enable Input -> first EEPROM -> GROUND for I2C addresses 0x50,0x51,0x52,0x53; second EEPROM -> 5V for I2C addresses 0x54,0x55,0x56,0x57
    VSS = Ground -> GROUND
    VCC = Supply Voltage -> 5V
    MODE = Multibyte/Page Write Mode -> GROUND (not used here)
    SCL = Serial Clock -> Analog PIN 5 (Uno)
    SDA = Serial Data Address IN/OUT -> Analog PIN 4 (Uno)


    */

    #include <Wire.h> // for I2C

    // variable to receive data coming from the EERPROMs
    byte data_received=0;

    // eeprom address array, use I2C scanner sketch to find the addresses. This array contains 2 chips with 4 device addresses (like virtual chips) each
    byte chip[] = {0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};



    void setup()
    {
    Serial.begin(9600); // for screen output
    Wire.begin(); // waking up I2C
    delay(1000);
    Serial.println("Setup finished");
    }

    void writeData(int device_address, byte memory_address, byte data)
    // write one byte of data 'data' to eeprom memory address 'memory_address' to chip with I2C address 'device_address'
    {
    Wire.beginTransmission(device_address); // device address
    Wire.write(memory_address ); // memory address
    Wire.write(data); // data to send
    Wire.endTransmission(); // end
    delay(10);
    }

    byte readData(int device_address, byte memory_address)
    // reads one byte of data from memory location 'memory_address' in chip at I2C address 'device_address'
    {
    byte result; // return value
    Wire.beginTransmission(device_address); // device address
    Wire.write(memory_address); // memory address
    Wire.endTransmission(); // end
    Wire.requestFrom(device_address,1); // get one byte of data from device
    if (Wire.available())
    result = Wire.read();
    return result; // return the read data byte
    delay(10);
    }

    void loop()
    {
    // WRITING DATA

    int ascii_counter = 33; // to see something we start with the first readable character in the ASCII table which is 33 == '!'
    Serial.println();
    Serial.print("Writing data ");
    Serial.println();
    for (int a=0; a<8; a++) // loop to go through the address array of the eeprom i.e. chip[a]
    {
    for (int b=0; b<256;b++) // each chip has one byte of addressable memory
    {
    writeData(chip[a],b,ascii_counter); // writing the value ascii_counter to chip chip[a] at address b
    Serial.print("chip :"); // let's see what it did
    Serial.print(chip[a], HEX);
    Serial.print(" address :");
    Serial.print(b);
    Serial.print(" value :");
    Serial.println(char(ascii_counter));
    ascii_counter++; // next character of ASCII table
    if (ascii_counter > 126) {ascii_counter = 33;}; // ASCII characters greater 126 are not visible, go back to the first readable character at 33
    }
    Serial.println();
    }
    delay(10000); // let's wait some seconds

    // READING DATA

    Serial.println("Reading data...");
    for (int a=0; a<8; a++) // same as above, we toogle through the 8 chips ....
    {
    Serial.print("Chip: ");
    Serial.println(chip[a],HEX);
    for (int b=0; b<256;b++) // and all 256 addresses in each (virtual) chip...
    {
    data_received=readData(chip[a],b); // and read the data there....
    Serial.print(char(data_received)); // and print it to serial....
    }
    Serial.println(); // new line for each chip
    }
    // since the chip has only a limited number of write cycles, we don't want to write again and again. Let's end the sketch
    do
    {
    delay(10000);
    } while ( 1 != 0);
    }

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

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

SEO by vBSEO