You are on page 1of 10

Cómo Programar un PIC 2

Introducción funcionales; de hecho, son muchos los cir-


cuitos decodificadores de señales de TV
En la actualidad es muy fácil construir construidos con pequeños controladores
productos electrónicos con bajo costo, programables integrados que contienen
espacio reducido y con características programas sencillos. Nuestro objetivo es
multifuncionales; de hecho, son muchos que pueda programar un PIC con la ayu-
los circuitos decodificadores de señales da de una computadora, sin que para ello
de TV construidos con pequeños contro- se necesiten complicados circuitos adicio-
ladores programables integrados que nales. Se necesita un dispositivo de progra-
contienen programas sencillos. En este mación para incorporar el software de los
capítulo, explicaremos cómo se progra- chips que venimos describiendo desde ha-
ma un PIC con la ayuda de una compu- ce varios números (nos referimos a los
tadora, sin que para ello se necesiten PICs). El costo de un dispositivo de estas
complicados circuitos adicionales. Tam- características suele ser muy alto, razón
bién daremos las direcciones de Internet por la cual el lector le "huye" al diseño de
para recabar información sobre la forma sistemas electrónicos con estos compo-
de "leer" el programa contenido en un nentes. Obviamente, el programador PIC
PIC y la forma de obtener prestaciones presentado en este libro necesita algunos
especiales. componentes accesorios para ser construi-
En la creación y diseño de un nuevo do pero resulta una solución ideal para
producto electrónico, la tendencia actual quienes poseen computadora o puedan
es tratar de respetar los términos descripti- emplear la de un amigo o técnico conoci-
vos "bajos costos", "ultra-compacto" y do. El rasgo más importante de esta uni-
"multifuncional". Lograr un producto con dad es que no necesita partes especializa-
todas estas características era sumamente das y es un circuito muy simple.
difícil. Afortunadamente, en los últimos Luego de armado se lo conecta al port
años, diseñar un producto con esos atribu- (puerto) de la impresora de cualquier PC
tos se ha tornado más fácil gracias al de- (el puerto no necesita ser bi-direccional), y
sarrollo de dispositivos programables como ejecutar un software (programa) para ini-
la familia de microcontroladores PIC de ciar la programación de los microcontrola-
Tecnologías Microchip. dores.

Har emos r efer encia a la serie PIC


Estructura de un Programador de PICs 16F84, 16F83 y 16C84, por ser compo -
nentes de bajo costo que se consi -
En la actualidad es muy fácil construir guen con facilidad .
productos electrónicos con bajo costo, es-
pacio reducido y con características multi- La información que aquí damos fue re-

Todo sobre PICs 23


CÓMO PROGRAMAR UN PIC

dactada a partir del "websitie" de Micro- nido al navegar por Internet. De los tipos
chip Inc., empresa fabricante de estos de PICs disponibles, los más fáciles para
componentes. trabajar, según el resultado de mi búsque-
Cabe aclarar que en las páginas de In- da (vea la figura 2) son el 16F83, el 16F84 y
ternet de Microchip Inc. puede encontrar el 16C84. Estos modelos particulares son los
toda la información necesaria para el di- que soporta nuestro programador.
seño y construcción de circuitos a partir de Cuestan menos de $10 cada uno, y su
microcontroladores PIC de la serie 16XXX. ROM es eléctricamente borrable, de mo-
Tal como diimos en el capítulo 1, un PIC, do que no necesita una luz ultravioleta pa-
como la mayoría de los microcontrolado- ra borrar y reprogramar los dispositivos.
res, es una computadora pequeña con El 16F84 es el más empleado, tiene 68
CPU, ROM, RAM y circuitos I/O (de entrada bytes de RAM y 1.024 palabras de memo-
y salida) en un solo chip. ria de programa.
Los Microcontroladores constituyen el La memoria de programa es un EE-
segmento de mayor crecimiento en la in- PROM tipo flash, que puede ser reescrito
dustria electrónica (existen PICs en decodi- más de un millón de veces. Cualquier in-
ficadores de señales de TV por cable, relo- formación almacenada será preservada
jes, microondas, equipos de música, lava- por más de cuarenta años, sin alimenta-
rropas, etc.). ción alguna o señal de refresco.
Se puede considerar el microcontrola- El 16C84 es muy similar, pero utiliza un ti-
dor como un circuito integrado que pue- po de EEPROM más viejo.
de ser "personalizado" si se escribe un El 16F83 puede ser considerado "el her -
programa en lenguaje de máquina (as- mano menor",
menor" ya que tiene sólo la mitad
sembly). Dicho de otra manera, cargando de memoria; aunque tiene a su favor que
el programa en el área ROM del micro- es el de costo más bajo costo.
controlador, obtendremos un circuito inte- Estos PICs no requieren cristales de cuar-
grado específico para nuestras necesida- zo o resonadores para los circuitos de reloj.
des. Algunas veces el programa está dise- Emplea un resistor o un capacitador para
ñado para ser algo más que un oscilador fijar la frecuencia de oscilación.
o una llave lógica, pero lo impor-
tante es que el PIC realizará exac-
tamente lo que usted le indique.
La familia PIC de la empresa Mi-
crochip Inc. es muy simple de ope-
rar, es de bajo costo y gran parte
del software utilizado para crear el
código de programa necesario pa-
ra la programación del PIC está
disponible en el website de Micro-
chip, cuya dirección es la siguiente:

www.microchip.com

En la figura 1 damos una mues-


tra de la pantalla que hemos obte- Figura 1

24 Todo sobre PICs


CÓMO PROGRAMAR UN PIC

Figura 2 tor 13 y en el momento de ser gra-


bado, se eleva la tensión de la pa-
ta 12 a 5V durante al menos 0,1µs
antes de ser bajado de nuevo a ni-
vel tierra.

Los datos que se dirigen al chip


contienen comandos que especifi-
can los numerosos pasos del proce-
so de programación y los datos
que serán guardados en la ROM
del chip.
Para verificar que el PIC ha sido
programado correctamente, com-
pruebe que el PIC también pueda
enviar los datos contenidos hacia
La tensión de alimentación para el el exterior a través de la pata 13.
16F84 puede ser de 4 a 6V pero existe una Para aquellos que estén interesados en
versión de este integrado que puede ope- conocer los detalles técnicos completos
rar inclusive, con 2V. de la programación de los chips PIC, las
Tiene 13 pines de entrada/salida, cada especificaciones para la programación y
uno de los cuales puede ser configurado su verificación las veremos más adelante.
individualmente para que sea una salida o El diagrama esquemático del Progra-
una entrada mador para PIC que menciona la empre-
sa fabricante, se muestra en la figura 3. El
circuito está diseñado para adaptarse al
Cómo 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 diseños; em-
Programar 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 tensión de
la pata 4 a 12V).
3º) Coloque los datos
en la pata 13; dichos da-
tos serán enviados a la
ROM de a un bit por vez
en concordancia con la
señal de reloj. Los datos
Figura 3
serán enviados al conec-

Todo sobre PICs 25


CÓMO PROGRAMAR UN PIC

pleamos como computadora una


AT 486 con 4MB de RAM y disco rí- Figura 4
gido de 120MB (también realizamos
las pruebas en otra compatible
con Pentium 2 de 350MHz y 64MB
de RAM).
Los datos de programación y las
señales de sincronismo se aplican
al PIC a través de R2 y R3. Los dio-
dos D1, D2 y el resistor R1 dejan
que el pin 13 del PIC pueda ser utili-
zado como una entrada para la
programación y una salida para la
verificación (recuerde que una mis-
ma pata de I/O puede ser emplea-
do 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 suminis-
datos desde la pata 13 del PIC a través de tros de tensión 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 señal 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 áno- externa. La tensión a aplicar en la pata 4
do de D2 es bajado a tierra para bloquear debe estar comprendida entre 12V y 14V.
la señal de datos. El chip PIC estará libre Asegúrese de que la línea de 12V tenga
para recibir datos desde la pata 14 del realmente 12V como mínimo. Si desea
port de la impresora. La conexión que emplear fuentes externas puede utilizar el
crea D1 entre las patas 11 y 17 del conec- esquema de suministro de tensión mostra-
tor de la impresora permite que el softwa- do en la figura 5.
re de programación detecte si el progra- El circuito del programador es tan sim-
mador está conectado al port de la im- ple que puede ser construido fácilmente
presora. en una pequeña placa de circuito impre-
Los capacitores so con uso de técnicas
C1 y C2 eliminan el de construcción estan-
ruido que pueden darizadas. El montaje
producir los cables por separado del conec-
que llevan la corrien- tor del cable hace que
te DC. La tensión ne- el Programador PIC sea
cesaria para que se más fácil de utilizar, sim-
produzca la progra- plemente se lo conecta
mación es coman- al port de la impresora
dada por Q1 a tra- Figura 5 de la PC con un multica-
vés del pin 2 del port ble de 30 cm de largo.

26 Todo sobre PICs


CÓMO PROGRAMAR UN PIC

Programación del PIC den generar diferentes modelos o selec-


cionar múltiples modelos con la adición de
La manera más fácil 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 rediseñado para adap-
te modo de aprender las características tarse a este tipo de cambios. Con un PIC,
del programador, también le brindará la sólo es cuestión de modificar el programa,
oportunidad de verificar su hardware y borrar el PIC y reprogramarlo. Para progra-
software. mar un PIC desde una PC hace falta un
Como ejemplo, veamos cómo progra- programa y conocer el set de instruccio-
mar un circuito que enciende un LED des- nes de microcontrolador, pero no se asus-
pués de otro, en secuencias sucesivas. Este te, esto no es difícil.
circuito podría hacerlo con un oscilador y Para hacer que nuestro controlador
un CD4017. prenda leds en secuencia, deberá progra-
Si embargo, también podemos hacer el mar que todas las patas I/O sean de sali-
circuito 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 más con un período que podemos fijar noso-
caro que un circuito digital tradicional, es tros.
más pequeño y no necesita tanto espacio De esta manera, el programa, escrito
físico para contener todos sus componen- en lenguaje Assembly PIC, PIC se muestra en
tes. De todos modos, hay otro argumento la Tabla 1. La parte más importante de
para utilizar el PIC en una tarea de estas cualquier programa es la documentación.
características: su inteligencia.
inteligencia Se pue- Si deja notas en el programa, recordará
qué es lo que estaba inten-
tando hacer cuando revise
el programa, la vez siguiente.
En el programa, estas notas
aparecen en cualquier ren-
glón que se inicie con punto
y coma. Estos renglones se-
rán ignorados por el softwa-
re, mediante un montador
que convierte el texto del
programa en números bina-
rios que el PIC reconoce co-
mo instrucciones.
Las primeras tres instruc-
ciones son:

pr ocessor, 16f84
include <p16f84.inc>L
_config,
Figura 6
Estas son instrucciones pa-

Todo sobre PICs 27


CÓMO PROGRAMAR UN PIC

ra el técnico. La primera instrucción le indi- copiado en el registrador de control TRIS


ca al técnico que utilice las instrucciones para el Port B y establece que las patas 6
del 16F84. La segunda le indica que debe a13 (que son manejadas por el Port B)
incluir un conjunto de constantes predeter- sean terminales de salida en vez de serlo
minadas en un archivo llamado
p16F84.INC. Finalmente, la tercera esta- ;Código Assembly para microcontrolador PIC16F84 como
blece varios bits de configuración en el ;circuito secuencial.
PIC para activar o desactivar determina- ;Encendido de Leds en secuencia rotativa.
das características del hardware. ;Con una frecuencia de 75kHz, cada led permanecerá
En este ejemplo, el chip utilizará su osci- ;encendido durante 0,5segundos.
lador RC, su WDT (cronómetro "vigilante")
; Configuración de la CPU
será desactivado y el PWRTE (reloj auto- ; (se trata de un 16F84 con oscilador RC
mático de reseteado) será activado. De ; y grabado con tensión positiva durante
este modo, el PIC “rebooteará” (se pon- ; el pulso en estado alto)
drá en marcha) con cualquier tensión procesor 16f84
que se le aplique, pero no “rebooteará” include <p16f84.inc>
automáticamente muchas veces por se- _config _RC_osc & _WDT_OFF & _PWRTE_ON
gundo.
; serán variables las dos direcciones de memoria
Es importante darle uso a la instrucción
_config en todos los programas utilizados J equ H'1F' ; J = dirección hexa 1F
con el Programador PIC. El programa del K equ H"1E ; K = dirección hexa 1E
técnico no realizará la programación real, ;Programa
sólo creará un archivo con los números
que serán transferidos al chip PIC como org 0 ; comienzo en la dirección 0
un segundo paso. ; Elijo al Port B como salida y la inicializo
Las dos instrucciones que reservan es-
pacio de memoria en el RAM de los PICs movlw B'00000000' ; w:= 00000000 binario
para dos variables, que se llamarán "J" y tris PORTB ;portB ctrl register := w
movlw B'00000001' ; w:= 00000001 binario
"K". El proceso es similar a estipular varia- movwf PORTB ; port B itself ;= w
bles en BASIC, con la diferencia de que
se deben determinar las ubicaciones físi- ; Rote el bit del port B hacia la izquierda
cas de RAM que se utilizarán. En este ca- mloop: rif PORTB,f
so, las ubicaciones (en una numeración
hexadecimal) son 1E y 1F. Estas ubicacio- ; Espere un tiempo para ejecutar nuevamente la subrutina o
nes serán utilizadas para almacenar cal- loop
culadores que registren la cantidad de movlw d'50' ; w = 50 en decimal
veces que una subrutina (loop) ha sido re- movwf J ; J := w
petida. jloop: movwf K ; K := w
kloop decfsz kKf ;K = K-1, salte si K = 0
La instrucción org le indica al monta- goto kloop
dor que el programa se inicia en la ubica- decfsz J,f ;J = J-1, salte si J = 0
ción 0 de la memoria de programa y que goto jloop
el programa real será el próximo. ;lo hacemos nuevamente
La primera instrucción real del PIC es goto mloop
una instrucción movlw que borra el conte- Tabla 1
nido del registro W. Ese número es luego end

28 Todo sobre PICs


CÓMO PROGRAMAR UN PIC

de entrada. Si hubiese querido que todas crocontrolador (CPU); sólo le indica al


fuesen entradas debiera haber copiado montador que el programa ha finalizado.
en el port B la palabra "11111111"
Volviendo a nuestro programa, seguida- El 16F84 tiene 35 instrucciones CPU
mente se introduce el número binario difer entes. Como puede ver a partir
00000001 en el registrador W y lo copia al del pr ograma simple que hemos cr ea -
Port B. Esta acción enciende el LED conec- do, no debe dominarlas a todas para
tado a la pata 6, dado que ahora, el ter- escribir pr ogramas útiles.
minal Pata 0 pin 6, que es de salida, tiene
un nivel "1", es decir, un nivel alto. Pero an-
tes de que tenga tiempo de visualizar la Cómo se Construye
llegada del pulso al LED, el programa eje- un decodificador con PIC
cutará una instrucción rlf que rota los con-
tenidos del Port B a la izquierda y cambia Ahora mire que fácil sería construir una
los datos a 000000-10. Esta acción encen- llave electrónica con PIC que se active
derá el segundo LED conectado al conec- luego de un cierto tiempo, o cuando se
tor 7. La repetición de la instrucción produ- recibe alguna señal. Habría que progra-
cirá 00000100, luego 00001000, y así sucesi- mar una pata I/O como entrada y otra
vamente, esto hará que los diferentes leds como salida, luego el programa debiera
se enciendan en secuencia. reconocer una señal presente en la pata
Entre rotaciones, el programa necesita fijada como entrada y luego de un tiempo
esperar 1/2 segundo aproximadamente, activar la salida que se encargaría de po-
de modo que la acción no es tan rápida ner en marcha un circuito. ¿Le suena co-
como para que no se la pueda apreciar. nocido?, esto es lo que hacen normal-
Esa es la causa por la cual aparece en el mente los decodificadores de las señales
programa una subrutina de demora. El de TV por cable.
programa almacena el número decimal Por lo tanto, si sabe cómo es una señal
50 en las ubicaciones de memoria "J" y "K", codificada y obtiene el set de instruccio-
utilizando la instrucción decfsz para la nes del PIC de Internet, no tendrá inconve-
cuenta regresiva de 50 a 0. nientes en construir un programa para su
Las instrucciones condicionales del PIC PIC, con el objeto de decodificar señales
son inusuales, y el descfsz no es una ex- de TV.
cepción. Esta instrucción significa: "Decr e - Seguramente Ud. se preguntará, ¿Por
mentar y omitir la instrucción siguiente qué no doy el programa en este libro?,
si la variable es igual a cer o". muy sencillo, considero que debo darle las
Normalmente, el resultado no es cero y herramientas para que aprenda y no indu-
la parte "ir a" de la instrucción no es omiti- cirlo a que "ar me decodificador es con
da. De tal modo, la subrutina (loop) se eje- fines comer ciales".
cuta repetidamente hasta que K llega a
cero.
El programa real utiliza dos loops (subru- Cómo obtener un Programa
tina), una incrustada dentro de la otra. para "programar" nuestro PIC
Finalmente, ir a mloop envía la ejecu-
ción al comienzo del programa. La instruc- En el Website de Microchip podrá en-
ción end no es una instrucción para el mi- contrar hojas de datos, notas de aplica-

Todo sobre PICs 29


CÓMO PROGRAMAR UN PIC

llamados códigos de fuente), com-


pilarlos en un código de objeto y
luego analizar el código binario re-
sultante para ver qué acción reali-
zará el microcontrolador. De este
modo, podrá localizar los errores ló-
gicos en su programación antes de
ejecutar cualquier código en el
hardware.
El uso del software de Microchip
está muy bien documentado en las
páginas de Internet.
Prepárese para recibir mensajes
de error cuando compile el progra-
Figura 7 ma. El MPASM se quejará modera-
damente de que no utilizará la ins-
ción y, lo mejor de todo, el MPLAB, un pro- trucción tris. Microchip le ha restado im-
grama de desarrollo para simular y verifi- portancia a esta instrucción y algunos pro-
car programas PIC. El mismo está diseñado cesadores PIC del futuro podrían no regis-
para ser ejecutado bajo Windows. trarla. Desde la perspectiva del software,
Particularmente, obtuve el programa uno de los mejores rasgos del PIC es su lla-
de la dirección: mada compatibilidad de código de fuen-
te. Si su diseño 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 des-
Cuando acceda a esta dirección, verá de el principio. Para nuestros propósitos, la
que el programa precisa de 6 disquetes y utilización de la instrucción tris en el
Ud. debe bajar cada uno de ellos a su 16C84, 16F84 y 16F83 trabaja de modo
computadora.; luego deberá descompri- aceptable. Además, la vía alternativa de
mir los archivos y comenzar la instalación configurar el Puerto B para la salida es mu-
(en total pesa unos 8MB). cho más complicada.
Una vez hecho esto el mismo programa Otro programa más sencillo para "pro-
le da toda la información necesaria para gramar" nuestro PIC se denomina NOPPP y
conseguir su propósito (en el capítulo 3 de- puede obtenerlo de la dirección:
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 progra-
PC, 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 aplicación de
programas en lenguaje Assembly (también "pantalla completa" que si lo hace en

30 Todo sobre PICs


CÓMO PROGRAMAR UN PIC

vo) en la memoria, seleccionar el ti-


po de PIC que programará, progra-
mar el software y luego verificar que
el código fue correctamente pro-
gramado en el chip. También podrá
borrar un PIC que ya ha sido progra-
mado para reutilizar o actualizar la
programación.

Una advertencia:
Nunca inserte o remueva un PIC
de un programador mientras la ten-
sión enviada al programador se en-
Figura 8 cuentra activada. Cuando progra-
me un PIC, el software le indicará
qué acciones debe ejecutar y
una ventana (veremos cómo programar cuándo realizarlas. Dado que el
con esta aplicación en el capítulo 6). software del programador requiere un ti-
El timing es esencial para los pulsos de ming engañoso, fue escrito para ejecutar-
programación y las aplicaciones DOS de se como un programa DOS.
pantalla completa toman el control total Recuerde que los pulsos de medición
de la computadora. para la programación del PIC tienen que
Si por alguna razón tiene dificultades en durar por lo menos 0,1µs. En la práctica,
ejecutar el programa NOPPP bajo Win- son lo suficientemente largos como para
dows 3.1, intente salir a un entorno DOS y superar cualquier señal de "r ebotes"
ebotes en los
ejecútelo desde allí. También puede eje- cables.
cutar el programa bajo OS/2; si lo hace, De todos modos, no deben ser dema-
asegúrese de configurar el HW_TIMER en siado largos, para que no tornen extrema-
"on" en las configuraciones DOS para el damente lento el proceso de programa-
programa. ción. También es importante que el tiempo
Para hacer la programación, el primer del pulso no dependa de la velocidad de
paso es conectar el Programador PIC al la CPU de la computadora. El software fue
port de la impresora de la PC e iniciar el escrito especialmente para ser ejecutado
programa NOPPP sin ninguna tensión co- en cualquier IBM compatible, desde una
nectada al programador. Si la línea de 5V XT a las últimas Pentium.
está conectada a tierra, el software no Cabe aclarar una vez más que para
podrá detectar el diodo D1, y asumirá que programar o leer un PIC se debe tener la
el programador no está conectado al port correspondiente hoja de datos, para saber
de la impresora. en qué pata se introducen los datos y có-
Si todo se encuentra en orden, debería mo se realiza el proceso de programación,
ver una pantalla similar a la que se mues- también es necesario conocer el set de
tra en la figura 8. El menú de opciones es instrucciones del microcontolador y saber
auto-explicativo. En general, debería car- "pasar al papel" las ideas que uno tenga
gar un archivo de código de objeto (con en la mente para realizar las diferentes
una extensión .HEX en el nombre de archi- programaciones.

Todo sobre PICs 31


CÓMO PROGRAMAR UN PIC

Quienes tengan difi-


cultad para "bajar pro-
gramas de escrituras
de PICs", podrán retirar
de esta editorial, con-
tra entrega de un dis-
quete virgen, un pro-
grama aplicativo
(debe presentar el pre-
Figura 9 sente libro).
También podrá bajar
aplicaciones de nues-
tra página web (vea el
capítulo 1).

Para terminar, en la
figura 9 se da el impre-
so del programador de
la figura 4; en la figura
10 el correspondiente
al circuito secuencial y
en la 11, el de la fuente
de alimentación.
Aclaramos que en
sucesivos capítulos da-
remos ejemplos de pro-
Figura 10
gramación de PICs,
hasta que Ud. se sienta
Figura 11 lo suficientemente “ducho” como para
realizar sus propios programas.
No damos lista de materiales, dado que
en cada figura se detallan los elementos
utilizados. *****

32 Todo sobre PICs

You might also like