Anda di halaman 1dari 11

Ingeniera en Sistemas de Informacin y Ciencias de la Computacin

Nombre: Jos Roberto Bonifassi Morales 0906-09-10389 Nombre: Kela

Trabajo:
Proyecto grabador de pic

Curso: Arquitectura de Computadoras

Ingeniero: EDVIN AUGUSTO LOPEZ GMEZ

Coatepeque noviembre de 2012

Introduccin: El propsito de este proyecto fue crear un prototipo obtener un producto simple que nos permitiese programar los principales microcontroladores con memoria Flash. Por sus similitudes en la forma de programar nos decidimos a enfocarnos en los modelos 16F84, 16F84A, 16F87, 16F88, 14G627, 16F628, 16F648, 16F870, 16F871, 16F872, 16F873, 16F874, 16F876 y 16F877. La variedad nos pareci aceptable, por lo que a fin de no complicar el diseo se descartaron los dems modelos. Dentro de la Web se pueden encontrar muchos sitios dedicados a estos microcontroladores, muy famosos entre los aficionados a la electrnica y la robtica debido a su bajo costo y grandes prestaciones.

Programador por puerto serrie para PIC La programacin a travs del puerto serie debe sortear un impedimento. Los niveles de tensin en los que trabaja el puerto serie pueden ir de -12V a 12V. Estos voltajes tienen dos problemas. El primero es que como vimos en el programador por puerto paralelo(1) el protocolo ICSP trabaja con niveles de 0V, 5V y 13.2 voltios, por lo que habr que adecuar los niveles. Pero el segundo es ms complejo de resolver, dado que el estndar RS232 (puerto serie) solo especifica que el voltaje debe ser como mximo 12 o -12 voltios, pero coloca el mnimo en los 3 y -3 voltios respectivamente. Como norma podemos suponer que la mayora de ordenadores de sobremesa usan niveles de 8 y -8 voltios. Veremos las implicaciones de este segundo problema al final. Para conseguir programar un microcontrolador con los niveles de tensin adecuados, necesitamos adaptar los mismos, funcin por la que `Jens Dyekjr Madsen creo el programador JDM (2). Este programador tiene en cuenta que los 13 voltios necesarios no se pueden conseguir ni con 12 ni con -12 en el mejor de los casos ya que las tensiones sern incluso menores. Por lo tanto utiliza un pequeo truco, usar como tierra del circuito de la interfaz ICSP, el valor negativo del puerto. Suponiendo que las tensiones estn en el rango de -8 8 tenemos una tensin efectiva de 16 voltios. A grandes rasgos el programador JDM usa como tierra virtual la tensin negativa del puerto serie. Para estabilizar los niveles usa diodos zener que al no tener cada de tensin comparados con los reguladores de voltaje, permiten trabajar con puertos serie con niveles bajos de tensin. Ms informacin terica y completa en la pgina del autor. La nica modificacin que he realizado es la inclusin de un diodo en la tierra del conector ICSP para evitar la aparicin de tensiones negativas en los pines del microcontrolador. Por contra baja la tensin VPP hasta los 13 o 12,5 voltios, pero es suficiente para el microcontrolador PIC16F877 y en teora para el resto.

Vemos el programador:

Lista de componentes (sin contar conectores): 5 Diodos 1N4148 2 Transistores NPN (BC547B o similar) 1 condensador electroltico de 100 microfaradios 1 condensador electroltico de 22 microfaradios 1 Diodo zener de 8,2 de ruptura 1 Diodo zener de 5,1 de ruptura 1 resistencia de 10K ohmios 1 resistencia de 1.5K ohmios

Como ventajas frente al programador paralelo nos encontramos la ausencia de alimentacin externa, lo que reduce tanto el tamao del programador como su precio. Ya puntualizamos un problema en los niveles de tensin del puerto serie, y es que el estndar RS232 no fija un valor exacto para el puerto, sino que coloca en valor absoluto los niveles de 3 a 12 voltios. En los ordenadores de sobremesa tenemos de forma ms o menos generalizada una tensin absoluta de 8 voltios, pero en los porttiles este nivel suele ser bastante menor. Adems en tambin podemos encontrar con un problema similar en puertos serie con muy baja corriente. Con niveles demasiados bajos el programador no conseguir los 13 (ni 12) voltios necesarios, por lo que el microcontrolador no entrar en modo de programacin y no ser posible operar sobre l. La solucin en esos casos es sumar alimentacin externa que entregue el voltaje y la corriente que el programador y el microcontrolador necesita. Para esos casos bastara ingresar entre los pines del condensador de 100 microfaradios un voltaje de 18 voltios, limitados con una resistencia. Gracias a Eagle 3D podemos ver el programador serie tal y como quedara si lo hiciramos en una placa de circuito impreso creada a tal fin.

El circuito. Este programador, basado en el Ludipipo, est adaptado a la programacin de PICs, es simple y barato, pero permite programar a travs del puerto serie de cualquier PC de sobremesa (en los porttiles da problemas) una cantidad nada despreciable de PICs distintos, y todo ello utilizando software de programacin estndar, como ICPROG 1.4. Se ha probado con xito a programar los siguientes PICs: 16F627, 16F628. 16C84, 16F83, 16F84. 16F873, 16F874, 16F876, 16F877. 18F242, 18F252, 18F258, 18F442, 18F452, 18F458. Y, al menos en teora (no los he probado) debera funcionar correctamente con los siguientes: 16C62, 16C63, 16C64, 16C65, 16C66, 16C67. 16C71, 16C72, 16C73, 16C74, 16C75, 16C76, 16C77, 16C715. 16C620, 16C621, 16C622, 16C623, 16C624, 16C625. 16F870, 16F871, 16F872. 16C923, 16C924.

Teniendo en cuenta el coste en tiempo y dinero que requiere la construccinde este programador, no se puede pedir ms. Sin entrar en detalles sobre el funcionamiento del circuito, decir slo que se basa en principios muy parecidos a los del JDM2, pero con ciertos retoques en la temporizacin y la estabilidad de las seales. En este caso, se utiliza como alimentacin de +5V el condensador C2, que se carga mediante D2, D3 y D4 en los momentos en que las seales DTR, RTS y TXD del puerto serie son negativas, y su tensin queda estabilizada mediante D7. D5 fija la tensin de programacin en 12V y D6 limita la tensin de la seal CLOCK a 5V.

Utilizacin. Lo primero que hay que tener claro a la hora de utilizar este programador es el orden en que se deben hacer las cosas para no estropear ni el programador, ni el PIC, ni el puerto serie del PC. Siempre que queramos insertar o extraer un PIC del zcalo hay que desconectar el programador del puerto serie, ya que, al extraer la alimentacin del puerto serie, mientras est conectado estar alimentado. Por tanto, el proceso a seguir consta de los siguientes pasos: 1. Con el programador desconectado insertar el PIC en el zcalo en la posicin correcta (figura 6). 2. Conectar el programador al cable que viene del puerto serie del PC. 3. Llevar a cabo las operaciones de grabacin o lectura necesarias. 4. Desconectar el programador del cable que viene del puerto serie del PC. 5. Extraer el PIC del zcalo.

Como programar en el pic


Nosotros utilizaremos un PIC18F2550, pero estos ejemplos aplican en general a toda la linea de PIC18, principalmente a PIC18F2455, PIC18F2550, PIC18F4455, PIC18F4550. Con ciertas modificaciones tambin sirve a modo de ejemplo para los PIC16. La idea de estos post es ampliar el contenido didctico disponible sobre este compilador, que no hay mucho material a modo de ejemplo y adems tener esto como un referencia personal. SDCC es una herramienta libre, y esta disponible tanto para Windows como Linux. Suponiendo que ya tenemos instalado el SDCC, y algn IDE, o no, empezamos con el clsico Hola Mundo electrnico, en el que simplemente haremos apagar y prender un led. En este primer ejemplo se contempla el modo de setear los bits de configuracin del PIC, y la utilizacin de la librera delay que esta incluida en el compilador. El circuito es el siguiente:

Notese la ausencia de oscilador, esto se debe a que haremos uso del oscilador interno del PIC.

Bits de configuracin Para configurar los bits de configuracin(o tambin llamado fuses-fusibles) se usan las siguientes directivas del compilador__code y __at, es necesario mirar el header del pic a programar para poder ver como estn nombrados los registros y sus bits Como as tambin el datasheet para tener una buena idea de las configuraciones. Por ejemplo si se quiere modificar el registro CONFIG1H, y se pretende que los bits queden seteados de la siguiente manera: Oscilador Switchover deshabilitado, Fail safe Clock deshabilitado, Habilitado el oscilador interno con CLOK en RA6, la sintaxis requerida es: static __code char __ar(__CONFIG1H) config1=

_OSC_INTOSC__INTOSC_CLK0_RA6___USB_EC_1H & _FCMEN_OFF_1H & _IESO_OFF_1H Es algo similar a como se hace en asm. Conociendo esto ya es posible pasar a nuestro primer programa: [cc lang="c"] //Definiciones para hacer mas legible el codigo #define LED_TRIS TRISBbits.TRISB0 #define LED_PIN PORTBbits.RB0 //Agrego la librera de los pic para cargar configuraciones y variables y se agrega la librera delay provista por el compilador. #include "pic18fregs.h" #include "delay.h" static __code char __at __CONFIG1H conf1 = _OSC_INTOSC__INTOSC_CLK0_RA6___USB_EC_1H; // Activo oscilador interno static __code char __at __CONFIG4L conf2 = _LVP_OFF_4L; // Desabilito LVP static __code char __at __CONFIG2H conf3 = _WDT_DISABLED_CONTROLLED_2H; // Desabilito WDT //Programa principal void main(){ OSCCON = 0b11110011; //Configuro oscilador int en 8MHZ LED_TRIS = 0; //Configuro como salida while(1){ LED_PIN = 1; delay1mtcy(1); LED_PIN = 0; delay1mtcy(1); } } [/cc] El programa esta bastante comentado, no hay mucho que agregar, los define al inicio simplifican el cdigo, y no generan cdigo maquina extra. Los include para agregar libreras, como se hace normalmente en c. Se configuran los bits de inters. En el programa se configuran otros registros mas. Como ser el registro para el control del oscilador, en este caso se trabaja

a 8MHz, y a travs del registro TRISB se configura el bit correspondiente al led, como salida. En los define al inicio se adopto el pin RB1. Para generar los delay se recurri a la librera "delay.h" que se incluye con el compilador, dicha librera integra funciones para generar retardos de una cierta cantidad de ciclos de reloj. Mirando en el archivo delay.h se puede encontrar lo siguiente( lo he traducido): /* * La familia de funciones delayNNtcy realizan un * retardo de NN ciclos. Los posibles valores de NN: * 10 10*n ciclos de retraso * 100 100*n ciclos de retraso * 1k 1000*n ciclos de retraso * 10k 10000*n ciclos de retraso * 100k 100000*n ciclos de retraso * 1m 1000000*n ciclos de retraso */ La formula para saber cuantos ciclos de retrasos necesitamos para generar un retardo de n seg es:[latex]N=n\frac{FOSC}{4}[/latex] Suponiendo que tenemos un reloj del sistema de 8MHz, y queremos un retardo de 8 segundos necesitaremos 16 millones de ciclos. Podramos entonces usar la funcin de 1m de la siguiente forma: delay1mtcy(16); Por ultimo nos queda compilar nuestro programa y obtener el hex a grabar en el pic. Con SDCC solo obtendremos un archivo que contiene el cdigo en asm, pero si dispones de gpasm(es dentro de la suite gputils) podemos generar el hex. El comando bsico para la compilacin es : sdcc -mpic16 p18f2550 "%f" --use-non-free -mpic16 es para indicar la familia del pic, -p18f2550 es para indicar el dispositivo y por ultimo --use-non-free es para indicar que use libreras que no son libres, esto es necesario porque por problemas de licencias con Microchip, los archivos header de los diferentes pics no son libres, La familia del pic(en SDCC) depende de la longitud de la palabra de instruccin, asi para los PIC18 una instruccin es una palabra de 16bits, en cambio para los PIC16 es de 14bits. Por lo que en SDCC tenemos dos familias, llamadas mpic16 y mpic14

Anda mungkin juga menyukai