Está en la página 1de 9

programador para pic 16f84 y 16f87x

proyecto: programador para microcontroladores pic 16f84 y 16f87x de microchip

introducción:
el propósito de este proyecto fue obtener un producto simple que nos permitiese programar los
principales microcontroladores con memoria flash de la firma microchip.
por sus similitudes en la forma de programar nos decidimos a enfocarnos en los modelos 16f84, 16f84a, 16f870,
16f871, 16f872, 16f873, 16f874, 16f876 y 16f877. la variedad nos pareció aceptable, por lo que a fin de no
complicar el diseño se descartaron los demás modelos.
dentro de la web se pueden encontrar muchos sitios dedicados a estos microcontroladores,
muy famosos entre los aficionados a la electrónica y la robótica debido a su bajo costo y
grandes prestaciones.
circuito del programador:
en el documento picprog-circuit.pdf podemos apreciar el circuito a utilizar.
si observamos el circuito, se pueden apreciar los tres posibles encapsulados que se pueden
hallar dentro de los modelos soportados por este programador ( pic 16f8xx ).
a pesar de sus diferencias, se puede ver que básicamente todos tienen las mismas salidas, solo que en los modelos
más sencillos estas se ven reducidas. pero a nivel programación los pines son los mismos (solo que en distinta
ubicación en cuanto a número de pin).
lo ideal sería usar tres zócalos del tipo zif ( inserción cero ) para los tres modelos de encapsulado, es decir: 2x 9,
2x 14 y 2x 20. en caso que el presupuesto sea muy ajustado, se puede recurrir al uso de zócalos comunes, los
cuales dan un resultado bastante aceptable.
las distintas tensiones necesarias para la programación y funcionamiento del pic 16f8xx se
controlan mediante vr1 (78l05) y vr2 (78l12).
la alimentación de entrada debe ser provista mediante una fuente externa que pueda entregar 15 a 17v de
corriente continua y aproximadamente 100ma.
la conexión al puerto paralelo de la pc se debe realizar mediante un conector db25 macho y
respetando el conexionado indicado en el circuito. estos conectores traen el número de cada
pin marcado al costado del mismo con lo que no es difícil su identificación. a su vez y para
mayor seguridad, en el circuito también se hace mensión al nombre que representa cada línea
a usar en el lpt.
en la siguiente figura se puede apreciar el pinout correspondiente al puerto paralelo de la pc:

debido a que este circuito está pensado para poder ser usado in circuit, el mismo podría
perfectamente con algunos retoques poder ser incluido dentro de un desarrollo para evitar tener
que extraer el chip para su programación. lo único que se debe tener en cuenta es que en
ningún momento el pin mclr/vpp debe ser conectado directo a vcc, ya que al intentar
programar se dañarían los transistores q1 y q3 al quedar estos cortocircuitando vcc y gnd.
otra posibilidad muy interesante sería proveer al programador con un conector de salida tipo bornera que permita
tener acceso desde el exterior a todos los puertos del micro que se está programando. de esta forma sería muy útil
a la hora del desarrollo al permitirnos usar el micro sin necesidad de extraerlo del programador. en el documento
salida.pdf se puede apreciar una idea para realizar el conector de salida antes comentado.

software

picprog está preparado para programar los siguientes modelos de la familia de microchip:
•16f84
•16f84a
•16f870
•16f871
•16f872
•16f873
•16f874
•16f876
•16f877
picprog le permite programar, verificar y borrar todos los modelos
anteriormente detallados.
el archivo hexadecimal (.hex) a grabar debe ser formato intel inhx8m. este es el formato estandar generado por la
herramienta de desarrollo mplab que puede descargarse gratis en el site de microchip.
picprog fue diseñado para trabajar en entorno windows 9x. en el archivo zip picprog-v2.zip se
encuentran las instrucciones así como la dll necesaria para su funcionamiento. debido a que
windows nt y windows 2000 son algo limitados a la hora de permitirnos tomar control del
hardware de la pc, este software no funciona en esos s.o.
el programa picprog fue diseñado para leer la configuración a aplicar al pic directamente
desde el archivo hexadecimal. esta configuración es la que indicará si el pic trabajará con
cristal (xt) o una celda rc, si se debe activar el watchdog, etc. para que esto sea así, esta
configuración se debe incluir dentro del código fuente (asm) antes de compilar el mismo
como se puede ver a continuación:
__config _cp_off & _wdt_off & _pwrte_on & _xt_osc
el ejemplo anterior corresponde a la configuración para un pic 16f84. en este caso se está indicando que no se
usará código de protección (cp), no se usará watchdog (wdt), se usará power up timer (pwrte) y se usará
oscilador a crital (xt). (según nomenclatura de microchip).
en caso que el archivo hexadecimal (.hex) no posea embebida la configuración, esta podrá ser realizada
manualmente mediante el botón configuracion .
así mismo picprog tiene la capacidad de autodetectar el pic instalado o bien también se puede realizar la
selección manualmente.
utilizando el software picprog:
para ejecutar el software, simplemente se debe debe hacer click sobre el ejecutable picprog.exe o bien crear un
acceso directo al mismo. una vez cargado, el funcionamiento es muy simple y se encruentra explicado en la
ayuda provista con el mismo.
es importante aclarar que no es necesario borrar el pic antes de reprogramarlo, ya que picprog verifica cada
sector de memoria a programar y solo regraba aquellos que son diferentes al actual. de esta manera se favorece la
vida útil de la memoria flash del pic. por consiguiente solo es recomendable el borrado total cuando se debe
regrabar un micro que fue grabado anteriormente utilizando código de protección (cp).
circuito de prueba:
una vez construido el programador, lo mejor es realizar las primeras pruebas con un proyecto
sencillo con el cual se tenga la certeza de su buen funcionamiento y de esa manera nos
demuestre que el pic ha sido correctamente programado.
este programa puede ser el walk.hex, el cual genera un sencillo efecto de secuenciador entre
cuatro led's.
en el siguiente diagrama se aprecia el circuito a utilizar con el programa walk.hex:

d1, d2, d3 y d4 son los led's que, si todo funciona correctamente, se prenderán
secuencialmente hacia un lado y hacia otro.
una vez construido, el siguiente paso es grabar en el pic el programa walk.hex , y si todo ha
funcionado bien los led's deberían comenzar a prenderse secuencialmente.
si deseas analizar el código fuente de este programa podés descargar walk.asm

codigo para enviar datos:

list p=16f84a
include "p16f84a.inc"
indf equ 0h
tmro equ 1h
pc equ 2h
status equ 3h
fsr equ 4h
ptoa equ 5h
ptob equ 6h
trisa equ 85h
trisb equ 86h
trans equ 0fh
r0d equ 0dh
r0e equ 0eh
unidad equ 10h
decena equ 11h
centena equ 12h
r14 equ 14h
r1b equ 1bh
loops equ 13h
loops2 equ 14h
conta equ 15h
z equ 2
rp0 equ 5h
z equ 2h
c equ 0h
w equ 0h
r equ 1h
tx equ 7h
org 00

goto inicio
org 05h
delay1 movlw .166
startup movwf r0e
redo nop
nop
decfsz r0e
goto redo
retlw 0
retardo movlw d'100'
movwf loops
top2 movlw d'110'
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2
goto top
decfsz loops
goto top2
retlw 0

enviar movwf trans


xmrt movlw 8
movwf r0d
bcf ptob,tx
call delay1
xnext bcf ptob,tx
bcf status,c
rrf trans
btfsc status,c
bsf ptob,tx
call delay1
decfsz r0d
goto xnext
bsf ptob,tx
call delay1
retlw 0

inicio bsf status,rp0


movlw 00h
movwf trisa
movlw 07fh
movwf trisb
bcf status,rp0
bsf ptob,tx

end
código para recibir:

list p=16f84a
include "p16f84a.inc"
radix hex
org 0x0c

indf equ 0h
tmro equ 1h
pc equ 2h
status equ 3h
fsr equ 4h
ptoa equ 5h
ptob equ 6h
trisa equ 85h
trisb equ 86h
r0d equ 0dh
r0e equ 0eh
conta equ 10h
recep equ 11h
z equ 2
c equ 0
rp0 equ 5h
z equ 2h
c equ 0h

w equ 0h
r equ 1h
rx equ 6h

org 00
goto inicio
org 05h
unoymedio
movlw .249
goto startup
delayl movlw .166
startup movwf r0e
redo nop
nop
decfsz r0e
goto redo
retlw 0
recibir nop
clrf recep
btfsc ptob,rx
goto recibir
call unoymedio
rcvr movlw 8
movwf conta
rnext bcf status,c
btfsc ptob,rx
bsf status,c
rrf recep
call delayl
decfsz conta
goto rnext
retlw 0
inicio bsf status,rp0
movlw 00h
movwf trisa
movlw 0ffh
movwf trisb
bcf status,rp0
clrf recep
clrf ptoa
ciclo call recibir
movlw 30h
subwf recep,w
movwf ptoa
goto ciclo

end

el pic 16f84 se utilizará para controlar el microbot desde sus entradas de los sensores
infrarrojos y el bumper hasta sus salidas en los dos motores paso a paso.
el nicrocontrolador pic 16f84 tiene 18 patillas y su distribución es la siguiente:
tiene dos puertos programables para entrada y salida que son el rax y rbx donde ra puede ser
desde ra0 hasta ra4 y rb0 hasta rb7.
vss es alimentación a masa y vdd alimentación a positivo entre +2 voltios y 6 voltios,
normalmente se utiliza 5 voltios.
mclr es una patilla para habilitar a nivel bajo 0 voltios un reset al microcontrolador.
osc1 yosc2 se utilizan para configurar internamente o por hardware exterior la frecuencia de
funcionamiento del pic desde un mínimo de 1khz hasta los 10 mhz de máxima que posee el
pic. normalmente se utiliza 4mhz aprovechando que 4 ciclos de reloj producen 1 ciclo de
ejecución de instrucción maquina, con lo que 1 instrucción se ejecutaría en 1 mhz y así
poderlo tener en cuenta para calcular tiempos de retraso o espera en la ejecución del
programa.
este microcontrolador tiene un juego reducido de instrucciones de 32 instrucciones risc de 14
bits cada instrucción, además posee una estructura harvard de manera que diferencia en sitios
diferentes los datos de las instrucciones, de modo que no pierde tiempo en diferenciar si es
dato o instrucción como ocurría en la estructura von neuman.
a continuacion se expone un esquema de la memoria de registro y datos:

También podría gustarte