Cómo utilizar Arduino EEPROM para guardar datos entre ciclos de potencia

¿Sabía que Arduino puede almacenar datos cuando está apagado? Estoy hablando de EEPROM, así que únete a mí y te enseño cómo leer y escribir en él.

¿Sabía que Arduino puede almacenar datos cuando está apagado?  Estoy hablando de EEPROM, así que únete a mí y te enseño cómo leer y escribir en él.
Anuncio

¿Sabía que Arduino puede almacenar datos cuando está apagado? No es el boceto almacenado en la memoria flash. Estoy hablando de datos variables en la EEPROM. Únete a mí mientras te enseño a leer y escribir, y lo que puede hacer por tus proyectos.

Si eres nuevo en Arduino, asegúrate de consultar nuestra guía para principiantes Comenzar con Arduino: una guía para principiantes Comenzar con Arduino: una guía para principiantes Arduino es una plataforma de prototipos de electrónica de código abierto basada en hardware flexible y fácil de usar y software. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas .

¿Qué es EEPROM?

EEPROM significa memoria de solo lectura programable y borrable eléctricamente . Es un tipo de memoria no volátil. No te preocupes si no entiendes lo que significa eso. Simplemente almacena datos incluso con la potencia eliminada (a diferencia de RAM). Guía rápida y sucia de RAM: lo que necesita saber. Una guía rápida y sucia de RAM: lo que necesita saber. La RAM es un componente crucial de todas las computadoras, pero puede Ser confuso de entender si no eres un gurú de la tecnología. En esta publicación, lo desglosamos en términos fáciles de comprender. Leer más, que necesita electricidad para retener cualquier dato).

Disparo de ejemplo EEPROM

EEPROM está integrado en una gran cantidad de procesadores, como la matriz de compuertas programables en campo (FPGA) utilizada en Matrix Creator Matrix Creator para Raspberry Pi Review Matrix Creator para Raspberry Pi Review. Matrix Creator es una navaja suiza para su Pi, con 15 sensores, un conjunto de protocolos de comunicación, un anillo de LED RGB, una matriz de micrófonos, ¡y más! Leer más Pi HAT. Todos los Arduinos tienen EEPROM disponible, pero la capacidad varía según el modelo. Asegúrese de echar un vistazo a nuestra guía de compras Guía de compra de Arduino: ¿Qué placa debería obtener? Guía de compra de Arduino: ¿Qué placa debería obtener? Hay tantos tipos diferentes de tableros Arduino que hay, se te perdonaría por estar confundido. ¿Qué debería comprar para su proyecto? ¡Permítanos ayudarlo con esta guía de compra de Arduino! Lea más para más detalles sobre cada tablero.

¿Como funciona?

La EEPROM se borra eléctricamente y se programa utilizando el túnel Fowler-Nordheim . No necesita conocer los detalles técnicos para poder usarlo. La premisa básica es que la electricidad se usa para cambiar los datos binarios (¿qué es binario? ¿Qué es binario? [Tecnología explicada] ¿Qué es binario? [Tecnología explicada] Dado que el binario es absolutamente fundamental para la existencia de computadoras, parece extraño que nunca antes habíamos abordado el tema, así que hoy pensé en dar una breve descripción de lo binario ... Leer más). Se puede leer, borrar y volver a escribir electrónicamente.

Afortunadamente, el lenguaje Arduino facilita el cambio de datos, todo sin necesidad de un título en informática.

EEPROM Close Up

Esperanza de vida

Si bien es fácil de usar EEPROM en el Arduino, tiene una vida limitada. EEPROM está especificado para manejar 100, 000 ciclos de lectura / borrado. Esto significa que puede escribir y luego borrar / volver a escribir datos 100.000 veces antes de que la EEPROM se vuelva inestable. En realidad, los semiconductores de Atmel (los fabricantes de Arduino "Chip") pueden manejar un número mayor o menor de ciclos, dependiendo de las tolerancias de cada uno de los procesadores.

EEPROM Close Up

Una vez que una ubicación se ha escrito y borrado demasiadas veces, puede comenzar a volverse poco confiable. Es posible que no devuelva los datos correctos o que devuelva el valor de un bit contiguo.

Esto puede sonar como una gran cantidad de escrituras, pero puede ser fácil llegar a este límite si lee y escribe mediante programación (en un ciclo, por ejemplo). Leer datos no degrada el silicio, solo la escritura lo hace . ¡Puede leer datos de EEPROM tanto como quiera sin miedo!

Es importante tener en cuenta que este límite se aplica a cada ubicación de memoria. Su Arduino puede tener 1, 000 o más ubicaciones de memoria disponibles en EEPROM, por lo que si escribe demasiadas veces en una ubicación, solo será afectada por esa ubicación, y no por ninguna de las otras. Más adelante analizaré la nivelación del desgaste, que puede reducir el desgaste EEPROM mediante la distribución de datos de manera uniforme - algo que los SSD Cómo estimar la vida útil restante de su SSD Cómo estimar el tiempo de vida restante de su SSD Todos los SSD tienen una vida útil limitada debido a la escritura ciclos (aunque esta duración es mucho más larga de lo que piensas). Así es como puede estimar qué tan cerca está del final. Leer más hacer uso de.

¿Para qué sirve?

EEPROM es increíblemente útil para sus proyectos Arduino. Como recuerda los datos incluso cuando se elimina la energía, puede almacenar el estado del Arduino. ¡Tal vez podrías construir una torreta láser Pew Pew! Cómo construir una torreta láser con un Arduino Pew Pew! Cómo construir una torreta láser con un Arduino ¿Estás aburrido? También podría construir una torreta láser. Lea más que recuerda su posición o la cantidad de "munición" que queda. Puede usarlo para controlar sus electrodomésticos. Controle los electrodomésticos desde Arduino: el inicio de los dispositivos de control de domótica desde Arduino: el inicio de la automatización del hogar La última vez le mostré algunas maneras de controlar el habla de sus proyectos Arduino a través de SiriProxy, OS Elementos hablables incorporados de X, y algunas secuencias de comandos de Automator, o incluso un chip de hardware de reconocimiento de voz dedicado. Yo ... Leer más, y registrar cuántas veces se activó su dispositivo.

EEPROM es más adecuado para cosas como configuraciones o puntajes altos. Si desea escribir datos complejos con regularidad, tal vez considere un escudo de Ethernet. Déle a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet. Déle a su proyecto Arduino su propio mini servidor web, con un escudo Ethernet. Hace un tiempo, le mostré cómo para configurar un sistema de control de Internet para su Arduino, pero tenía que estar conectado a una computadora a través de USB para mantener la conexión a Internet .... Leer más (con ranura SD incorporada) o Raspberry Pi Raspberry Pi: El Tutorial no oficial Raspberry Pi: el tutorial no oficial Ya sea que sea propietario actual de Pi y quiera obtener más información o sea un potencial propietario de este dispositivo de tamaño de tarjeta de crédito, esta no es una guía que quiera perderse. Lee mas .

EEPROM Close Up

Lee y escribe

Ahora que la teoría está fuera del camino, veamos cómo leer y escribir algunos datos. Primero, incluye la biblioteca (viene con el IDE de Arduino):

#include 

Ahora escribe algunos datos:

 EEPROM.write(0, 12); 

Esto escribe el número 12 en la ubicación EEPROM 0 . Cada escritura lleva 3, 3 milisegundos ( ms, 1000 ms = 1 segundo). Observe cómo no puede escribir letras ( char ), solo se permiten los números de cero a 255. Esta es la razón por la que EEPROM es ideal para ajustes o puntajes altos, pero no tan bueno para nombres de jugadores o palabras. Es posible almacenar texto utilizando este método (puede asignar cada letra del alfabeto a un número), sin embargo, necesitará tener varias ubicaciones de memoria, una ubicación para cada letra.

Así es como lees esos datos:

 EEPROM.read(0); 

Zero es la dirección que escribiste anteriormente. Si no ha escrito antes en una dirección, devolverá el valor máximo ( 255 ).

Hay algunos métodos ligeramente más útiles disponibles. Supongamos que desea almacenar un lugar decimal o una cadena:

 EEPROM.put(2, "12.67"); 

Esto escribe los datos en varias ubicaciones, algo que sería fácil de escribir usted mismo, pero útil a pesar de todo. ¡Aún necesitará realizar un seguimiento de la cantidad de ubicaciones en las que ha escrito esto para que no sobrescriba accidentalmente sus datos! Tienes que usar el método get para recuperar estos datos nuevamente:

 float f = 0.00f; EEPROM.get(2, f); 

El valor de get se almacena en la variable float f . Observe cómo esto se inicializa con 0.00f como valor. La función le permite al compilador saber que es posible que desee almacenar un número grande en esta variable, por lo que configura algunas configuraciones adicionales durante la compilación.

La documentación EEPROM en el sitio web Arduino tiene muchos más ejemplos.

Nivelación de desgaste

La nivelación del desgaste es una técnica utilizada para reducir el desgaste y aumentar la vida útil de EEPROM. Si solo está trabajando en un proyecto pequeño, es posible que no tenga que preocuparse por esto.

EEPROM Close Up

Lo más simple que puede hacer para preservar la vida de EEPROM es limitar sus escrituras a una ubicación particular. Puede hacerlo leyendo la dirección primero, y si el valor que desea escribir ya está presente, no es necesario volver a escribirlo (recuerde, leer datos no hace daño). Así es como lo harías:

 int safeWrite(int data, address) { if(EEPROM.read(address) != data) { EEPROM.write(address, data); } } 

Es un código bastante simple, ¡pero solo funciona para enteros! En lugar de reinventar la rueda, use la función integrada en la biblioteca EEPROM de Arduino:

 EEPROM.update(address, val); 

Este método tiene exactamente la misma firma que el método de escritura, ¡aunque puede reducir drásticamente la cantidad de escrituras necesarias!

Si necesita escribir muchos datos y está preocupado por gastar el silicio, puede realizar un seguimiento de la cantidad de escrituras que realiza, aunque esto requiere más datos. Aquí hay una implementación aproximada en pseudocódigo:

 var address = 0 var writeCount = 0 if(writeCount>75, 000) writeCount = 0 address += 1 EEPROM.write(address, data) 

Necesitará almacenar la dirección y writeCount en EEPROM (y writeCount tendrá que dividirse entre ubicaciones de direcciones). La mayoría de las veces, este nivel de protección no será necesario. Los Arduinos también son muy baratos, por lo que es más fácil comprar una copia de seguridad.

Ahora debería saber lo suficiente como para hacer algunos proyectos increíbles. Háganos saber si hace algo genial! ¿Puedes reconocer todos los dispositivos en las imágenes? ¡Déjanos un comentario abajo!

In this article