Tabla de contenido:

Lectura y escritura de datos en EEPROM externa usando Arduino: 5 pasos
Lectura y escritura de datos en EEPROM externa usando Arduino: 5 pasos

Video: Lectura y escritura de datos en EEPROM externa usando Arduino: 5 pasos

Video: Lectura y escritura de datos en EEPROM externa usando Arduino: 5 pasos
Video: Usar una EEPROM con Arduino 2024, Mes de julio
Anonim
Lectura y escritura de datos en EEPROM externa usando Arduino
Lectura y escritura de datos en EEPROM externa usando Arduino

EEPROM significa Memoria de sólo lectura programable y borrable eléctricamente.

EEPROM es muy importante y útil porque es una forma de memoria no volátil. Esto significa que incluso cuando la placa está apagada, el chip EEPROM aún conserva el programa que se escribió en él. Entonces, cuando apaga la placa y luego la vuelve a encender, se puede ejecutar el programa que se escribió en la EEPROM. Básicamente, la EEPROM almacena y ejecuta un programa sin importar qué. Esto significa que puede apagar un dispositivo, mantenerlo apagado durante 3 días y volver y encenderlo y aún puede ejecutar el programa que se programó en él. Así es como funcionan la mayoría de los dispositivos electrónicos de consumo.

Este proyecto está patrocinado por LCSC. He estado usando componentes electrónicos de LCSC.com. LCSC tiene el firme compromiso de ofrecer una amplia selección de componentes electrónicos genuinos de alta calidad al mejor precio con una red de envío global a más de 200 países. Regístrese hoy y obtenga $ 8 de descuento en su primer pedido.

EEPROM también es muy eficiente porque los bytes individuales en una EEPROM tradicional se pueden leer, borrar y reescribir de forma independiente. En la mayoría de los otros tipos de memoria no volátil, esto no se puede hacer. Los dispositivos EEPROM en serie como el EEPROM Microchip de la serie 24 le permiten agregar más memoria a cualquier dispositivo que pueda hablar I²C.

Suministros

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. Cristal de 16 MHz
  4. Tablero de circuitos
  5. Resistencia 4,7 k ohmios x 2
  6. Condensador 22 pF x 2

Paso 1: Conceptos básicos de EEPROM

Conceptos básicos de EEPROM
Conceptos básicos de EEPROM

El chip Microchip 24LC2512 se puede comprar en un paquete DIP de 8 pines. Los pines del 24LC512 son bastante sencillos y consisten en alimentación (8), GND (4), protección contra escritura (7), SCL / SDA (6, 5) y tres pines de dirección (1, 2, 3).

Una breve historia de ROM

Las primeras computadoras del tipo "Programa almacenado", como las calculadoras de escritorio y los intérpretes de teclado, comenzaron a usar ROM en forma de ROM de matriz de diodos. Se trataba de una memoria formada por diodos semiconductores discretos colocados en una placa de circuito impreso especialmente organizada. Esto dio paso a Mask ROM con la llegada de los circuitos integrados. La ROM de máscara se parecía mucho a la ROM de matriz de diodos, solo que se implementó en una escala mucho más pequeña. Sin embargo, esto significaba que no podía simplemente mover un par de diodos con un soldador y reprogramarlo. La ROM de máscara tuvo que ser programada por el fabricante y, a partir de entonces, no se pudo modificar.

Desafortunadamente, Mask ROM era costoso y llevó mucho tiempo producirlo porque cada nuevo programa requería que una fundición fabricara un dispositivo nuevo. En 1956, sin embargo, este problema se resolvió con la invención de PROM (ROM programable) que permitió a los desarrolladores programar los chips ellos mismos. Eso significaba que los fabricantes podían producir millones del mismo dispositivo no programado, lo que lo hacía más económico y práctico. Sin embargo, en PROM solo se puede escribir una vez utilizando un dispositivo de programación de alto voltaje. Después de programar un dispositivo PROM, no había forma de devolver el dispositivo a su estado no programado.

Esto cambió en 1971 con la invención de EPROM (ROM programable borrable) que, además de agregar otra letra al acrónimo, trajo consigo la capacidad de borrar el dispositivo y devolverlo a un estado "en blanco" utilizando una fuente de luz ultravioleta fuerte. Así es, tuviste que iluminar el IC con una luz brillante para reprogramarlo, ¿qué tan genial es eso? Bueno, resulta que es bastante bueno a menos que seas un desarrollador que trabaja en firmware, en cuyo caso realmente te gustaría poder reprogramar el dispositivo usando señales eléctricas. Esto finalmente se hizo realidad en 1983 con el desarrollo de EEPROM (ROM programable borrable eléctricamente) y con eso, llegamos al acrónimo difícil de manejar del día actual.

Paso 2: peculiaridades de EEPROM

EEPROM tiene dos grandes inconvenientes como método de almacenamiento de datos. En la mayoría de las aplicaciones, los pros superan a los contras, pero debe conocerlos antes de incorporar EEPROM en su próximo diseño.

En primer lugar, la tecnología que hace que EEPROM funcione también limita la cantidad de veces que se puede reescribir. Esto tiene que ver con que los electrones quedan atrapados en los transistores que forman la ROM y se acumulan hasta que la diferencia de carga entre un "1" y un "0" es irreconocible. Pero no se preocupe, la mayoría de las EEPROM tienen un número máximo de reescritura de 1 millón o más. Mientras no esté escribiendo continuamente en la EEPROM, es poco probable que alcance este máximo. En segundo lugar, EEPROM no se borrará si le quita la energía, pero no retendrá sus datos indefinidamente. Los electrones pueden salir de los transistores y atravesar el aislante, borrando efectivamente la EEPROM con el tiempo. Dicho esto, esto suele ocurrir a lo largo de los años (aunque puede acelerarse con el calor). La mayoría de los fabricantes dicen que sus datos están seguros en EEPROM durante 10 años o más a temperatura ambiente. Y hay una cosa más que debe tener en cuenta al seleccionar un dispositivo EEPROM para su proyecto. La capacidad EEPROM se mide en bits y no en bytes. Una EEPROM de 512K tendrá 512Kbits de datos, en otras palabras, solo 64KB.

Paso 3: Conexión del hardware Arduino

Conexión de hardware Arduino
Conexión de hardware Arduino
Conexión de hardware Arduino
Conexión de hardware Arduino

Bien, ahora que sabemos qué es EEPROM, ¡conectemos uno y veamos qué puede hacer! Para que nuestro dispositivo hable, necesitaremos conectar la alimentación y las líneas seriales I²C. Este dispositivo, en particular, funciona a 5VDC por lo que lo conectaremos a la salida de 5V de nuestro Arduino UNO. Además, las líneas I²C necesitarán resistencias pull-up para que la comunicación se realice correctamente. El valor de estas resistencias depende de la capacitancia de las líneas y la frecuencia con la que desea comunicarlo, pero una buena regla general para aplicaciones no críticas es mantenerlo en el rango de kΩ. En este ejemplo, usaremos resistencias pull-up de 4.7kΩ.

Hay tres pines en este dispositivo para seleccionar la dirección I²C, de esta manera puede tener más de una EEPROM en el bus y direccionarlos de manera diferente. Podrías conectarlos a tierra todos, pero los conectaremos para que podamos instalar un dispositivo de mayor capacidad más adelante en el tutorial.

Usaremos una placa de pruebas para conectar todo. El siguiente diagrama muestra la conexión correcta para la mayoría de los dispositivos EEPROM I²C, incluida la EEPROM Microchip serie 24 que vendemos.

Paso 4: lectura y escritura

La mayoría de las veces, cuando usa una EEPROM junto con un microcontrolador, en realidad no necesitará ver todo el contenido de la memoria a la vez. Solo leerá y escribirá bytes aquí y allá según sea necesario. En este ejemplo, sin embargo, vamos a escribir un archivo completo en EEPROM y luego volver a leerlo todo para que podamos verlo en nuestra computadora. Esto debería hacernos sentir cómodos con la idea de usar EEPROM y también darnos una idea de cuántos datos pueden caber realmente en un dispositivo pequeño.

Escribe algo

Nuestro boceto de ejemplo simplemente tomará cualquier byte que ingrese por el puerto serie y lo escriba en la EEPROM, manteniendo un registro a lo largo del camino de cuántos bytes hemos escrito en la memoria.

La escritura de un byte de memoria en la EEPROM generalmente ocurre en tres pasos:

  1. Envíe el byte más significativo de la dirección de memoria en la que desea escribir.
  2. Envíe el byte menos significativo de la dirección de memoria en la que desea escribir.
  3. Envíe el byte de datos que le gustaría almacenar en esta ubicación.

Probablemente hay algunas palabras clave allí que merecen una explicación:

Direcciones de memoria

Si imagina todos los bytes en una EEPROM de 512 Kbit en una línea de 0 a 64000, porque hay 8 bits en un byte y, por lo tanto, puede colocar 64000 bytes en una EEPROM de 512 Kbit, entonces una dirección de memoria es el lugar en línea donde encontraría un byte en particular. Necesitamos enviar esa dirección a la EEPROM para que sepa dónde colocar el byte que estamos enviando.

Bytes más significativos y menos significativos

Debido a que hay 32000 lugares posibles en una EEPROM de 256 Kbit, y debido a que 255 es el número más grande que puede codificar en un byte, necesitamos enviar esta dirección en dos bytes. Primero, enviamos el Byte más significativo (MSB), los primeros 8 bits en este caso. Luego enviamos el Byte menos significativo (LSB), los segundos 8 bits. ¿Por qué? Porque así es como el dispositivo espera recibirlos, eso es todo.

Escritura de página

Escribir un byte a la vez está bien, pero la mayoría de los dispositivos EEPROM tienen algo llamado "búfer de escritura de página" que le permite escribir varios bytes a la vez de la misma manera que lo haría con un solo byte. Aprovecharemos esto en nuestro boceto de ejemplo. La EEPROM utiliza un contador interno que aumenta automáticamente la ubicación de la memoria con cada byte de datos siguiente que recibe. Una vez que se ha enviado una dirección de memoria, podemos seguirla con hasta 64 bytes de datos. La EEPROM asume (correctamente) que una dirección de 312 seguida de 10 bytes registrará el byte 0 en la dirección 312, el byte 1 en la dirección 313, el byte 2 en la dirección 314, y así sucesivamente.

Leer algo

La lectura desde la EEPROM sigue básicamente el mismo proceso de tres pasos que la escritura en la EEPROM:

  1. Envíe el byte más significativo de la dirección de memoria en la que desea escribir.
  2. Envíe el byte menos significativo de la dirección de memoria en la que desea escribir.
  3. Solicite el byte de datos en esa ubicación.

Paso 5: esquemas y código

Esquemas y código
Esquemas y código

Código:

#incluir

#define eeprom 0x50 // define la dirección base de la EEPROM

configuración vacía () {

Wire.begin (); // crea un objeto Wire

Serial.begin (9600);

dirección int sin firmar = 0; // primera dirección de la EEPROM

Serial.println ("Escribimos el código postal 22222, un código postal"); para (dirección = 0; dirección <5; dirección ++) writeEEPROM (eeprom, dirección, '2'); // Escribe 22222 en la EEPROM

para (dirección = 0; dirección <5; dirección ++) {Serial.print (readEEPROM (eeprom, dirección), HEX); }}

bucle vacío () {

/ * no hay nada en la función loop () porque no queremos que el arduino escriba repetidamente lo mismo en la EEPROM una y otra vez. Solo queremos una escritura única, por lo que la función loop () se evita con EEPROM. * /}

// define la función writeEEPROM

void writeEEPROM (int deviceaddress, unsigned int eeaddress, byte data) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // escribe el MSB Wire.write ((int) (eeaddress & 0xFF)); // escribe el LSB Wire.write (datos); Wire.endTransmission (); }

// define la función readEEPROM

byte readEEPROM (int deviceaddress, unsigned int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (dirección de dispositivo); Wire.write ((int) (eeaddress >> 8)); // escribe el MSB Wire.write ((int) (eeaddress & 0xFF)); // escribe LSB Wire.endTransmission (); Wire.requestFrom (dirección de dispositivo, 1); if (Wire.available ()) rdata = Wire.read (); return rdata; }

Recomendado: