Vous êtes sur la page 1sur 9

Semaforo+Interrupciones PIC16F84A

Semforo multfuncin con PIC16F84A


Empleando interrupciones.
Autor: Luis Alberto Guijarro Rodrguez

Descripcin.
En el siguiente tutorial se mostrara como elaborar el firmware para un
Semforo multifuncin empleando el PIC16F84A. Si bien un Semforo puede
parecer algo simple la ventaja del cdigo es que se emplearan las interrupciones
del microcontrolador, en este caso la interrupcin externa (INT) que se localiza en
el bit RB0 del puerto B y tambin se utilizar una interrupcin por cambio de nivel
(RB), en este caso la que se localiza en el bit RB4.
Dicho firmware se realizara en lenguaje C con el programa MPLAB y el traductor
CCS. Adems se mostrara la simulacin del funcionamiento del Semforo a travs
del programa ISIS de Proteus.
Inicialmente vamos a indicar cuales sern las funciones que realizara el
microcontrolador para el funcionamiento del Semforo dependiendo de en que
modo de operacin se encuentre y que botn se presione.
A.- Cuando se presione el botn de reset el PIC se reiniciara a su estado inicial
de funcionamiento automtico y ejecutando la funcin 1 del Semforo.
B.- En el modo automtico el Semforo funcionara como su nombre lo indica, de
forma automtica, con cierta duracin de encendido en cada color del Semforo,
en este caso, dos secuencias de tiempo distintas y para cambiar de una a otra se
deber presionar el botn de Temporizacin. Las dos diferentes secuencias se
describen a continuacin.
I.- La secuencia 1 ser la secuencia inicial, es decir, la que el microcontrolador
ejecutara una vez encendido el circuito: la luz verde quedara encendida 6
segundos, 5 parpadeos de un segundo en la luz amarilla y por ltimo la luz roja
quedara encendida por 4 segundos. Esta secuencia se repetir mientras no se
oprima el botn de Temporizacin.
II.- Al oprimir el botn de Temporizacin el Semaforo pasara a la secuencia 2: la
luz verde encendida 4 segundos, 4 parpadeos de un segundo en la luz amarilla y
finalmente la luz roja encendida 6 segundos. De igual forma a la secuencia

anterior esta se repetir mientras no se presione de nuevo el botn de


Temporizacin, de lo contrario regresara a la secuencia 1.
C.- Si se presiona el botn Auto/Manual mientras se est en el modo automtico
el Semforo pasara al modo manual en el que cada luz (verde, amarillo y rojo)
permanecer encendida por tiempo indefinido y cambiara hasta que se presione el
botn de temporizacin, pasando de la verde a la amarilla (con parpadeo), de la
amarilla a la roja y finalmente regresar de la roja a la verde.
D.- Si se oprime de nuevo el botn Auto/Manual el semforo pasara del modo
manual al modo automtico ejecutando la funcin 1.

Materiales.
En este caso a falta de un micro controlador que se emplea en dicho tutorial para
la elaboracin del Semforo, solo se har la simulacin, para ello vamos a
necesitar los siguientes programas:

MPLAB

Traductor CCS del compilador PIC-C

Simulador ISIS del programa PROTEUS

Introduccin.
El micro controlador PIC16F84A cuenta con dos puertos, el puerto A de 5 bit
(RA0-RA4) y el puerto B de 8 bits (RB0-RB7), los cuales pueden ser programados
como entradas o como salidas, o inclusive programar algunos bits de un puerto
como entrada y el resto de bits de ese mismo puerto como salidas. Para llevar a
cabo dicha programacin de puertos se requiere estipularlo en el registro del
puerto que se desea programar.
Otra caracterstica de este microcontrolador es que cuenta con una entrada de
interrupcin externa y con entradas de interrupcin por cambio de nivel.
A continuacin se muestran dos tablas, la primera con la descripcin del puerto B
y la segunda con los registros asociados a este, ambas tablas obtenidas de la
datasheet del microcontrolador.

Tabla 1 de descripion

Tabla 2 de descripcion

Procedimiento.
A continuacin de mostrar el proceso para capturar el programa del Semforo,
vincular el traductor y compilar.
Primero se abre el programa MPLAB y se abre una nueva pgina del editor de
textos en Men Principal -> FILE -> NEW, en esta pgina en blanco capturaremos
el siguiente cdigo el cual cuenta con comentarios que lo describen.
?

001
002
003
004
005

#include <16f84a.h>
//PIC a utilizar
#fuses XT,NOWDT,NOPROTECT,NOPUT
//ordenes para el programador
#use delay (clock=4000000) //Se usaran retardos tomando en cuenta que la frecuenci
//oscilador es de 4Mhz
#use fast_io(a)
//Rpida entrada y salida

006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052

int Modo=1, Temp=1, i=0;

//Declaracin de variables del tipo entero

//Prototipo de la funcion que configurara los puertos


void Config_Puertos(void);
//Funciones de interrupciones
#INT_EXT
//Para la interrupcin INT (RB0)
void EXT_isr(void)
{
Modo++;
if(Modo==3)
{
Modo=1;
Temp=1;
}
}
#INT_RB

//Para la interrupcin RB (RB4)

void RB_isr(void)
{
if(input(PIN_B4))
{
Temp++;
}
if(Modo==1 && Temp==3)
{
Temp=1;
}
if(Modo==2 && Temp==4)
{
Temp=1;
}
}
///Programa principal
void main(void)
{
Config_Puertos();//Llamado a funcion
while(true)
{
if(Modo==1)//Modo automatico
{
output_low(PIN_A2); //led verde off
output_low(PIN_A1); //led amarillo off
output_low(PIN_A0); //led rojo off
if(Temp==1)//Temporizacion 1
{
output_high(PIN_A2); //led verde on
delay_ms(6000);
output_low(PIN_A2); //led rojo off
for(i=0;i<=4;i++)
{
output_high(PIN_A1); //led amarillo on
delay_ms(500);
output_low(PIN_A1); //led amarillo off

053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099

delay_ms(500);
}
output_high(PIN_A0);//lrd rojo on
delay_ms(4000);
output_low(PIN_A0); //led rojo off
}
if(Temp==2)//Temporizacion 2
{
output_high(PIN_A2); //led verde on
delay_ms(4000);
output_low(PIN_A2); //led rojo off
for(i=0;i<=3;i++)
{
output_high(PIN_A1); //led amarillo on
delay_ms(500);
output_low(PIN_A1); //led amarillo off
delay_ms(500);
}
output_high(PIN_A0);//lrd rojo on
delay_ms(6000);
output_low(PIN_A0); //led rojo off
}
}
if(Modo==2)//Modo manual
{
while(Temp==1)
{
output_high(PIN_A2); //led verde on
output_low(PIN_A1); //led amarillo off
output_low(PIN_A0); //led rojo off
}
while(Temp==2)
{
output_low(PIN_A2); //led verde off
output_high(PIN_A1); //led amarillo on
delay_ms(500);
output_low(PIN_A1); //led amarillo off
delay_ms(500);
output_low(PIN_A0); //led rojo off
}
while(Temp==3)
{
output_low(PIN_A2); //led verde off
output_low(PIN_A1); //led amarillo off
output_high(PIN_A0); //led rojo on
}
}
} //bucle infinito
}

void Config_Puertos(void)
{
set_tris_A(0xF8); //portA como salidas(RA0, RA1 y RA2 ,las demas desactivadas)
set_tris_B(0xFF);
enable_interrupts(GLOBAL); //todas las interrupciones activadas
enable_interrupts(INT_EXT);//Habilitando interrupcion externa (RB0)
enable_interrupts(INT_RB);//Habilitando interrupciones de cambio de nivel (RB4-RB7

100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

ext_int_edge(H_TO_L);//Seleccionando flanco de interrupcion externa


output_low(PIN_A2); //led verde off
output_low(PIN_A1); //led amarillo off
output_low(PIN_A0); //led rojo off
Modo=1;
Temp=1;
}

Una vez capturado el cdigo se guarda de la siguiente forma FileSave As y se


nombra el archivo y se selecciona la carpeta en que se va a guardar, este archivo
tendr una extensin .c.
A continuacin se va a construir el proyecto. MPLAB es una plataforma de
programa en la cual se puede realizar desde la edicin del cdigo de programa,
las compilacin del programa, la simulacin del programa y la programacin del
microcontrolador, todo ello sin necesidad de recurrir a otro programa, para utilizar
todas las herramientas con las que cuenta MPLAB IDE es necesario la creacin
de un Proyecto en el cual se vinculen las diferentes herramientas a manejar, los
pasos a seguir en la creacin de un proyecto son los siguientes:
Desde el men principal se selecciona ProjectProject Wizard,. De forma casi
instantnea aparecer la ventana de bienvenida del ayudante Project Wizard de
MPLAB, de forma general son cuatro pasos a seguir en la creacin de un
proyecto.

Paso 1.- Se presiona Next y la ventana cambiara a una en la que tenemos que
elegir el microcontrolador que se va a emplear, en este caso DevicePIC16F84A, y
damos clic en Next.
Paso 2.- Seleccionar el compilador a usar (language toolsuit). En la nueva ventana
se deben configurar los siguientes aspectos:
a) En el recuadro Active Toolsuit se debe seleccionar CCS C Compliler.
b) En el recuadro Toolsuit Contents se debe cerciorar que cada programa tenga
su ruta correctamente direccionada a la carpeta PICC correspondiente, en nuestro
caso solo ser la siguiente.
Toolsuit Contents

Location

CCS C Compiler (ccsc.exe)

C:\Program Files\Picc\CCSC.exe

Una vez terminado este paso damos clic en Next.


Paso 3.- En la nueva ventana que aparece se debe ingresar el nombre con el que
se desea nombrar al proyecto y la direccin donde se va a guardar dicho proyecto.
Una vez hecho esto se da clic en Next.
Paso 4.- En la nueva ventana, del lado izquierdo se deben de buscar dos archivos
a) El archivo con la extensin .c del cdigo que capturamos previamente.
b)
Un archivo con extensin .h que se localiza en C: \Program
Files\PICC\Devices\16F84A.h
Incorporados los dos archivos se da clic en Next.
A continuacin aparece una ventana indicando las propiedades del nuevo
proyecto que se est creando, si se comprob que todo est correcto se da clic en
Finish.
Si los pasos se realizaron correctamente aparecer la ventana Project con el
nombre que se le dio al proyecto, esta contiene los archivos .c y .h que
seleccionamos.
Ahora procederemos a configurar las opciones del proyecto (Build Options). Antes
de iniciar con la compilacin y simulacin, es necesario verificar que el compilador
CCS C Compiler (nuestro traductor) se encuentre correctamente configurado, para
ello se realiza lo siguiente, Men PincipalProjectBuild OptionsProject. Al hacer
esto aparecer una nueva ventana de configuracin, en esta seleccionaremos la
pestaa General. Al seleccionar esta pestaa aparecen una serie de recuadros,

solo tendremos que configurar el recuadro de Include Search Path ingresando en


este la ruta C:\Program Files\PICC\Devices. Una vez hecho esto se da clic en OK.
El ltimo paso en MPLAB es compilar el proyecto, esto se hace de la siguiente
forma, Men PrincipalProjectBuild All. Si todo se realiz correctamente y no hay
errores en el cdigo, la compilacin del proyecto se llevar a cabo correctamente
son errores.

Simulacin.

Para llevar a cabo la simulacin del funcionamiento del Semforo y verificar que el
programa funcione como lo deseamos primero es necesario construir el circuito
que se muestra a continuacin en el programa ISIS de PROTEUS.
Semforo con PIC16F84A empleando interrupciones.

Diagrama de simulacin del Semforo

Se debe recordar que el cristal es de una frecuencia de 4MHz. Una vez construido
el circuito se va cargar el archivo de programa que simulara el microcontrolador.

Esto se hace dando doble clic en el microcontrolador y en la opcin Program File


se selecciona el archivo .hex que estar ubicado en la direccin en la que se cre
el proyecto en MPLAB, este archivo tendr el mismo nombre que el proyecto pero
con una terminacin .hex. De igual forma en la opcin Processor Clock Frecuency
escribiremos 4MHz. Una vez hecho esto damos clic en OK.
Ahora se puede proceder a dar Play a la simulacin, esto se hace dando clic en el
botn Play ubicado en la parte inferior izquierda de la ventana de ISIS de
PROTEUS.
Si todo est correcto el circuito debe funcionar de la misma forma en que se
describi al principio.
Cabe mencionar que la interrupcin, como su nombre lo indica, interrumpe a la
funcin que se est ejecutando, pero que una vez que se sale de la interrupcin se
regresa al punto de la funcin que interrumpi, por lo que se debe de esperar a
que termine esa secuencia para ver el cambio que provoco la interrupcin, en este
caso los tiempo de encendido de cada luz del Semforo.

Vous aimerez peut-être aussi