Go Down

Topic: Eeprom (Read 2384 times) previous topic - next topic

jcernuda95

Buenas, he estado programando un Arduino para que escriba y lea números en una memoria Eeprom.
Hasta ahora y como ya he dicho, solo he introducido números, me gustaría saber si hay alguna forma de introducir cadenas de texto en estas memorias.
Estoy usando un Arduino Duermilanove y una memoria Eeprom 252LC256, hasta ahora he programado usando la libreria EEPROM.h.
Espero haberme explicado bien.
Agradeciendo de antemano una respuesta.

SrDonGato

con esa libreria lees o escribes la memoria eeprom interna.

la que comentas imagino es I2C, tienes que hacer el protocolo para leer y escribir.

si quieres escrirbir cadenas tienes que hacerlo byte a byte, y al leerlo tambien

la libreria wire.h es la que te hace falta
un saludo

jcernuda95

#2
Feb 12, 2012, 12:25 pm Last Edit: Feb 12, 2012, 12:40 pm by jcernuda95 Reason: 1
Y podría alguien darme una idea general de como se podría programar el arduino para que guarde datos en una memoria Eeprom externa
Gracias
Actualización
Si miramos el código de esta página
http://www.arduino.cc/playground/Code/I2CEEPROM
Entiendo la gran mayoría del código, entiendo que en el Setup escribe un texto, y luego en el loop lee los bits y los transforma a char.
Luego las funciones entiendo que hacen lo siguiente, corriganme si me equivoco,
i2c_eeprom_write_byte: escribe un byte que le das en una dirección de memoria concreta de una eeprom concreta.
i2c_eeprom_write_page: escribe una cadena de texto o algo que ocupe más de un byte en una direccion de memoria concreta de una eeprom concreta.
i2c_eeprom_read_byte: lee una direccion de memoria concreta de una eeprom concreta.
void i2c_eeprom_read_buffer: lee una cadena de texto o algo que ocupe más de un byte en una direccion de memoria concreta de una eeprom concreta.

Mi problema, es que no entiendo porque usa para leer la cadena que ha guardado con i2c_eeprom_write_page la funcion i2c_eeprom_read_byte con un while en vez de usar la funcion void i2c_eeprom_read_buffer.
Para acabar y siento la longitud del post, como se determinaría el deviceadress de mi eeprom, en el codigo indican que es el 0x50 pero cambia de eeprom a eeprom??

Espero haberme explicado bien y que me puedan contestar.

SrDonGato

mirate el datasheet del dispositivo que tienes de memoria para saber bien como funciona

este tipo de memoria se les puede configurar la direccion, tiene 2 o 3 patillas para poner la direccion, segun estén a 0 o 1 ( cero o cinco voltios) tiene una direccion u otra, esto lo puedes ver en el datasheet.

el protocolo para leer o escribir, es primero llamar al dispositivo, entregarle la direccion a partir de la cual quieres leer o escribir, y leer o escribir un número de bytes.

tal como lo hace el codigo que está en esa web lo hace con un solo byte, pero muchas veces, es menos eficiente pero funciona.
i2c_eeprom_read_byte(0x50, 0);
lee un byte a partir de la direccion 0

i2c_eeprom_write_page(0x50, 0, (byte *)somedata, sizeof(somedata));
escribe a partir de la direccion la cadena completa byte a byte


jcernuda95

Muchísimas gracias ahora me planteas una duda,
Creo haber entendido que aunque se puede leer de dos maneras, la que mejor función (no la más eficiente) es i2c_eeprom_read_byte.
Luego, si quisiésemos guardar una cadena de texto usaríamos la función i2c_eeprom_write_page mientras que si quisiésemos grabar un único número entre o y 255 podríamos usar i2c_eeprom_write_byte
Es así???
Espero no haber molestado mucho y gracias otra vez tanto por las respuestas como por la velocidad de las mismas

ASTROCAR

Hola buenos dias, primero hay que definir bien el protocolo que estas usando segun tu memoria eeprom externa.

la serie 24cxxx son de protocolo I2C.
la serie 25cxxx son de protocolo SPI
la serie 93Cxx son de protocolo MICROWARE


ya definido el protocolo de tu eeprom debes bajar el datasheets y entender los proceso de lectura y escritura en el caso de los spi y microware tiene que tener mucho encuenta los OPCODE para el proceso que deseeshacer con dicha eeprom que estes manejando y en las I2C es de mucha importancia saber su paginado (bloque).

Saludos y cualquier cosa estamos en contacto.

Go Up