En la figura 1 se muestra el diagrama esquemático
del circuito del semáforo, en este diagrama
se encuentra ya el microcontrolador PIC16F628,
y lo único que tuvimos que hacer fue quitar
el PIC16F84 y colocar el nuevo microcontrolador,
los demás elementos del circuito se quedan
como están.
Lo anterior es posible gracias a la compatibilidad
que existe entre las terminales de un microcontrolador
con el otro, por lo que no se tiene mayor problema,
al reemplazarlos ya que físicamente son
equivalentes en cuanto a la disposición
de las terminales de cada uno de ellos, por otra
parte, la operación que realizaremos en
cuanto a la sustitución del programa es
muy simple, pero tenemos que adecuarlo. Para recordar
de qué se trata el programa abordado en
esta ocasión, procederemos a explicar cómo
funciona el clásico programa del semáforo
en las líneas que siguen a continuación:
La gran ventaja de los PICs radica en que existe
abundante bibliografía gratuita disponible
en distintas plataformas (sin duda Internet ha
contribuido a potencializar esta ventaja), los
entornos de desarrollo son provistos por la misma
Microchip en forma gratuita y se los puede programar
y cargar con gran cantidad de dispositivos, además
de la información que pueden encontrar
en nuestra página de internet: www.webelectronica.com.ar
Estructura del Programa
Como compilador emplearemos la aplicación
de Microchip MPLAB, que genera y compila el archivo
con extensión "asm, y a partir
de este obtener el programa en un archivo con
extensión 'hex".
Como cargador usaremos el Quark Pro 2,
que por otra parte emplea la aplicación
lC-PROG como programa para permitir la carga de
los microcontroladores PIC.
Vamos a construir un semáforo que funcione
con 12VCD y que sea capaz de manejar lámparas
de 50W con dicha tensión. Partiremos desde
cero a partir del circuito de la figura 1.
El microcontrolador PIC16F628 debe tener en su
interior el programa que haga que se enciendan
en secuencia las lámparas LA1 (color verde),
LA2 (color amarillo) y LA3 (color rojo).
A los efectos de monitorear el encendido de las
lámparas, usamos como pilotos a los leds
D1 (verde), D2 (amarillo) y D3 (rojo) y para manejar
las lámparas de potencia se utilizan transistores
NPN de potencia con disipador del tipo TIP41A.
Los dispositivos R1 en serie con VR1 y C1 conforman
un circuito de carga cuya constante de tiempo
determina la frecuencia de operación del
reloj, que a su vez controla al contador de programa
del PIC y por ende, el tiempo en que las lámparas
permanecerán encendidas, mientras que D4
junto con Q4 representan un limitador de tensión
para alimentar al PIC con 5V.
Construcción del Programa
Note que tanto los leds pilotos como los transistores
que manejan las lámparas están conectados
a los terminales 6, 7 y 8 del PIC que corresponden
a los bits menos significativos del Puerto B (vea
la figura 1), ó sea, debemos recordar que
usaremos los bits b0, b1 y b2 del PIC (podríamos
haber empleado otras patas, incluso hasta del
puerto A y seguiríamos el mismo procedimiento
que vamos a describir).
Una vez que comienza el programa, debe encenderse
el led verde, permanecer encendido durante 45
segundos, apagarse el verde y prenderse el amarillo
durante 5 segundos, apagarse el amarillo y prenderse
el rojo durante 45 segundos, apagar el led rojo
y prender el verde durante 45 segundos y así
sucesivamente.
Para hacer que un led permanezca encendido se
utilizan rutinas de tiempo (temporizadores), cuya
función es la de contar dicho tiempo.
Para armar el programa tenemos que definir qué
patas del PIC vamos a emplear para encender las
lámparas del semáforo. Decimos entonces
que usaremos los siguientes pines:
Bit y puerto Pata Lámpara
b0 6 Verde
b1 7 Amarillo
b2 8 Rojo
El programa tiene que realizar los siguientes
pasos:
1) Iniciar el programa.
2) Configuramos el puerto B con todas las patas
como salida, sólo nos interesan los 3 bits
menos significativos, pero igual configuramos
a todas las patas como salida.
3) Escribimos en el puerto B el dato '00000001",
de esta manera mandamos un 1, lógico,
al bit b0 para que se encienda la lámpara
verde.
4) Activamos un temporizador de 45 segundos, para
que la lámpara verde permanezca encendida
ese tiempo (note que las lámparas amarilla
y roja van a estar apagadas porque los bits B
1 y B2 está6n en '0').
5) Escribimos en el puerto B el dato '00000010'
para que se encienda la lámpara amarilla
y queden apagadas las lámparas roja y verde
(note que el bit b1 estará en " 1
" mientras que los bits b0 y b2 están
en '0').
6) Activamos un temporizador de 5 segundos, para
que la lámpara amarilla permanezca encendida
ese tiempo (note que las lámparas verde
y roja van a estar apagadas porque los bits b0
y b2 están en 0).
7) Escribimos en el puerto B el dato '00000100
, para que se encienda la lámpara
roja y queden apagadas las lámparas amarilla
y verde (note que el bit b2 estará en "
1 " mientras que los bits b0 y b1 están
en "0").
8) Activamos un temporizador de 45 segundos, para
que la lámpara roja permanezca encendida
ese tiempo (note que las lámparas amarilla
y verde van a estar apagadas porque los bits b0
y b1 están en 0).
9) Retornamos al paso (3).
10) Fin del programa.
En la figura 4 vemos el programa.
Primero vamos a mostrar el código original
para el PIC16F84, y posteriormente el código
para el PIC16F628, y al hacer la correspondiente
comparación entre ambos, se notará
que los cambios principales se centran en las
localidades de los registros, sobre todo de memoria
RAM, en el aumento de bancos de registros, y en
un par de instrucciones que se requieren para
que las terminales del puerto A del PIC16F628,
funciones como entradas discretas. Estas instrucciones
son las siguientes:
movlw 0x07
movwf cmcon
El registro CMCON se encuentran en el banco 0,
por lo que éste tiene que ser ubicado adecuadamente
de manera previa. En la figura 5 vemos el siguiente
programa.
Esperamos que el proceso de reemplazar un microcontrolador
por otro, sea cada vez más sencillo, ya
que ése es el espíritu de esta serie
de artículos y para ello tomamos un programa
ya clásico para nosotros, y los invitamos
para que a manera de práctica lo desarrollen
y ahonden en sus conocimientos sobre la programación
de microcontroladores.
Por último los invitamos a que visiten
nuestra página de internet en www.webelectronica.com.ar
en donde encontrarán más información
acerca del tema de reemplazo del microcontrolador
PIC16F84 por un PIC16F628A.