- Materiales necesarios:
- Memoria flash:
- ICSP (Programación en serie en circuito):
- Circuito y hardware:
- Quemando el código usando MPLAB IPE:
En nuestros dos tutoriales anteriores discutimos Cómo comenzar con PIC usando MPLABX y el compilador XC8, también hicimos nuestro primer programa de parpadeo de LED con PIC y lo verificamos mediante simulación. Ahora es el momento de poner nuestras manos en el hardware. En este tutorial construiremos un pequeño circuito en una placa Perf para hacer parpadear el LED usando PIC. Volcaremos el programa en nuestro microcontrolador PIC y verificaremos que el LED parpadee. Para programar el PIC MCU usaremos MPLAB IPE.
Materiales necesarios:
Como se discutió en nuestro tutorial anterior, necesitaremos los siguientes materiales:
- PicKit 3
- PIC16F877A IC
- Soporte para CI de 40 pines
- Tablero perfilado
- OSC de cristal de 20 MHz
- Pines de Bergstick hembra y macho
- Condensador 33pf - 2Nos, 100uf y 10uf cap.
- Resistencia de 680 ohmios, 10K y 560 ohmios
- LED de cualquier color
- 1 kit de soldadura
- IC 7805
- Adaptador de 12V
¿Qué pasa cuando "quemamos" un microcontrolador?
Es una práctica habitual cargar el código en una MCU y hacer que funcione dentro de la MCU.
Para entender esto, echemos un vistazo a nuestro programa.
Como podemos ver, este código está escrito en lenguaje C y no tendrá sentido para nuestro MCU. Aquí es donde entra la parte de nuestro compilador; un compilador es aquel que convierte este código en un formato legible por máquina. Esta forma legible por máquina se llama código HEX, cada proyecto que creamos tendrá un código HEX que estará en el siguiente directorio
** Su ubicación ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Si está tan interesado en saber cómo se ve este código HEX, simplemente ábralo usando el bloc de notas. Para nuestro programa Blink, el código HEX se verá así:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Hay formas de cómo leer esto y cómo entenderlo y revertirlo al lenguaje ensamblador, pero está completamente fuera del alcance de este tutorial. Entonces, para simplemente ponerlo en pocas palabras; el HEX es el resultado final del software de nuestra codificación y esto es lo que MPLAB IPE enviará para quemar la MCU.
Memoria flash:
El código HEX se almacena en la MCU en un lugar llamado memoria Flash. La memoria flash es el lugar donde nuestro programa se almacenará dentro de la MCU y se ejecutará desde allí. Una vez compilamos el programa en nuestro MPLABX, tendríamos la siguiente información sobre el tipo de memoria en la consola de Salida
Dado que acabamos de compilar un pequeño programa que parpadea con LED, el resumen de la memoria muestra que acabamos de consumir el 0,5% del espacio disponible del programa y el 1,4% del espacio de datos.
La memoria del microcontrolador PIC16F877 se divide básicamente en 3 tipos:
Memoria de programa: esta memoria contiene el programa (que habíamos escrito), después de que lo hayamos quemado. Como recordatorio, Program Counter ejecuta los comandos almacenados en la memoria del programa, uno tras otro. Dado que hemos escrito un programa muy pequeño, hemos consumido solo el 0,5% del espacio total. Esta es una memoria no volátil, lo que significa que los datos almacenados no se perderán después del apagado.
Memoria de datos: Este es el tipo de memoria RAM, que contiene registros especiales como SFR (Registro de función especial) que incluye temporizador de vigilancia, Restablecimiento de caída, etc. y GPR (Registro de propósito general) que incluye TRIS y PORT, etc. Las variables que se almacenan en la memoria de datos durante el programa se eliminan después de que apagamos la MCU. Cualquier variable declarada en el programa estará dentro de la memoria de datos. Esta también es una memoria volátil.
EEPROM de datos (Memoria de solo lectura programable y borrable eléctricamente): Una memoria que permite almacenar las variables como resultado de quemar el programa escrito. Por ejemplo, si asignamos una variable "a" para guardar un valor de 5 en ella y almacenarla en la EEPROM, estos datos no se perderán incluso si se apaga la energía. Esta es una memoria no volátil.
La memoria de programa y la EEPROM son memorias no volátiles y se denominan memoria flash o EEPROM.
ICSP (Programación en serie en circuito):
Programaremos nuestro PIC16F877A usando la opción ICSP que está disponible en nuestra MCU.
Ahora, ¿qué es ICSP?
ICSP es una forma sencilla que nos ayuda a programar una MCU incluso después de que se coloca dentro de nuestro tablero de Proyecto. No es necesario tener una placa programadora separada para programar la MCU, todo lo que necesitamos son 6 conexiones desde el programador PicKit3 a nuestra placa de la siguiente manera:
1 |
VPP (o MCLRn) |
Para ingresar al modo de programación. |
2 |
Vcc |
Clavija de alimentación 11 o 32 |
3 |
GND |
PIN de tierra 12 o 31 |
4 |
PGD - Datos |
RB7. PIN40 |
5 |
PGC - Reloj |
RB6. PIN 39 |
6 |
PGM: habilitación de LVP |
RB3 / RB4. No es obligatorio |
ICSP es adecuado para todos los paquetes PIC; todo lo que necesitamos es sacar estos cinco pines (el sexto pin PGM es opcional) del MCU al Pickit3 como se muestra en la imagen a continuación.
Circuito y hardware:
Ahora, tenemos nuestro código HEX listo y también sabemos cómo conectar nuestro PicKit 3 a nuestro PIC MCU usando ICSP. Entonces, sigamos adelante y suelde el circuito con la ayuda de los siguientes esquemas:
En el circuito anterior he usado un 7805 para regular la salida de 5 V a mi PIC MCU. Este regulador será alimentado por un adaptador de pared de 12V. El LED ROJO se usa para indicar si el PIC está encendido. El conector J1 se utiliza para la programación de ICSP. Los pines se conectan como se describe en la tabla anterior.
El primer pin MCLR debe mantenerse alto con la ayuda de un 10k por defecto. Esto evitará que la MCU se reinicie. Para restablecer la MCU, el pin MCLR debe mantenerse a tierra, lo que se puede hacer con la ayuda del interruptor SW1.
El LED se conecta al pin RB3 a través de una resistencia de valor 560 ohmios (Ver calculadora de resistencias LED). Si todo está bien una vez que se cargue nuestro programa, este LED debería parpadear según el programa. Todo el circuito se construye en Perfboard soldando todos los componentes como puede ver en la imagen de la parte superior.
Quemando el código usando MPLAB IPE:
Para grabar el código, siga los pasos a continuación:
- Inicie MPLAB IPE.
- Conecte un extremo de su PicKit 3 a su PC y el otro extremo a sus pines ICSP en la placa perf.
- Conéctese a su dispositivo PIC haciendo clic en el botón de conexión.
- Busque el archivo Blink HEX y haga clic en Programa.
Si todo sale según lo planeado, debería aparecer el mensaje de éxito en la pantalla. Consulte el código y el video a continuación para ver una demostración completa y use la sección de comentarios si tiene alguna duda.
¡¡¡Gracias!!!
Nos vemos en el siguiente tutorial donde jugaremos con más LED y un interruptor.