Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Al Pic16f876a 877a 886 887 PDF
Al Pic16f876a 877a 886 887 PDF
Bajando programas al
PIC16F876A/877A/886/887
Para la programacion del PIC con el PICKIT2 se mostrara una aplicacion sencilla que hara parpadear
un led cada 1 segundo indefinidamente.
En el caso del bootloader se mostrara el diseño hardware minimo requerido para comunicar al puerto
serie de la PC con el microcontrolador,sistema minimo.
Posteriormente se agregara al sistema minimo un led y se probara la aplicacion que parpadea un led
otra vez.
Los ejemplos mostrados se enfocan al PIC16F886. Sin embargo el proceso es extendible a los PICs
PIC16F876A/877A/886/887.
El archivo ejecutable o firmware, .hex puede ser programado de forma directa en el Microcontrolador.
El PIC unicamente contendra este programa en su memoria de programa(FLASH). Los PICs de
Microchip disponen de 6 pines a los cuales se les conecta de forma directa un programador como el
PICKIT2 mostrado a continuacion.
El 'USB Port Connection' se conecta al puerto USB de la PC, se enciende led verde(Power). El
'Programming connector' se conecta al PIC.
Se muestran los pines del PICKIT2 y los pines del PIC16F876A/877A/886/887 a los que se conectan:
El pin VPP esta indicado en el PICKIT2 con un triangulo. Los demas pines estan en el mismo orden
mostrado en la primera columna de la tabla. El pin AUX del PICKIT2 generalmente no se utiliza en la
programacion basica.
El PIC se puede programar en la protoboard. Para ello es necesario insertar el PIC, conectar un header
vertical de 6 pines macho y alambrar con cables los pines del PIC y del header de tal forma que
queden en el orden mostrado en la segunda columna. A continuacion se conecta el PICKIT2 al
header(triangulo conectado al pin RE3/~MCLR/VPP del header) y se procede a programar el PIC.
Los zocalos o conectores ZIF del PICKIT2 del lab. tienen una etiqueta grabada que indica que tipos de
PICs se pueden insertar:
El pin 1 esta señalado en el PIC con un punto o hoyo pequeño en la parte superior del chip. Este pin
se conecta del lado donde esta la palanca que tiene cada zocalo. La palanca sirve para sujetar el PIC
firme al zocalo. Palanca arriba permite insertar PIC. Palanca abajo sujeta PIC al zocalo.
Una vez conectados PIC y programador se procede a abrir la aplicacion que bajara el firmware al
microcontrolador. Para ello dar click en:
A continuacion se siguen los siguientes pasos para bajar un archivo . hex al PIC:
● Click menu 'Programmer' . Checar que este deselecionada(sin palomita) la opcion 'Manual Device
Select'.
Para que el PICKIT2 identifique automaticamente el PIC conectado al socket o protoboard.
● Click menu 'Tools' → Check Communication.
Para que se reconozca de forma automatica el PIC que fue insertado en el ZIF o en la protoboard. Se
despliega el mensaje 'PIC Device Found' y el nombre del PIC reconocido, PIC16F886. Si este paso
falla, entonces no se podra programar el PIC de forma automatica. Intentar varias veces hasta que
la aplicacion despliegue el nombre del PIC(PIC16F886) y checar conexion fisica del PIC en
protoboard o socket ZIF.
● Click Menu 'File' → Import HEX.
Para seleccionar el firmware a programar, archivo con extension .hex. El contenido del archivo se
desplegara en la 'Program memory','EEPROM DATA'(solo si la aplicacion utiliza esta memoria),'USER
IDs'(solo si lo especifica la aplicacion) y 'Configuration'.
● Click el boton 'Write'.
Para bajar (quemar) el archivo .hex en el PIC. Los leds naranja(Target) y rojo(Busy) del PICKIT2 se
encienden mientras esta en proceso la escritura. Si la programacion fue exitosa se desplegara el
mensaje 'Programming Successful'.
● Retirar PIC del zocalo ZIF y ponerlo en la protoboard para probar programa. Si el PIC se programo en
la misma protoboard, entonces solo es necesario retirar el PICKIT2 del header de programacion de la
protoboard.
● Cerrar la aplicacion 'Pickit 2 V2.xx'
Blinking a led
Son opcionales el led rojo y la resistencia que estan conectados a la salida del regulador de voltaje de
5V. El led solo es un indicador de que hay energia en el prototipo.
El negativo del portapila para la bateria de 9V se conecta al riel negativo(azul) de la protoboard. Esta
sera la tierra(GND) de todo el sistema.
El positivo del portapila para la bateria de 9V se conecta al pin 1 del regulador de voltaje de
5V,L7805C. No conectar al riel positivo(rojo) de la protoboard ya que ese riel se utilizara para
transportar los 5V que alimentaran a los chips de la protoboard.
El pin 3 del regulador de voltaje de 5V se conecta directo al riel positivo(rojo) de la protoboard. Este
es el voltaje de 5V(VDD) que energizara a toda la protoboard.
En este esquematico no se muestran los pines VDD y VSS del PIC. El proteus suele
omitirlos. Sin embargo al armar el prototipo deben conectarse a 5V y tierra
respectivamente. El capacitor de 0.1 uF mostrado se conecta entre estos dos pines y sirve
para filtrar ruido en la señal de VDD. En la PIC16F886/887 datasheet se muestran los
numeros de pin correspondientes a VDD y a VSS. Para el PIC16F886 VDD es el pin 20 y
VSS esta en los pines 8 y 19(ambos pines se conectan a GND).
Los capacitores de botecito(electroliticos) tienen polaridad. El negativo esta indicado por una franca
blanca y el signo de '-'. El valor de la capacitancia esta impreso en el capacitor.
El catodo del led esta indicado por una parte aplanada en el encapsulado.
El micro-switch NO o boton de RESET. Es un switch de 4 pines. Por la parte de abajo hay una franja
que separa dos pines de un extremo de los otros dos pines del otro extremo. Cada par de pines estan
conectados internamente. Por lo cual se tienen solo dos extremos del switch. Estos extremos estan
separados fisicamente cuando el switch esta si presionar(por eso se llama switch NO o normalmente
abierto). Cuando se presiona el switch ambos extremos se juntan(cierra switch). Un extremo se
conecta a GND y el otro extremo se conecta a la resistencia de 4.7k y al pin 1 del PIC16F886.
Antes de energizar protoboard checar que las conexiones esten bien. Los multimetros tienen una
funcion llamada 'continuidad'. Al activarse permite identificar cuando dos extremos de un circuito
estan conectados. Se emite una alarma sonora constante cuando las puntas estan tocando el mismo
punto.
Checar con un multimetro(funcion voltaje de DC) que los rieles de voltaje positivo(rojo) y
negativo(azul) de la protoboard tengan el voltaje adecuado de 5V de DC. Antes de realizar esta
prueba se debe quitar de la protoboard al PIC y al MAX232N para evitar 'quemarlos' en el caso de que
exista un corto entre VDD y GND.
El firmware programado se ejecutara cada vez que el PIC reciba energia o se de un evento de reset.
El boton de reset mantiene en RESET al PIC mientras este presionado. Es decir, se detiene ejecucion
de programa, se inicializan modulos internos del PIC a valores de default,etc. Al liberar el boton de
reset el PIC inicia la ejecucion del programa(PC comienza en dir. 0 de program memory).
blinkled.asm
LIST p=16F886
#include <p16f886.inc>
__CONFIG _CONFIG1, _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON &
_CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF
__CONFIG _CONFIG2, _BOR4V_BOR21V & _WRT_OFF
CBLOCK 0x25
valor3
ENDC
ORG 0
GOTO INICIO
ORG 5
INICIO:
BSF STATUS,RP0 ;Sel. BANK1 para accesar al reg TRISB
BCF STATUS,RP1
MOVLW B'00000000' ;config. los pines RB0-RB5 del puertoB como I/O
digital
MOVWF ANSELH ;Con un '0' se configura al pin como I/O
digital.
;Con un 1 se habilita la funcion de input
analogica del pin
;El voltaje analogico que se conecte al pin
entra al
;convertidor A/D.
MAIN:
END_MAIN:
SLEEP
;Subrutina RETARDO que al ser ejecutada se tarda 1 sec sin hacer bada y
regresa
;al punto posterior a su llamada.
RETARDO:
BCF STATUS,RP0 ;BANK0 para regs valor1,valor2,valor3
BCF STATUS,RP1
MOVLW CTE1
MOVWF valor1
TRES:
MOVLW CTE2
MOVWF valor2
DOS:
MOVLW CTE3
MOVWF valor3
UNO:
DECFSZ valor3,f
GOTO UNO
DECFSZ valor2,f
GOTO DOS
DECFSZ valor1,f
GOTO TRES
RETURN
END
2.0 Bootloader
Con el PICKIT2 se puede bajar un ejecutable al PIC. Este programa solo realiza la funcion para la que
fue programado y punto. Por ejemplo el programa que parpadea un led solo hara eso y nada mas.
En las tarjetas del laboratorio se tiene programados los PIC con un programa especial conocido como
'bootloader'.
Este proceso es mas sencillo para desarrollar prototipos ya que solo se acude una vez al laboratorio
para programar el 'bootloader' con el PICKIT2 y posteriormente podran bajar nuevo firmware a su
protoboard via el puerto serie de sus PCs.
A continuacion hay que programar con el PICKIT2 el bootloader en el PIC16F886 como se indico en la
seccion anterior. Se proporciona el firmware a programar para los PIC16F876A/877A/886/887:
Sistema minimo
Una vez que se tiene programado el bootloader en el PIC16F886 se procede a armar el hardware que
integra el sistema minimo de comunicacion entre la PC y el bootloader.
● PIC16F886
● Oscilador externo. Crystal de 20MHz y dos capacitores ceramicos de 27pF
● Circuito de RESET. Micro-switch normalmente abierto con resistencia de pull-up de 4.7K(puede
usarse cualquier valor menor a 47K)
● Driver de comunicacion serial RS232 con la PC. MAX232N y 5 capacitores electroliticos de 1uF/25V
● Conector para el puerto serie. DB9F, conectar hembra de 9 pines.
● Fuente de alimentacion. Pila cuadrada de 9V y regulador de voltaje de 5V de salida. En la seccion
Fuentes de voltaje alternativas se muestran otras formas de obtener VDD para el PIC.
El sistema minimo solo tiene integrada la funcionalidad necesaria para comunicarse con la PC, recibir
el archivo .hex, programarlo en el PIC y ejecutarlo. Es decir, sera necesario añadir el hardware extra
que se desee controlar con el PIC.
Diagrama esquematico
Son opcionales el led rojo y la resistencia que estan conectados a la salida del regulador de voltaje de
5V. El led solo es un indicador de que hay energia en el prototipo.
El negativo del portapila para la bateria de 9V se conecta al riel negativo(azul) de la protoboard. Esta
sera la tierra(GND) de todo el sistema.
El positivo del portapila para la bateria de 9V se conecta al pin 1 del regulador de voltaje de
5V,L7805C. No conectar al riel positivo(rojo) de la protoboard ya que ese riel se utilizara para
transportar los 5V que alimentaran a los chips de la protoboard.
El pin 3 del regulador de voltaje de 5V se conecta directo al riel positivo(rojo) de la protoboard. Este
es el voltaje de 5V(VDD) que energizara a toda la protoboard.
En este esquematico no se muestran los pines VDD y VSS del PIC. El proteus suele
omitirlos. Sin embargo al armar el prototipo deben conectarse a 5V y tierra
respectivamente. El capacitor de 0.1 uF mostrado se conecta entre estos dos pines y sirve
para filtrar ruido en la señal de VDD. En la PIC16F886/887 datasheet se muestran los
Los capacitores de botecito(electroliticos) tienen polaridad. El negativo esta indicado por una franca
blanca y el signo de '-'. El valor de la capacitancia esta impreso en el capacitor.
El catodo del led esta indicado por una parte aplanada en el encapsulado.
El micro-switch NO o boton de RESET. Es un switch de 4 pines. Por la parte de abajo hay una franja
que separa dos pines de un extremo de los otros dos pines del otro extremo. Cada par de pines estan
conectados internamente. Por lo cual se tienen solo dos extremos del switch. Estos extremos estan
separados fisicamente cuando el switch esta si presionar(por eso se llama switch NO o normalmente
abierto). Cuando se presiona el switch ambos extremos se juntan(cierra switch). Un extremo se
conecta a GND y el otro extremo se conecta a la resistencia de 4.7k y al pin 1 del PIC16F886.
El crystal de cuarzo y los capacitores forman lo que se conoce como oscilador externo. La frecuencia
del oscilador, FOSC = 20MHZ esta determinada por la frecuencia a la cual entra en resonancia el crystal
de cuarzo. En este caso el crytal es de 20MHz. Para los PICs en cuestion se puede conectar cualquier
crytal de cuarzo que tenga una frecuencia menor o igual a 20MHz. El oscilador entrega al PIC una
señal cuadrada de frecuencia FOSC y periodo TOSC = 1 / FOSC. Esta señal sirve para sincronizar el
funcionamiento de los modulos internos del micro y determina la velocidad a la que se ejecutara cada
una de las 35 instrucciones que tiene el PIC. La mayoria de las instrucciones se tardan en ejecutar 1
ciclo de instruccion. 1 ciclo de instruccion equivale a 4 ciclos del oscilador, 1 ciclo de inst = 4 * TOSC.
Por lo cual la velocidad 'real' de ejecucion de cada instruccion es 1/4 mas lenta que la velocidad del
crystal empleado, Finst = FOSC / 4. Con un crystal de 20MHz se tiene FOSC = 20 MHz pero las
instrucciones se ejecutan en realidad a una velocidad de Finst = 20MHz / 4 = 5 MHz. Es decir, cada
instruccion se tarda aprox 200 nanosegundos en ejecutarse, TInst = 1 / FInst = 1 / 5 MHz = 200 nsec.
Los PIC16F886/887 tienen una caracteristica especial que los PIC16F876A/877A no tienen. Estos
incluyen dentro del chip un oscilador interno de frecuencia programable via el firmware de la
aplicacion. La frecuencia de este oscilador interno puede ser cualquiera de las siguientes: 8MHz,
4MHz, 1MHz, 500kHz, 250KHz,125kHz,31kHz. Esta caracteristica permite que se ahorre uno el costo
del crystal externo y de sus capacitores. En la primera practica utilizaremos el oscilador
externo(crystal) para que puedan probar ambas opciones. Esto significa que se podria crear un nuevo
sistema minimo y ahorrase el crystal y capacitores asociados. Para utilizar este oscilador interno se
debe programar un 'bootloader' que reconozca al oscilador interno como reloj, es decir,el 'bootloader'
es diferente para sistema minimo con oscilador externo y para sistema minimo con oscilador interno.
La fuente de alimentacion de voltaje que utiliza el PIC puede ser cualquier fuente de voltaje que
entregue de 2-5VDC. El PIC puede dañarse o quemarse si se le conecta un VDD > 5.5V . El voltaje
minimo al cual puede funcionar el PIC depende de la frecuencia del oscilador utilizado:
VDD determina los voltajes que se asocian al '0' y al '1' logicos. Si VDD = 3.3V, entonces un '1' = 3.3V
y un '0' = 0V. En realidad el PIC interpreta al '1' como un voltaje > = 2.0V y al '0' como un voltaje <
0.8V. El intervalo de voltajes entre 0.8V y 2.0V constituye una zona de incertidumbre en donde se
podria interpretar erroneamente el valor logico correspondiente. No se debe conectar un VDD > 5.5V
a los pines de entrada del PIC porque podrian dañarse.
El MAX232N es un convertidor de niveles de voltaje que mapea un intervalo de voltajes entre -12 a
12V a un intervalo de voltajes entre 0 y 5V. La comunicacion entre PC y PIC es via un protocolo de
comunicacion serial conocido como RS232. En este protocolo un '0' logico = +12V y un '1' logico =
-12V. Los bits que envia la PC tienen esos voltajes asociados. Los bits que envia/recibe el PIC tienen
intervalos entre 0 y 5V.Los bits se envian en forma serial por un par de cables. La PC tiene dos pines
RX_PC y TX_PC. El PIC tiene tambien dos pines RX_PIC y TX_PIC. Por el Pin RX_PC la PC recibe
informacion enviada por el pin TX_PIC. Por el pin TX_PC la PC envia informacion al pin RX_PIC. Los bits
se envian uno tras otro, es decir, en forma serial. Primero se envia un bit y se sostiene su valor un
instante , despues se envia el siguiente bit y se sostiene otro instante su valor, el proceso se repite
hasta que se hayan enviado todos los bits deseados. Por ejemplo si se envia un byte, entonces se
enviarian 8 bits uno tras otro con un retardo entre cada uno. El retardo es fijo y conocido por parte
transmisora y receptora e indica la velocidad a la que se transmite o recibe la cadena de bits.
Ensamble en Protoboard
Observar conexion del nuevo hardware al sistema minimo. El led se conecta al pin RB0 del puerto B
del PIC. La terminal(flecha) con el nombre RB0 indica que el pin RB0 del PIC y el extremo de la
resistencia estan conectados en la protoboard.
Se muestra ahora el procedimiento para bajar el firmware al PIC via el bootloader y la PC.
Abrir la aplicacion 'Serial Bootloader AN1310' con la que la PC se comunicara con el bootloader
programado en el PIC16F886:
● Menu Inicio → Microchip → Serial Bootloader AN1310 V1.05 → Serial Bootloader AN1310
12. En este punto se puede cerrar aplicacion y el firmware se ejecutara cada que se de energia o
RESET al PIC
13. Si se desea dejar abierta la aplicacion y posteriormente bajar nuevos firmware, entonces
continuar desde el paso 6.
Tambien se puede utilizar un eliminador de baterias que de un voltaje fijo > 5V, por ejemplo de 6V,
9V o 12V . Al eliminador se le conecta a un jack invertido(receptor). Del jack se obtiene la terminal
de GND y VDD estas se conectan al regulador de voltaje de 5V que se utilizo en el sistema
minimo(en lugar de la bateria de 9V).
El objectivo es crear una tarjeta con el jack invertido y un header para protoboard como se muestra
en la figura.
Siempre debe medirse con un voltimetro el voltaje que entrega el eliminador de baterias. Es comun
que se obtenga un voltaje mas elevado en algunos de estos eliminadores(baja calidad). Este voltaje
podria estar fuera del VDD permitido por el PIC.
Tambien se debe checar la polaridad del voltaje de salida. Es decir, determinar cual extremo es
tierra y cual es VDD. El multimetro marcara un voltaje positivo cuando se tenga la punta negra
conectada a tierra y la punta roja conectada a VDD.
● Puerto USB de la PC
La conexion del puerto USB es directa a los rieles de energia de la protoboard. El voltaje que
entregan estos puertos es generalmente de 5V. Tambien se puede obtener 3.6V en algunos equipos.
Se pueden utilizar los puertos USB de la PC/Laptop/Netbook. Para ello se utiliza un receptor
adecuado(A,B,Mini-B) para PCB y se solda en una placa perforada junto con un header de 4 pines
para protoboard.
En la figura se muestra los receptores A, B, MiniB para cable USB y la funcion que desempeña cada
pin. Solo nos interesa tomar el pin de GND y el pin de VDD.
En la figura se muestra la tarjeta de alimentacion via USB que se inserta directo en la protoboard.
4.0 Resumen
Una vez que el prototipo funciona como se desea, se puede proceder a grabar de la forma natural la
aplicacion del usuario. Es decir, se elimina el bootloader del PIC para que no pueda ser llamado en el
prototipo final.
Ademas, se presentaron formas alternativas de energizar al PIC. Todas ellas tienen el mismo objectivo:
entregar un voltaje de 5V DC constante al PIC16F886. La mas utili para la fase de desarrollo del
prototipo es la de utilizar el puerto USB de la PC. En esta se evita el gasto de baterias y solo se
necesita de un cable USB comun.
Una vez que se tenga un prototipo final se puede conmutar a una alimentacion de baterias. Por
ejemplo cuando el sistema embebido es portatil. El caso de un carro controlado por un PIC es un buen
ejemplo de un sistema embebido que necesitara de baterias para funcionar.
5.0 Referencias
● MPLABX . IDE open source de Microchip para desarrollo de programas para los PICs de 8/16/32 bits.
Se utiliza para desarrollo de programas en lenguaje ensamblador(MPASMX),para su simulacion y
depurado.
● PICKIT2 . Programador en circuito para toda la gama de microcontroladores de 8/16/32 bits de
Microchip. Se utilizo para bajar el 'bootloader' al PIC16F886.
● Serial bootloader AN1310 de Microchip . Bootloader serial AN1310 de Microchip para toda la gama
de PICs 16FXXX/18FXXX. Utilizado para bajar programas al PIC16F886 embebido en la protoboard.
● Fritzing . Open source software para el diseño de prototipos en protoboard virtual, esquematico y
circuito impreso(PCB). Se utilizo para generar las imagenes que muestran el alambrado en
protoboard de los diagramas esquematicos mostrados.
● Proteus . Software comercial para el desarrollo de esquematicos, simulacion virtual del prototipo y
creacion del circuito impreso(PCB). Se utilizo para la creacion de los esquematicos.
● Realterm . Open source software que sirve para comunicar a la PC con perifericos externos via sus
puertos seriales(COMX). Se utilizo para determinar el numero de puerto serial que tiene asignado la
PC(COMX).
● Wikipedia . Enciclopedia libre, la cual es creada con la contribuccion de cualquier persona. Se utilizo
para consultas rapidas de conectores USB, etc.
● Dokuwiki . En un software open source para la creacion de 'wikis' que sirven para crear cualquier
tipo de documentacion al estilo 'wikipedia' . Se utilizo para la creacion de la pagina del laboratorio
de microcomputadoras.
● Google . Buscador de paginas web. Utilizado comunmente para la busquedad de informacion tecnica
empleada en el articulo, en especial para localizar las datasheets de los componentes utilizados.
From:
http://localhost/dokuwiki/ - Laboratorio de microcomputadoras
Permanent link:
http://localhost/dokuwiki/doku.php?id=articles:bootloader