USO DEL TIMER El microntrolador PIC 16f84 posee un timer, que pude ser usado como temporizador o contador. En este caso nos ocuparemos de la utilización del timer como temporizador, es decir, para generar retardo de tiempo. •El Timer es un registro de 8 bits llamado TMR0 •Una vez que se guarda algún valor en este registro el Timer comienza a incrementarse en forma cíclcica, es decir llega a cero(se desborda) y sigue así sucesivamente. •Por lo anterior el programdor debe controlarlo. •El timer puede ser configurado para que se incremente por medio de la ejecución de instruciones o por medio de un pulso externo a través del pin RA4/TOCKI
•Si se incremnta por cilcos o instruciones, entonces trabaja como temporizador y si es externo se denomina contador. •La opción más usada es el incremento por ciclos, la otra opción es usada para aplicaciones como contador de pulsos, medidores de frecuencia, entre otras. •Es importante conocer que el Timer puede generar una interrupción (si se configura) cada vez que se desborde, además activa un bit del INTCON cada vez que se desborda. •El Timer cuenta con un preescalador, el cual sirve para aumentar el tiempo del incremento, este preescalador es configurable. •El preescalador puede ser configurado para el timer o para el wachtdog. •Para configurar el timer hay que conocer ciertos bits del registro OPTION y del INTCON
•En en registro OPTION, nos interesa por el momento los bits 5,4,3 y del 0-2. •El bit cinco sirve para
Bit 5 Bit 3
Bits del preescalador (0-2)
El bit cinco sirve para configurar el incremento del timer, ya sea por instrucción o por medio de un pulso externo. 1=Ciclo externo en RA4/TOCKI 0= Por Instrucciones •El bit 4 se confugura solo si se trabaja conincremento por pulso externo, este bit determina si el timer se incrementa por el pulso de bajada(Cambio de 5v a 0V) o subida (de 0 a 5V). 0=Subida 1= Bajada.
•Los bits del 3 sirve para decir al PIC si el prescalador es para el timer o el wachtdog. 1= Wachtdog 0=Timer •Los bit del 0-2 se usan para configurar el preescalador, deacuerdo a la siguiente tabla.
•En cuanto al registro INTCON se refiere nos interesan los bits 5 y2
•El bits 5 se usa solo cuando se trabaja con interrupciones, y sirve para habilitar la interrupción del timer (con un 1) •El bit 2 se coloca en uno cuando el timer termina de contar, y se usa para verificar cuando el Timer se desbordó. Este bits debe ser puesto en cero antes que el timer empiece a contar y una vez que termine.
COMO CALCULAR EL TIEMPO DESEADO T=(256 – TMR0)*PRES*c Por ejemplo si se quiere calcular un tiempo de 10mSeg •Primero hay que ver que valor de preescalador da el tiempo deseado caundo TMR0=0 •Si el cristal es de 4Mhz, entonces c=1us T=(256 – TMR0)*PRES*c T=(256 )*PRES*c , despejando PRES=T /(256c)=10mS/256uS PRES=39 , se toma un valor por encima, entonces prescalador=64 •Ahora toca buscar el valor que debe tener TMR0 para que el tiempo sea de 10mS para un preescalador de 64
De la formua del tiempo se deseja entones TMR0
TMR0=256c - T/(PRES*c) Para nuestro caso TMR0=256 - (10mS/64us) =99.75 ~ 100 Para calcular el verdadero retardo se rempolaza en
T=(256 – TMR0)*PRES*c T= (256 – 100)*64us = 9.984mS Se observa que se obtinen una buena resolución, de ahí la ventaja de utilizar mejor los retardos con el timer cuando la precisión del retardo es crítica
CONFIGURACIÓN Y USO DEL TIMER Tomando como ejemplo el anterior retardo, el sotware de configuración del timer y del retardo queda de la siguiente forma. •Primero se connfigura el registro OPTION para decirle que el timer va a trabajar con ciclo de instrucción (bit 5=0), además que el prescalador lo usará el timer(Bit 3=0) y se cargan los bit 0-2 con el código del preescalador, en este caso de 64. El código será (101). •Por todo lo anterior en la sección de configuración del programa se debe colocar el siguiente código. MOVLW B’00000101’ MOVWF OPTION_REG La rutina de retardo debe llevar el siguiente formato.
TDELAYW BCF INTCON,2 ; se balquea la bandera del timer MOVLW .100 MOVWF TMR0 ; se carga el valor deseado en el timer NAD BTFSS INTCON,2 GOTO NAD ;no sale hasta que no se active la ba BCF INTCON,2 ; desactiva la bandera RETURN ;retorna Sin embargo muchas veces se necesitan retardos variables, que dependan del valor de algún registro, en este caso el formato es el siguiente. TDELAY BCF INTCON,2 MOVF TVALOR,W ;Tvalor contiene el valor deseado MOVWF TMR0 NADA BTFSS INTCON,2 GOTO NADA BCF INTCON,2 RETURN