Sei sulla pagina 1di 10

C mo Programar un PIC

Introduccin En la actualidad es muy fcil construir productos electrnicos con bajo costo, espacio reducido y con caractersticas multifuncionales; de hecho, son muchos los circuitos decodificadores de seales de TV construidos con pequeos controladores programables integrados que contienen programas sencillos. En este captulo, explicaremos cmo se programa un PIC con la ayuda de una computadora, sin que para ello se necesiten complicados circuitos adicionales. Tambin daremos las direcciones de Internet para recabar informacin sobre la forma de "leer" el programa contenido en un PIC y la forma de obtener prestaciones especiales. En la creacin y diseo de un nuevo producto electrnico, la tendencia actual es tratar de respetar los trminos descriptivos "bajos costos", "ultra-compacto" y "multifuncional". Lograr un producto con todas estas caractersticas era sumamente difcil. Afortunadamente, en los ltimos aos, disear un producto con esos atributos se ha tornado ms fcil gracias al desarrollo de dispositivos programables como la familia de microcontroladores PIC de Tecnologas Microchip.

funcionales; de hecho, son muchos los circuitos decodificadores de seales de TV construidos con pequeos controladores programables integrados que contienen programas sencillos. Nuestro objetivo es que pueda programar un PIC con la ayuda de una computadora, sin que para ello se necesiten complicados circuitos adicionales. Se necesita un dispositivo de programacin para incorporar el software de los chips que venimos describiendo desde hace varios nmeros (nos referimos a los PICs). El costo de un dispositivo de estas caractersticas suele ser muy alto, razn por la cual el lector le "huye" al diseo de sistemas electrnicos con estos componentes. Obviamente, el programador PIC presentado en este libro necesita algunos componentes accesorios para ser construido pero resulta una solucin ideal para quienes poseen computadora o puedan emplear la de un amigo o tcnico conocido. El rasgo ms importante de esta unidad es que no necesita partes especializadas y es un circuito muy simple. Luego de armado se lo conecta al port (puerto) de la impresora de cualquier PC (el puerto no necesita ser bi-direccional), y ejecutar un software (programa) para iniciar la programacin de los microcontroladores. Har emos r efer encia a la serie PIC 16F84, 16F83 y 16C84, por ser compo nentes de bajo costo que se consi guen con facilidad . La informacin que aqu damos fue re-

Estructura de un Programador de PICs En la actualidad es muy fcil construir productos electrnicos con bajo costo, espacio reducido y con caractersticas multi-

Todo sobre PICs

23

CMO PROGRAMAR

UN

PIC
nido al navegar por Internet. De los tipos de PICs disponibles, los ms fciles para trabajar, segn el resultado de mi bsqueda (vea la figura 2) son el 16F83, el 16F84 y el 16C84. Estos modelos particulares son los que soporta nuestro programador. Cuestan menos de $10 cada uno, y su ROM es elctricamente borrable, de modo que no necesita una luz ultravioleta para borrar y reprogramar los dispositivos. El 16F84 es el ms empleado, tiene 68 bytes de RAM y 1.024 palabras de memoria de programa. La memoria de programa es un EEPROM tipo flash, que puede ser reescrito ms de un milln de veces. Cualquier informacin almacenada ser preservada por ms de cuarenta aos, sin alimentacin alguna o seal de refresco. El 16C84 es muy similar, pero utiliza un tipo de EEPROM ms viejo. El 16F83 puede ser considerado "el her mano menor", ya que tiene slo la mitad menor" de memoria; aunque tiene a su favor que es el de costo ms bajo costo. Estos PICs no requieren cristales de cuarzo o resonadores para los circuitos de reloj. Emplea un resistor o un capacitador para fijar la frecuencia de oscilacin.

dactada a partir del "websitie" de Microchip Inc., empresa fabricante de estos componentes. Cabe aclarar que en las pginas de Internet de Microchip Inc. puede encontrar toda la informacin necesaria para el diseo y construccin de circuitos a partir de microcontroladores PIC de la serie 16XXX. Tal como diimos en el captulo 1, un PIC, como la mayora de los microcontroladores, es una computadora pequea con CPU, ROM, RAM y circuitos I/O (de entrada y salida) en un solo chip. Los Microcontroladores constituyen el segmento de mayor crecimiento en la industria electrnica (existen PICs en decodificadores de seales de TV por cable, relojes, microondas, equipos de msica, lavarropas, etc.). Se puede considerar el microcontrolador como un circuito integrado que puede ser "personalizado" si se escribe un programa en lenguaje de mquina (assembly). Dicho de otra manera, cargando el programa en el rea ROM del microcontrolador, obtendremos un circuito integrado especfico para nuestras necesidades. Algunas veces el programa est diseado para ser algo ms que un oscilador o una llave lgica, pero lo importante es que el PIC realizar exactamente lo que usted le indique. La familia PIC de la empresa Microchip Inc. es muy simple de operar, es de bajo costo y gran parte del software utilizado para crear el cdigo de programa necesario para la programacin del PIC est disponible en el website de Microchip, cuya direccin es la siguiente: www.microchip.com En la figura 1 damos una muestra de la pantalla que hemos obte-

Figura 1

24

Todo sobre PICs

CMO PROGRAMAR Figura 2

UN

PIC

tor 13 y en el momento de ser grabado, se eleva la tensin de la pata 12 a 5V durante al menos 0,1s antes de ser bajado de nuevo a nivel tierra.

Los datos que se dirigen al chip contienen comandos que especifican los numerosos pasos del proceso de programacin y los datos que sern guardados en la ROM del chip. Para verificar que el PIC ha sido programado correctamente, compruebe que el PIC tambin pueda enviar los datos contenidos hacia La tensin de alimentacin para el el exterior a travs de la pata 13. 16F84 puede ser de 4 a 6V pero existe una Para aquellos que estn interesados en versin de este integrado que puede ope- conocer los detalles tcnicos completos rar inclusive, con 2V. de la programacin de los chips PIC, las Tiene 13 pines de entrada/salida, cada especificaciones para la programacin y uno de los cuales puede ser configurado su verificacin las veremos ms adelante. individualmente para que sea una salida o El diagrama esquemtico del Prograuna entrada mador para PIC que menciona la empresa fabricante, se muestra en la figura 3. El circuito est diseado para adaptarse al Cmo Programar un port de la impresora de cualquier PC. PIC de Microchip Inc. En la figura 4 mostramos el circuito con el cual hemos realizado varios diseos; emProgramar los chips PIC mencionados es muy sencillo: 1) Se debe aplicar 5V a la pata 14 (con la pata 5 conectada a tierra). 2) Eleve la tensin de la pata 4 a 12V). 3) Coloque los datos en la pata 13; dichos datos sern enviados a la ROM de a un bit por vez en concordancia con la seal de reloj. Los datos sern enviados al conec-

Figura 3

Todo sobre PICs

25

CMO PROGRAMAR

UN

PIC

pleamos como computadora una Figura 4 AT 486 con 4MB de RAM y disco rgido de 120MB (tambin realizamos las pruebas en otra compatible con Pentium 2 de 350MHz y 64MB de RAM). Los datos de programacin y las seales de sincronismo se aplican al PIC a travs de R2 y R3. Los diodos D1, D2 y el resistor R1 dejan que el pin 13 del PIC pueda ser utilizado como una entrada para la programacin y una salida para la verificacin (recuerde que una misma pata de I/O puede ser empleado tanto como entrada o salida). Cuando la pata 17 del conector en el port de la impresora est en estado alto, la PC puede leer los de la impresora. Se requieren dos suminisdatos desde la pata 13 del PIC a travs de tros de tensin para poner en marcha el la pata 11 del conector de la impresora. Programador PIC; 5V para la pata 14 y De este modo, R1 y D2 se encargan de 12V para la pata 4. detener la seal de datos. Estas tensiones pueden ser tomadas Cuando la pata 11 del conector de la desde la misma PC o desde una fuente impresora est bajo, D1 conduce. El noexterna. La tensin a aplicar en la pata 4 do de D2 es bajado a tierra para bloquear debe estar comprendida entre 12V y 14V. la seal de datos. El chip PIC estar libre Asegrese de que la lnea de 12V tenga para recibir datos desde la pata 14 del realmente 12V como mnimo. Si desea port de la impresora. La conexin que emplear fuentes externas puede utilizar el crea D1 entre las patas 11 y 17 del conec- esquema de suministro de tensin mostrator de la impresora permite que el softwa- do en la figura 5. re de programacin detecte si el prograEl circuito del programador es tan simmador est conectado al port de la imple que puede ser construido fcilmente presora. en una pequea placa de circuito impreLos capacitores so con uso de tcnicas C1 y C2 eliminan el de construccin estanruido que pueden darizadas. El montaje producir los cables por separado del conecque llevan la corrientor del cable hace que te DC. La tensin neel Programador PIC sea cesaria para que se ms fcil de utilizar, simproduzca la prograplemente se lo conecta macin es comanal port de la impresora dada por Q1 a trade la PC con un multicaFigura 5 vs del pin 2 del port ble de 30 cm de largo.

26

Todo sobre PICs

CMO PROGRAMAR
Programacin del PIC

UN

PIC

den generar diferentes modelos o seleccionar mltiples modelos con la adicin de La manera ms fcil de aprender a utili- un simple mecanismo interruptor. Con zar el Programador PIC es escribir un pro- componentes discretos, el circuito debiera grama simple e incorporarlo a un chip. Es- ser descartado y rediseado para adapte modo de aprender las caractersticas tarse a este tipo de cambios. Con un PIC, del programador, tambin le brindar la slo es cuestin de modificar el programa, oportunidad de verificar su hardware y borrar el PIC y reprogramarlo. Para prograsoftware. mar un PIC desde una PC hace falta un Como ejemplo, veamos cmo prograprograma y conocer el set de instrucciomar un circuito que enciende un LED des- nes de microcontrolador, pero no se asuspus de otro, en secuencias sucesivas. Este te, esto no es difcil. circuito podra hacerlo con un oscilador y Para hacer que nuestro controlador un CD4017. prenda leds en secuencia, deber prograSi embargo, tambin podemos hacer el mar que todas las patas I/O sean de salicircuito con un PIC, tal como se muestra da y hacer que cada una de estas patas en la figura 6. tenga un estado alto en forma secuencial, Si bien este circuito puede costar ms con un perodo que podemos fijar nosocaro que un circuito digital tradicional, es tros. ms pequeo y no necesita tanto espacio De esta manera, el programa, escrito fsico para contener todos sus componen- en lenguaje Assembly PIC, se muestra en PIC tes. De todos modos, hay otro argumento la Tabla 1. La parte ms importante de para utilizar el PIC en una tarea de estas cualquier programa es la documentacin. caractersticas: su inteligencia. Se pueSi deja notas en el programa, recordar inteligencia qu es lo que estaba intentando hacer cuando revise el programa, la vez siguiente. En el programa, estas notas aparecen en cualquier rengln que se inicie con punto y coma. Estos renglones sern ignorados por el software, mediante un montador que convierte el texto del programa en nmeros binarios que el PIC reconoce como instrucciones. Las primeras tres instrucciones son: pr ocessor, 16f84 include <p16f84.inc>L _config,

Figura 6

Estas son instrucciones pa-

Todo sobre PICs

27

CMO PROGRAMAR

UN

PIC
copiado en el registrador de control TRIS para el Port B y establece que las patas 6 a13 (que son manejadas por el Port B) sean terminales de salida en vez de serlo
;Cdigo Assembly para microcontrolador PIC16F84 como ;circuito secuencial. ;Encendido de Leds en secuencia rotativa. ;Con una frecuencia de 75kHz, cada led permanecer ;encendido durante 0,5segundos. ; Configuracin de la CPU ; (se trata de un 16F84 con oscilador RC ; y grabado con tensin positiva durante ; el pulso en estado alto) procesor 16f84 include <p16f84.inc> _config _RC_osc & _WDT_OFF & _PWRTE_ON ; sern variables las dos direcciones de memoria J K equ equ H'1F' H"1E ; J = direccin hexa 1F ; K = direccin hexa 1E

ra el tcnico. La primera instruccin le indica al tcnico que utilice las instrucciones del 16F84. La segunda le indica que debe incluir un conjunto de constantes predeterminadas en un archivo llamado p16F84.INC. Finalmente, la tercera establece varios bits de configuracin en el PIC para activar o desactivar determinadas caractersticas del hardware. En este ejemplo, el chip utilizar su oscilador RC, su WDT (cronmetro "vigilante") ser desactivado y el PWRTE (reloj automtico de reseteado) ser activado. De este modo, el PIC rebootear (se pondr en marcha) con cualquier tensin que se le aplique, pero no rebootear automticamente muchas veces por segundo. Es importante darle uso a la instruccin _config en todos los programas utilizados con el Programador PIC. El programa del tcnico no realizar la programacin real, slo crear un archivo con los nmeros que sern transferidos al chip PIC como un segundo paso. Las dos instrucciones que reservan espacio de memoria en el RAM de los PICs para dos variables, que se llamarn "J" y "K". El proceso es similar a estipular variables en BASIC, con la diferencia de que se deben determinar las ubicaciones fsicas de RAM que se utilizarn. En este caso, las ubicaciones (en una numeracin hexadecimal) son 1E y 1F. Estas ubicaciones sern utilizadas para almacenar calculadores que registren la cantidad de veces que una subrutina (loop) ha sido repetida. La instruccin org le indica al montador que el programa se inicia en la ubicacin 0 de la memoria de programa y que el programa real ser el prximo. La primera instruccin real del PIC es una instruccin movlw que borra el contenido del registro W. Ese nmero es luego

;Programa org 0 ; comienzo en la direccin 0

; Elijo al Port B como salida y la inicializo movlw tris movlw movwf B'00000000' PORTB B'00000001' PORTB ; w:= 00000000 binario ;portB ctrl register := w ; w:= 00000001 binario ; port B itself ;= w

; Rote el bit del port B hacia la izquierda mloop: rif PORTB,f

; Espere un tiempo para ejecutar nuevamente la subrutina o loop movlw movwf movwf decfsz goto decfsz goto d'50' J K kKf kloop J,f jloop ; w = 50 en decimal ; J := w ; K := w ;K = K-1, salte si K = 0 ;J = J-1, salte si J = 0

jloop: kloop

;lo hacemos nuevamente goto mloop end

Tabla 1

28

Todo sobre PICs

CMO PROGRAMAR
de entrada. Si hubiese querido que todas fuesen entradas debiera haber copiado en el port B la palabra "11111111" Volviendo a nuestro programa, seguidamente se introduce el nmero binario 00000001 en el registrador W y lo copia al Port B. Esta accin enciende el LED conectado a la pata 6, dado que ahora, el terminal Pata 0 pin 6, que es de salida, tiene un nivel "1", es decir, un nivel alto. Pero antes de que tenga tiempo de visualizar la llegada del pulso al LED, el programa ejecutar una instruccin rlf que rota los contenidos del Port B a la izquierda y cambia los datos a 000000-10. Esta accin encender el segundo LED conectado al conector 7. La repeticin de la instruccin producir 00000100, luego 00001000, y as sucesivamente, esto har que los diferentes leds se enciendan en secuencia. Entre rotaciones, el programa necesita esperar 1/2 segundo aproximadamente, de modo que la accin no es tan rpida como para que no se la pueda apreciar. Esa es la causa por la cual aparece en el programa una subrutina de demora. El programa almacena el nmero decimal 50 en las ubicaciones de memoria "J" y "K", utilizando la instruccin decfsz para la cuenta regresiva de 50 a 0. Las instrucciones condicionales del PIC son inusuales, y el descfsz no es una excepcin. Esta instruccin significa: "Decr e mentar y omitir la instruccin siguiente si la variable es igual a cer o". Normalmente, el resultado no es cero y la parte "ir a" de la instruccin no es omitida. De tal modo, la subrutina (loop) se ejecuta repetidamente hasta que K llega a cero. El programa real utiliza dos loops (subrutina), una incrustada dentro de la otra. Finalmente, ir a mloop enva la ejecucin al comienzo del programa. La instruccin end no es una instruccin para el mi-

UN

PIC

crocontrolador (CPU); slo le indica al montador que el programa ha finalizado. El 16F84 tiene 35 instrucciones CPU difer entes. Como puede ver a partir del pr ograma simple que hemos cr ea do, no debe dominarlas a todas para escribir pr ogramas tiles.

Cmo se Construye un decodificador con PIC Ahora mire que fcil sera construir una llave electrnica con PIC que se active luego de un cierto tiempo, o cuando se recibe alguna seal. Habra que programar una pata I/O como entrada y otra como salida, luego el programa debiera reconocer una seal presente en la pata fijada como entrada y luego de un tiempo activar la salida que se encargara de poner en marcha un circuito. Le suena conocido?, esto es lo que hacen normalmente los decodificadores de las seales de TV por cable. Por lo tanto, si sabe cmo es una seal codificada y obtiene el set de instrucciones del PIC de Internet, no tendr inconvenientes en construir un programa para su PIC, con el objeto de decodificar seales de TV. Seguramente Ud. se preguntar, Por qu no doy el programa en este libro?, muy sencillo, considero que debo darle las herramientas para que aprenda y no inducirlo a que "ar me decodificador es con fines comer ciales".

Cmo obtener un Programa para "programar" nuestro PIC En el Website de Microchip podr encontrar hojas de datos, notas de aplica-

Todo sobre PICs

29

CMO PROGRAMAR

UN

PIC

llamados cdigos de fuente), compilarlos en un cdigo de objeto y luego analizar el cdigo binario resultante para ver qu accin realizar el microcontrolador. De este modo, podr localizar los errores lgicos en su programacin antes de ejecutar cualquier cdigo en el hardware. El uso del software de Microchip est muy bien documentado en las pginas de Internet. Preprese para recibir mensajes de error cuando compile el prograFigura 7 ma. El MPASM se quejar moderadamente de que no utilizar la inscin y, lo mejor de todo, el MPLAB, un pro- truccin tris. Microchip le ha restado imgrama de desarrollo para simular y verifiportancia a esta instruccin y algunos procar programas PIC. El mismo est diseado cesadores PIC del futuro podran no regispara ser ejecutado bajo Windows. trarla. Desde la perspectiva del software, Particularmente, obtuve el programa uno de los mejores rasgos del PIC es su llade la direccin: mada compatibilidad de cdigo de fuente. Si su diseo supera los recursos de chips http//www.microchip.com/10/Tools/ con los cuales inici el programa, podr MPLAB/index.htm utilizar otro chip con mayores recursos sin necesidad de reescribir el programa desCuando acceda a esta direccin, ver de el principio. Para nuestros propsitos, la que el programa precisa de 6 disquetes y utilizacin de la instruccin tris en el Ud. debe bajar cada uno de ellos a su 16C84, 16F84 y 16F83 trabaja de modo computadora.; luego deber descompriaceptable. Adems, la va alternativa de mir los archivos y comenzar la instalacin configurar el Puerto B para la salida es mu(en total pesa unos 8MB). cho ms complicada. Una vez hecho esto el mismo programa Otro programa ms sencillo para "prole da toda la informacin necesaria para gramar" nuestro PIC se denomina NOPPP y conseguir su propsito (en el captulo 3 de- puede obtenerlo de la direccin: tallamos el uso de este programa). Una muestra de su pantalla, se ve en la figura (ftp://ftp.gernsback.com/pub/ 7. EN/noppp.zip). No debe asustarse si nunca manej una del Website de Gernsback. Este prograPC, el programa le indica todo lo que de- ma MS-DOS se ejecuta bajo Windows 3.x o be hacer; y lo mejor, es GRATIS. Windows 95. De cualquier modo, si ejecuta el programa bajo Windows 3.1, trabajar El software MPLAB le permitir editar mejor si lo ejecuta bajo la aplicacin de programas en lenguaje Assembly (tambin "pantalla completa" que si lo hace en

30

Todo sobre PICs

CMO PROGRAMAR

UN

PIC

vo) en la memoria, seleccionar el tipo de PIC que programar, programar el software y luego verificar que el cdigo fue correctamente programado en el chip. Tambin podr borrar un PIC que ya ha sido programado para reutilizar o actualizar la programacin. Una advertencia: Nunca inserte o remueva un PIC de un programador mientras la tensin enviada al programador se enFigura 8 cuentra activada. Cuando programe un PIC, el software le indicar qu acciones debe ejecutar y cundo realizarlas. Dado que el una ventana (veremos cmo programar software del programador requiere un ticon esta aplicacin en el captulo 6). ming engaoso, fue escrito para ejecutarEl timing es esencial para los pulsos de se como un programa DOS. programacin y las aplicaciones DOS de Recuerde que los pulsos de medicin pantalla completa toman el control total para la programacin del PIC tienen que de la computadora. Si por alguna razn tiene dificultades en durar por lo menos 0,1s. En la prctica, son lo suficientemente largos como para ejecutar el programa NOPPP bajo Winsuperar cualquier seal de "r ebotes" en los ebotes dows 3.1, intente salir a un entorno DOS y cables. ejectelo desde all. Tambin puede ejeDe todos modos, no deben ser demacutar el programa bajo OS/2; si lo hace, siado largos, para que no tornen extremaasegrese de configurar el HW_TIMER en damente lento el proceso de programa"on" en las configuraciones DOS para el cin. Tambin es importante que el tiempo programa. del pulso no dependa de la velocidad de Para hacer la programacin, el primer la CPU de la computadora. El software fue paso es conectar el Programador PIC al escrito especialmente para ser ejecutado port de la impresora de la PC e iniciar el en cualquier IBM compatible, desde una programa NOPPP sin ninguna tensin conectada al programador. Si la lnea de 5V XT a las ltimas Pentium. Cabe aclarar una vez ms que para est conectada a tierra, el software no programar o leer un PIC se debe tener la podr detectar el diodo D1, y asumir que el programador no est conectado al port correspondiente hoja de datos, para saber en qu pata se introducen los datos y cde la impresora. Si todo se encuentra en orden, debera mo se realiza el proceso de programacin, tambin es necesario conocer el set de ver una pantalla similar a la que se muesinstrucciones del microcontolador y saber tra en la figura 8. El men de opciones es auto-explicativo. En general, debera car- "pasar al papel" las ideas que uno tenga en la mente para realizar las diferentes gar un archivo de cdigo de objeto (con una extensin .HEX en el nombre de archi- programaciones.

Todo sobre PICs

31

CMO PROGRAMAR

UN

PIC
Quienes tengan dificultad para "bajar programas de escrituras de PICs", podrn retirar de esta editorial, contra entrega de un disquete virgen, un programa aplicativo (debe presentar el presente libro). Tambin podr bajar aplicaciones de nuestra pgina web (vea el captulo 1). Para terminar, en la figura 9 se da el impreso del programador de la figura 4; en la figura 10 el correspondiente al circuito secuencial y en la 11, el de la fuente de alimentacin. Aclaramos que en sucesivos captulos daremos ejemplos de proFigura 10 gramacin de PICs, hasta que Ud. se sienta lo suficientemente ducho como para realizar sus propios programas. No damos lista de materiales, dado que en cada figura se detallan los elementos utilizados. *****

Figura 9

Figura 11

32

Todo sobre PICs

Potrebbero piacerti anche