Pentru a salva sau a citi anumite date in/din exteriorul microcontrolerului ATMega vom folosi o memorie eeprom de tipul 24c256.

    Aceasta memorie comunica cu microcontrolerul prin intermediul interfetei I2C. Memoria se alimenteaza cu +5V.

    Pretul acestui modul de memorie este de 8 lei si se poate cumpara de aici.

    In acest exemplu voi folosi un modul cu circuitul integrat 24c256. Conectarea la Arduino este foarte simpla, se conecteaza doar alimentarea (+5V si GND) , SCL si SDA.

    Pe modul avem 4 jumperi de reglaj. Acesti jumperi ofera conectarea la GND sau la +5V a urmatorilor pini ai memoriei: A0, A1, A2 si WP. Acesti pini se vor conecta la GND.

    Modulul folosit este cel de mai jos:

 

    Sketchul de test pentru a vedea daca memoria functioneaza asa cum ne dorim este cel de mai jos:

#include <Wire.h> 
#define ram1 0x50  //definire adresa a memoriei eeprom

void setup() {
  Wire.begin(); 
  Serial.begin(9600);

  writeEEPROM(ram1, 0, 221);  //scriem la adresa 0 valoarea 221 
  writeEEPROM(ram1, 1, 34);   //scriem la adresa 1 valoarea 34
  writeEEPROM(ram1, 2, 21);
  writeEEPROM(ram1, 3, 26);
  writeEEPROM(ram1, 4, 119);
  writeEEPROM(ram1, 5, 45);
  writeEEPROM(ram1, 6, 88);
  writeEEPROM(ram1, 7, 120);
  writeEEPROM(ram1, 8, 231);
  writeEEPROM(ram1, 15, 145);
  writeEEPROM(ram1, 22, 203);
  Serial.println(readEEPROM(ram1, 0), DEC);   //citim de la adresa 0 valoarea memorata
  Serial.println(readEEPROM(ram1, 1), DEC);   //citim de la adresa 1 valoarea memorata
  Serial.println(readEEPROM(ram1, 2), DEC);
  Serial.println(readEEPROM(ram1, 3), DEC);
  Serial.println(readEEPROM(ram1, 4), DEC);
  Serial.println(readEEPROM(ram1, 5), DEC);
  Serial.println(readEEPROM(ram1, 6), DEC);
  Serial.println(readEEPROM(ram1, 7), DEC);
  Serial.println(readEEPROM(ram1, 8), DEC);
  Serial.println(readEEPROM(ram1, 15), DEC);
  Serial.println(readEEPROM(ram1, 22), DEC);
}

void loop() {
}

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(5);
}
 
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
  Wire.requestFrom(deviceaddress,1); 
  if (Wire.available()) rdata = Wire.read();
  return rdata;
}

    Rezultatul afisat in terminalul serial este cel de mai jos:

 

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.