Si habéis utilizado unprogramador por elpuerto serie del ordena-dor para programar losPIC16F87X, utilizando
el maravilloso software libre IC-Prog, habréis comprobado que eltiempo de carga del PIC16F876,por ejemplo, que tiene 8K es devarios minutos que se haceninterminables, sobretodo cuandoestamos programando y depu-rando programas.
Lo que presentamos en estecurso es un circuito que a travésde la USAR de los PIC 16F87Xes capaz de ponerse en comuni-cación con ellos y cargar en lamemoria de programa el código
hexadecimal del programa quequeremos que se ejecute. Estoreduce considerablemente eltiempo de programación ya quesolo carga los códigos del pro-grama que queremos cargar.La placa que hemos diseñadoademás de utilizarla como pro-gramadora, se puede utilizarcomo placa de desarrollo, ya quese dispone de acceso a todos ycada uno de los pines del micro-controlador a través de la tira depostes para circuito impresomacho acodados y dispone de uncircuito oscilador a cristal ennuestro caso a 4 MHz, tal y comose puede ver en el circuito de laFigura 1.
DESCRIPCIÓN DEL CIRCUITOEl circuito consta de un
microcontrolador PIC16F876 alque se le han conectado un cristalde cuarzo de 4MHz y loscondensadores de desacoplo de 27pF y un pulsador que cuando seactiva pone un nivel bajo en laentrada MCLR para provocar unRESET del sistema. Además parapoder conectar la USART delmicrocontrolador al ordenador, seha utilizado un circuito adaptadorde niveles MAX232, tal y comoindica el fabricante en sus notasde aplicación, y por último se leha dotado de un conectoracodado DB-9 macho para poderconectar el circuito al puerto serie
CURSO DE MICROCONTROLADORESPIC16F87X (...y III)
CURSO DE MICROCONTROLADORESPIC16F87X (...y III)
Fernando Remiro DomínguezProfesor de Sistemas Electrónicos
IES. Juan de la Ciervawww.terra.es/personal/fremiro
MICR
OCON
TROL
ADOR
ES
54RESISTOR
Programador para PIC16F87X con bootloader.
Curso microcontroladoresPAGS 27/12/02 10:01 Página 54
del ordenador. El cable deconexión debe ser un modemnulo, es decir, un cable que solonecesita la línea de masaconectada al terminal 5 de los dosconectores y se cruzan las líneas 2de un extremo (RxD) con la 3 delotro (TxD) y viceversa. Ver eldiagrama de conexión de laFigura 3.
Además la placa dispone deun conector ARJ11, conectado alas líneas MCLR, RB3, RB6 yRB7 del microcontrolador, loque permite realizar la conexióna un módulo ICD (Depurador encircuito), que como veremos esuna herramienta de bajo costo
que conectada al PC y en elmismo entorno del MPLAB,permite la visualización de losregistros del microcontroladoren los puntos de ruptura que seestablezcan. Pudiéndose ejecutarlos programas en tiempo real oen modo paso a paso.
Figura 1.- circuito de la placa de desarrollo y de programación con el bootloadaer
VSS
VDD
VCC
VCC
VCC
VCC
VCC
VCC
VSS
VCC
RC2
TXPC
RC7
RC6
RB7
RB3
RA
5R
C7
RC
6R
C5
RC
4R
C3
RC
2R
C1
RC
0
RA
0
RB
7R
B6
RB
5R
B4
RB
3R
B2
RB
1R
B0
RA
4R
A3
RA
2
RA
1
RB6
MC
LR
MCLR
RC7
RC6
RB3
MCLR
RB0
RC3
RA3
RC5
RB1RA5
RA2
RB2
RB6
RA1
RC1
RC0
RA0
RC4
RB4
RB5
RB7
RA4
RXPC
RXPC
TXPC
R2
100
R1
10K
J1
CON6
1
2
3
4
5
6
C5
1uF
C21uF
C31uF
C1
1uF
C8
0.1u
P1
DB9
5 9 4 8 3 7 2 6 1
C4
1uF
U1
MAX232
1
2
3
6
4
5
14
13
12
11
9
10
8
7 1516
C1+
V+
C1-
V-
C2+
C2-
T1OUT
R1IN
R10UT
T1IN
9
10
8
7 GND
VCC
U2
PIC16F873
1
2
3
4
5
6
7
9
10
11
12
13
14
28
27
26
25
24
23
22
21
18
17
16
15
20
19
8
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2
RA3/AN3/VREF
RA4/TOCKI
RA5/SS/AN4
OSC1/CLKIN
OSC2/CLKOUT
RC0/T1OS0/T1CKI
RC1/T1OS1/CCP2
RC2/CCP1
RC3/SCK/SCL
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0/INT
RC7/RX/DT
RC6/TX/CK
RC5/SDO
RC4/SDI/SDA
VDD
VSS
VSS
SW1
RESET
J2
CON25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
E1
ESP
C6 27pF
C7 27pF
X1
4MHz
CONECTOR RJ11DEBUGE
Figura 2.- Conexión del ICD ala placa de desarrollo.
Figura 3 .- Cable de conexión MODEM nulo para la conexión de la placa de desarrollocon el PC.
Curso microcontroladoresPAGS 27/12/02 10:01 Página 55
COMO UTILIZAR EL PROGRAMABOOTLOADER1. En primer lugar debemos
obtener el programa en lasiguiente web http://www.ehl.cz/pic/pic_e.htm , donde también sepuede obtener el PIC donwloa-der V1.8.
2. Abrir el proyecto bootldr.pjtutilizando el programaMicrochip MPLAB y cambiarlos parámetros de la secciónde usuario marcados dentrodel ensamblador con las mar-cas <<<, tal y como se muestraen la Tabla 1, en la que hemosfijado el microcontroladorPIC16F876, con un osciladorde 4MHz, una velocidad detransmisión de 9600 baudios yutiliza el pin 7 del PORTBcomo señal de disparo paraejecutar el bootloader cuandoestá a nivel bajo y correr elprograma de usuario cuandoestá a nivel alto. Por tiempoentra en el programa de usua-rio después de haber pasado0,3 segundos sin recibir lapalabra de IDENTIFICA-CIÓN.
3. Si se modifica alguno de losparámetros anteriores, debe-mos de volver a compilar elprograma bootldr.asm.
4. Programar el microcontrola-dor con el archivo bootldr.hexutilizando cualquier progra-mador de los que ya se hanvisto en esta Revista, porejemplo el que el que apareceen el módulo de aprendizajede microcontroladores PICque apareció en el número189. Poniendo los bits de con-figuración para que el micro-controlador trabaje en la apli-cación.
5. Recompilar el programa de laaplicación para que no borre elbootloader. El bootloader usalos 256 bytes de la parte alta dememoria de programa(0x1F04-0x1FFF).Llegado a este punto lo más
aclaratorio es ver un ejemplocon un programa que utilizaeste método de carga del pro-grama de usuario en el micro-controlador.El programa TMR0_1.asm esun programa ejemplo que uti-liza una temporización utili-zando TMR0 sin utilizar lasinterrupciones. Realiza unatemporización de 32,77 msque se emplea para hacer par-padear los diodos LED pareso impares respectivamenteconectados al PORTB. En elcódigo de este programa conseparados por un ";" (es decir,como un comentario) seencuentran las instruccionesde salto a INICIO que utiliza-ríamos con un programadorconvencional. Y al final delprograma, en la posiciónde memoria 0x1F00 hemosescrito:MI
CROC
ONTR
OLAD
ORES
56RESISTOR
;============================ Sección fijada por el usuario ==========================
list p=16f876 ; <<< fijar el tipo de microcontrolador
;Poner el mismo microcontrolador en el proyecto#include <p16f876.inc> ; <<< poner el archivo *.inc del microcontrolador seleccionado
#define FOSC D'4000000' ;<<< Poner la frecuencia del cuarzo (Hz), max. 20 MHz#define BAUD D'9600' ;<<< poner la velocidad de transmisión (Bd)#define BAUD_ERROR D'4' ;<<< Poner la tasa de error (%) #define TIME ;<<< Poner el método inicio del bootloader PIN/TIME/AUTO
;Disparo por puesta a nivel bajo de la señal de disparo;TIME Inicia la recepción del byte de IDENT después el RESET
#define POR PORTB ;<<< solo para el PIN – del puerto en juegoPORTB/PORTC/PORTD/PORTE
#define PORT_BIT 7 ; <<< solo para el pin PIN – poner el bit de la líneaseleccionada 0/1/2/3/4/5/6/7
#define TIMEOUT D'3' ; <<< solo para el TIME – fijar el tiempo(0.1 s), max. 25.5 s
;============ Fin de la sección fijada por el usuario ====================================
Tabla 1.- Sección del programa bootloader que debe fijar el usuario.
ORG 0x1F00bcf PCLATH,4 ;Selecciona el banco 0 de memoriabcf PCLATH,3goto INICIO
Curso microcontroladoresPAGS 27/12/02 10:01 Página 56
Es decir, en las posiciones dememoria 0x1F00-0x1F03, escri-bimos un salto largo de 14 bits ala posición de memoria INICIO,que está en el banco cero dememoria de programa. Esto últi-mo debe verificarse si se utilizaun compilador en C.
6. Recompilar el programa de laaplica
COMO REALIZAR LA CARGAEN EL MICROCONTROLADOR1. En primer lugar se conecta la
placa de desarrollo al PCmediante un cable de modem
nulo, tal y como se comentoanteriormete.
2. Para realizar la carga del pro-grama de usuario, vamos autilizar un programa de"carga" freware, se trata delPIC downloader de PetrKolomaznik y que hemos con-
MICR
OCON
TROL
ADOR
ES
57RESISTOR
;****************************************************************************; Programa TMR0_1.ASM Fecha : 7- Mayo-2002; Este programa utiliza una temporización utilizando TMR0 sin utilizar las interrupciones.;Se realiza una temporización de 32,77 ms que se emplea para hacer parpadear los diodos LED; pares o impares respectivamente conectados al PORTB; Programa preparado para cargar con el PIC downlader; Revisión : 0.1 Programa para PIC16F87X; Velocidad del Reloj: 4 MHz Reloj Instrucción: 1 MHz = 1 uS; Perro Guardián: Deshabilitado Tipo de Reloj : XT; Protección del código: OFF;*****************************************************************************
List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos
;ORG 0x00 ; Inicio del programa en ;goto INICIO
ORG 0x05 ;salva el vector de InterrupcionesINICIO bcf STATUS,RP1
bsf STATUS,RP0 ; Banco 1movlw b'11010111' ; Valor a cargar en OPTION_REGmovwf OPTION_REG ; predivisor 256 asignado a TMR0clrf TRISB ; PORTB como salidabcf STATUS,RP0 ; Banco 0clrf PORTB ; Apaga los LEDS del PORTB
BUCLE movlw b'01010101'movwf PORTB ; Enciende los LED impares del PORTBcall RETARDO ; Llamada a subrutina de RETARDOmovlw b'10101010'movwf PORTB ; Enciende los LED pares del PORTBcall RETARDOgoto BUCLE
RETARDOclrf TMR0 ; TMR0 = 0 y empieza su incremento
EXPLORAbtfss TMR0,7 ; Es el bit 7 de TMR0=1? goto EXPLORA ; No ha llegado TMR0 a 128 Decialreturn ; Ha llegado TMR0 al valor 128D y retorna
; al programa principalORG 0x1F00bcf PCLATH,4 ;Selecciona el banco 0 de memoriabcf PCLATH,3goto INICIO ;Salta a INICIOEND
Tabla 2.- Programa TMR0-1.asm para cargar con el bootloader.
Curso microcontroladoresPAGS 27/12/02 10:01 Página 57
seguido en la webhttp://www.microchipc.com/ .Una vez instalado, al ejecutar-lo, aparece una pantallacomo la que se muestra en laFigura 5.
3. Seleccionamos la velocidad detransmisión en baudios, ennuestro caso 9600, el puertoserie de comunicación, en elejemplo hemos seleccionadoel COM2 y buscamos el nom-bre del programa en códigohexadecimal que queremoscargar en el microcontrolador,TMR0-1.hex.Este programa tiene lassiguientes teclas de funciónrápida:F2 - Búsqueda F4 - Escribir ESC - Cancelación F10 - Salida
4. Seguidamente se pulsa elbotón de RESET y el progra-ma se carga en el microcon-trolador PIC. Según se va rea-lizando la carga, aparece unindicador de carga (líneaazul) y al finalizar la cargasuena una señal acústica.
5. Si volvemos a actuar manual-mente sobre el pulsador deRESET, se ejecutará el pro-grama de usuario.
MICR
OCON
TROL
ADOR
ES
58RESISTOR
Salto al Bootloader
Espacio de memoria,para cargar los
programas transmitidos
Salto al programade usuario
Código del Bootloader
0x1FFF
0x1F04
0x1F00
0x0004
0x0000 El Bootloader utiliza las4 primeras posiciones(0x0000-0x0003)
Espacio disponiblepara el programadel usuario(0x0004-0x1EFF)
Primeras 4 posicionespara el usuario(0x1F00-0x1F03)
Código del programaBootloader(0x1F04-0x1FFF)
Figura 4.- Mapa de memoria del Bootloader para un microcontrola-dor de 8KBytes.
Figura 5.- Apariencia de lapantalla que aparece al ejecutar elprograma PIC dowloader.
Características del programa PIC dowloader 1.8 :
● Compatible con el bootloader de HI-TECH's o de Shane Tolmiepara los microcontroladores PIC16F87x
● Funcionamientos bajo Windows 9x/ME/NT/2000 ● Selección de la velocidad a partir del 2400 a 56000 Bd ● Selección del puerto serie entre el COM1-6 ● Trabaja con datos de EEPROM en el archivo hexadecimal ● No envía la palabra de los configuración a la posición 0x2007 o
palabra de la identificación desde el bootloader ● Mantiene las últimas configuraciones● Se incluye el código de fuente ● El downloader del PIC se controla al realizar una señal de dispa-
ro del RESET en el microcontrolador ● Se trabaja en ensamblador para todos aquellos programadores
que no utilizan el lenguaje C. El bootloader es muy fácil de recom-pilar para otros microcontroladores actualizando el pin/tieme y lafrecuencias del cristal de cuarzo. Solo se necesita el programaMPLAB de Microchip que también es gratuito.
● Se puede obtener en las siguientes webs: (http://www.ehl.cz/pic/)(http://www.microchipc.com/)
Curso microcontroladoresPAGS 27/12/02 10:01 Página 58
Top Related