Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4 de octubre de 2003
1
Un caso típico es el de un botón pulsador conectado a
Figura 2: Programación
un pin, y se desea realizar alguna acción determinada al
pulsarlo. Las interrupciones pueden no solo ser el cam-
bio de estado de un pin y dependera de las características archivo.hex Software
Programador
del µC en cuestión.
Características mas sofisticadas disponibles en al- Puerto
gunos µCs, entre otras, son: serial, USB,
u otro.
Usuario archivo.c
2. El PIC16F84
2.1. Introducción
archivo.asm Compilador El microcontrolador PIC16F84 de Microchip
(www.microchip.com) es uno de los microcontroladores
mas utilizados en proyectos electrónicos pequeños. A
Ensamblador archivo.hex diferencia de versiones mas avanzadas como el igual-
mente popular PIC16F87X, este carece de convertidor
A/D, PWM, comunicación serial por hardware y a la
2
vez tiene menos memoria y puertos (conjuntos de lineas Afortunadamente el compilador de JAL compila y en-
de datos) disponibles. Sin embargo, su fácil uso, bajo sambla a la vez, entregando el archivo .hex listo para
precio y altísima difusión, lo hacen el µC favorito en un programar.
gran rango de aplicaciones. De todos modos, muchas Con cualquier editor de texto puede escribir su código
de las características que este µC no posee pueden ser y grabarlo en un archivo .jal, para luego compilar desde
implementadas por software. la carpeta de JAL con el comando
RA4/T0CKl 3 16 OSC1/CLKIN
MCLR 4 15 OSC2/CLKOUT JAL generara los archivos archivo.asm y archivo.hex,
Vss 5 14 Vdd
que corresponden al código en Assembler y ensamblado
respectivamente.
RB0/INT 6 13 RB7
RB1 7 12 RB6
RB2 8 11 RB5 C y PIC LITE
RB3 9 10 RB4
Este compilador de C, desarrollado por Hitech
(www.htsoft.com) es la versión gratuita de un compi-
lador de características profesionales. La disponibilidad
Este dispositivo tiene 13 líneas de entrada/salida, con
de PIC LITE en el futuro no está asegurada, pero existen
tecnología TTL/CMOS, es decir, 5V para un estado lógi-
otros compiladores disponibles grauitamente con carac-
co 1 y 0v para el estado 0. Requiere un oscilador externo
terísticas similares.
de hasta 20MHz, se programa mediante un juego de 37
El uso de C puede ser muy conveniente para aquellos
instrucciones en Assembler, que manejan datos de 8 bits,
que ya estan familiarizados con este lenguaje y quieren
cuenta con un timer, un watchdog timer y responde a in-
minimizar la curva de aprendizaje y desarrollo con µCs.
terrupciones ante cambios de estado en las líneas de la
puerta B, RB4 hasta RB7, al flanco de subida o bajada El compilador tiene numerosas opciones que deben
en la línea RB0/INT, y al overflow1 del timer. ser consideradas y todo está adecuadamente documen-
tado. Éste también genera automáticamente 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 figura 1. Aquí se describen
algunos lenguajes de programación disponibles, con sus Los programas concebidos originalmente en Assem-
respectivos compiladores. bler son los mas eficientes, sin embargo el proceso de
desarrollo es tedioso y requiere de un aprendizaje mas
JAL largo que con lenguajes de mas alto nivel. Para seguir
esta via, se recomienda leer la hoja de datos, que per-
Este lenguaje fue desarrollado específicamente para mite familiarizarse con el conjunto de instrucciones.
µCs 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
librerías para realizar múltiples 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 Mi-
maximo. crochip provee el ensablador por defecto para los PICs.
3
2.3. Programación este circuito es muy simple, y se suguiere construirlo di-
rectamente en una PCB, lo que lo hará mas confiable y
Existen, en internet, numerosas duplas soft- duradero.
ware/hardware para programar µCs 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
dificulta encontrar una combinación que cumpla las
espectativas del desarrollador. Base DIP18
(para PIC16F84)
Aquí se presenta una dupla con la que se pretende lo-
grar los objetivos de simplicidad, bajo costo y disponi-
bilidad tanto para Linux como para Windows.
Para que el PIC16F84 entre en modo de programación
se debe forzar un estado lógico 0 en RB7 (pin 13) y RB6
(pin 12), mientras que M CLR (pin 4) se lleva a 0 para DB9 Hembra R1, R2, R3 y D1
(Puerto Serial)
resetear, y, finalmente se lleva y mantiene durante toda
la programación a un voltaje de 12 a 14V. Una vez que
se ha entrado en el modo de programación, se utiliza
RB7 para ingresar serialmente la información, y RB6 Las resistencias pueden ser de baja potencia (1/4W),
se utiliza como señal de reloj para aceptar cada bit en el diodo D1 es un diodo rectificador cualquiera, aunque
RB7. Los detalles que se refieren al protocolo de pro- se recomienda el 1N4148, y el condensador C1 es elec-
gramación pueden encontrarse en la documentación del trolítico. El 7805 es un regulador de voltaje que entrega
fabricante. 5V (out) cuando tiene una entrada (in) mayor.
El diseño minimalista de este circuito requiere que el
El circuito denominado COM84 logra estas especi-
puerto serial del PC entregue los niveles de voltaje y po-
ficaciones en forma muy minimalista, e incluso toma
tencia adecuados. Por esta razón el programador puede
poder del puerto serial, por lo que no requiere de ali-
(y así ha resultado en ciertos casos) no funcionar en
mentación externa.
Notebooks. De todos modos, segun la especificación de
programación ya descrita, este circuito puede ser modi-
Figura 4: Programador Serial Minimalista (COM84) ficado para utilizar una fuente de alimentación externa.
7805
D1
TXD (3) in out
PIC16F84 PROG84
1 18
C1
R1
100u
2 17
Este software programador puede ser utilizado con
10k
3 16
este y otros circuitos programadores. La configuración
4 15
del tipo de hardware y puerto serial se realiza mediante
MCLR
GND (5)
un archivo de configuración. Ver anexo con un archivo
5 VSS VDD 14
6 13
de configuracion de ejemplo.
RB7
RTS (7)
7 12
Una vez configurado y conectado el hardware ade-
RB6
R2 4.7k
DTR (4) 8 11
cuadamente, la programación se lleva a cabo con el sigu-
R3 4.7k
9 10
iente comando
CTS (8)
prog84 -x archivo.hex
4
y las lineas de alimentación, 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 lógico la linea 19 se llama a una función que detiene la ejecu-
1 durante su funcionamiento. Esto se puede observar en cion durante 250ms.
la figura del ejemplo 1. La función delay_1ms() ejecuta un retardo de 1ms
multiplicado por el parámetro. Su funcionamiento se
3. Ejemplo 1 basa en el hecho de que una instrucción (en Assembler)
tarda 4 tiempos de reloj, por lo que se ejecuta un loop el
3.1. Descripción número de veces que tome el tiempo requerido según la
velocidad del reloj. Esto se encuentra especificado en el
La forma mas demostrativa y simple posible de inicia- programa dado que se incluyó la versión de 4MHz (linea
rse con un µC es hacer parpadear un LED. Para esto, se 4) de las funciones específicas de este PIC.
debe implementar un programa que continuamente cam-
bie el estado de un pin y espere cierto tiempo antes de
repetir.
En este ejemplo utilizaremos JAL como lenguaje de 3.3. Circuito
programación del PIC.
5
4. Ejemplo 2 ficas para los PIC, y para retardos (función delayUs()).
El PIC específico y la velocidad de reloj se especifican
4.1. Descripción al momento de compilar. La definición en la línea 4 sim-
plemente permite indicar la dirección de memoria para
Este ejemplo es una extensión del ejemplo anterior,
un bit específico de un byte.
para ilustrar la implementación de respuesta a estímulos
Las variables han sido definidas como volatile, que es
externos, mediante interrupciones.
un requisito para pines y variables que son modificadas
Utilizando el lenguaje C para el compilador PICLITE,
desde la función interrupción. La variable led se refiere
implementamos un programa que permite encender y
al estado de RB7, y presionado indica si el pulsador ha
apagar un led al presionar un boton pulsador.
sido presionado.
La función isr() entre las líneas 13 y 25 está definida
4.2. Programa como la función interrupción con el indicador interrupt.
1: #include ”pic.h” El nombre de la función no tiene importancia. Esta es
2: #include ”delay.h” ejecutada cuando ocurre cualquiera de las posibles in-
3: terrupciones, pero la variable INTF se torna verdadera si
4: #define PORTBIT(adr, bit)
la interrupción fue producida por el pin RB0. Si es así,
5: ((unsigned)(&adr)*8+(bit))
6: desactivamos las interrupciones por INT, marcamos ver-
7: // Variables globales dadero presionado y reseteamos la variable INTF para
8: static volatile bit poder detectar este tipo de interrupción posteriormente.
9: led @ PORTBIT(PORTB,7);
10: static volatile bit presionado = 0;
La desactivación de la interrupción por INT, se hace
11: para evitar nuevas interrupciones por el rebote del botón
12: // Funcion interrupcion pulsador. Al hacer contacto un interruptor mecánico se
13: void interrupt isr() producen rápidas oscilaciones antes de asentarse en su
14: {
valor final, como se muestra en la figura. Esto se conove
15: if(INTF){
16: /* Ocurrio Interrupcion por INT como rebote.
17: * --> Deshabilitamos interrup.
18: * por INT y al final restauramos
19: * en indicador de interrupcion.
Figura 7: Rebote de Boton
20: */
21: INTE = 0; Voltaje
22: presionado = 1;
23: INTF = 1;
24: }
5V
25: }
26:
27: // Rutina principal
28: void main()
29: { 0V
30: ie(); /* Habilitada Ints. */
31:
32: /* Loop permanente */
33: for(;;){ Boton Tiempo
34: if(presionado){ Presionado
35: presionado = 0;
36: led = !led;
37: DelayUs(10); La función main() contiene el programa ejecutable.
38: INTE = 1;
39: }
En este habilitamos las interrupciones en la línea 30, y
40: } en el loop permanente, al detectar que el botón ha sido
41:} presionado, reseteamos la variable presionado, cambi-
amos el estado del led, esperamos 10us para asegurarnos
Las líneas 1 y 2 incluyen librerías de funciones especí- que se halla asentado el rebote del botón, y habilitamos
6
nuevamente las interrupciones por INT, en la linea 38. 5. Más allá de este documento
Las variables INTE e INTF son bits del registro INT-
CON. Este byte de configuración del PIC contiene in- La variedad de microcontroladores y sus aplicaciones
formación y configuración de las interrupciones, que son mucho mayor que lo propuesto es este documento.
permiten activarlas o desactivarlas según fuente (como Sin embargo el medio para abordar nuevos temas en este
INTE) e indican si ha ocurrido cada tipo de interrup- rubro puede ser algo confuso por lo que se sugieren al-
ción (como INTF). Todos los registro de información y gunos caminos a proseguir.
configuración se encuentran documentados en la hoja de La hoja de datos del PIC16F84 provee los detalles téc-
datos del PIC. nicos de su funcionamiento. La correcta interpretación y
Para compilar el programa en archivo.c para el comprensión de este documento es el camino para dom-
PIC16F84, con un cristal de 10MHz utilizamos el co- inar en totalidad este µC.
mando Microchip provee tambien documentos denominados
Application Notes, que describen aplicaciones y técni-
cas específicas a cada versión de PIC. Estos son muy
picl -16c84 -O -DXTAL_FREQ=10MHz programa.c ilustrativos y son una forma mas dinámica de aprender
al respecto, manteniendo el profesionalismo de los fab-
ricantes.
El parametro -O indica optimización de código, nece- Por otro lado, la literatura disponible para este PIC es
saria para la presición de las funciones delayUs() y re- extensa, al igual que los recursos disponibles en Internet.
duce el tamaño total del código generado. Las aplicaciones posibles del PIC16F84 solo están
limitadas por la imaginación. En Internet pueden encon-
trarse aplicaciones sorprendentemente creativas y otras
4.3. Circuito
con las que se obtienen desempeño inesperado con este
PIC.
Figura 8: Circuito Ejemplo 2
PIC16F87X
PIC16F84
+5V
+5V +5V 1 18 X1
Este PIC es el mas popular para aplicaciones de nivel
2 17
4MHz intermedio y avanzado, y es una excelente opción para
B1
R1
3
tener en mente cuando se requieren mas lineas de E/S,
10k OSC1 16
4
convertidores A/D, PWM, comunicación serial por hard-
MCLR OSC2 15
C2,C3 ware, entre otros. Existen versiones con distintas carac-
5 VSS VDD 14 22p
C1 terísticas como el tamaño de la memoria y numero de
6 RB0/INT RB7 13
4.7u pines.
7 12
Una vez que se ha dominado adecuadamente el
R3 8 11 LED
10k PIC16F84, adquirir los conocimientos para utilizar este
9 10 R2
470
nuevo PIC es considerablemente mas facil.
El costo de la versión PIC16F877, la mas poderosa,
tiene un costo de aproximadamente el doble del
PIC16F84.
7
Este es el caso la nueva línea Q de µCs Motorola. 1 Regulador de Voltaje 7805.
Han sido introducidos al mercado para competir con
Microchip por este sector. A pesar de que todavía la 1 Diodo 1N4148 u otro diodo rectificador de
disponibilidad de herramientas de software hoy es es- senal.
casa, esta familia de dispositivos tiene ciertos atractivos, 1 Condensador Electrolitico de 100µF.
como lo son su precio, inferior al del PIC16F84 en to-
dos sus modelos, convertidores A/D en casi todos ellos, 1 Conector DB9 Hembra para PCB en 90o .
PWM, oscilador interno, y la disponibilidad gratuita del
popular entorno de desarrollo Code Warrior. Ademas es- 1 Base DIP18.
tan disponibles en encapsulados de 8 y 16 pines.
C. Lista de Componentes para los
A. Recursos en Internet y Bibliografia Ejemplos
WWW.MICROCHIP.COM 1 Cristal para mictrocontrolador de 4MHz.
Sitio del fabricante de los PIC. Aqui encontrara las 2 Condensadores de 22pF.
hojas de datos y application notes para todos los mod-
1 Condensador de 4.7µF (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
versión completa de este producto es uno de los com-
piladores mas poderosos existentes para microcontro- D. Configuracion del Prog84
ladores PIC.
Este programa requiere un archivo de configuracion
JAL.SOURCEFORGE.NET que indique el puerto serial a utilizar, y el tipo de hard-
ware programador. Para el hardware expuesto en este
Sitio de la comunidad de desarrollo de JAL. Aqui documento, solo debe modificar 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.
1: port serial
2:
WWW.GNUPIC.ORG 3: ### for serial port:
4: base= 0x3f8 # com1, ttyS0
Recopilacion de recursos para el manejo y desarrol- 5: #base= 0x2f8 # com2, ttyS1
lo de aplicaciones con PICs para Linux. Incluye links 6: #base= 0x3e8 # com3, ttyS2
a ensambladores, desensambladores, compiladores, sim- 7: #base= 0x2e8 # com4, ttyS3
8:
uladores, programadores y mas. En la seccion progra- 9: # settings for UniprogIV / BR870
madores encontrara un link para bajar el Prog84. 10: # and similar seriel PIC programmers.
11: no_power_C4C8 = 0
12:
B. Lista de Componentes del Progra- 13: power: TxD
14: mclr: TxD
mador 15: data: DTR
16: data_f: CTS
2 Resistencias de 4.7kΩ (Valor no critico). 17: clock: RTS