Dsd (Pic 16f84)

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

Transcript of Dsd (Pic 16f84)

Page 1: Dsd (Pic 16f84)

programador para pic 16f84 y 16f87xproyecto: 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

Page 2: Dsd (Pic 16f84)

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.

Page 3: Dsd (Pic 16f84)

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

Page 4: Dsd (Pic 16f84)

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'

Page 5: Dsd (Pic 16f84)

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

Page 6: Dsd (Pic 16f84)

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

Page 7: Dsd (Pic 16f84)

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:

Page 8: Dsd (Pic 16f84)

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:

Page 9: Dsd (Pic 16f84)