Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 13
USO DE TIMERS INTERNOS En trminos generales, un Timer es un elemento que permite precisar lapsos de tiempo. Los microcontroladores suelen contar con uno o ms de estos dispositivos para auxiliar al procesador en las labores de cuenta y temporizacin de eventos. En el caso de los PI ms sencillos se incluyen dos de estos mdulos! el Watchdog y el "#$%. Watchdog El &Perro guardin', tiene la (uncin de vigilar que el programa en e)ecucin no se cuelgue o quede en un ciclo sin (in. *ct+a generando un reset cada cierto tiempo ,entre -. ms y /s, seg+n se programe0, para reiniciar la e)ecucin del programa. En las aplicaciones que requieren espera asincrnica de entradas se debe in1ibir la accin del Watchdog, mediante la instruccin especial L$23" o e(ectuando la seleccin de una opcin espec4(ica en el so(t5are utilizado para programar al PI . TMR0 (01H, 101H) Este es el temporizador principal de todos los PI . Posee . bits, entrada de relo) externa o interna a)ustable6 y acceso al sistema de interrupciones del procesador. Puede (uncionar como contador, recibiendo pulsos a travs del terminal $*78"9 :-, como preescalador, dividiendo la (recuencia que entra por el 9; - entre la cantidad que se le carga como valor inicial. "ambin puede usar la salida del prescalador del sistema ,ver (igura - y "abla -0 para aumentar a+n ms el (actor divisor de la (recuencia introducida por 9; -. La cuenta se e(ect+a en modo ascendente6 y cuando pasa la (rontera entre los valores mximo y m4nimo ,<<= y %0, se activa una bandera ,"9I<0 o se genera una interrupcin. La programacin y lectura del "#$% se e(ect+a a travs de tres registros! "#$%, I>" 9> y 9P"I9>. El primero de ellos corresponde el registro %- de la $*#. Es en l donde puede leerse el valor de la cuenta llevada en este mdulo. En cuanto a los registros I>" 9> y 9P"I9> se describen los bits pertinentes a continuacin. INTCON (0 H, ! H, 10 H, 1! H) @IE bitB *3IE "9IE I>"E $AIE "9I< I>"< $AI< bit%
"% ;
"9;E
P;*
P;/
P;-
P;% bit%
3el registro I>" 9> solo concierne lo relativo a los bits "9IE , Timer Overflow Interrupt Enable 0 y "9I< ,Timer Overflow Interrupt Flag bit0. El "9IE debe escribirse con - o %, seg+n se quiera 1abilitar o in1abilitar, respectivamente, las interrupciones causadas por overflow ,cruce entre <<= y %=0 del "#$%. El "9I< indicar con un - que se 1a generado un overflow6 y con un %, que no se 1a producido esta condicin. *l producirse un overflow, el programa debe encargarse de poner este bit en %, ya que el sistema no lo 1ace. ;obre los bits de 9P"I9> se tiene que "9 ; ,"#$% Clock Source select bit0 determina si la se?al de relo) para el timer proviene del exterior ,-0 a travs del terminal $*78"9 :- o de la se?al base del sistema ,%0, introducida por 9; -. El bit siguiente, "9;E ,"#$% Source Edge select bit0 de(ine si el incremento de la cuenta de eventos ,entrada $*78"9 :-0 ocurre con la transicin al(a ,%0 o beta ,-0. Los bits restantes corresponden al uso del preescaler. omo se observa en la (igura /, el uso del preescaler est multiplexado entre el "#$% y el watchdog. El bit P;* asigna su uso al watchdog ,-0 o al "#$% ,%0.
Wilmer Sanz F.
Fig. ,. Diagra)a del Preescaler co)/& al Watchdog 0 el TMR0 F%e&te' Datas(eet del )icroco&trolador "IC1*F!++ Los bits P;/, P;- y P;% (i)an el (actor divisor para la (recuencia del 9; -, bien sea que se est traba)ando con el "#$% o con el watchdog. La "abla siguiente resume los valores que adopta el preescaler, de acuerdo con las posibles combinaciones de estos bits. T# $# 1 Factores del Preescaler "S, "S1 "S0 %%% %%%-% %--%% -%--% --Di-isor .ar TMR0 / 7 . -E F/ E7 -/. /GE Di-isor .ara Watchdog / 7 . -E F/ E7 -/.
F%e&te' Datas(eet del )icroco&trolador "IC1*F!++ Puede observarse en la "abla - que, para el "#$% no puede (i)arse un divisor del relo) de entrada igual a la unidad. Esto no es cierto, ya que tal cosa logra tan slo con asignar el preescaler al watchdog ,P;*D-0, lo cual permite que el "#$% se incremente en uno por cada ciclo de instruccin.
Wilmer Sanz F.
tTOIF =
,/GE X 0 f I!ST"
,-0 omo la
En la ecuacin -, t"9I< es el tiempo de activacin del "9I< y ( instr la (recuencia de e)ecucin de las instrucciones. (recuencia de las instrucciones es igual a la (recuencia del sistema ,( 9; 0 entre cuatro!
tTOIF =
7K,/GE X 0 f OSC
,/0
3ebe recordarse que esta deduccin es cierta ba)o el supuesto de que no 1ay (actor de escala aplicado al "#$%. uando si lo 1ay ,P;*D%0, ese (actor divide a la (recuencia del oscilador, de manera que!
tTOIF =
,F0
La ecuacin F permite determinar el valor J que debe cargarse en el registro "#$% para generar un retardo de t "9I< unidades de tiempo. E1e).lo En el siguiente e)emplo se genera una onda con ton ,tiempo con la salida en alto0 de /%%us y to(( ,tiempo con la salida en ba)o0 de 7%%us. ;e usar una rutina de retardo de -%%us, desarrollada con el "#$%. ;e escoge un divisor igual E7 y se traba)a con un cristal de /%#=z. La (igura F muestra el diagrama de (lu)os de una rutina de retardo basada en el uso del "#$%. >o ;i "9I<!D%
Inicio
"#$%!DJ
"9I<D-
Fig. 2. Diagra)a de Fl%1os. R%ti&a de Retardo co& TMR0 F%e&te' Ela3oraci4& .ro.ia
$etornar
-%% =
7KE7K,/GE X 0 X = /7.-% = F . /%
En realidad la precarga del "#$% con el valor J calculado genera un peque?o error, debido al necesario redondeo, de all4 el valor signi(ica poseer una 1erramienta de simulacin.
Wilmer Sanz F.
6"9 ;D% ;e?al de relo) proveniente del sistema, >o externa 6"9;ED% 6P;*D% Preescaler asignado al "#$% 6P;/ P;- P;% D -%-. PreescalerDE7 TOIF BSF MOVLW MOVWF BCF Reta !" MOVLW MOVWF C$%&" BTFSS GOTO BCF RETURN EQU 0x2
#cti-idad s%gerida' Elaborar el cdigo del programa que permita generar la onda deseada. i3liogra56a L #icroc1ip "ec1nology Inc. ,/%%-0. "IC1*F!+7 Data S(eet. 555.micro1ip.com MEn l4neaN Oltimo acceso! %-L%EL/%%.
Wilmer Sanz F.