SEMAFORO
CON UN PIC 16F628
|
|
El programa que en esta ocasión
analizaremos ya hace tiempo fue utilizado por primera
vez, en estas mismas páginas de ésta,
nuestra querida revista, y lo que haremos en esta
nota es "traspasar" el programa del PIC16F84
a un PIC16F628, que finalmente es el microcontrolador,
que en un futuro, reemplazará al viejo 16F84. |
|
|
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
|
|
|
-
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.
|
|
CONSTRUCCION
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 P UERTO |
PATA |
LAMPARA |
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:
|
|
|
|
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. |
|
Autor:
Ismael Cervantes de Anda - Docente ESCOM IPN
Mail: icervantes@saberinternacional.com.mx |
|
|
|
|