Está en la página 1de 8

Tutorial: Microcontroladores y el PIC16F84

Juan Pablo Caram 4 de octubre de 2003

Resumen

C. Lista de Componentes para los Ejemplos

El objetivo de este documento es introducir al lec- D. Conguracion del Prog84 8 tor en el tema de los microcontroladores, y llevarlo rpida y econmicamente a desarrollar prototipos utilizando el microcontrolador PIC16F84, sin depender de 1. Microcontroladores compleja instrumentacin de laboratorio, y con componentes disponibles en cualquier local comercial del 1.1. Introduccin rubro. Adems las herramientas de trabajo y el software Estos dispositivos son, en un solo chip, un pequeo aqu expuesto son de libre distribucin. computador, ya que cuentan con memoria para un programa, una CPU, memoria de datos y almacenamiento, y puertas de entrada y salida, que les permite funcionar ndice como el cerebro de dispositivos electronicos mas com1. Microcontroladores 1 plejos. Su comportamiento puede ser fcilmente descrito 1.1. Introduccin . . . . . . . . . . . . . . . 1 por un programa escrito en distintos posibles lenguajes. Las aplicaciones de estos dispositivos son tantas co1.2. Caractersticas . . . . . . . . . . . . . . 1 1.3. Proceso de Desarrollo . . . . . . . . . . 2 mo lo permita la imaginacin, y estn en mas lugares de los que se cree. Por nombrar algunos, se encuentran 2. El PIC16F84 2 en casi todos los automobiles, hornos microondas, tele2.1. Introduccin . . . . . . . . . . . . . . . 2 fonos celulares, etc. 2.2. Desarollo de Software . . . . . . . . . . 3 2.3. Programacin . . . . . . . . . . . . . . 4 1.2. Caractersticas 2.4. Circuito Base . . . . . . . . . . . . . . 4 Los microcontroladores, o C de ahora en adelante, 3. Ejemplo 1 5 son dispositivos digitales que pueden interactuar con el 3.1. Descripcin . . . . . . . . . . . . . . . 5 resto de un circuito a travez de sus pines o lneas de 3.2. Programa . . . . . . . . . . . . . . . . 5 datos, que pueden congurarse como entradas o salidas. 3.3. Circuito . . . . . . . . . . . . . . . . . 5 Cuando son entradas, pueden adquirir datos, interpretando si en ellos existe un valor lgico 1 o 0, mientras que 4. Ejemplo 2 6 cuando son salidas, pueden controlar su valor lgico. En4.1. Descripcin . . . . . . . . . . . . . . . 6 tonces su trabajo es bsicamente interpretar los valores 4.2. Programa . . . . . . . . . . . . . . . . 6 en sus pines de entrada y realizar alguna accin segn 4.3. Circuito . . . . . . . . . . . . . . . . . 7 estos, mediante los pines de salida. Para responder a eventos, como el cambio de estado 5. Ms all de este documento 7 en un pin de entrada por ejemplo, los C s cuentan con A. Recursos en Internet y Bibliograa 8 un recurso conocido como interrupciones. Estos son los eventos para los que se detiene la ejecucin del programa B. Lista de Componentes del Programador 8 y se ejecuta una parte especca de ste como respuesta. 1

Un caso tpico es el de un botn pulsador conectado a un pin, y se desea realizar alguna accin determinada al pulsarlo. Las interrupciones pueden no solo ser el cambio de estado de un pin y dependera de las caractersticas del C en cuestin. Caractersticas mas sosticadas disponibles en algunos C s, entre otras, son: Convertidor anlogo digital: Convierte un voltaje presente en una lnea de entrada en un valor numrico manipulable por el programa. Modulador por ancho de pulso, o PWM: Generador de onda cuadrada de frecuencia ja pero con ancho de pulso controlable. Comunicacin serial por hardware: Permite enviar y recibir datos serialmente en forma sncrona y asncrona.

Figura 2: Programacin
Software Programador

archivo.hex

Puerto serial, USB, u otro. Hardware Programador

Microcontrolador

El ltimo paso es ensamblar el programa en Assembler, procedimiento que lo convierte en codigo binario especco para cada C . El programa que ensambla es denominado obviamente ensamblador. 2. Programacin. Este proceso corresponde a utilizar un programa en el PC que toma el cdigo ensamblado (.hex) para el C especco, y lo envia mediante algn puerto (serial, paralelo, USB, etc.) a un dispositivo que lo escribe en la memoria del C . Se acostumbra denominar programador tanto al sofware como al hardware involucrados de este propsito, por separado, lo que puede llevar a confusin.

1.3.
1.

Proceso de Desarrollo
Desarrollo del software. Una vez determinada la funcionalidad del C en un circuito, se debe escribir el programa que regir su funcionamiento. Generalmente, los C s se programan en leguaje Assembler, sin embargo, existen compiladores para leguajes de alto nivel, como C y C++, que pueden resultar de utilidad cuando se desea minimizar el tiempo de desarrollo. Es importante considerar que el codigo Assembler (.asm o .s) generado por los compiladores es generalmente mas largo e ineciente que aquel concebido originalmente en Assembler.

3.

Figura 1: Desarrollo de Software


Usuario archivo.c

Prueba real y coreccin de errores. Una vez programado el C , se puede instalar en el circuito nal para comprobar su adecuado funcionamiento. Existen heramientas de software que permiten simular el comportamiento de un C , muy utiles cuando el programa alcanza cierta complejidad. Para resolver problemas en un circuito real, el instrumento mas utilizado es el analizador lgico.

2.
2.1.

El PIC16F84
Introduccin

archivo.asm

Compilador

Ensamblador

archivo.hex

El microcontrolador PIC16F84 de Microchip (www.microchip.com) es uno de los microcontroladores mas utilizados en proyectos electrnicos pequeos. A diferencia de versiones mas avanzadas como el igualmente popular PIC16F87X, este carece de convertidor A/D, PWM, comunicacin serial por hardware y a la 2

vez tiene menos memoria y puertos (conjuntos de lineas de datos) disponibles. Sin embargo, su fcil uso, bajo precio y altsima difusin, lo hacen el C favorito en un gran rango de aplicaciones. De todos modos, muchas de las caractersticas que este C no posee pueden ser implementadas por software.

Afortunadamente el compilador de JAL compila y ensambla a la vez, entregando el archivo .hex listo para programar. Con cualquier editor de texto puede escribir su cdigo y grabarlo en un archivo .jal, para luego compilar desde la carpeta de JAL con el comando
./bin/jal -slib archivo.jal

Figura 3: Pines en el PIC16F84


RA2 RA3 RA4/T0CKl MCLR Vss RB0/INT RB1 RB2 RB3
1 2 18 17

RA1 RA0 OSC1/CLKIN OSC2/CLKOUT Vdd RB7 RB6 RB5 RB4

3 4 5 6 7 8 9

16 15 14 13 12 11 10

donde archivo.jal es el archivo donde reside su codigo. El parametro -slib indica al compilador que debe buscar las libreras utilizadas en la carpeta lib. JAL generara los archivos archivo.asm y archivo.hex, que corresponden al cdigo en Assembler y ensamblado respectivamente.

Este dispositivo tiene 13 lneas de entrada/salida, con tecnologa TTL/CMOS, es decir, 5V para un estado lgico 1 y 0v para el estado 0. Requiere un oscilador externo de hasta 20MHz, se programa mediante un juego de 37 instrucciones en Assembler, que manejan datos de 8 bits, cuenta con un timer, un watchdog timer y responde a interrupciones ante cambios de estado en las lneas de la puerta B, RB4 hasta RB7, al anco de subida o bajada en la lnea RB0/INT, y al overow1 del timer.

PIC16F84

C y PIC LITE Este compilador de C, desarrollado por Hitech (www.htsoft.com) es la versin gratuita de un compilador de caractersticas profesionales. La disponibilidad de PIC LITE en el futuro no est asegurada, pero existen otros compiladores disponibles grauitamente con caractersticas similares. El uso de C puede ser muy conveniente para aquellos que ya estan familiarizados con este lenguaje y quieren minimizar la curva de aprendizaje y desarrollo con C s. El compilador tiene numerosas opciones que deben ser consideradas y todo est adecuadamente documentado. ste tambin genera automticamente el archivo .hex.

2.2.

Desarollo de Software

El proceso de desarrollo de aplicaciones para el PIC es ASSEMBLER equivalente a lo descrito en la gura 1. Aqu se describen algunos lenguajes de programacin disponibles, con sus Los programas concebidos originalmente en Assemrespectivos compiladores. bler son los mas ecientes, sin embargo el proceso de desarrollo es tedioso y requiere de un aprendizaje mas largo que con lenguajes de mas alto nivel. Para seguir JAL esta via, se recomienda leer la hoja de datos, que perEste lenguaje fue desarrollado especcamente para mite familiarizarse con el conjunto de instrucciones. C s PIC, lo que hace muy intuitivo trabajar con el. Su A la hora de ensamblar las opciones son varias, pero estructura es muy similar a la de Pascal, y cuenta con se recomienda utilizar las soluciones mas probadas. En libreras para realizar mltiples tareas comunes. el caso de Linux, gpasm es el ensablador del conjunto 1 Evento que ocurre al incrementar un registro por sobre su valor de aplicaciones gputils. En Windows, MPLAB de Microchip provee el ensablador por defecto para los PICs. maximo. 3

2.3.

este circuito es muy simple, y se suguiere construirlo directamente en una PCB, lo que lo har mas conable y Existen, en internet, numerosas duplas soft- duradero. ware/hardware para programar C s PIC disponibles en forma gratuita para diferentes sistemas operativos. Es Figura 5: Programador Terminado importante considerar que, por lo general estas duplas hardware/software son interdependientes; lo que a veces Reg. 7805 C=100uF diculta encontrar una combinacin que cumpla las Base DIP18 espectativas del desarrollador. (para PIC16F84) Aqu se presenta una dupla con la que se pretende lograr los objetivos de simplicidad, bajo costo y disponibilidad tanto para Linux como para Windows. Para que el PIC16F84 entre en modo de programacin se debe forzar un estado lgico 0 en RB7 (pin 13) y RB6 DB9 Hembra (pin 12), mientras que M CLR (pin 4) se lleva a 0 para R1, R2, R3 y D1 (Puerto Serial) resetear, y, nalmente se lleva y mantiene durante toda la programacin a un voltaje de 12 a 14V. Una vez que se ha entrado en el modo de programacin, se utiliza Las resistencias pueden ser de baja potencia (1/4W), RB7 para ingresar serialmente la informacin, y RB6 el diodo D1 es un diodo recticador cualquiera, aunque se utiliza como seal de reloj para aceptar cada bit en RB7. Los detalles que se reeren al protocolo de pro- se recomienda el 1N4148, y el condensador C1 es elecgramacin pueden encontrarse en la documentacin del troltico. El 7805 es un regulador de voltaje que entrega 5V (out) cuando tiene una entrada (in) mayor. fabricante. El diseo minimalista de este circuito requiere que el El circuito denominado COM84 logra estas especipuerto serial del PC entregue los niveles de voltaje y pocaciones en forma muy minimalista, e incluso toma tencia adecuados. Por esta razn el programador puede poder del puerto serial, por lo que no requiere de ali(y as ha resultado en ciertos casos) no funcionar en mentacin externa. Notebooks. De todos modos, segun la especicacin de programacin ya descrita, este circuito puede ser modiFigura 4: Programador Serial Minimalista (COM84) cado para utilizar una fuente de alimentacin externa.
7805 D1 TXD (3) in out C1 100u 1 2 3 4 GND (5) MCLR

Programacin

PIC16F84
18 17 16 15 VDD 14 RB7 RB6 13 12 11 10

PROG84 Este software programador puede ser utilizado con este y otros circuitos programadores. La conguracin del tipo de hardware y puerto serial se realiza mediante un archivo de conguracin. Ver anexo con un archivo de conguracion de ejemplo. Una vez congurado y conectado el hardware adecuadamente, la programacin se lleva a cabo con el siguiente comando
prog84 -x archivo.hex

R1 10k

5 VSS 6

RTS (7) R2 4.7k DTR (4) R3 4.7k CTS (8)

7 8 9

2.4.

Circuito Base

Al lado izquierdo de la gura 4 se observan las enEn el circuito nal, el PIC16F84 requiere ciertos comtradas del puerto serial, con sus respectivos numeros de ponentes basicos, iguales para cualquier conguracion: pin en el conector tpico DB9. La implementacin de un cristal y condensadores, que proveen la seal de reloj, 4

y las lineas de alimentacin, Vdd, y tierra, Vss. M CLR este se cambia el estado del pin/led. En la linea 17, y en es el reset, por lo que debe mantenerse en estado lgico la linea 19 se llama a una funcin que detiene la ejecu1 durante su funcionamiento. Esto se puede observar en cion durante 250ms. la gura del ejemplo 1. La funcin delay_1ms() ejecuta un retardo de 1ms multiplicado por el parmetro. Su funcionamiento se basa en el hecho de que una instruccin (en Assembler) 3. Ejemplo 1 tarda 4 tiempos de reloj, por lo que se ejecuta un loop el nmero de veces que tome el tiempo requerido segn la 3.1. Descripcin velocidad del reloj. Esto se encuentra especicado en el La forma mas demostrativa y simple posible de inicia- programa dado que se incluy la versin de 4MHz (linea rse con un C es hacer parpadear un LED. Para esto, se 4) de las funciones especcas de este PIC. debe implementar un programa que continuamente cambie el estado de un pin y espere cierto tiempo antes de repetir. En este ejemplo utilizaremos JAL como lenguaje de 3.3. Circuito programacin del PIC.

3.2.

Programa
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: -- Ejemplo 1 -- Inclusiones include 16f84_4 include jlib -- Configuracion pin_b7_direction = output
C1

Figura 6: Circuito Ejemplo 1


PIC16F84
+5V
R1 10k 1 2 3 4 MCLR 18 17 OSC1 16 OSC2 15 VDD 14 RB7 13 12 11 10 R2 470 LED C2,C3 22p

+5V
X1 4MHz

5 VSS 4.7u 6 7 8 9

-- Variables var bit led is pin_b7 led = high -- Loop Principal forever loop -- Cambio de estado del pin led = ! led -- Retardo delay_1ms(250) end loop

En la gura se observa la circuitera mnima del PIC El alto nivel de JAL parmite que el cdigo sea autoex- con excepcin de aquella conectada al pin 13 que correplicativo, y adems se incluyen comentarios (con el pre- sponde a la aplicacin especca descrita en este ejempjo ). Los archivos incluidos, en las lneas 4 y 5 con- lo. tienen deniciones especcas del PIC16F84, como las En este caso, cuando RB7 est en estado 1 tiene 5V y correspondientes posiciones de memoria para pin_b7 y enceder el LED. Debe limitarse la corriente que pasara pin_b7_direction, y las funciones que generan el retardo. por el LED con una resistencia (R2), para no daarlo o En la lnea 8 se dene la direccin del pin RB7, como daar el puerto del PIC. Una conguracin alternativa es salida en este caso. En las lneas 11 y 12 se dene la conectar el par LED/resistencia a Vdd (5V) y a RB7, lo variable led, se le asigna a RB7 y se asigna su estado que causar que el LED se encienda cuando RB7 tenga inicial activo. un estado lgico 0. Estos conceptos deben mantenerse Finalmente, entre las lneas 15 y 20 se encuentra el en mente al considerar cuanta corriente puede un pin enloop del programa, que se ejecuta indenidamente. En tregar o recibir como mximo. 5

4.
4.1.

Ejemplo 2
Descripcin

Este ejemplo es una extensin del ejemplo anterior, para ilustrar la implementacin de respuesta a estmulos externos, mediante interrupciones. Utilizando el lenguaje C para el compilador PICLITE, implementamos un programa que permite encender y apagar un led al presionar un boton pulsador.

4.2.

Programa
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: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: #include pic.h #include delay.h #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) // Variables globales static volatile bit led @ PORTBIT(PORTB,7); static volatile bit presionado = 0; // Funcion interrupcion void interrupt isr() { if(INTF){ /* Ocurrio Interrupcion por INT * --> Deshabilitamos interrup. * por INT y al final restauramos * en indicador de interrupcion. */ INTE = 0; presionado = 1; INTF = 1; } } // Rutina principal void main() { ie(); /* Habilitada Ints. */ /* Loop permanente */ for(;;){ if(presionado){ presionado = 0; led = !led; DelayUs(10); INTE = 1; } }

cas para los PIC, y para retardos (funcin delayUs()). El PIC especco y la velocidad de reloj se especican al momento de compilar. La denicin en la lnea 4 simplemente permite indicar la direccin de memoria para un bit especco de un byte. Las variables han sido denidas como volatile, que es un requisito para pines y variables que son modicadas desde la funcin interrupcin. La variable led se reere al estado de RB7, y presionado indica si el pulsador ha sido presionado. La funcin isr() entre las lneas 13 y 25 est denida como la funcin interrupcin con el indicador interrupt. El nombre de la funcin no tiene importancia. Esta es ejecutada cuando ocurre cualquiera de las posibles interrupciones, pero la variable INTF se torna verdadera si la interrupcin fue producida por el pin RB0. Si es as, desactivamos las interrupciones por INT, marcamos verdadero presionado y reseteamos la variable INTF para poder detectar este tipo de interrupcin posteriormente. La desactivacin de la interrupcin por INT, se hace para evitar nuevas interrupciones por el rebote del botn pulsador. Al hacer contacto un interruptor mecnico se producen rpidas oscilaciones antes de asentarse en su valor nal, como se muestra en la gura. Esto se conove como rebote. Figura 7: Rebote de Boton
Voltaje

5V

0V

Boton Presionado

Tiempo

La funcin main() contiene el programa ejecutable. En este habilitamos las interrupciones en la lnea 30, y en el loop permanente, al detectar que el botn ha sido } presionado, reseteamos la variable presionado, cambiamos el estado del led, esperamos 10us para asegurarnos Las lneas 1 y 2 incluyen libreras de funciones espec- que se halla asentado el rebote del botn, y habilitamos 6

nuevamente las interrupciones por INT, en la linea 38. Las variables INTE e INTF son bits del registro INTCON. Este byte de conguracin del PIC contiene informacin y conguracin de las interrupciones, que permiten activarlas o desactivarlas segn fuente (como INTE) e indican si ha ocurrido cada tipo de interrupcin (como INTF ). Todos los registro de informacin y conguracin se encuentran documentados en la hoja de datos del PIC. Para compilar el programa en archivo.c para el PIC16F84, con un cristal de 10MHz utilizamos el comando

5.

Ms all de este documento

La variedad de microcontroladores y sus aplicaciones son mucho mayor que lo propuesto es este documento. Sin embargo el medio para abordar nuevos temas en este rubro puede ser algo confuso por lo que se sugieren algunos caminos a proseguir. La hoja de datos del PIC16F84 provee los detalles tcnicos de su funcionamiento. La correcta interpretacin y comprensin de este documento es el camino para dominar en totalidad este C . Microchip provee tambien documentos denominados Application Notes, que describen aplicaciones y tcnicas especcas a cada versin de PIC. Estos son muy picl -16c84 -O -DXTAL_FREQ=10MHz programa.c ilustrativos y son una forma mas dinmica de aprender al respecto, manteniendo el profesionalismo de los fabricantes. El parametro -O indica optimizacin de cdigo, necePor otro lado, la literatura disponible para este PIC es saria para la presicin de las funciones delayUs() y re- extensa, al igual que los recursos disponibles en Internet. duce el tamao total del cdigo generado. Las aplicaciones posibles del PIC16F84 solo estn limitadas por la imaginacin. En Internet pueden encontrarse aplicaciones sorprendentemente creativas y otras 4.3. Circuito con las que se obtienen desempeo inesperado con este PIC. Figura 8: Circuito Ejemplo 2 PIC16F87X
PIC16F84
+5V
R1 10k B1

+5V
18 17 X1 4MHz

+5V

1 2 3 4 MCLR

OSC1 16 OSC2 15 VDD 14 RB7 13 12 11 10 R2 470 LED C2,C3 22p

5 VSS C1 4.7u 6 7 R3 10k 8 9 RB0/INT

Este PIC es el mas popular para aplicaciones de nivel intermedio y avanzado, y es una excelente opcin para tener en mente cuando se requieren mas lineas de E/S, convertidores A/D, PWM, comunicacin serial por hardware, entre otros. Existen versiones con distintas caractersticas como el tamao de la memoria y numero de pines. Una vez que se ha dominado adecuadamente el PIC16F84, adquirir los conocimientos para utilizar este nuevo PIC es considerablemente mas facil. El costo de la versin PIC16F877, la mas poderosa, tiene un costo de aproximadamente el doble del PIC16F84. MOTOROLA HC08 Otros fabricantes pueden tener productos considerablemente diferentes, tanto en su funcionamiento, instrucciones de CPU o mtodo de programacin, sin embargo, los C de nivel de entrada (entry-level) tienen mucho en comn. 7

Como se observa en la gura, la nica modicacion al circuito del ejemplo anterior es la del pulsador B1 entre RB0/INT y +5V, con resistencia Pull-Down. R3 mantiene el puerto en LOW (0), y al presionar, sube a HIGH (1), por lo tanto, la interrupcin se produce al presionar. Si se desea que la interrupcin se produzca al soltar el pulsador, solo basta intercambiarlo con R3.

Este es el caso la nueva lnea Q de C s Motorola. Han sido introducidos al mercado para competir con Microchip por este sector. A pesar de que todava la disponibilidad de herramientas de software hoy es escasa, esta familia de dispositivos tiene ciertos atractivos, como lo son su precio, inferior al del PIC16F84 en todos sus modelos, convertidores A/D en casi todos ellos, PWM, oscilador interno, y la disponibilidad gratuita del popular entorno de desarrollo Code Warrior. Ademas estan disponibles en encapsulados de 8 y 16 pines.

1 1 1 1 1

Regulador de Voltaje 7805. Diodo 1N4148 u otro diodo recticador de senal. Condensador Electrolitico de 100F. Conector DB9 Hembra para PCB en 90o . Base DIP18.

C. A. Recursos en Internet y Bibliograa


1 WWW.MICROCHIP.COM

Lista de Componentes para los Ejemplos


Cristal para mictrocontrolador de 4MHz.

Condensadores de 22pF. Sitio del fabricante de los PIC. Aqui encontrara las 2 hojas de datos y application notes para todos los mod1 Condensador de 4.7F (Valor no critico). elos de PIC disponibles. 2 Resistencia de 10k (Valor no critico). WWW.HTSOFT.COM 1 Resistencia de 470 (Valor no critico). Hitech produce el compilador PIC LITE para C. 1 Boton pulsador siempre abierto. Este puede bajarse gratuitamente de su sitio web. La versin completa de este producto es uno de los compiladores mas poderosos existentes para microcontro- D. Conguracion del Prog84 ladores PIC. Este programa requiere un archivo de conguracion que indique el puerto serial a utilizar, y el tipo de hardJAL.SOURCEFORGE.NET ware programador. Para el hardware expuesto en este Sitio de la comunidad de desarrollo de JAL. Aqui documento, solo debe modicar este archivo para el puede bajar JAL para Linux, Windows o MacOS X, ba- puerto serial que desea utilizar (lineas 4 a 7). jar la documentacion y acceder a numerosos ejemplos. WWW.GNUPIC.ORG Recopilacion de recursos para el manejo y desarrollo de aplicaciones con PICs para Linux. Incluye links a ensambladores, desensambladores, compiladores, simuladores, programadores y mas. En la seccion programadores encontrara un link para bajar el Prog84.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: port serial ### for serial port: base= 0x3f8 # com1, ttyS0 #base= 0x2f8 # com2, ttyS1 #base= 0x3e8 # com3, ttyS2 #base= 0x2e8 # com4, ttyS3 # settings for UniprogIV / BR870 # and similar seriel PIC programmers. no_power_C4C8 = 0 power: TxD mclr: TxD data: DTR data_f: CTS

B.
2 1

Lista de Componentes del Programador


Resistencias de 4.7k (Valor no critico). Resistencia de 10k (Valor no critico). 8

17: clock: RTS

También podría gustarte