Está en la página 1de 25

2012/09/15 03:41

1/25

Bajando programas al PIC16F876A/877A/886/887

Bajando programas al
PIC16F876A/877A/886/887
Sandro Caballero Rivas
Los programas ejecutables(firmware) creados en el MPLAB/MPLABX tienen la extension .hex. Estos
programas contienen el codigo de maquina que va a ejecutar el microcontrolador en cuanto se le de
energia o se de reset. El programa 'ejecutable' puede ser bajado al microcontrolador de dos formas:
1. Utilizando un Programador en circuito(ICSP) como el PICKIT2
2. Utilizando un 'bootloader' previamente cargado en el PIC16F886
En esta seccion utilizaremos ambos metodos.
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 diseo 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.
Completado el proceso de bajar(quemar) un programa, se mostrara a continuacion alternativas de
alimentacion de voltaje para el PIC.
Los ejemplos mostrados se enfocan al PIC16F886. Sin embargo el proceso es extendible a los PICs
PIC16F876A/877A/886/887.

1.0 Programador PICKIT2


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.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

El 'USB Port Connection' se conecta al puerto USB de la PC, se enciende led verde(Power). El
'Programming connector' se conecta al PIC.
A traves de los 6 pines del PIC se baja el programa a la memoria de programa(FLASH). El
'programming connector' del PICKIT2 es un conector hembra de 7 pines. Los pines del PICKIT2 se
conectan directo a los pines del microcontrolador que tengan el mismo nombre.
Se muestran los pines del PICKIT2 y los pines del PIC16F876A/877A/886/887 a los que se conectan:
PICKIT2 PIC16F886/887 PIC16F876A/877A
Vpp RE3/~MCLR/Vpp
~MCLR/Vpp
VDD
VDD
VDD
VSS
VSS
VSS
PGD
RB7/ICSPDAT
RB7/PGD
PGC
RB6/ICSPCLK
RB6/PGC
AUX.
En la siguiente figura se muestra como realizar la conexion para el PIC16F886.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

3/25

Bajando programas al PIC16F876A/877A/886/887

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.
En el laboratorio se dispone de un programador PICKIT2. Se encuentra conectado a varios Sockets
removibles, ZIF. En estos sockets se puede insertar un PIC de 28/40 pines y programarse desde la PC.
Los sockets ya estan conectados a los pines exactos del PIC a programar, de tal forma que ya no es
necesario alambrar las conexiones entre ambos.
Los zocalos o conectores ZIF del PICKIT2 del lab. tienen una etiqueta grabada que indica que tipos de
PICs se pueden insertar:
Etiqueta
'PIC16F873A' 28 pines 'PIC16F877' 40 pines
PIC que se puede insertar
PIC16F876A/886
PIC16F877A/887
Los zocalos ZIF(Zero insertion force) se muestran en la siguiente figura:

El pin 1 esta sealado en el PIC con un punto o hoyo pequeo 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:

Menu Inicio Microchip Pickit 2 V2.xx

En la siguiente figura se observa la aplicacion:

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

En la zona 0 se encuentra situado el menu de la aplicacion.


En la zona 1 se muestra el PIC identificado automaticamente por el programador, el USER ID y la
palabra de configuracion.
En la zona 2 se despliegan los mensaje de estatus de la aplicacion. En este caso se seala que el
PICKIT2 esta conectado y que se reconocio al microcontrolador PIC16F886.
En la zona 3 se muestra el voltaje de programacion a utilizar cuando se programa al PIC. Este
voltaje tambien podria servir como fuente de alimentacion para el proyecto en el que este
embebido el PIC(posterior a su programacion).
En la zona 4 se muestra la memoria de programa del PIC.
En la zona 5 se muestra la memoria EEPROM del PIC.
En la zona 6 se muestran los botones de programacion. Con ellos se puede:
Leer el firmware actual que tiene almacenado el PIC en su memoria de programa(Read) . Se
despliega en la zona de 'program memory'.
Bajar el firmware(.hex) al PIC(Write). Se baja el contenido desplegado en la zonas de: 'program
memory', 'EEPROM data', MidRange/Standard configuration('User ID' y 'Configuration').
Verificar que se haya grabado correctamente el firmware en el PIC(verify)

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

5/25

Bajando programas al PIC16F876A/877A/886/887

Borrar la memoria de programa actual del PIC(Erase)


Verificar que la memoria de programa actual del PIC este en blanco o borrada(Blank Check)

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
Se presenta el diagrama esquematico de el PIC16F886 controlando a un led. El led parpadeara cada 1
segundo.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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 pin 1 del regulador de voltaje de 5V es el primer pin(izquierda) viendo de frente al encapsulado, el
pin 2 es el de enmedio y el pin 3 es el de la derecha. En la L7805C datasheet pagina 2 se muestra
fisicamente la asignacion de pines del regulador de voltaje.
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 seal 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).
http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

7/25

Bajando programas al PIC16F876A/877A/886/887

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.
Los capacitores ceramicos de 27pF(pico-farads) y 0.1 uF(micro-farads) no tienen polaridad. Se pueden
conectar sus pines de forma indistinta. El capacitor de 27pF se identifica por la marca '27'. El
capacitor de 0.1uF se identifica por la marca '104'.
Las resistencias de 1Kohm inician con los colores (cafe,negro,rojo).
La resistencia de 4.7Kohms inician con los colores (Amarillo, violeta,rojo).
El anodo del led es el pin mas largo.
El catodo del led esta indicado por una parte aplanada en el encapsulado.
El crystal se conecta de forma indistinta, es decir, no tiene polaridad. Se recomienda conectar el
crystal y los capacitores de 27pF directo a los pines OSC1(9) y OSC2(10) del PIC16F886. En el
alambrado en protoboard se muestran conectados lejos de esos pines porque no se ven bien las
imagenes en la protoboard cuando se conectan directo.
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 led verde se conecta al pin RB0 del puerto B del PIC.
El armado en protoboard es el siguiente:

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
Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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.
Programar la aplicacion de ejemplo utilizando el PICKIT2:

Colocar el PIC16F886 en el socket correspondiente al encapsulado de 28 pines.


Bajar el siguiente firmware blinkingled.x.production.hex como se explico anteriormente.
Retirar PIC de socket y ponerlo en protoboard.
Dar energia a la protoboard para que se comience a ejecutar el programa.

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).
Se presenta el codigo en ensamblador:
blinkled.asm
LIST
p=16F886
#include <p16f886.inc>
;Palabra de configuracion. Indica que caracteristicas especiales del
microcontrolador
;se activaran: tipo de Reloj, Watctdog timer,etc.
;Se obtiene dando click al menu 'Window' -> PIC memory views ->
Configuration bits
;Se elige FOSC = HS(para usar un crystal de 20MHz), MCLRE = ON(para que
el pin de reset funcione)
;, BOR4V = BOR21V y todas las demas opciones se dejan en OFF.
;A continuacion dar click en 'Generate Source Code to output'
;Copiar las linea que estan descoemntadas y que empiezan con __CONFIG y
pegarlas en este
;punto.
__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

;variables utilizadas por la subrutina RETARDO. BANK0


valor1 EQU H'23'
valor2 EQU H'24'
CBLOCK
valor3
http://localhost/dokuwiki/

0x25

Printed on 2012/09/15 03:41

2012/09/15 03:41

9/25

Bajando programas al PIC16F876A/877A/886/887

ENDC
;Constantes
CTE1
EQU
CTE2
EQU
CTE3
EQU
ORG 0
GOTO

utilizadas por la subrutina RETARDO expresadas en decimal


D'164'
.100
D'100'

INICIO

ORG 5
INICIO:
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW
output
MOVWF

B'00000000' ;Config. todos los pines del puerto B como


TRISB

BSF STATUS,RP0
BSF STATUS,RP1
MOVLW
digital
MOVWF
digital.

;Sel. BANK1 para accesar al reg TRISB

;'0' -> output . '1' -> input


;Sel. BANK3 para accesar al reg ANSELH

B'00000000' ;config. los pines RB0-RB5 del puertoB como I/O


ANSELH

;Con un '0' se configura al pin como I/O


;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.
BCF STATUS,RP0
BCF STATUS,RP1

;Sel. BANK0 para accesar PORTB

CLRF

;limpiar PORTB. Apaga led

PORTB

MAIN:
BSF PORTB,0
CALL
RETARDO

;led ON
;mantener encendido por 1 segundo

BCF PORTB,0
CALL
RETARDO

;led OFF
;mantener encendido por 1 segundo

GOTO

;repetir secuencia

MAIN

END_MAIN:
SLEEP
;Subrutina RETARDO que al ser ejecutada se tarda 1 sec sin hacer bada y
Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

regresa
;al punto posterior a su llamada.
RETARDO:
BCF STATUS,RP0
BCF STATUS,RP1
MOVLW
MOVWF
TRES:
MOVLW
MOVWF
DOS:
MOVLW
MOVWF
UNO:
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO

;BANK0 para regs valor1,valor2,valor3

CTE1
valor1
CTE2
valor2
CTE3
valor3
valor3,f
UNO
valor2,f
DOS
valor1,f
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'.
El bootloader es un programa que se almacena generalmente en la parte alta de la memoria de
programa del PIC. Se encarga de :

Establecer comunicacion con el puerto serie de la PC.


Recibir el archivo .hex y programarlo en la parte baja de la memoria de programa.
Pasar el control de la ejecucion del nuevo programa al program counter,PC del PIC.

El bootloader es un 'auto-programador' incluido en la memoria de programa del PIC. Es decir, ya no es


necesario utilizar el PICKIT2 para bajar el firmware. Solo es necesario programar el bootloader una
unica vez en el PIC y despues este se encargara de programar por si mismo todos los archivos .hex
que envie la PC via su puerto serie.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

11/25

Bajando programas al PIC16F876A/877A/886/887

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.
El bootloader que utilizaremos en el curso es el Serial bootloader AN1310 de Microchip . Bajar la
aplicacion e instalarla. Copia local serial bootloader AN1310
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:

Bootloader AN1310 PIC16F876A a 20MHz


Bootloader AN1310 PIC16F877A a 20MHz
Bootloader AN1310 PIC16F886 a 20MHz
Bootloader AN1310 PIC16F887 a 20MHz

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.
El sistema minimo incluye:

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 aadir el hardware extra
que se desee controlar con el PIC.

Diagrama esquematico
En la siguiente figura se muestra el diagrama equematico del sistema minimo.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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 pin 1 del regulador de voltaje de 5V es el primer pin(izquierda) viendo de frente al encapsulado, el
pin 2 es el de enmedio y el pin 3 es el de la derecha. En la L7805C datasheet pagina 2 se muestra
fisicamente la asignacion de pines del regulador de voltaje.
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 seal de VDD. En la PIC16F886/887 datasheet se muestran los
http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

13/25

Bajando programas al PIC16F876A/877A/886/887

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.
Los capacitores ceramicos de 27pF(pico-farads) y 0.1 uF(micro-farads) no tienen polaridad. Se pueden
conectar sus pines de forma indistinta. El capacitor de 27pF se identifica por la marca '27'. El
capacitor de 0.1uF se identifica por la marca '104'.
Las resistencias de 1Kohm inician con los colores (cafe,negro,rojo).
La resistencia de 4.7Kohms inician con los colores (Amarillo, violeta,rojo).
El anodo del led es el pin mas largo.
El catodo del led esta indicado por una parte aplanada en el encapsulado.
El crystal se conecta de forma indistinta, es decir, no tiene polaridad. Se recomienda conectar el
crystal y los capacitores de 27pF directo a los pines OSC1(9) y OSC2(10) del PIC16F886. En el
alambrado en protoboard se muestran conectados lejos de esos pines porque no se ven bien las
imagenes en la protoboard cuando se conectan directo.
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 led verde se conecta al pin RB0 del puerto B del PIC.
En la MAX232N datasheet pagina 17, figura 5 se muestra:

La asignacion de pines del MAX232N(Nombre de pin y numero de pin).


Los valores de capacitancia de los 5 capacitores electroliticos que utiliza(renglon MAX232)
La forma en que se le conectan los capacitores ,el pin de GND,el pin de VCC(5V)
Los pines que se conectan al PIC(T1IN,R1OUT) y al conector DB9F(T1OUT,R1IN). TTL/CMOS inputs y
outputs son seales de voltaje de 0V y 5V que se conectan al puerto serie del PIC(UART). RS-232
inputs y outputs son seales de voltaje de +8V y -8V que se conectan a la PC via el conector DB9F.
El MAX232N puede manejar dos puertos seriales al mismo tiempo. Aqui solo se utiliza uno porque el
PIC solo tiene una UART.

Funcion de los componentes del sistema:


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
seal cuadrada de frecuencia FOSC y periodo TOSC = 1 / FOSC. Esta seal 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.
Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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 daarse 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(min) VDD(max)
FOSC
2.0V
5.5V
< = 8 MHz
3.0V
5.5V
< = 10 MHz
4.5V
5.5V
< = 20 MHz
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 daarse.
El Micro-switch NO(normalmente abierto) y la resistencia de pull-up asociada conforman al circuito de
RESET externo del PIC. Este circuito entrega un '0' mientras este presionado y se mantiene en '1'
cuando no esta presionado. Este voltaje se conecta al pin RE3/~MCLR/Vpp del PIC. Este pin mantiene
en RESET al micro mientras reciba un '0', el PIC congela la ejecucion del programa e inicializa sus
modulos internos y SFR's a valores de default. Cuando recibe un '1' el PIC se encuentra en modo de
ejecucion(RUN) normal, es decir, esta ejecutando la aplicacion programada.
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.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

15/25

Bajando programas al PIC16F876A/877A/886/887

Ensamble en Protoboard
En la siguiente figura se muestra el armado del sistema minimo en la protoboard.

Utilizar alambre de calibre AWG 22(mas grueso),24 o 26(mas delgado).

Bajando programas (Blinking a led)


A continuacion se aadira un led al sistema minimo y se le programara un firmware que lo hara
parpadear cada 1 segundo.
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.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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

En la figura se muestra la aplicacion cuando no existe conexion con el PIC.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

17/25

Bajando programas al PIC16F876A/877A/886/887

Bajar el firmware(.hex) al PIC:


1. Conectar cable serial a la PC.
2. (Opcional)Identificar el numero de puerto serie que utiliza la PC para comunicarse(COMX).
Abrir aplicacion Realterm. Click menu 'inicio' Todos los programas Realterm Realterm
Click en pestaa 'Port'.
Seleccionar Port: 1 .
Abrir puerto serial 1(COM1) . Boton 'Open' debe estar presionado.
Dar un click en la pantalla negra del Realterm para posicionar el cursor sobre ella.
Poner los pines 2 y 3 del cable serial en corto con unas llaves o algun metal. Los numeros de pin
del cable serial estan marcados dentro del conector macho,DB9M.
Presionar cualquier tecla del teclado. En la pantalla negra se observara el caracter
correspondiente a la tecla presionada.
Si no se observo el caracter de la tecla presionada, repetir los pasos anteriores desde seleccionar
otro numero de Port(COMX) hasta que se determine cual es el COMX asignado al puerto serie de
la PC.
Cerrar la aplicacion Realterm y recordar el numero de COMX que funciono en la prueba anterior.
En la siguiente figura se muestra el pantallazo del puerto serial COM1 identificado:

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

3. Conectar Puerto serie de PC a protoboard.


4. Click menu 'Program' Settings . Seleccionar:
COM Port: COM1 . Puerto serie usado por la PC, podria ser diferente el numero.
Bootload Baud Rate: 19200 bps Application Baud Rate: 38400 bps
Flash Program memory: habilitada
Config bits: deshabilitada
EEPROM: habilitada
Click 'OK'
El bootloader programado en el PIC se comunica a una velocidad serial,Bootload Baud Rate de
19200 bps,sin paridad,1 bit de inicio y 1 bit de paro(19200 BAUDS,8N1). Este bootloader puede
autodetectar esta velocida(19200). Posteriormente se podria utilizar otra velocidad de
comunicacion serial, pero debe hacerse al abrir la aplicacion. A mas velocidad se programa mas
rapido el PIC, pero podria ser mas complicado el detectar el bootloader.
La Application Baud Rate, 38400 8N1, es la velocidad de comunicacion serial que utilizara la
aplicacion del usuario(firmware a programar). Las aplicaciones que desarrollemos utilizando el
puerto serie utilizaran esta configuracion. Esta es independiente de la velocidad de programado
que utiliza el bootloader.
5. Dar energia al PIC.
6. Click en boton 'Break/Reset Application Firmware'(o utilizar menu 'Program' Break/Reset mode)
7. Click boton de RESET del PIC16F886
8. Click boton 'Bootloader mode'(o utilizar menu 'Program' Bootloader mode)
Si se pudo establecer comunicacion con el bootloader del PIC, entonces se desplegara la
siguiente ventana:

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

19/25

Bajando programas al PIC16F876A/877A/886/887

En la barra de estado se muestra la version del firmware del bootloader(v1.05), el PIC


reconocido(PIC16F886), el puerto serie(COM1) y la velocidad (19200 bps).
Si no se pudo establecer comunicacion con el bootloader del PIC, entonces realizar
algunos intentos mas de conexion repitiendo desde el paso 5 .
Si aun no se logra establecer conexion , entonces intentar:
Presionar boton de RESET en PIC
Click boton 'Bootloader mode'(o utilizar menu 'Program' Bootloader mode)
9. Click boton 'Open'(o utilizar menu 'File' Open). Seleccionar firmware .hex a programar(quemar),
ejemplo blinkingled.x.production.hex .
La memoria de programa de la ventana se carga con el firmware.
10. Click boton 'Write Device'(o utilizar menu 'Program' Write Device).
Para bajar el firmware al PIC. Al terminar de bajarse se despliega en la barra de status 'Write
complete(FLASH)'
11. Ejecutar firmware(2 formas):
Click boton RESET del PIC16F886
Click boton 'Run Application firmware'(o utilizar menu 'Program' Run mode).
En esta opcion se despliega la siguiente ventana:

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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.

3.0 Fuentes de voltaje alternativas


Nota: Estas fuentes de voltaje se conectan al PIC en lugar de el regulador de 5V mostrado
anteriormente. No deben conectarse varias fuentes de voltaje al mismo tiempo a los rieles
de energia de la protoboard(VDD y GND). Es decir, solo se usa una de todas las fuentes de
voltaje especificadas.
Fuentes de alimentacion de 3V a 5V alternativas:

Tres pilas AA de 1.5V conectadas en serie para obtener 4.5V.


La conexion es directa a los rieles de energia de la protoboard. Se utiliza un portapilas como el
mostrado en la figura.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

21/25

Bajando programas al PIC16F876A/877A/886/887

Cuatro pilas AAA de 1.2V conectadas en serie para obtener 4.8V.


La conexion es directa a los rieles de energia de la protoboard. Se utiliza un portapilas como el
mostrado en la figura.

Eliminador de voltaje con salida fija o universal.


Se puede utilizar un eliminador de baterias que de un voltaje fijo < = 5V, por ejemplo de 3.3V o 5V.
La conexion es directa a los rieles de energia de la protoboard. El eliminador mantiene el voltaje
constante o regulado.
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.

Otra opcion es un eliminador de baterias universal. En estos se puede seleccionar el voltaje de


salida deseado: 3.3V, 5V , 9V, 12V, etc. Si se seleciiona un voltaje > 5V se debe conectar la salida a
la entrada del regulador de voltaje de 5V.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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.

Cargador para celular con salida fija que se encuentre entre 3V a 5V


Se puede utilizar un cargador de baterias para celular que de el voltaje necesario. Para estos
cargadores no hay jacks que se consigan facilmente. Se podria pelar los cables y conectarlos directo
a la protoboard. Primero investigar con un multimetro que el voltaje de DC sea < = 5V e investigar
que cable 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 desempea cada
pin. Solo nos interesa tomar el pin de GND y el pin de VDD.

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

23/25

Bajando programas al PIC16F876A/877A/886/887

En la figura se muestra la tarjeta de alimentacion via USB que se inserta directo en la protoboard.

4.0 Resumen
Se presentaron dos formas de bajar un programa al PIC16F886.

La primera es la forma natural de programar el firmware y se realiza via un programador en


circuito(ICSP) como el PICKIT2.
En esta forma se graba un solo programa en toda la memoria de programa del PIC(FLASH). El
programa se ejecuta inmediatamente al darle energia o RESET.
El PIC se puede programar directo en la protoboard o colocandolo en un socket ZIF que previamente
fue conectado al PICKIT2 de forma permanente, como en la instalacion del laboratorio..
La segunda forma consiste en grabar un 'bootloader' al PIC con el PICKIT2.
En esta forma se queda grabado el bootloader de forma permanente en la parte alta de la memoria
de programa del PIC16F886(FLASH). La parte baja o libre de la memoria de programa se utiliza para
almacenar la aplicacion del usuario(firmware) de forma permanente.
Esto quiere decir que existen dos programas almacenados en la memoria de programa del PIC. Uno
de ellos es el bootloader(fijo siempre) y el otro es la aplicacion del usuario, la cual se regraba varias
veces hasta que se determine que la aplicacion funciona como se espera.
La ventaja del bootloader es que permite que el PIC16F886 se pueda autoprogramar via la ayuda
del bootloader. Solo es necesario una conexion serial con la PC para bajar la nueva aplicacion,
firmware. Con esto se evita el tener que estar programando el PIC a cada rato de la forma natural
via el PICKIT2, el cual no siempre esta disponible.
Es decir, con el bootloader se logra depurar el prototipo de forma mas rapida .

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Last update: 2012/09/15 03:40

articles:bootloader http://localhost/dokuwiki/doku.php?id=articles:bootloader

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
Se utilizaron las siguientes referencias durante la elaboracion del presente articulo:

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 diseo 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
Last update: 2012/09/15 03:40
http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41

25/25

Laboratorio de microcomputadoras - http://localhost/dokuwiki/

Bajando programas al PIC16F876A/877A/886/887

También podría gustarte