Cómo utilizar eeprom de arduino para guardar los datos entre los ciclos de potencia
Vídeo: EEPROM de Arduino
¿Sabías que la Arduino puede almacenar datos cuando se apaga? No es el boceto almacenado en la memoria flash. Estoy hablando de datos variables en la EEPROM. Únete a mí como yo os muestro cómo leer y escribir en él, y lo que puede hacer para sus proyectos.
Si eres nuevo en Arduino, asegúrese de comprobar nuestra Guía para principiantes.Primeros pasos con Arduino: una guía para principiantesPrimeros pasos con Arduino: una guía para principiantesArduino es una plataforma electrónica de prototipos de código abierto basado en flexible y fácil de usar hardware y software. Está pensado para artistas, diseñadores, aficionados y cualquier persona interesada en la creación de objetos interactivos o ambientes.Lee mas
¿Qué es la memoria 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 usted no entiende lo que significa nada de eso. Es simplemente almacena los datos incluso con el poder eliminado (a diferencia RAM, que necesitan electricidad para retener ningún dato).
EEPROM está construido en una miríada de procesadores, tales como la matriz de puertas programable en campo (FPGA) usado en la Creador de matriz SOMBRERO Pi. Todos Arduino tienen EEPROM disponibles, pero la capacidad varía según el modelo. Asegúrese de que usted echa un vistazo a nuestra guía de compra para más detalles acerca de cada tablero.Creador matriz para Raspberry Pi revisiónCreador matriz para Raspberry Pi revisiónLa matriz Creator es una navaja suiza para su Pi, con 15 sensores, un conjunto de protocolos de comunicación, un anillo de LEDs RGB, un conjunto de micrófonos, y mucho más!Lee mas
¿Como funciona?
EEPROM se borra eléctricamente y programado usando Fowler-Nordheim túnel. No es necesario conocer los detalles técnicos para poder utilizarlo. La premisa básica es que la electricidad se usa para cambiar los datos binarios (lo que es binaria). Puede ser leído, borrado y reescrito por vía electrónica.
Afortunadamente, el Arduino lenguaje hace que sea fácil cambiar los datos, todo ello sin necesidad de un título en informática.
Esperanza de vida
Si bien es fácil de usar EEPROM en el Arduino, que sí tiene una vida limitada. EEPROM se especifica para manejar 100.000 lectura / ciclos de borrado. Esto significa que puede escribir y luego borrar / re-escritura de datos 100.000 veces antes de la EEPROM se volverá inestable. En realidad, Atmel (los fabricantes del Arduino “Chip”) semiconductores pueden manejar un número mayor o menor de ciclos, dependiendo de las tolerancias de todos y cada procesador.
Una vez que un lugar se ha escrito y borrado demasiadas veces se puede empezar a no ser fiable. Puede que no devolver los datos correctos, o devolver el valor de un bit de la vecina.
Vídeo: Registrar posiciones de un SERVOMOTOR con ARDUINO y memoria EEPROM
Esto puede sonar como una gran cantidad de escrituras, pero puede ser fácil llegar a este límite si la lectura y escritura de programación (en una lazo, por ejemplo). La lectura de datos no se degrada el silicio, única escritura hace. Usted puede leer los datos de la EEPROM tanto como desee sin miedo!
Es importante señalar que este límite se aplica a cada posición de memoria. Arduino puede tener 1.000 o más posiciones de memoria disponibles en la EEPROM, por lo que si se escribe también muchas veces a un solo lugar, es sólo ese lugar afectado, y no cualquiera de los otros. Más adelante voy a estar discutiendo nivelación de desgaste, lo que puede reducir el desgaste EEPROM mediante la distribución de los datos de manera uniforme - algo que Los SSD hacer uso de.Cómo estimar la vida útil restante de su SSDCómo estimar la vida útil restante de su SSDTodos los SSD tienen una vida útil limitada debido a ciclos de escritura (aunque esto es vida útil mucho más larga de lo que parece). He aquí cómo se puede estimar qué tan cerca está el final.Lee mas
Lo que es útil para?
EEPROM es increíblemente útil para sus proyectos de Arduino. Como se recuerda los datos incluso cuando se desconecta la alimentación, se puede almacenar el estado de la Arduino. Tal vez usted podría construir una torreta láser que recuerda su posición o la cantidad de “munición” es restante. Usted puede usarlo para controlar sus aparatos, log cuántas veces se activó su aparato.
EEPROM es el más adecuado para cosas como la configuración o de alta puntuación. Si desea escribir regularmente datos complejos, tal vez considere una ethernet Shield (Con una función de ranura SD) o una frambuesa Pi.Dar a su proyecto Arduino su propio mini-servidor web, con un escudo de EthernetDar a su proyecto Arduino su propio mini-servidor web, con un escudo de EthernetHace un tiempo, he mostrado cómo configurar un sistema de control de Internet para su Arduino - pero tenía que estar conectados a un ordenador a través de USB con el fin de mantener la conexión a Internet ....Lee mas
Lee y escribe
Ahora que la teoría está fuera del camino, vamos a ver cómo leer y escribir algunos datos! En primer lugar, incluir la librería (esto viene con el IDE de Arduino):
#incluir lt;EEPROM.maridogt;
Ahora escriba algunos datos:
EEPROM.escribir(0, 12)-
Esto escribe el número 12 a la ubicación EEPROM 0. Cada toma de escritura 3.3 milisegundos (Sra, 1000 ms = 1 segundo). Observe cómo no se puede escribir cartas (carbonizarse), Sólo se permiten los números de cero a 255. Esta es la razón por la EEPROM es ideal para entornos o puntuaciones más altas, pero no tan bueno para los nombres de jugadores o palabras. Es posible almacenar texto usando este método (se puede asignar cada letra del alfabeto a un número), sin embargo, tendrá que tener múltiples posiciones de memoria - un lugar para cada letra.
Así es como se lee que los datos:
EEPROM.leer(0)-
Cero es el domicilio que haya señalado anteriormente. Si usted no ha escrito a una dirección antes, se devolverá el valor máximo (255).
Hay algunos métodos poco más útiles disponibles. Di que quieres almacenar un decimal o una cadena:
EEPROM.poner(2,"12.67")-
Esto escribe los datos en múltiples ubicaciones - algo que sería fácil escribir usted mismo, pero es práctico, no obstante. Usted todavía tendrá que hacer un seguimiento de cómo muchos lugares esto ha escrito a, por lo que no accidentalmente sobrescribir sus datos! Usted tiene que utilizar la obtener Método para recuperar estos datos de nuevo:
float f = 0.00f-EEPROM.obtener(2, F)-
El valor desde get se almacena en el flotador F variable. Observe cómo se inicializa con 0.00f como el valor. los F permite que el compilador sabe que es posible que desee almacenar una gran cantidad de esta variable, por lo que en ella se establece algunas configuraciones adicionales durante la compilación.
La documentación EEPROM en el sitio web de Arduino tiene un montón más ejemplos.
Nivelación de desgaste
De nivelación de desgaste es una técnica utilizada para reducir el desgaste y aumentar la vida útil de la EEPROM. Si sólo está trabajando en un proyecto pequeño, puede que no tenga que preocuparse por esto.
Lo más sencillo que puede hacer para preservar la vida de la EEPROM es limitar sus escrituras en un lugar determinado. Usted puede hacer esto mediante la lectura de la dirección de la primera, y si el valor que desea escribir ya está presente, no hay necesidad de escribir de nuevo (recuerde, la lectura de datos no hace daño). He aquí cómo usted haría lo siguiente:
int safeWrite(datos int, dirección) {Si(EEPROM.leer(dirección) != datos) {EEPROM.escribir(dirección, datos)-}}
Ese es un poco simple de código, sin embargo, sólo funciona para los números enteros! En lugar de reinventar la rueda, utilice la función integrada en la biblioteca de Arduino EEPROM:
EEPROM.actualizar(dirección, val)-
Este método tiene exactamente la misma firma que la escribir método, aunque puede reducir drásticamente el número de escrituras necesarias!
Si tiene que escribir una gran cantidad de datos, y se trata sobre el uso de la silicona, se puede mantener un registro de cuántas escrituras que haces, aunque esto utiliza más datos. He aquí una aplicación áspera en pseudocódigo:
dirección var = 0writeCount var = 0Si(writeCount gt; 75,000)writeCount = 0dirección += 1EEPROM.escribir(dirección, datos)
Usted tendrá que almacenar la dirección y writeCount en la EEPROM (y writeCount tendrá que estar divididos en las ubicaciones de direcciones). La mayoría de las veces, no será necesario este nivel de protección. Arduino son tan barato, así que puede que le resulte más fácil comprar una copia de seguridad!
Ahora debería saber lo suficiente como para hacer algunos proyectos impresionantes. Háganos saber si usted hace algo fresco! Se puede reconocer todos los dispositivos en las fotos? ¡Déjanos un comentario abajo!