In Proteus I’ve built the next scheme with the 24LC256 EEPROM memory of Microchip, the Arduino Uno and a LCD display to see the data stored in the memory:
The next step is build the program in Arduino software:
///////////////////////////////////////////////
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(6, 7, 8, 9, 10, 11); //Declaro el nombre del objeto LCD, y configuro los pines
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte *data, byte length )//Escribo una página (64 bytes) y declaro la dirección del dispoitivo i2c, la dirección de la página en la eeprom, así como el puntero "data" y el byte "lenght"
{
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;//Declara "c" como un byte
for ( c = 0; c < length; c++) // incrementa "c" siempre que esté entre 0 y "lenght"
Wire.write(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) // Leo un byte y declaro la dirección del dispositivo i2c, así como la dirección de la eeprom donde voy a leer
{
byte rdata = 0xFF; // Declaro el byte "rdata" como el primer byte del LSB
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;
}
void setup()
{
char somedata[] = "Hola CIFPN1"; //cadena a escribir
Wire.begin(); //es obligatorio inicializar la conexion
Serial.begin(9600);
i2c_eeprom_write_page(0x50, 0, (byte *)somedata, sizeof(somedata)); //escribir la cadena al principio de la EEPROM; comentar esta linea para probar que la memoria es no volatil
delay(10); //pequeña pausa despues de escribir en la memoria
lcd.begin(16, 2);
lcd.print(somedata);
}
void loop()
{
int addr=0; //direccion a leer
byte b = i2c_eeprom_read_byte(0x50, 0); //acceso a la primera posicion de memoria
while (b!=0)
{
Serial.print((char)b); //enviar al ordenador
addr++; //siguiente direccion
b = i2c_eeprom_read_byte(0x50, addr); //acceso a posicion de memoria
}
Serial.println();
delay(500);
}
///////////////////////////////////////////////
And now is time to run the simulation and check the results:
We can see the memory and virtual terminal is empty
And now we can see we write in the memory and LCD screen at the same time we read as we can see in the virtual terminal.
No hay comentarios:
Publicar un comentario