Cómo usar Arduino EEPROM para guardar datos entre ciclos de energía

Cómo usar Arduino EEPROM para guardar datos entre ciclos de energía

¿Sabías que Arduino puede almacenar datos cuando está apagado? No el boceto almacenado en la memoria flash. Estoy hablando de datos variables en EEPROM. Únase a mí mientras le muestro cómo leer y escribir en él, y lo que puede hacer por sus proyectos.





Si es nuevo en Arduino, asegúrese de consultar nuestra Guía para principiantes .





¿Qué es EEPROM?

EEPROM significa Eléctricamente programable y borrable memoria de sólo lectura . Es un tipo de memoria no volátil. No se preocupe si no comprende lo que eso significa. Simplemente almacena datos incluso con la energía desconectada (a diferencia de RAM , que necesita electricidad para retener los datos).





EEPROM está integrado en una gran variedad de procesadores, como la matriz de puertas programables en campo (FPGA) que se utiliza en Matrix Creator Pi HAT. Todos los Arduinos tienen EEPROM disponible, pero la capacidad varía según el modelo. Asegúrese de consultar nuestra guía de compra para obtener más detalles sobre cada tabla.

¿Como funciona?

EEPROM se borra y programa eléctricamente usando Túneles de Fowler-Nordheim . No necesita conocer los detalles técnicos para poder utilizarlo. La premisa básica es que se usa electricidad para cambiar los datos binarios (lo que es binario). Puede leerse, borrarse y reescribirse electrónicamente.



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

Esperanza de vida

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





Una vez que una ubicación se ha escrito y borrado demasiadas veces, puede empezar a ser poco fiable. Puede que no devuelva los datos correctos o devuelva el valor de un bit vecino.

Esto puede parecer una gran cantidad de escrituras, pero puede ser fácil alcanzar este límite si se lee y se escribe mediante programación (en un círculo , por ejemplo). La lectura de 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 la 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 esa ubicación se verá afectada y no ninguna de las demás. Más tarde estaré discutiendo nivelación de desgaste , que puede reducir el desgaste de la EEPROM al distribuir los datos de manera uniforme, algo que utilizan los SSD.

¿Para qué sirve?

EEPROM es increíblemente útil para sus proyectos Arduino. Como recuerda los datos incluso cuando se quita la energía, puede almacenar el estado del Arduino. Tal vez podrías construir una torreta láser que recuerde su posición o cuánta 'munición' queda. Puede usarlo para controlar sus electrodomésticos y registrar cuántas veces se activó su electrodoméstico.

EEPROM es más adecuado para cosas como configuraciones o puntajes altos. Si desea escribir datos complejos con regularidad, tal vez considere un escudo ethernet (con ranura SD incorporada) o una Raspberry Pi.

Lee y escribe

Ahora que la teoría está fuera de lugar, ¡veamos cómo leer y escribir algunos datos! Primero, incluya la biblioteca (esto viene con el IDE de Arduino):

|_+_|

Ahora escribe algunos datos:

|_+_|

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

Así es como lee esos datos:

cómo quitar la voz en audacia
|_+_|

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

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

|_+_|

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

|_+_|

El valor de get se almacena en el flotador. F variable. Observe cómo esto se inicializa con 0.00f como el valor. los F le permite al compilador saber que es posible que desee almacenar un gran número en esta variable, por lo que establece algunas configuraciones adicionales durante la compilación.

los Documentación EEPROM sobre el Sitio web de 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.

Lo más simple que puede hacer para preservar la vida de la EEPROM es limitar sus escrituras a una ubicación en particular. Puede hacer esto 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ía:

|_+_|

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

|_+_|

Este método tiene exactamente la misma firma que el escribir método, aunque puede reducir drásticamente el número de escrituras necesarias.

Si necesita escribir una gran cantidad de datos y le preocupa gastar el silicio, puede realizar un seguimiento de cuántas escrituras hace, aunque esto usa más datos. Aquí hay una implementación aproximada en pseudocódigo :

|_+_|

Deberá almacenar la dirección y writeCount en EEPROM (y writeCount deberá dividirse entre las 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 puede que le resulte más fácil comprar una copia de seguridad.

Ahora debería saber lo suficiente 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!

Cuota Cuota Pío Correo electrónico 5 consejos para potenciar sus máquinas Linux VirtualBox

¿Cansado del bajo rendimiento que ofrecen las máquinas virtuales? Esto es lo que debe hacer para mejorar el rendimiento de VirtualBox.

Leer siguiente
Temas relacionados
  • Bricolaje
  • Arduino
  • Electrónica
Sobre el Autor Joe Coburn(136 Artículos publicados)

Joe es licenciado en Ciencias de la Computación por la Universidad de Lincoln, Reino Unido. Es un desarrollador de software profesional, y cuando no está volando drones o escribiendo música, a menudo se le puede encontrar tomando fotos o produciendo videos.

Más de Joe Coburn

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse