Tutorial Microcontroladores Pic
Tutorial Microcontroladores Pic
Page 1
Contenidos
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. Microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. PIC16F84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Page 2
Objetivos
Mediante explicaciones paso a paso, este documento busca iniciar rpida y econmicamente
al lector en el desarrollo de circuitos basados en microcontroladores. Para dicho propsito se
emplear el popular microcontrolador PIC16F84, el cual por su simplicidad permite implementar circuitos con componentes de bajo costo disponibles comercialmente, y sin requerir de
instrumentacin de laboratorio complejo. Tambin las herramientas de software de desarrollo
que se presentan son de libre distribucin y pueden conseguirse fcilmente sin costo.
Los pasos que deber completar en este tutorial para desarrollar una aplicacin basada en
microcontroladores se resumen en:
(1) Seleccin del microcontrolador: En este tutorial se utilizar el PIC16F84x por simplicidad y costo. Para aplicaciones ms avanzadas se recomiendan el PIC16F87x o el
PIC18F452.
(2) Seleccin/Instalacin del compilador/ensamblador: Se emplear el compilador PICC
Lite de la empresa HI-TECH Software LLC. [3], junto con el software de desarrollo
MPLAB IDE de Microchip Technology Inc. [1]. Obtenga estos software de los sitios
webs que se indican en las referencias e instlelos.
(3) Seleccin/Instalacin del software programador: En este tutorial se utilizar el software programador PROG84. Obtenga el software programador PROG84 de las referencias que se indican en la seccin 2.3 o 2.3.1. Para aplicaciones ms avanzadas se
recomiendan el IC-Prog o el WinPIC.
(4) Construccin del circuito programador: En este tutorial se emplear el circuito programador JDM PIC Programmer 2 (JDM2). La construccin del circuito programador
JDM2 se explica en la seccin 2.3.2 o en las referencias de la seccin 2.3. El JDM2 es
un programador simple y verstil para aplicaciones avanzadas. Alternativamente, se
recomiendan el Multi PIC Programmer 5 Ver. 2 o el Progrmador PIC Pablin II. Si est
inicindose en la programacin de microcontroladores y necesita desarrollar una aplicacin rpidamente, tal vez sea recomendable que invierta en un programador de PIC
comercial como los de Olimex, que son una alternativa econmica a los programadores
PICStart Plus de Microchip.
(5) Desarrollo del software y programacin: Para escribir el programa que se incorporar
al microcontrolador se emplear el ambiente de desarrollo MPLAB IDE. Es posible
prescindir de este ambiente y escribir el cdigo en un procesador de textos simple. Sin
Page 3
TUTORIAL MICROCONTROLADORES P IC
embargo, la MPLAB IDE provee una serie de herramientas que facilitan el desarrollo
y la administracin del cdigo.
(6) Construccin del circuito base de la aplicacin. Los circuitos bases de la aplicacin se
presentan en en los ejemplos de este documento.
Al completar este tutorial, usted debera ser capaz de aplicar los pasos anteriores al desarrollo
de aplicaciones basadas en otros microcontroladores adems del PIC16F84.
1. Microcontroladores
1.1. Introduccin.
Los micrconctoladores son computadores digitales integrados en un chip que cuentan con un
microprocesador o unidad de procesamiento central (CPU), una memoria para almacenar el
programa, una memoria para almacenar datos y puertos de entrada salida. A diferencia de
los microprocesadores de propsito general, como los que se usan en los computadores PC,
los microcontroladores son unidades autosuficientes y ms econmicas.
El funcionamiento de los microcontroladores est determinado por el programa almacenado
en su memoria. Este puede escribirse en distintos leguajes de programacin. Adems, la
mayora de los microcontroladores actuales pueden reprogramarse repetidas veces.
Por las caractersticas mencionadas y su alta flexibilidad, los microcontroladores son ampliamente utilizados como el cerebro de una gran variedad de sistemas embebidos que controlan
mquinas, componentes de sistemas complejos, como aplicaciones industriales de automatizacin y robtica, domtica, equipos mdicos, sistemas aeroespaciales, e incluso dispositivos
de la vida diaria como automviles, hornos de microondas, telfonos y televisores.
Frecuentemente se emplea la notacin C o las siglas MCU (por microcontroller unit para
referirse a los microcontroladores. De ahora en adelante, los microcontroladores sern referidos
en este documento por C.
1.2. Caractersticas de los Microcontroladores.
Las principales caractersticas de los C son:
Unidad de Procesamiento Central (CPU): Tpicamente de 8 bits, pero tambin
las hay de 4, 32 y hasta 64 bits con arquitectura Harvard, con memoria/bus de datos
separada de la memoria/bus de instrucciones de programa, o arquitectura de von Neumann, tambin llamada arquitectura Princeton, con memoria/bus de datos y memoria/bus de programa compartidas.
Memoria de Programa: Es una memoria ROM (Read-Only Memory), EPROM
(Electrically Programable ROM), EEPROM (Electrically Erasable/Programable ROM)
o Flash que almacena el cdigo del programa que tpicamente puede ser de 1 kilobyte
a varios megabytes.
Memoria de Datos: Es una memoria RAM (Random Access Memory) que tpicamente
puede ser de 1, 2 4, 8, 16, 32 kilobytes.
Generador del Reloj: Usualmente un cristal de cuarzo de frecuencias que genera
una senal oscilatoria de entre 1 a 40 MHz, o tambin resonadores o circuitos RC.
Interfaz de Entrada/Salida: Puertos paralelos, seriales (UARTs, Universal Asynchronous Receiver/Transmitter), I
Page 4
Page 5
TUTORIAL MICROCONTROLADORES P IC
estricto rigor, Assembly es el lenguaje y Assembler es la herramienta de software que traduce el cdigo
Assembly a lenguaje de mquina. Sin embargo, es normal en el uso profesional emplear la palabra Assembler en forma ambigua para referirse tanto al lenguaje de programacin como a la herramienta de software
ensambladora.
Page 6
alto
nivel
mslenguajes
comnesvariantes
para la programacin
controladores
el C y elC++,
pero tambin
existen
otros
del BASIC y de
el Pascal.
Una vezesescrito
programa
en el
lenguaje de alto nivel, ser necesario emplear un compilador para traducirlo, ya sea a lenguaje
de Ensamblador o directamente a lenguaje de mquina. Es importante considerar que el
cdigo de Ensamblador generado por los compiladores tiende a ser ms lagro e ineficiente
que aquel directamente desarrollado en lenguaje de Ensamblador. Esta desventaja puede ser
crtica en ciertas aplicaciones que requieren un programas compactos y de una alta velocidad
de ejecucin. Un vez que el compilador ha generado el cdigo de Ensamblador (.asm), ser
necesario utilizar un ensamblador para generar el cdigo binario de mquina.
1.3.2. Programacin del C.
Este proceso corresponde a utilizar un programa en el PC que toma el cdigo ensamblado
(.hex, .o, .bin, .coff) para el C especfico, y lo enva 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 para este propsito,
lo cual puede prestarse a confusin. El software programador a veces recibe tambin el
nombre de downloader, ya que su propsito es descargar o transferir desde el PC al C el
cdigo ensamblado. En la figura 2 se muestran las componentes involucradas en el proceso
de programacin del C. Es importante mencionar que no deben confundirse los trminos
desarrollo o programacin del software y programacin del C, el primero se refiere a escribir
el programa, mientras que el segundo se refiere transferir el cdigo de mquina a la memoria
del C.
Page 7
TUTORIAL MICROCONTROLADORES P IC
2. PIC16F84
2.1. Introduccin.
El C PIC16F84 de Microchip Technology Inc. [1] es uno de los microcontroladores ms utilizados en proyectos electrnicos pequeos. A diferencia de versiones ms avanzadas como
el igualmente popular PIC16F87x, el PIC16F84 carece de convertidor A/D, PWM, comunicacin serial por hardware y tiene menos memoria y puertos (conjuntos de lneas de datos)
disponibles. Sin embargo, su fcil uso, precio reducido, lo han convertido en un C muy
popular y el favorito en un gran rango de aplicaciones. A pesar de que este C no posee ,
muchas de las caractersticas que este Cno posee pueden ser implementadas por software.
El C PIC16F84, o su version actual el C PIC16F84A pertenece a la familiad Microchip de
microcontroladores de rango medio de 8 bits con 18 pines. Como se muestra en la figura 3, este
tiene 13 lneas de entrada/salida (RA0RA5, RB0RB7) con tecnologa TTL/CMOS, es decir,
5 V para un estado lgico 1 y 0 V para el estado 0. Requiere un oscilador externo de hasta
20 MHz, se programa mediante un juego de 37 instrucciones en Assembly, que manejan datos
de 8 bits, cuenta con un timer, un watchdog timer y responde las siguientes interrupciones:
Cambios de estado en las lneas RB4 a RB7 del puerto B.
Flanco de subida o bajada en la lnea RB0/INT del puerto B.
Overflow2
del timer.
refiere al evento que ocurre al incrementar un registro por sobre el valor mximo de bits que
posee
Page 8
C:
mquina a partir del programa en C. El compilador posee numerosas opciones y ejemplos que
se encuentran adecuadamente documentados.
2.2.3. Desarrollo en JAL.
El JAL es un lenguaje parecido al Pascal desarrollado por Wouter van Ooijen especificamente
para Cs PIC y algunos Cs SX [4]. Al ser parecido al Pascal, el leguaje es ms intuitivo
que el C. El JAL tambin cuenta con libreras para realizar mltiples tareas comunes y al
Page 9
TUTORIAL MICROCONTROLADORES P IC
igual que varios comipladores de C, este compila y ensambla a la vez entregando el cdigo de
mquina en un archivo .hex.
2.3. Programacin del C PIC16F84.
Es importante recordar que en este documento la expresin programacin del C se refiere al
proceso de descargar a la memoria del C el cdigo de mquina generado por el ensamblador.
Este proceso no debe confundirse con el proceso de escribir el programa tratado en la seccin
anterior, si bien en la prctica la expresin programacin del C se utiliza en forma ambigua
para referirse tanto a la escritura del programa como a la descarga del mismo en la memoria
del C.
En Internet se pueden encontrar disponibles en forma gratuita numerosas duplas softwarehardware para programar Cs PIC bajo diferentes sistemas operativos. Por lo general estas
duplas software-hardware son interdependientes, lo que puede dificultar encontrar una combinacin que funcione correctamente y sea a la vez simple y general. A continuacin se presenta
un resumen de las combinaciones software-hardware para programadores. Todos los programadores funcionan bajo Windows o DOS y se programan a travs del puerto serial RS-232
a menos que se indique algo distinto. En el siguiente resumen, SW significa software y HW
significa hardware.
SW: ElCheapo + HW: ElCheapo
PIC Programmer by Myke Predko
http://www.rentron.com/Myke4.htm
Observaciones: Este programador emplea un circuito similar al COM84 con cuatro
partes adicionales y alimentacin externa, pero usa el puerto paralelo. El diseno considera adems de factores como costo y simplicidad, la flexibilidad de uso en diferentes
computadores. Ya que aparentemente alternativas ms minimalistas como el COM84
no funcionan correctamente en ciertos computadores que no entregan suficiente corriente por el puerto serial.
Chips: Solamente probado con el PIC16F84.
SW: IC-Prog + HW: JDM / Fluffy2 / Ludpipo / Multi PIC Programmer
5 Ver. 2* / Pablin II** / ProPic II / Shaer / Tait /Shaer
IC-Prog Prototype Programmer - Bonny Gijzen
http://www.ic-prog.com/
Observaciones: El IC-Prog es tal vez el software programador ms verstil junto con
el WinPIC DL4HYF, ya que no slo son capaces de programar una gran variedad de
Cs, sino tambin pueden trabajar con variados circuitos programadores. Entre los
programadores destacan algunos que no se encuentran mencionados en la pgina de
IC-Prog. Uno de ellos es el Multi PIC Programmer 5 Ver. 2, disenado por Feng para
chips de 8/18/28/40 pines. Este est basado en el programador JDM y se alimenta del
puerto serial, aunque en algunos aspectos el circuito parece una versin simplificada
del ProPIC II:
* Multi PIC Programmer 5 Ver. 2
http://feng3.cool.ne.jp/en/pg5v2.html
Otro diseno para chips de 8/18/28/40 pines que se alimenta del puerto paralelo es el
programador Pablin II de Pablin. Este tambin se parece al Multi PIC Programmer
5 Ver. 2. El programador Pablin II se puede encontrar en:
** Programador PIC Pablin II
Page 10
10
http://www.pablin.com.ar/electron/circuito/mc/ppp2/index.htm
Ambos programadores, el Multi PIC Programmer 5 y el Pablin II se presentan como
opciones muy atractivas por su simplicidad y versatilidad.
Chips: PIC 12Cxx, 16Cxxx, 16Fxx, 16F87x, 18Fxxx, 16F7x, 24Cxx, 93Cxx, 90Sxxx,
59Cxx, 89Cx051, 89S53, 250x0, AVR , 80C51, otros.
SW: Picprog 1.8.3 + HW: JDM Jens Madsen PIC-Programmer 2
Jaakko Hyvtti Picporg 1.8.3 documentation
http://hyvatti.iki.fi/~jaakko/pic/picprog.html
OS: Linux, Windows+Cygwin.
SW: PIP-02 + HW: COM84
Beginners PIC and AVR Page - Matthew Rowe
http://homepage.ntlworld.com/matthew.rowe/micros/dosgear.htm
http://homepage.ntlworld.com/matthew.rowe/micros/
Observaciones: El circuito programador COM84 es probablmente el ms sencillo que
existe que se alimenta directamente del puerto serial. Sin embargo, es posible que
no funcione en muchos computadores nuevos que no son capaces generar el voltaje
de alimentacin suficiente con los nuevos circuitos de bajo consumo. En este caso se
recomienda emplear el JDM PIC Programmer 2 que es una versin similar pero que
funciona bajo todas condiciones.
Un explicacin del circuito COM84 en espanol puede encontrarse en:
Programador PIC y E2PROM sin fuente (puerto serie) - Pablin
http://www.pablin.com.ar/electron/circuito/mc/com84/index.htm
Existe un circuito ms sencillo que el programador COM84 y que solo requiere unas
resistencias. Sin embargo, este es slo para la llamada programacin serial en circuito
o ICSP (in-circuit serial programming), es decir la programacin del C en su circuito
base.
Est
tcnica
ventajas
evidentes
simplicidad,
pero es una
solucin
es-Para
pecfica
a cada
Ctiene
y menos
general,
por loenque
no se considerar
en este
tutorial.
informacin adicional consulte la documentacin del fabricante [1] o el ejemplo en:
http://www.jdm.homepage.dk/easypic2.htm
Chips: Solamente probado con el PIC16F84.
SW: PIX 1.13 + HW: COM84 / JDM / JDM84 / Ludi / Pixxer /Shaer /
Tait
COM84 PC Board
http://www.piclist.com/techref/piclist/cheapic/COM84.htm
PIX 1.13 - Bengt Lindgrens
http://home.swipnet.se/~w-53783/
http://ftp.iasi.roedu.net/mirrors/ftp.tapr.org/picsig/software/
Chips: Solamente probado con el PIC16F84.
SW: PROG84 + HW: COM84 / Ludpipo / Uniprog IV/ BR870
Prog84, PIC16x84/24c16 programming utils
http://home3.inet.tele.dk/frda/picasm/prog.html
Observaciones: Proyecto de Wim Lewis, actualmente mantenido por Frank Damgaard.
Chips: El software programador PROG84 soportara los PIC 16C84/16F84, 16C6x/7x/923/924,
16F87x, 12C5xx y 24C16 con los circuitos programadores Ludpipo / Uniprog IV/
Page 11
TUTORIAL MICROCONTROLADORES P IC
Existen una gran cantidad de otras alternativas, consulte las referencias en [6]. Un listado de
programadores para Linux puede encontrarse en:
http://www.micahcarrick.com/v2/content/category/4/2/8/
Existen varias opciones de programadores comerciales, como el PICStart Plus II de Microchip,
el cual se puede emplear junto con el MPLAB IDE, aunque alternativas ms econmicas son
11
Page 12
12
Por su simplicidad, generalidad, bajo costo y disponibilidad tanto para Linux/BSD como para
Windows, se recomienda utilizar la combinacin SW: PROG84 + HW: COM84 en el desarrollo de los ejemplos de este tutorial. Tengase presente que el programador COM84 estara
limitado a los Cs de la familia PIC16F84x, por lo tanto para otros proyectos considere utilizar
SW: IC-Prog/WinPIC + HW: Multi PIC Programmer 5 Ver. 2/Programador
PIC Pablin II. A continuacin se explican brevemente el programador PROG84+COM84.
2.3.1. Software Programador: PROG84.
El software programador PROG84 fue desarrollado por Wim Lewis y actualmente es mantenido por Frank Damgaard, este puede obtenerse en:
http://home3.inet.tele.dk/frda/picasm/prog.html
Ver tambin:
http://people.omnigroup.com/wiml/soft/pic/
Este software programador puede ser utilizado con circuitos programadores por puerto serial
o paralelo como el COM84, Ludpipo, Uniprog IV, BR870. Para utilizar el PROG84 deber
configurar el tipo de hardware y el puerto serial editando el archivo lp_cfg contenido en el
directorio donde PROG84 fue colocado. Ver Anexo C con un ejemplo de archivo de configuracin. Una vez configurado y conectado el hardware adecuadamente, la programacin se
efectua con el siguiente comando:
prog84 -x archivo.hex
o con
prog84 -azC UX -v -x archivo.hex
En este ltimo caso la opcin a indica que el programador verifique que los datos fueron
cargados correctamente en el C, la opcin z indica que borre la memoria del Cantes de
escribir el cdigo del archivo archivo.hex, la opcin C programa los fuses como U para el
power up timer (on) y la configuracin del oscilador, que en caso de un cristal es X. La opcin
v es para aumentar los mensaje (verbosidad) de estado del proceso de programacin del C.
2.3.2. Circuito Programador JDM PIC Programmer 2.
El circuito programador JDM PIC Programmer 2 (JDM2) es una interfaz de hardware muy
simple que permite programar al C PIC16F84 con muy pocos componentes, ya que se alimenta directamente del puerto serial RS-232 del PC sin requerir una fuente de alimentacin
externa como se muestra en la figura 4. Al lado izquierdo de esta figura se muestran las lneas
del puerto serial, con sus respectivos nmeros de pin en el conector DB9 o DB25. Las resistencias requeridas, tanto R1 de 1.5 k como R2 de 10 k, pueden ser de baja potencia (0.25
W). Los diodos D1, D2, D5, D6 son diodos rectificadores cualquiera, aunque se recomienda el
1N4148. El diodo D3 debe ser un diodo Zener de 6.2 V como el BZV55C6V2 y debe colocarse
en serie con el led como se muestra en el esquemtico. El diodo Zener D3 y el led pueden
reemplazarse por un nico diodo Zener de 8.2 V. El diodo D4 tambin es un diodo Zener, pero
de 5.1V como el BZV55C5V1. Tanto el condensador C1 de 100 C, 16 V como el condensador
C2 22 C, 16 V deben ser electrolticos. El condensador C2 tambin puede reemplazarse por
un condensador de 100 C, 16 V como C1. Dada la simpleza del circuito JDM2, se sugiere
construirlo directamente en una placa PCB, de modo que sea ms duradero y su operacin
ms confiable.
Page 13
TUTORIAL MICROCONTROLADORES P IC
Para que el PIC16F84 entre en modo de programacin debe forzarse un estado lgico 0 en
RB6 (pin 12) y RB7 (pin 13), mientras que MCLR (pin 4) debe llevarse a 0 por un periodo
corto para resetear el C, e inmediatamente despus deber llevase y mantenerse en un voltaje
entre 12 y 14 V durante toda la programacin. Una vez que el C ha entrado en modo de
programacin, se utiliza RB7 (PGD o Program Data) para ingresar serialmente la informacin,
mientras que RB6 (PGC o Program Clock) se utiliza como seal de reloj para aceptar cada
bit en RB7. Esto se logra mediante el software programador. Los detalles del protocolo de
13
Page 14
14
Page 15
TUTORIAL MICROCONTROLADORES P IC
http://www.ehl.cz/pic/pic_e.htm
PIC8Fx52
PIC micro and C - bootloader - Shane Tolmie
http://www.microchipc.com/PIC18bootload/
15
cdigo sea bastante autoexplicativo. Los comentarios se incluyen con el prefijo --.
Page 16
16
Page 17
TUTORIAL MICROCONTROLADORES P IC
(4)
(5)
(6)
(7)
(8)
= XT, Watchdog Timer = Off, Power Up Timer = Off, Code Protect = Off (a menos
que desee otra configuracin particular).
Seleccione el hardware programador, por ejemplo el PICSTART Plus, empleando la
opcin Programmer/Select Programmer de la barra de men.
Habilite el hardware programador con la opcin Programmer/Enable Programmer.
Borre la memora del C presionando el icono de pgina en blanco a C o la opcin
Programmer/Erase Flash Device de la barra de men.
Programe el dispositivo presionando el icono de pgina llena (amarilla) a C o la
opcin Programmer/Program de la barra de men.
Normalmente el programador entregar un mensaje indicando si la programacin fue
exitosa. Sin embargo, si desea verificar si efectivamente la programacin se realiz
en forma correcta, emplee el botn de verificacin (pgina con check) o la opcin
Programmer/Verify de la barra de men. Tambin puede ver los contenidos de la
memoria del C utilizando la opcin View/Program Memory de la barra de men. Si
la programacin se realiz en forma correcta tanto el cdigo compilado como el cdigo
leido de vuelta del C deben tener el mismo checksum que se muestra en la barra de
men del MPLAB IDE.
17
4.1. Descripcin.
Este ejemplo ilustra la respuesta a estmulos externos utilizando interrupciones implementada
en lenguaje C para el compilador PICC Lite. El programa permite encender y apagar un
LED al presionar un botn pulsador. Antes de encender o apagar el LED este parpadea tres
veces anunciando el cambio de estado.
4.2. Paso 1: Instalacin y Configuracin del Compilador PICC Lite.
(1) Obtenga el MPLAB IDE en:
http://www.microchip.com/
(2) Instale el MPLAB siguiendo todos los de la instalacin.
(3) Obtenga el compilador PICC Lite en:
http://www.htsoft.com/products/compilers/PICClite.php
(4) Instale el compilador siguiendo todos los pasos de la instalacin.
Page 18
18
(5) Una vez instalado el PICC Lite, inicie el MPLAB IDE y actualice la lista de compiladores para que funcione junto con PICC Lite mediante los siguientes pasos:
(a) En la opcin de la barra de men elija Project/Set Language Tool Locations/HI-TECH
Universal Toolsuite...
(b) Elija la opcin HI-TECH Universal ToolSuite/Executables/HI-TECH C Compiler
y fije la ubicacin donde instal el compilador picl.exe, por ejemplo:
C:\Program Files\HI-TECH Software\PICC\lite\9.60\bin\picl.exe
(c) Si es necesario agregue la ubicacin donde se ubiquen archivos include (.h) bajo la
opcin HI-TECH Universal ToolSuite/Default Search Path & Directories/Include
Search Path.
(3)
(4)
(5)
(6)
(7)
(8)
(9)
Page 19
TUTORIAL MICROCONTROLADORES P IC
el archivo con extensin .c, por ejemplo con el nombre ej2.c en el directorio del
proyecto. Para guardar el archivo utilice la opcin File/Save As.
1: #include <pic.h>
2: #include "delay.h"
3:
4: // Configuration Bits (a.k.a. Fuses)
5: // Estas lineas son opcionales, ya que se pueden fijar externamente
6: // en MP LAB IDE bajo la opcion de la barra de menu
7: // <Configure/Configuration Bits...>
8: // Definiciones:
9: // RC/HS/XT/LP : Oscilador RC, High-speed XTAL, XTAL, Low-power XTAL
10: // WDT: Watchdog Timer (EN/DIS: Enable, Disable)
11: // P WRT: P ower-up Timer (EN/DIS: Enable, Disable)
12: // P ROTECT: Code write protection
13: __CONFIG(XT&WDTDIS&P WRTDIS&P ROTECT);
14: //__CONFIG(RC&WDTEN&P WRTEN&UNP ROTECT);
15:
16: //#define XTAL_FREQ 20MHZ
17:
18: #define P ORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
19:
20: // Variables Globales
21: static volatile bit led @ P ORTBIT(P ORTB,7);
22: static volatile bit boton = 0;
23:
24: // Funcion Interrupcion
19
28: //
INTE = 0;
29:
boton = 1;
// Boton presionado
30:
INTF = 0;
31:
32: }
33:
34: // Rutina P arpadeo
35: void blink(void){ // P arpadea el una veces antes de cambiar
36:
// de estado
37:
char i;
38:
for(i=0;i<5;i++){
39:
DelayMs(125);}
40:
led = !led;
41:
for(i=0;i<5;i++){
42:
DelayMs(255);}
43:
led = !led;
44:
for(i=0;i<5;i++){
45:
DelayMs(125);}
46:
led = !led;
47:
for(i=0;i<5;i++){
48:
49:
DelayMs(255);}
led = !led;
50: }
51:
52: // Rutina P rincipal
53: void main(void){
54:
led = 1;
58:
59:
60:
Page 20
20
61:
62:
63:
64:
65:
66:
boton = 0;
67:
led = !led;
68:
DelayUs(10);
// Espera 10 microsegundos
69:
blink();
70:
//
71:
72:
INTE = 1;
}
}
73: }
Page 21
TUTORIAL MICROCONTROLADORES P IC
compilador que reserve una posicin fija de la RAM para almacenar la variable. Aquellas variables que no son static se crean en posiciones que son asignadas en forma
dinmica a medida que se necesitan.
Entre las lneas 25 y 32 se define la funcin interrupcin isr(void) empleando el
calificador interrupt. El nombre de la funcin no tiene importancia. La funcin
interrupcin es ejecutada cuando ocurre cualquiera de las interrupciones posibles, por
ejemplo un overflow del timer o un cambio de estado en el pin RB0. La variable INTF
21
Page 22
22
A
y B. Esto
se realiza
asignando
1 a los bits
de los
registros
TRISA
y TRISB.
Luego un
se habilitan
las correspondientes
interrupciones (lneas
59 y 60). Una
alternativa es utilizar la funcin ei() comentada en la lnea 61.
Por ltimo se inicia un loop sin fin, el cual permanentemente est detectando el
estado de la variable boton, la cual cambiar a 1 si ocurre una interrupcin externa.
De ser as, se reconoce que el botn pulsador fue presionado colocando la variable
de estado boton nuevamente en 0. Luego, el estado de la varaible led se invierte
mediante el operador ! de negacin, es decir si estaba en 0 se coloca en 1, y si estaba
en 1 se coloca en 0. Antes de cambiar de estado finalmente, se hacer parpadear
al LED invocando la funcin blink(void) creada para dicho propsito. La lnea
para volver habilitar las interrupciones (lnea 70) fue comentada, puesto que estas no
son deshabilitadas en ningn momento. Si estas fuese deshabilitadas por la funcin
interrupcin en la lnea 28, entonces sera necesario volverlas a habilitar en la lnea
70 para poder reconocer nuevas interrupciones.
(10) Agregue el archivo con el cdigo en lenguaje C (creado en el paso anterior al proyecto)
empleando la opcin Project/Add Files to Project..., y seleccione el archivo
ej2.c creado en el paso anterior. Verifique que el tipo de archivo esta fijado en
Source (*.c, *.as) y que la opcin Auto est seleccionada. Presione Open, esto debera agregar el archivo al a seccin Source Files en la ventana con la lista de archivos
del proyecto. Otra manera de agregar un archivo es seleccionando con el botn derecho del mouse la seccin deseada en la lista de archivo del proyecto. En este caso, la
seccin sera Source Files. Del men desplegado elija la opcin Add Files y siga
los pasos ya explicados en este punto para seleccionar el archivo.
(11) De la lista de archivos del proyecto, seleccione con el botn derecho del mouse el ttulo
del proyecto, por ejemplo ej2.mcb. Del men desplegado elija la opcin Save para
grabar el proyecto.
4.4. Paso 3: Compilacin del Proyecto con PICC Lite.
(1) Seleccione la opcin Project/Build Options.../Project. Luego seleccione la seccin
Compiler y agregue la siguiente definicin de macro:
XTAL_FREQ=20MHZ
Esto agregar la opcin de compilacin -DXTRAL_FREQ=20MHZ (ver el paso siguiente).
Alternativamente puede definir la macro con el pragma:
#define XTAL_FREQ 20MHZ
antes de colocar las lneas #include <...># en el cdigo del programa.
La definicin de esta macro es necesaria para ajustar el ciclo de operacin de las
rutinas de retardo a la frecuencia del cristal oscilador.
(2) Existen dos opciones para compilar el programa:
MPLAB IDE: Para compilar el proyecto seleccione la opcin de la barra de
men Project/Build o presione las teclas CTRL+F10. Se abrir una ventana con
el nombre Output, la cual mostrar el estado de la compilacin.
Lnea de Comando: Para compilar el proyecto para la version actual del PIC16F84,
el PIC16F84A, con un cristal de 20 MHz desde la lnea de comando en una ventana DOS ejecute las siguientes instrucciones:
picl --chip=16F84A -DXTAL_FREQ=20MHZ -C delay.c
picl --chip=16F84A -DXTAL_FREQ=20MHZ -C ej2.c
picl --chip=16F84A -DXTAL_FREQ=20MHZ -oej2.cof
Page 23
TUTORIAL MICROCONTROLADORES P IC
23
MPLAB IDE, deber entonces realizar los dos primeros pasos de la seccin 3.5.
Page 24
24
Page 25
TUTORIAL MICROCONTROLADORES P IC
5.1. PIC16F87x.
El PIC16F87x es el ms popular para aplicaciones de nivel intermedio, y es una excelente
opcin cuando se requieren ms lneas de entrada/salida, convertidores A/D, senales PWM,
comunicacin serial por hardware, entre otros aspectos. Existen versiones con distintas caractersticas como el tamano de la memoria y nmero de pines.
Una vez que se ha dominado adecuadamente el PIC16F84, adquirir los conocimientos para
utilizar este nuevo PIC es considerablemente ms fcil. El costo de la versin PIC16F877,
que es la que cuenta con ms caractersticas de la serie, es aproximadamente el doble que el
del PIC16F84 con valores entorno a USD $10 versus USD $ 5.
25
Page 26
26
Agradecimientos
Este tutorial fue posible gracias a una versin anterior del tutorial preparad por Juan Pablo
Caram en Octubre del 2003 para el curso IEE2712 Laboratorio de Circuitos del Dpto. de
Ingeniera Elctrica de la Universidad Catlica de Chile.
El archivo de configuracin del PROG84 se denomina lp_cfg. Este debe modificarse para
seleccionar el puerto serial a utilizar y el tipo de hardware programador. Para el programador
COM84 lo esencial es configurar el puero serial que se desea utilizar (lneas 4 a 7) segn se
muestra en el siguiente ejemplo:
1: port serial
2:
3: ### for serial port:
4: base= 0x3f8 # com1, ttyS0
5: #base= 0x2f8 # com2, ttyS1
6: #base= 0x3e8 # com3, ttyS2
7: #base= 0x2e8 # com4, ttyS3
8:
9: # settings for UniprogIV / BR870
10: # and similar seriel PIC programmers.
11: no_power_C4C8 = 0
12:
13: power: TxD
14: mclr: TxD
15: data: DTR
16: data_f: CTS
17: clock: RTS
Page 27
TUTORIAL MICROCONTROLADORES P IC
Referencias
REFERENCIAS BASICAS
[1] Microchip T echnology, Inc.
http://www.microchip.com/
Sitio del fabricante de los microcontroladores PIC. Aqui encontrar las hojas de datos y Application Notes.
[2] Gnu PIC Utilities (gputils). http://gputils.sourceforge.net/
Conjunto de herramientas para microcontroladores Microchip PIC, que incluyen compiladores, ensambladores, y simuladores.
[3] HI-T ECH Software LLC.
http://www.htsoft.com/
HITECH Software LLC. produce el compilador PICC Lite para C. Este puede obtenerse en forma gratuita
de su sitio web. La versin completa de este producto es uno de los compiladores ms poderosos existentes
para microcontroladores PIC.
[4] Jal, por Wouter van Ooijen. http://jal.sourceforge.net/
Sitio de la comunidad de desarrollo de JAL. Aqu podr obtener JAL para Linux/BSD, Windows o MacOS
X, toda la documentacin asociada y acceder a numerosos ejemplos.
[5] CCS, Inc.
http://www.ccsinfo.com/
[6] GNUPIC.
http://www.gnupic.org/
Recopilacin de recursos para el manejo y desarrollo de aplicaciones con PICs para Linux/BSD. Incluye
27
TUTO RIALES
[12] http://www.epemag.wimborne.co.uk/pictutorial.pdf
Tutorial Descriptivo del PIC16F87x por John Becker. Este es til como referencia pero no es el mejor
ejemplo para empezar.
[13] http://www.microchipc.com/conference/
Tutorial Descriptivo del PIC18Fxxxx. Util como referencia general pero no para empezar.
[14] PIC Pages http://www.botkin.org/dale/PIC.htm
Contiene ejemplos sencillos de aplicacin.
Page 28
28
EJEMPLO S DE APLICACIO N
[15] J. Charais, R. Lourens. Software PID Control of an Inverted Pendulum Using the PIC 16F684. Application
Note AN 964, Microchip T echnology Inc.
http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf
Interesante ejemplo de aplicacin de microcontroladores al control de motores.
[16] Pablin Electrnica. Proyectos y circuitos de ejemplo.
http://www.pablin.com.ar/electron/
http://www.pablin.com.ar/electron/download/index.htm (Software para electrnica.)
http://www.pablin.com.ar/electron/proyecto/picnet/index.htm
Entradas y Salidas de un PIC controladas por Internet Excelente ejemplo de una aplicacin sencilla,
pero de gran utilidad prctica. El proyecto original es de Wichit Sirichote, ver referencia ms abajo.
[17] Build Your Own Microcontroller Projects:
http://www.kmitl.ac.th/~kswichit%20/
http://www.kmitl.ac.th/~kswichit%20/easyserver0.9/easyserver0.9.htm
REMOTE[RS232] Using Easy-Server V0.9 Excelente ejemplo de una aplicacin sencialla, pero de gran
utilidad prctica. Este proyecto tambin se encuentra traducido al espanol en la pgina web de Pablin; ver
referencia anterior.
[18] Peter Andersons PIC Page:
http://www.phanderson.com/PIC/
Presenta ejemplos con interrupciones, rutinas aritmticas, interfaces serial, entre otros.
[19] Paul Hills, Using microcontrollers in your robot:
http://homepages.which.net/~paul.hills/Embedded/Embedded.html
BO O TLO ADERS
[20] PIC micro and C bootloader by Shane T olmie:
http://www.microchipc.com/PIC16bootload/
http://www.microchipc.com/PIC18bootload/
Page 29
TUTORIAL MICROCONTROLADORES P IC
29
Escuela de Ingeniera, Pontificia Universidad Catlica de Chile, Vicuna Mackenna 4860, Santiago, Chile, Tel. : 56 (2) 354-2000