Anuncio

¿Sabías 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. Únase a mí mientras le muestro cómo leerlo y escribirle, y qué puede hacer para sus proyectos.

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

¿Qué es la 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 entiende lo que eso significa. Simplemente almacena datos incluso con el poder eliminado (a diferencia de RAM Una guía rápida y sucia de RAM: lo que necesita saberLa RAM es un componente crucial de cada computadora, pero puede ser confusa. Lo desglosamos en términos fáciles de entender que comprenderá.

instagram viewer
Lee mas , que necesita electricidad para retener cualquier dato).

Tiro de ejemplo EEPROM

EEPROM está integrado en una miríada de procesadores, como la matriz de compuerta programable en campo (FPGA) utilizada en el Matrix Creator Revisión de Matrix Creator para Raspberry PiMatrix Creator es una navaja suiza para su Pi, con 15 sensores, un conjunto de protocolos de comunicaciones, un anillo de LED RGB, una matriz de micrófonos y mucho más. Lee mas Pi HAT. Todos los Arduinos tienen EEPROM disponible, pero la capacidad varía según el modelo. Asegúrate de echar un vistazo a nuestro guía de compra Guía de compra de Arduino: ¿Qué placa debería obtener?Hay tantos tipos diferentes de placas Arduino por ahí, que te perdonarían por estar confundido. ¿Cuál deberías comprar para tu proyecto? Permítanos ayudarlo con esta guía de compra de Arduino. Lee mas para más detalles en cada tablero.

¿Como funciona?

EEPROM se borra eléctricamente y se programa usando 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 (que es binario ¿Qué es binario? [Tecnología explicada]Dado que el binario es tan fundamental para la existencia de las computadoras, parece extraño que nunca hayamos abordado el tema antes, así que hoy pensé que daría una breve descripción de qué binario ... Lee mas ). Se puede leer, borrar y reescribir electrónicamente.

Afortunadamente, el Lengua 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 se especifica 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 fabricantes del "Chip" de Arduino) los semiconductores pueden manejar un número mayor o menor de ciclos, dependiendo de las tolerancias de cada procesador.

EEPROM Close Up

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

Esto puede parecer muchas escrituras, pero puede ser fácil alcanzar este límite si lee y escribe mediante programación (en un lazo, por ejemplo). La lectura de datos no degrada el silicio, solo la escritura. ¡Puede leer datos de EEPROM tanto como quiera sin temor!

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 se verá afectada esa ubicación y no ninguna de las otras. Más adelante estaré discutiendo desgaste de nivelación, que puede reducir el desgaste de EEPROM mediante la distribución uniforme de datos, algo que SSD Cómo estimar la vida útil restante de su SSDTodos los SSD tienen una vida útil limitada debido a los ciclos de escritura (aunque esta vida útil es mucho más larga de lo que parece). Aquí le mostramos cómo puede estimar qué tan cerca está del final. Lee mas hacer uso de.

¿Para qué es útil?

EEPROM es increíblemente útil para sus proyectos Arduino. Como recuerda los datos incluso cuando se corta la alimentación, puede almacenar el estado del Arduino. Tal vez podrías construir un torreta láser Pew Pew! Cómo construir una torreta láser con un Arduino¿Estas aburrido? También podría construir una torreta láser. Lee mas que recuerda su posición o la cantidad de "munición" restante. Podrías usarlo para controla tus electrodomésticos Dispositivos de control de un Arduino: el comienzo de la automatización del hogarLa última vez, le mostré algunas formas de hacer que sus proyectos Arduino sean controlados por voz a través de SiriProxy, OS X's elementos hablables incorporados y algunas secuencias de comandos de Automator, o incluso un hardware de reconocimiento de voz dedicado chip. YO... Lee mas y registre cuántas veces se activó su dispositivo.

EEPROM es el más adecuado para cosas como configuraciones o puntajes altos. Si desea escribir regularmente datos complejos, tal vez considere un escudo de ethernet Dele a su proyecto Arduino su propio mini servidor web, con un escudo EthernetHace un tiempo, le mostré cómo configurar un sistema de control de Internet para su Arduino, pero tenía que permanecer conectado a una computadora a través de USB para mantener la conexión a Internet ... Lee mas (con ranura SD incorporada) o un Raspberry Pi Raspberry Pi: el tutorial no oficialSi usted es un propietario actual de Pi que desea obtener más información o un propietario potencial de este dispositivo del tamaño de una 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, incluya la biblioteca (esto viene con el IDE de Arduino):

#incluir 

Ahora escriba algunos datos:

EEPROM.write (0, 12);

Esto escribe el número 12 a la ubicación EEPROM 0. Cada escritura toma 3.3 milisegundos (Sra, 1000 ms = 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 los nombres o palabras de los jugadores. Es posible almacenar texto usando este método (puede asignar cada letra del alfabeto a un número), sin embargo, necesitará tener múltiples ubicaciones de memoria, una ubicación para cada letra.

Así es como lees esos datos:

EEPROM.read (0);

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

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

EEPROM.put (2, "12.67");

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

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

El valor de get se almacena en el flotante F variable. Observe cómo esto se inicializa con 0.00f como el valor los F le informa al compilador que es posible que desee almacenar un gran número en esta variable, por lo que configura 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.

EEPROM Close Up

Lo más simple que puede hacer para preservar la vida de EEPROM es limitar sus escrituras a una ubicación en particular. Puede hacerlo leyendo primero la dirección, y si el valor que desea escribir ya está presente, no es necesario volver a escribirlo (recuerde, leer los 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, sin embargo, solo funciona para enteros! En lugar de reinventar la rueda, use la función integrada en la biblioteca Arduino EEPROM:

EEPROM.update (dirección, val);

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

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

dirección var = 0. var writeCount = 0 if (writeCount> 75,000) writeCount = 0 dirección + = 1 EEPROM.write (dirección, datos)

Deberá almacenar la dirección y writeCount en EEPROM (y writeCount deberá dividirse entre las ubicaciones de las 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. ¡Haznos saber si haces algo genial! ¿Puedes reconocer todos los dispositivos en las imágenes? ¡Déjanos un comentario abajo!

Joe se graduó en Ciencias de la Computación de 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 lo puede encontrar tomando fotos o produciendo videos.