- EEPROM en PIC16F877A:
- Diagrama de circuito y explicación:
- Simulación de uso de PIC EEPROM:
- Programación de PIC para EEPROM:
- Trabajando:
En este tutorial aprenderemos lo fácil que es guardar datos usando la EEPROM presente en el microcontrolador PIC16F877A. En la mayoría de los proyectos en tiempo real, es posible que tengamos que guardar algunos datos que no deben borrarse incluso cuando la alimentación está apagada. Esto puede parecer un proceso complicado, pero con la ayuda del compilador XC8 esta tarea se puede realizar con solo usar una sola línea de código. Si los datos son grandes en términos de megabytes, podemos conectar un dispositivo de almacenamiento como una tarjeta SD y almacenar esos datos en ellos. Pero podemos evitar esos procesos agotadores si los datos son pequeños, simplemente podemos usar la EEPROM presente en el Microcontrolador PIC para guardar nuestros datos y recuperarlos en cualquier momento que queramos.
Este tutorial de PIC EEPROM es parte de una secuencia de tutoriales de microcontroladores PIC en los que comenzamos desde un nivel muy básico. Si no ha aprendido los tutoriales anteriores, sería mejor echarles un vistazo ahora, porque este tutorial asume que está familiarizado con la interfaz de LCD con el microcontrolador PIC y el uso de ADC con el microcontrolador PIC.
EEPROM en PIC16F877A:
EEPROM significa "Memoria de sólo lectura programable y borrable electrónicamente". Como su nombre indica, es una memoria presente dentro del microcontrolador PIC en la que podemos escribir / leer datos programándolo para que lo haga. Los datos guardados en este se borrarán solo si así se indica en el programa. La cantidad de espacio de almacenamiento disponible en EEPROM varía en cada microcontrolador; los detalles se darán en la hoja de datos como de costumbre. En nuestro caso para PIC16F877A, el espacio disponible es de 256 bytes como se menciona en su hoja de datos de especificaciones. Ahora veamos cómo podemos usar estos 256 bytes para leer / escribir datos usando una configuración experimental simple.
Diagrama de circuito y explicación:
El diagrama de circuito del proyecto se muestra arriba. Hemos conectado una pantalla LCD para visualizar los datos que se guardan y recuperan. Un potenciómetro normal está conectado al canal analógico AN4 para alimentar voltaje variable, este voltaje variable se utilizará como los datos que se guardarán en la EEPROM. También hemos utilizado un pulsador en RB0, cuando se presiona este botón los datos del canal analógico se guardarán en la EEPROM.
Esta conexión se puede realizar en una placa de pruebas. Los pines del microcontrolador PIC se muestran en la siguiente tabla.
S. No: |
Número de PIN |
Nombre de PIN |
Conectado a |
1 |
21 |
RD2 |
RS de LCD |
2 |
22 |
RD3 |
E de LCD |
3 |
27 |
RD4 |
D4 de LCD |
4 |
28 |
RD5 |
D5 de LCD |
5 |
29 |
RD6 |
D6 de LCD |
6 |
30 |
RD7 |
D7 de LCD |
7 |
33 |
RBO / INT |
Presionar el botón |
8 |
7 |
AN4 |
Potenciómetro |
Simulación de uso de PIC EEPROM:
Este proyecto también implica una simulación diseñada con Proteus, con la que podemos simular el funcionamiento del proyecto sin ningún hardware. El programa para esta simulación se da al final de este tutorial. Simplemente puede usar el archivo Hex desde aquí y simular todo el proceso.
Durante la simulación, puede visualizar el valor ADC actual y los datos guardados en la EEPROM en la pantalla LCD. Para guardar el valor actual de ADC en la EEPROM, simplemente presione el interruptor conectado a RB0 y se guardará. A continuación se muestra una instantánea de la simulación.
Programación de PIC para EEPROM:
El código completo de este tutorial se proporciona al final de este tutorial. En nuestro programa tenemos que leer los valores del módulo ADC y cuando se presiona un botón tenemos que guardar ese valor en nuestra EEPROM. Dado que ya hemos aprendido sobre los ADC y la interfaz LCD, explicaré con más detalle el código para guardar y recuperar datos de EEPROM.
Según la Ficha técnica “Estos dispositivos tienen 4 u 8K palabras de programa Flash, con un rango de direcciones de 0000h a 1FFFh para el PIC16F877A”. Esto significa que cada espacio de almacenamiento EEPROM tiene una dirección a través de la cual se puede acceder y en nuestra MCU la dirección comienza desde 0000h hasta 1FFFh.
Para guardar datos dentro de una dirección EEPROM en particular, simplemente use la siguiente línea.
eeprom_write (0, adc);
Aquí “adc” es una variable de tipo entero en la que están presentes los datos a guardar. Y "0" es la dirección de la EEPROM en la que se guardan nuestros datos. La sintaxis "eeprom_write" la proporciona nuestro compilador XC8, por lo que el compilador se encargará automáticamente de los registros.
Para recuperar un dato que ya está almacenado en EEPROM y guardarlo en una variable, se puede usar la siguiente línea de código.
Sadc = (int) eeprom_read (0);
Aquí, “Sadc” es la variable en la que se guardarán los datos de la EEPROM. Y "0" es la dirección de EEPROM de la que estamos recuperando los datos. La sintaxis “eeprom_read” la proporciona nuestro compilador XC8, por lo que el compilador se encargará automáticamente de los registros. Los datos guardados en EEPROM estarán en tipo hexadecimal. Por lo tanto, los convertimos a tipo entero prefijando un (int) antes de la sintaxis.
Trabajando:
Una vez que entendemos cómo funciona el código y nos preparamos con el hardware, podemos probar el código. Cargue el código en su microcontrolador PIC y encienda la configuración. Si todo funciona como se esperaba, debería ver los valores actuales de ADC en la pantalla LCD. Ahora puede presionar el botón para guardar el valor ADC en la EEPROM. Ahora verifica si el valor está guardado apagando todo el sistema y volviéndolo a encender. Cuando se enciende, debería ver el valor previamente guardado en la pantalla LCD.
El funcionamiento completo de este proyecto para usar el microcontrolador PIC EEPROM se muestra en el siguiente video. Espero que hayas entendido el tutorial y hayas disfrutado haciéndolo. Si tiene alguna duda, puede escribirla en la sección de comentarios a continuación o publicarla en nuestros foros.