SEMAFORO CON 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 queria 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.

INTRODUCCION
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.

 
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 PUERTO
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:

 
movlw
movwf
 
0x07
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.

 
Autor: Ismael Cervantes de Anda - Docente EXCOM IPN
icervantes@saberinternacional.com.mx
FIGURA 1
 
FIGURA 2
 
FIGURA 3
 
FIGURA 4
 
FIGURA 5
 
 
PROMOCIONES