Vous êtes sur la page 1sur 10

PIC MICRO ESTUDIO

Temporizador con el 16F872 www.electronicaestudio.com

Gua de Uso

P I C

M I C R O E S T D U D I O

Temporizador con el PIC16F872


Los temporizadores los encontramos en muchos lugares de nuestra vida diaria, generalmente integrados en aparatos domsticos. Por ejemplo en los hornos de microondas para controlar el tiempo de calentamiento de nuestros alimentos, o en las lavadoras de ropa para seleccionar el tiempo lavado. Tambin a escala industrial las aplicaciones de los temporizadores son mltiples. Los hay para controlar el tiempo de arranque de algn proceso, se usan en mquinas herramientas, en dosificadores, fotografa, etc. La lista es interminable. Muchos de estos temporizadores pueden resultar muy caros o difciles de conseguir. En este artculo el lector aprender a disear sus propios temporizadores mediante el uso del PIC16F872. Es por esta razn que Picmicro Estudio ofrece este mdulo con el nombre de Disp4X (Clave 709). El cual consta de las siguientes caractersticas:

2 Displays de 7 segmentos 1 Microcontrolador PIC16F872 1 cristal de 4 Mhz 1 Relevador de +12V Modo Ascendente o Descendente Valor a temporizar por el usuario, grabado en la EEPROM interna del microcontrolador.

Adems este modulo puede funcionar para medir: Minutos Segundos

P I C

M I C R O E S T D U D I O

Descripcin del Circuito


Los 7 segmentos de cada uno de los 2 Displays estn conectados directamente al PIC16F872. Tal y como se muestra a continuacin.

En el siguiente esquema se muestra el diagrama esquemtico del circuito.

P I C

M I C R O E S T D U D I O

Modo de Utilizacin:
Como se observa este circuito consta de dos botones Pulsadores, los cuales tienen como funcin incrementar o decrementar, el tiempo que usuario desea temporizar. El cdigo que esta programado en el microcontrolador, esta diseado para temporizar un mximo de 9.9 minutos Primeramente el usuario deber seleccionar el tiempo que requiere temporizar, utilizando para esto los botones de incrementar o decrementar. Internamente el numero seleccionado por el operario se queda grabado en la memoria EEPROM del microcontrolador. Una vez que se selecciona el tiempo, se procede a presionar el botn Iniciar, el cual activara inmediatamente el relevador e iniciara la cuenta regresiva. Cuando en los dos Displays se visualice el numero 00, este indicar el final de la temporizacin e inmediatamente despus se desactivara la salida del relevador. Se hace notar que el programa regresa al inicio, en donde el usuario podr nuevamente seleccionar el tiempo que desee.

Decrementar Tiempo Incrementar Tiempo

P I C

M I C R O E S T D U D I O

Cabe mencionar que el microcontrolador debe estar programado con el programa TW2.bas, el cual puede encontrar en el disco adjunto a este producto y que a continuacin se proceder a explicar.

Cdigo Fuente TW2.bas


Primeramente se procede a declarar la variables a utilizar en este caso son: veces var byte veces_bis var byte conta var byte tiempo var byte segundos var byte minutos var byte '--------------------------------dig_1 var byte dig_2 var byte '--------------------------------incrementa VAR decrementa VAR SWITCH_SALIDA VAR PONER_tiempo VAR boton var PORTA.0

PORTA.1 PORTA.2 PORTA.5 PORTA.4

'--------------------------------

P I C

M I C R O E S T D U D I O

El siguiente paso es configurar los puertos como salidas, esto se hace con las siguientes instrucciones. ADCON1 = 7 TRISA = %11111111 TRISB = 0 TRISC = 0 @ device pic16F872, xt_osc, wdt_off, pwrt_on, bod_on, lvp_off,CPD_OFF,WRT_OFF,DEBUG_OFF, protect_on EEPROM 0, [55] GoTo Inicio Como se observa, existe una configuracin especial para el Puerto A, ya que este puede actuar como entradas analgicas y lo que se quiere en este caso, es que el Puerto A actu como entradas de seales digitales, por esta razn se utiliza la instruccin ADCON1=7. Una vez configurados los puertos, se procede a insertar una lnea en lenguaje ensamblador, esto se hace con el smbolo @ la cual establecer al momento de efectuar la programacin, los parmetros de configuracin de este microcontrolador. Acto seguido se procede a grabar en la direccin 0 de la memoria EEPROM del microcontrolador, el dato 55. La siguiente instruccin genera un salto incondicional a la etiqueta inicio Inicio: PORTB = 0 PORTC = 0 'Tiempo inicial al momento de grabar el PIC

P I C

M I C R O E S T D U D I O

Inicia_Timer: read 0, tiempo

Checa_Botones: dig_1 = tiempo dig 0 dig_2 = tiempo dig 1 GoSub Visuliza_display If boton = 1 Then Ejecutar If incrementa = 1 Then GoSub INC_TIEMPO GoTo Checa_Botones End If If decrementa = 1 Then GoSub DEC_TIEMPO GoTo Checa_Botones End If GoTo Checa_Botones 'si boton incre apretado

'si boton decr apretado

La variable tiempo ser la encargada de guardar el numero que el usuario desea temporizar. El programa queda en un bucle, esperando que usuario presione cualquier botn de los que estn disponibles, como inicialmente el usuario debe seleccionar un tiempo, el programa entra en las subrutinas INC_TIEMPO o DEC_TIEMPO

P I C

M I C R O E S T D U D I O

INC_TIEMPO: If tiempo < 99 Then tiempo = tiempo + 1 pause 200 End If Return DEC_TIEMPO: If tiempo > 0 Then tiempo = tiempo - 1 pause 200 End If Return Dichas subrutinas, lo nico que hacen es incrementar o decrementar la variable tiempo. Como resultado de entrar en estas subrutinas, se obtiene en los Displays el numero en el que el usuario desee, hasta un mximo de 99 y como mnimo de 00. Se observa que existe una pausa, dicha condicin ejecuta un tiempo de espera para eliminar el efecto de los rebotes cada vez que se aprietan fsicamente los botones incrementar o decrementar. Cuando el usuario presione sobre el botn Inicio (ver diagrama esquemtico) este tendr un valor de un 1 lgico, por lo tanto el programa ejecutara un salto incondicional a la etiqueta Ejecutar. Ejecutar: write 0,tiempo dig_1 = tiempo dig 0 dig_2 = tiempo dig 1 segundos = dig_1 minutos = dig_2

P I C

M I C R O E S T D U D I O

En esta parte del programa, el usuario debi seleccionar un tiempo mayor a 00, sin embargo si por alguna razn el usuario selecciono este tiempo, el programa contempla esta condicin y no se ejecuta nada. If segundos = 0 Then If minutos = 0 Then GoTo salir End If End If Si el tiempo es diferente de 00, automticamente se enciende el relevador, y se inicia la cuenta regresiva, en donde dependiendo del nmero que el usuario selecciono, este ser almacenado, en las variables segundos y minutos.

high SWITCH_SALIDA pause 6000 Otro_delay: Despus se resta en una unidad la variable segundos, se procede a actualizar este nuevo nmero en los Displays de 7 segmentos.

segundos = segundos - 1 dig_1 = segundos dig_2 = minutos GoSub Visuliza_display Se pregunta si las variables minutos y segundos han llegado a un valor de 0, si este es el caso, se procede a ejecutar un salto incondicional a la etiqueta salir, de caso contrario se pregunta si la variable minutos es mayor a 0, esto se hace para actualizar el valor de los minutos en los Displays. If segundos = 0 Then If minutos = 0 Then GoTo salir End If End If

P I C

M I C R O E S T D U D I O

Cada vez que la variable segundos llegue a un valor de 0 se cargara automticamente con el valor de 10, para que vuelva a iniciar su cuenta regresiva y se restara una unidad a la variable minutos. If minutos > 0 Then If segundos = 0 Then segundos = 10 minutos = minutos - 1 End If End If pause 6000 GoTo Otro_delay

Por ultimo cuando las variables minutos y segundos llega a un valor de 0,el programa salta a la etiqueta salir, en donde se indica que el temporizador ha llegado a su cuenta final, despus se desactiva la terminar asignada al manejo del relevador y se procede a generar una rutina de retardo de 3 segundos y se vuelve a retornar al inicio del programa en donde el usuario de nuevo tendr que seleccionar el tiempo que desee temporizar.

salir: dig_1 = 0 dig_2 = 0 GoSub Visuliza_display low SWITCH_SALIDA pause 3000 GoTo Inicia_Timer End

Por razones de espacio en este tutorial no se explica el cdigo de la rutina Visualiza_display, sin embargo queda a consideracin del usuario revisar el cdigo fuente que viene en el disco adjunto a este producto.

Vous aimerez peut-être aussi