Como almacenar datos en la EEPROM de Arduino

Publicado por Loli Diéguez en

En este articulo te cuento qué es la EEPROM de Arduino y para qué sirve. También te enseño cómo escribir y leer desde la EEPROM.

Cuando recopilas o generas datos en tu sketch y los almacenas en un microcontrolador, como el de un Arduino, los datos solo estarán disponibles mientras el microcontrolador esté encendido. Tan pronto como desconectes el enchufe y el microcontrolador pierda energía, estos datos se borrarán. Esto es lo que llamamos memoria volátil . Esto funciona de la misma manera que la memoria RAM en tu PC.

memoria RAMSi quieres mantener esos datos almacenados para su uso futuro, debes utilizar la EEPROM de Arduino, en esta memoria, los datos de las variables se mantienen incluso si apagas y enciendes Arduino.

 

¿Que es la EEPROM?

El microcontrolador en la placa Arduino (ATMEGA328 en el caso de Arduino UNO, como muestro en la siguiente imagen) tiene una memoria EEPROM, que es una memoria de solo lectura programable y borrable eléctricamente, es un tipo de memoria no volátil utilizada en Ordenadores. Esta memoria es un pequeño espacio que puedes utilizar para almacenar variables.

Las variables almacenadas en la EEPROM se mantienen, incluso cuando reinicias o apagas tu placa Arduino. La EEPROM es un almacenamiento permanente, similar a un disco duro.

ATMEGA ATMEL

 

La EEPROM puede leerse, borrarse y reescribirse electrónicamente. En Arduino, puedes leer y escribir desde la EEPROM fácilmente utilizando la biblioteca EEPROM.

 

¿Cuantos datos (bytes) puede almacenar?

Cada posición EEPROM puede guardar un byte, lo que significa que solo puede almacenar números de 8 bits, que incluyen valores enteros entre 0 y 255.

Los bytes que puedes almacenar en EEPROM dependen de los microcontroladores en las placas Arduino. En esta tabla, te muestra las diferentes opciones según el microcontrolador:

ATmega328 (Arduino Uno, Nano, Mini) 1024 bytes
ATmega168 (Arduino Nano) 512 bytes
ATmega2560 (Arduino Mega) 4096 bytes

 

Y si necesitas almacenar más datos, puede emplear una EEPROM externa, estas suelen comunicarse mediante protocolos como I²C, SPI y Microwire.

Vida útil de la EEPROM

La EEPROM no tiene una vida infinita. En Arduino, la EEPROM está especificada para manejar 100.000 ciclos de escritura/borrado para cada posición. Sin embargo, las lecturas son ilimitadas. Esto significa que puedes leer de la EEPROM tantas veces como quieras sin comprometer su esperanza de vida.

Como usar la EEPROM en ARDUINO

La EEPROM es útil en los proyectos de Arduino en los que necesitas conservar los datos incluso cuando Arduino se reinicia o cuando quitas la alimentación pero necesitas recordar el último estado de una variable o recordar cuántas veces se activó un dispositivo.

Por ejemplo, imagina el siguiente escenario:

  • Estás controlando una cerradura con tu Arduino y cambias su estado de cerrada a abierta.
  • En ese momento, Arduino pierde energía y se apaga.
  • Cuando la placa recupera la energía, la cerradura sin embargo, estará  cerrada porque no sabe cual era su estado anterior.

Esto es una situación que no queremos tener en nuestro proyecto cuando estamos controlando algo, necesitamos que Arduino recuerde el estado de los elementos sobre los que actuamos aunque pierda la energía.

Para solucionar esto, puedes y debes hacer uso de la memoria EEPROM, y en tu código debes añadir unas lineas para verificar inicialmente si el estado de la cerradura corresponde al estado guardado anteriormente en la EEPROM.

En la memoria de Arduino hay que trabajar por direcciones y byte a byte donde almacenamos los datos y de donde los leeremos. Esto significa que para una memoria de 1kB, tienes mil bytes donde poder guardar tus datos, las direcciones de estos Bytes irán desde la 0 hasta la 999 y en cada byte podrás almacenar valores entre 0 a 255. En caso de que quieras guardar valores mayores tendrás que dividirlos por bytes y el acceso a ese dato sería mediante dos posiciones de memoria.

 

 

Como leer y escribir en la EEPROM en Arduino

Puedes leer y escribir fácilmente en la EEPROM utilizando la biblioteca EEPROM.

Lo primero que debes hacer es incluir la biblioteca EEPROM:

#include <EEPROM.h>


Escribir en la EEPROM

Para escribir datos en la EEPROM, usa la función EEPROM.write () que toma dos argumentos. El primero es la ubicación o dirección de EEPROM donde quieres guardar los datos, y el segundo es el valor que quieres guardar:

EEPROM.write (dirección, valor);

Por ejemplo, para escribir 9 en la dirección 0, tendrás que poner esto:

EEPROM.write (0, 9);

Leer en la EEPROM

Para leer un byte de la EEPROM, utiliza la función EEPROM.read () . Esta función toma la dirección del byte que quieres leer como argumento.

EEPROM.read (dirección);

Por ejemplo, para leer el byte almacenado previamente en la dirección 0:

EEPROM.read (0);

Esto devolvería 9 , que es el valor almacenado en esa ubicación.

 

Actualizar un valor en la EEPROM

La función EEPROM.update () es particularmente útil, solo escribe en la EEPROM si el valor escrito es diferente del que ya se guardó.

Como la EEPROM tiene una vida útil finita, debido a los ciclos limitados de escritura/borrado, el uso de esta función en lugar de EEPROM.write (), ahorra ciclos y conseguimos alargar la vida de esta memoria

Utiliza la función EEPROM.update () de la siguiente manera:

EEPROM.update (dirección, valor);

En este momento, tenemos un 9 almacenado en la dirección 0. Entonces, si usamos:

EEPROM.update (0, 9)

No volverá a escribir en la EEPROM, ya que el valor guardado actualmente es el mismo que queremos escribir.

 

Como ves, el uso de la EEPROM es muy sencillo y muy útil; te permitirá diseñar proyectos en los que todo funcione incluso si tienes fallos de energía, aunque recuerda que esta memoria tiene sus limites.


Compartir esta publicación



← Publicación más antigua Publicación más reciente →