EEPROM AVR Memoria interna


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

EEPROM AVR en la memoria interna EEPROM del microcontrolador AVR se pueden guardar datos que no se quiere que se borren en caso se corte la alimentación del AVR, en esta sección se comentará para el caso de la memoria EEPROM AVR para el ATMEGA88, lo que aquí se comente es muy similar en caso de utilizar otro microcontrolador AVR, siempre tener a mano la hoja de datos del AVR utilizado.

En la memoria EEPROM AVR del ATMEGA88 se pueden almacenar hasta 512 bytes, esto es 512 datos de 8 bits, la capacidad de la memoria EEPROM AVR puede variar de un AVR a otro.

Para la escritura y la lectura de datos en la EEPROM AVR se hará uso del ATMEL STUDIO para la programación en C/C++, al programar la memoria EEPROM AVR del microcontrolador AVR se tendrá que incluir un  archivo de cabecera llamado eeprom.h de la siguiente manera:

#include<avr/eeprom.h>

 😎 MUY IMPORTANTE “Para obtener mas información sobre las librerías que se utilizan para programar los microcontroladores AVR en C/C++ se puede visitar este enlace, aquí se encontrará una descripción detallada sobre las diversas librerías con las que se cuenta para programar los AVR, las funciones que incluyen, los modelos de microcontroladores AVR en los cuales se pueden utilizar las librerías, ejemplos”.

En el siguiente enlace se puede ver toda la información respecto a la librería eeprom.h, allí se verá todo el listado de las funciones que se pueden utilizar para la escritura y lectura de la memoria EEPROM AVR. Se recomienda visitar el enlace ya que en adelante se pasará a comentar como utilizar estas funciones.

EEPROM AVR con la librería eempro.h

Al utilizar la librería eeprom.h se tendrá una macro llamada EEMEM con la que se pueden crear variables, pero estas variables serán creadas en la memoria EEPROM AVR, la dirección de la ubicación del dato en la memoria EEPROM AVR la asignará el mismo programa, su uso es similar a cuando se crea una variable normal en C/C++, con la diferencia de que antes del nombre de la variable a crear se antepone la palabra reservada EEMEM, por ejemplo:

uint8_t EEMEM dato;//se crea una variable entera de 8 bits llamada dato en la memoria EEPROM AVR

unsigned char EEMEM car;//se crea la variable de tipo caracter llamada car en la memoria EEPROM AVR

float EEMEM datos[4];//se crea un arreglo de caracteres de tipo float llamado datos en la memoria EEPROM AVR

Es la misma idea si se quiere crear otros tipos de datos en la memoria EEPROM AVR, también pueden ser inicializados, por ejemplo:

uint8_t EEMEM dato = 5;

unsigned char EEMEM car =’A’;

float EEMEM datos[4] = {2.3, 0.2, 5.4, 1.35};

Si no se utiliza EEMEM para crear una variable en la memoria EEPROM AVR, se tendrá que indicar por programa en que ubicación de la memoria se quiere que se ubique el dato, el como hacer esto se verá luego.

Escribir y leer datos en la EEPROM AVR el archivo eeprom.h tiene una serie de funciones para escribir y para leer datos en la EEPROM AVR, las funciones a utilizar dependerán del tipo de dato, se harán solo algunos ejemplos ya que la idea es la misma para las demás funciones, ver el archivo eeprom.h para conocer todas estas posibles funciones.

Por ejemplo

Para escribir un dato de 1 byte (8 bits) en una dirección de memoria de la EEPROM AVR se tiene la siguiente función, donde dirección_en_memoria_eeprom es una variable de 8 bits de tipo puntero.

eeprom_write_byte(dirección_en_memoria_eeprom,dato);

Para leer en un dato de 1 byte (8 bits) de la EEPROM AVR se tiene la siguiente función, donde dirección_en_memoria_eeprom es una variable de 8 bits de tipo puntero, el dato leído tendrá que ser asignado a alguna variable o algún registro, como en el siguiente caso que el dato leído se le asigna al puerto D.

PORTD=eeprom_read_byte(dirección_en_memoria_eeprom);

Para indicar la dirección de memoria se hará anteponiendo el operador & al nombre de la variable creada con EEMEM en la EEPROM (&dato), o anteponiendo (uint8_t*) si la variable no ha sido creada con EEMEM ((uint8_t*)dato).

El siguiente es un ejemplo de programa sencillo para ver el uso de estas funciones cuando se crea una variable en la memoria EEPROM AVR con EEMEM, por lo que para indicar la dirección de memoria se utilizará el operador &.

El siguiente es un ejemplo de programa sencillo para ver el uso de estas funciones pero ahora no se creará la variable en la memoria EEPROM AVR con EEMEM, sino que se hará dentro del programa principal, en este caso para indicar la ubicación de memoria se hará mediante (uint8_t*)(ubicación de memoria), el ATMEGA88 tiene desde 0 hasta 511 posibles ubicaciones de memoria para su EEPROM.

En la simulación se puede comprobar que en la ubicación 31 o 1F en hexadecimal se ha escrito el valor de 203 o CB en hexadecimal, el que al ser leído es observado en el puerto D del ATMEGA88.

eeprom avr

En el siguiente ejemplo se escribirán 25 de datos de tipo float desde la dirección 0 hasta la dirección 24 de la memoria EEPROM AVR, par ello se utilizará la función eeprom_write_float(dirf,datof), donde dirf es un puntero de tipo float que apunta a la dirección del dato float a escribir, datof es el dato float a escribir en la EEPROM AVR, luego se leerán los datos escritos con la función eeprom_read_float(dirf), donde dirf es un puntero de tipo float que apunta a la dirección del dato float a leer, para ver los datos se utilizará una pantalla LCD, los datos serán vistos en el LCD serán actualizados cada segundo, el código utilizado y realizado en el ATMEL STUDIO es el siguiente:

La siguiente es una imagen del ejemplo realizado.

eeprom avr ejemplo

Atte: MrElberni.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0