Semaforo Pic c

download Semaforo Pic c

of 9

description

Prectica semaforo simple

Transcript of Semaforo Pic c

Semaforo+Interrupciones PIC16F84ASemforo multfuncin con PIC16F84A Empleando interrupciones.Autor: Luis Alberto Guijarro RodrguezDescripcin.En el siguiente tutorial se mostrara como elaborar el firmware para un Semforomultifuncin empleando elPIC16F84A. Si bien un Semforopuede 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 Semforoa travs del programa ISIS de Proteus.Inicialmente vamos a indicar cuales sern las funciones que realizara el microcontrolador para el funcionamiento del Semforodependiendo 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 Semforofuncionara 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 elSemaforo 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 Semforopasara 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 PROTEUSIntroduccin.El micro controladorPIC16F84Acuenta 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 descripcionProcedimiento.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.?001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126#include //PIC a utilizar#fuses XT,NOWDT,NOPROTECT,NOPUT //ordenes para el programador#use delay (clock=4000000) //Se usaran retardos tomando en cuenta que la frecuencia del//oscilador es de 4Mhz#use fast_io(a) //Rpida entrada y salidaint Modo=1, Temp=1, i=0; //Declaracin de variables del tipo entero//Prototipo de la funcion que configurara los puertosvoid 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 principalvoid main(void){Config_Puertos();//Llamado a funcionwhile(true){if(Modo==1)//Modo automatico{output_low(PIN_A2); //led verde offoutput_low(PIN_A1); //led amarillo offoutput_low(PIN_A0); //led rojo offif(Temp==1)//Temporizacion 1{output_high(PIN_A2); //led verde ondelay_ms(6000);output_low(PIN_A2); //led rojo offfor(i=0;i