La EEPROM es una memoria interna del microcontrolador que permite almacenar datos después de reiniciar la tarjeta. Cuando se trabaja con microcontroladores, es útil mantener los datos en la memoria, especialmente cuando la tarjeta se apaga, ya sea intencionalmente o no, como en el caso de una pérdida de energía eléctrica.
Hardware
- Computador
- Arduino UNO
- Cable USB A macho a B macho
Principio de funcionamiento
La EEPROM es una ubicación de memoria especial del microcontrolador. Es un conjunto de registros en los que se almacenan datos que permanecen en la memoria incluso después de apagar la tarjeta. Es una memoria de «sólo lectura» comparada con la memoria de «acceso aleatorio» (como la RAM) que se borra en cada ciclo de encendido. El tamaño de la memoria varía según el microprocesador de la tarjeta.
Limitación de la EEPROM
Una cosa importante a tener en cuenta es que la EEPROM tiene un tamaño y una vida útil limitados. Las células de memoria pueden ser leídas tantas veces como sea necesario, pero el número de ciclos de escritura está limitado a 100.000. Es aconsejable prestar atención al tamaño de los datos almacenados y a la frecuencia con que se desea actualizarlos.
Si desea registrar los datos de una flota de sensores en tiempo real para trazar curvas, lo mejor es recurrir a un módulo de tarjeta SD para almacenar los datos.
Código
Para interactuar con la EEPROM, usamos la biblioteca EEPROM.h que permite escribir y leer datos en la memoria. Para esto usaremos dos funciones:
- put() para escribir
- get() para leer
- No lo usaremos aquí, pero, EEPROM.update() permite escribir un valor sólo si es diferente para salvar la vida del EEPROM.
Se pueden utilizar otras funciones de la biblioteca dependiendo de cómo se utilice la EEPROM.
//Libraries #include <EEPROM.h>//https://www.arduino.cc/en/Reference/EEPROM void setup(){ //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Write data into eeprom int address = 0; int boardId = 18; EEPROM.put(address, boardId); address += sizeof(boardId); //update address value float param = 26.5; EEPROM.put(address, param); //Read data from eeprom address = 0; int readId; EEPROM.get(address, readId); Serial.print("Read Id = "); Serial.println(readId); address += sizeof(readId); //update address value float readParam; EEPROM.get(address, readParam); Serial.print("Read param = "); Serial.println(readParam); } void loop(){}
Resultado
Los valores leídos se corresponden bien con los valores registrados. Puedes quitar la parte de escritura y reiniciar el código para comprobar que los valores están almacenados.
Aplicaciones
- Manteniendo la dirección IP o I2C de una tarjeta Arduino en la memoria
Fuentes
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código