Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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
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
C:\Program Files\Picc\CCSC.exe
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.
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.