09/08/2011
La memoria EEPROM (Electrically Erasable Programmable Read-Only Memory) es un componente fundamental en la programación de microcontroladores Arduino. A diferencia de la memoria RAM, la EEPROM es no volátil, lo que significa que conserva los datos incluso después de que se desconecta la alimentación. Esta característica la hace ideal para almacenar configuraciones, ajustes y otros datos que deben persistir entre sesiones de funcionamiento.
Qué es la EEPROM en Arduino
El microcontrolador ATmega328P, utilizado en placas Arduino UNO, Nano y otras, dispone de 1024 bytes (1 KB) de memoria EEPROM. Es importante destacar que la EEPROM tiene un número limitado de ciclos de escritura (aproximadamente 100.000), por lo que no es adecuada para operaciones frecuentes de escritura. Su propósito principal es el almacenamiento persistente de información.
La velocidad de escritura en la EEPROM es significativamente menor que en la RAM. Una operación de escritura puede tardar alrededor de 3 ms, mientras que la RAM opera a velocidades mucho más altas (20 MHz). Por esta razón, es crucial evitar escribir en la EEPROM dentro del bucle loop()para prevenir un desgaste prematuro.
Librería EEPROM.h en Arduino
Para interactuar con la memoria EEPROM desde Arduino, se utiliza la librería EEPROM.h. Esta librería proporciona las funciones necesarias para leer y escribir datos en la EEPROM. La librería se incluye en el código utilizando la directiva #include <EEPROM.h>al inicio del programa.
Funciones Principales de la Librería EEPROM.h
La librería EEPROM.hofrece una variedad de funciones para gestionar la memoria EEPROM. A continuación, se detallan las más importantes:
EEPROM.read()
Esta función lee un byte de la EEPROM desde una dirección específica. Todas las posiciones de memoria se inicializan con el valor 255 (0xFF).
Sintaxis:
EEPROM.read(direccion)
Parámetros:
direccion: Posición de memoria (de 0 a 1023).
Ejemplo: Leer y mostrar el contenido de la EEPROM:
#include <EEPROM.h>void setup() { Serial.begin(9600); for (int i = 0; i < 1024; i++) { Serial.print(i); Serial.print(" = "); Serial.println(EEPROM.read(i)); }}void loop() {}EEPROM.write()
Esta función escribe un byte en una dirección específica de la EEPROM.
Sintaxis:
EEPROM.write(direccion, valor)
Parámetros:
direccion: Dirección de memoria (0 a 1023).valor: Valor a escribir (entero entre 0 y 255).
Ejemplo: Escribir valores en la EEPROM:
#include <EEPROM.h>void setup() { for (int i = 0; i < 256; i++) { EEPROM.write(i, i); }}void loop() {}EEPROM.update()
Similar a EEPROM.write(), pero solo escribe el valor si es diferente al valor existente en la dirección de memoria. Esto ayuda a ahorrar ciclos de escritura.
Sintaxis:
EEPROM.update(direccion, valor)
EEPROM.put()
Permite escribir datos de cualquier tipo en la EEPROM. Es más versátil que EEPROM.write().
Sintaxis:
EEPROM.put(direccion, valor)
Ejemplo: Escribir un dato tipo float:
#include <EEPROM.h>void setup() { float miFloat = 14159; EEPROM.put(0, miFloat);}void loop() {}EEPROM.get()
Lee datos de cualquier tipo desde la EEPROM.

Sintaxis:
EEPROM.get(direccion, variable)
Ejemplo: Leer un dato tipo float:
#include <EEPROM.h>void setup() { float miFloat; EEPROM.get(0, miFloat); Serial.println(miFloat);}void loop() {}Operador EEPROM[]
Permite acceder a la EEPROM como una matriz.
Sintaxis:
EEPROM[direccion]
Ejemplo:
#include <EEPROM.h>void setup() { EEPROM[0] = 10; Serial.println(EEPROM[0]);}void loop() {}Consideraciones al Usar la EEPROM
- Limitaciones de Escritura: Recuerda que la EEPROM tiene un número limitado de ciclos de escritura. Evita escribir datos con demasiada frecuencia.
- Velocidad: La escritura en la EEPROM es lenta en comparación con la RAM.
- Manejo de Errores: Siempre es recomendable implementar mecanismos de manejo de errores para garantizar la integridad de los datos.
Tabla Comparativa de Funciones EEPROM
| Función | Descripción | Tipo de dato |
|---|---|---|
EEPROM.read() | Lee un byte | byte |
EEPROM.write() | Escribe un byte | byte |
EEPROM.update() | Escribe un byte solo si es diferente | byte |
EEPROM.put() | Escribe cualquier tipo de dato | Cualquier tipo |
EEPROM.get() | Lee cualquier tipo de dato | Cualquier tipo |
EEPROM[] | Acceso a la EEPROM como array | byte |
Consultas Habituales sobre la Librería EEPROM
- ¿Cómo descargar la librería EEPROM? La librería
EEPROM.hviene incluida por defecto en el IDE de Arduino, por lo que no es necesario descargarla. - ¿Cómo leer un entero de la EEPROM? Puedes usar
EEPROM.get()para leer un entero. - ¿Cómo escribir un string en la EEPROM? Debes dividir el string en bytes individuales y escribirlos uno por uno usando
EEPROM.write()oEEPROM.put(). - ¿Cómo evitar errores al usar la EEPROM? Implementa manejo de errores, verifica los límites de dirección y evita escribir con demasiada frecuencia.
Con esta tutorial, estarás preparado para utilizar la librería EEPROM en tus proyectos Arduino y aprovechar al máximo las capacidades de almacenamiento persistente de tus microcontroladores.
Si quieres conocer otros artículos parecidos a Descargar librería eeprom arduino puedes visitar la categoría Libros y Librerías.
