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: