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:
q

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

q q

q q q

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)
r r r

http://localhost/dokuwiki/

Printed on 2012/09/15 03:41

2012/09/15 03:41
r r

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:
q

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:
q q q q

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

;Sel. BANK1 para accesar al reg TRISB

B'00000000' ;Config. todos los pines del puerto B como TRISB ;'0' -> output . '1' -> input ;Sel. BANK3 para accesar al reg ANSELH

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

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 CLRF MAIN: BSF PORTB,0 CALL RETARDO BCF PORTB,0 CALL RETARDO GOTO END_MAIN: SLEEP ;Subrutina RETARDO que al ser ejecutada se tarda 1 sec sin hacer bada y
Laboratorio de microcomputadoras - http://localhost/dokuwiki/

;Sel. BANK0 para accesar PORTB

PORTB

;limpiar PORTB. Apaga led

;led ON ;mantener encendido por 1 segundo ;led OFF ;mantener encendido por 1 segundo ;repetir secuencia

MAIN

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 RETURN END CTE1 valor1 CTE2 valor2 CTE3 valor3 valor3,f UNO valor2,f DOS valor1,f TRES

;BANK0 para regs valor1,valor2,valor3

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 :
q q q

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:
q q q q

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:
q q q

q q q

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:
q q q q

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:
q

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:
r r r r r r r r r

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:
r r r r

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:
q

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.
q

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.
q

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:
q

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

Bajando programas al PIC16F876A/877A/886/887

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