You are on page 1of 19

IUT Cuman

TEMA 4. TIMER 0

Microcontroladores

Prof. Luis Zurita

REGISTROS ASOCIADOS AL TEMPORIZADOR TMR0

IUT Cuman

TMR0: Registro de 8 bits de lectura/escritura OPTION: Configura al TMR0 para que trabaje como temporizador contador y asigna el valor al prescaler INTCON: Da informacin mediante el bit TOIF cuando el TMR0 se ha desbordado. TRISA (PUERTO A): Permite el ingreso de pulsos cuando el TMR0 est configurado como contador por RA4
Prof. Luis Zurita

REGISTRO OPTION (Direccin 81H)

IUT Cuman

bit 7, RPBU : Resistencia Pull-up, Puerto B, habilita el bit 1: Desactivadas 0: Activadas bit 6, INTEDG: Flanco activo para el control de interrupciones 1: Con flanco Ascendente 0: Con flanco Descendente bit 5, TOCS: Fuente de Reloj para TMR0 1: Pulsos introducidos a travs de RA4/T0CK1 (Contador) 0: Pulsos de reloj interno Fosc/4 (Temporizador) bit 4, TOSE: Tipo de flanco en TOCK1 1: Incremento de TMR0 cada flanco descendente 0: Incremento de TMR0 cada flanco ascendente bit 3, PSA: Bit de asignacin del prescaler divisor de frecuencia 1: El divisor de frecuencia se asigna al WDT 0: El divisor de frecuencia se asigna al TMR0 bit 2-0, PS2:PSO: Rango con el que acta el divisor de frecuencia.
Prof. Luis Zurita

EJEMPLOS DE CONFIGURACIN

IUT Cuman

Configure al PIC16F84 para que el temporizador TMR0, trabaje con los pulsos provenientes de un reloj externo, y el mismo cambie en el flanco de subida del pulso externo:

Configure al PIC16F84 para que el TMR0, trabaje con el reloj interno y la frecuencia del mismo sea dividida por 32:

Y los dems bits? Cmo lo cargo al OPTION? En el primer caso: movlw movwf bxx11xxxx1 OPTION En el segundo caso: movlw movwf bxx0x0100 OPTION
Prof. Luis Zurita

TEMPORIZADOR TMR0

IUT Cuman

Registro asociado al Timer0. Se encuentra en la posicin 01H de la memoria RAM. Es el corazn del mdulo Timer0. Puede ser ledo o escrito en cualquier momento. El TMR0 se incrementar automticamente por cada ciclo de instruccin y contar desde 0 (00H) hasta 255 (FFH) (Contador de 8 bits). Para que opere como temporizador, el bit TOCS (del registro OPTION) debe ser cero (0), el bit PSA= 0 y deben ser cargados los bits PS2 a PS0, segn sea el preescaler a utilizar para lograr nuestra temporizacin. Para que opere como contador, se usa una entrada de reloj externo en el TMR0 y se deben de cumplir ciertos requisitos para que el reloj externo pueda ser sincronizado con el reloj interno (TOSC). Adems existe un retardo en el incremento real del TMR0, despus de la sincronizacin. El bit TOCS= 1. Se debe seleccionar el tipo de flanco que producir el incremento del TMR0 ( TOSE = 1 0).

Prof. Luis Zurita

QU ES EL PRESCALER?

IUT Cuman

Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos, como se ve en la tabla asociada al registro OPTION, 1:32, 1: 64, 1:256, etc., genera una nueva seal de menor frecuencia a la salida, que ser la seal de reloj de entrada al registro TMR0. Ralentiza seales de entrada demasiado rpidas para nuestros propsitos. Tambin existe un postescaler, asociado al perro guardin WDT (Watch Dog Timer) del microcontrolador, pero en este caso recibe el nombre de postcaler ya que se usa a la salida del WDT, no pudiendo estar asignado a la vez al Timer0 o al WDT. El preescaler es transparente para el programador, no se puede leer ni escribir sobre l, pero se puede seleccionar por software, como ya se ha dicho, mediante el registro OPTION. Nota: Para evitar un RESET no deseado del sistema, es necesario ejecutar una secuencia de instrucciones especficas cuando se cambia la asignacin del prescaler del TMR0 al WDT. Esta secuencia debe ser seguida, an cuando el WDT est inactivo.

CMO CUENTA EL TMR0?


El TMR0 cuenta exclusivamente de forma ascendente, nunca descendente. 00H FFH

IUT Cuman

00H (28 N10) Si el TMR0 se carga con un valor, ste comenzar a contar desde el valor cargado hasta que se desborda (cuando pasa a 00H)
00H FFH Valor cargado En el TMR0 00H
Prof. Luis Zurita

CLCULOS CON EL TMR0

IUT Cuman

Cuando se carga en el registro TMR0 un valor XXH, l mismo contar: (FFH XXH) impulsos y el tiempo que tarda en hacerlo viene dado por la expresin: Temporizacin= 4 * TOSC * Valor Real TMR0 * Rango del divisor de Frecuencia Valor Real TMR0 = (28 N10) = (256 N10) N10= Valor a cargar en el TMR0 Ejemplo: Sea un valor a cargar en el TMR0 de 100, un prescaler seleccionado de 1:32 y un oscilador XT. Determine el tiempo en que tardar el TMR0 en desbordarse. Solucin: Sea XT = Frecuencia = 4 MHz, T = 0.25 s. Temporizacin= 4*0.25 s* (256 100) * 32 = 4.992 ms.

Prof. Luis Zurita

OTROS EJEMPLOS

IUT Cuman

Se desea saber: Qu valor debemos cargar en el TMR0, si deseamos obtener una temporizacin de 10,24 ms, utilizando un preescaler de 128 y un cristal XT? Solucin: Temporizac in 10 ,24 ms 10 (256 N ) = = = 80

4 TOSC Rgodivisor

4 0.25 s 128

(256 N10) = 80, despejando N10 = (256 80) = 176, el valor que debemos cargar en el TMR0 es 176, para que ste cuente desde 176 hasta 256. Elegir el TMR0, para generar un retraso de 1.5 ms utilizando un oscilador de 10 MHz. Solucin: Sea Fosc= 10 MHz, T = 100 ns (256 N10) =

Temporizac in 1.5ms = 4 TOSC Rgodivisor 4 100 ns RgoDivisor

N10 = 256 - (3750/RgoDivisor)

Prof. Luis Zurita

CONTINUACIN EJEMPLO ANTERIOR

IUT Cuman

Dmosle valores al Rango del divisor, hasta obtener un valor que se acerque lo ms posible al retardo propuesto: Si Prescaler= 256, Valor a cargar en el TMR0= 241 (redondeado) Si Prescaler= 128, Valor a cargar en el TMR0= 227 (redondeado) Si Prescaler= 64, Valor a cargar en el TMR0= 197 (redondeado) Si Prescaler= 32, Valor a cargar en el TMR0= 139 (redondeado) Etc A manera de prctica, realice usted, el clculo de la Temporizacin, para cada uno de los valores que se consiguieron en los clculos anteriores. Escoja uno y justifique. Particularmente parece que el que tiene el rango de divisor de 64, es el mejor.
Nota: En este ejercicio resuelto, usted puede darse cuenta de que no hay un solo resultado para los ejercicios, pero lo que si debe cumplirse es que sea cualquiera que sean los valores que se tomen para los clculos, estos deben de estar cercanos a la respuesta que se espera del temporizador que est diseando.

Prof. Luis Zurita

Ejemplo. Diga cunto es la mxima temporizacin que se puede hallar con el TMR0? Asuma que se est trabajando con un XT. Solucin: Tomamos el mximo factor de escala de divisin todos los estados que puede contar el TMR0: Temporizacin= 4*0.25 s*(256 )*256 = 65.536 ms. Este es el mximo valor que podemos conseguir del TMR0.

IUT Cuman

Cmo hacemos entonces para conseguir valores superiores a ste, tales como 0,5 s; 1 s; 2 s; entre otros? Esto se puede arreglar si tenemos un contador de mayor nmero de bits. La solucin est en extender el Timer0 con un registro (auxiliar) controlado por software. Dicho registro (auxiliar) contar el nmero de interrupciones por desbordamiento que genera el Timer0, de forma de que ste pase por cero, cuando haya pasado el tiempo que estamos calculando.

Prof. Luis Zurita

USO DE REGISTRO AUXILIAR

IUT Cuman

Pasos: 1. Escoger un valor para el prescaler. Un posible criterio es calcular todas las frecuencias de prescaler que podemos obtener con cada divisor posible. Las frecuencias sin decimales son interesantes al poder encontrar mltiplos de ellas a la salida del TMR0 con mayor facilidad. En general, la eleccin del valor del prescaler es emprica: depende del problema, la experiencia y sobre todo de la prctica. 2. Determinar el valor del Registro Auxiliar, a partir del valor dado por el TMR0. Normalmente viene dado por un mltiplo de la frecuencia, asociada al tiempo calculado. Con un ejemplo entenderemos mejor lo que se desea plantear: Ejemplo: Determine los valores del TMR0 y del Registro Auxiliar para conseguir una temporizacin de 1 segundo. Utilice un oscilador XT. Solucin: XT= Frecuencia = 4 MHz ; Tosc= 250 ns Paso 1. Como no se nos ha impuesto que prescaler utilizar ni que temporizacin, podemos aleatoria mente escogerlas, como en el ejemplo 6. Evaluando cualquiera, cuya temporizacin del TMR0 se bas en 5 ms, escojamos el prescaler 128 y sustituyamos los valores en la ecuacin principal: Temporizacin= 4*250 ns*(256 - 217)*128 = 4.992 ms

CONTINUACIN DEL EJEMPLO ANTERIOR


Paso 2. Qu valor debe de tener el registro auxiliar? a) Al tiempo de 4.992 ms, se asocia una frecuencia del TMR0 de =
1 = 200.3 Hz, redondeando, tomamos este mltiplo: 4.992ms

IUT Cuman

200, As, tendremos entonces que si multiplicamos 200*4.992 ms = 0.998 s, que es un valor bastante cercano a 1 segundo. b) La misma operacin pero interpretada de una forma ms sencilla es determinar cuantas veces necesitamos al tiempo calculado para lograr un segundo: La que usted entienda mejor es vlida. Nuestro registro auxiliar debe ser de 200!!! Recuerde de que ste registro auxiliar no debe superar 255. Si supera este valor, se debe adicionar un nuevo registro auxiliar

1segundo 200.32 4.992ms

DE LOS CLCULOS A LA PROGRAMACIN


Realicemos un ejercicio completo: Realice un programa que permita encender y apagar un led cada 15 ms, mediante el timer0. Utilice un oscilador XT.

IUT Cuman

Prof. Luis Zurita

DE LOS CLCULOS A LA PROGRAMACIN


Paso 2. Debemos de estructurar el programa para que vigile e informe cuando el TMR0 se ha desbordado, y el bit que nos da esta informacin es el TOIF, del Registro INTCON. Adicional a esto debemos configurar el registro OPTION para que este trabaje con el prescaler que hemos seleccionado para nuestros clculos, as como de asignarlo al TMR0. As como la rutinaria configuracin de los puertos.

IUT Cuman

Paso 3. Programa

LIST P=16F84A INCLUDE P16F84A.INC ORG 00H GOTO INICIO INICIO BSF STATUS,5 CLRF TRISA MOVLW B11010110 MOVWF OPTION_REG BCF STATUS,5 CLRF INTCON LEDON BSF PORTA,0 CALL RETARDO LEDOFF BCF PORTA,0 CALL RETARDO GOTO LEDON ;***RUTINA DE RETARDO*** RETARDO MOVLW D139 MOVWF TMR0 ESPERA BTFSS INTCON,TOIF GOTO ESPERA BCF INTCON,TOIF RETURN END

IUT Cuman

Prof. Luis Zurita

Ejercicio. Realice un programa que permita encender y apagar un led cada un segundo. Mediante Timer0 y con un oscilador XT.

IUT Cuman

Subrutina

Programa Principal

Prof. Luis Zurita

OTRA

IUT Cuman

FORMA DE HACER LOS CLCULOS?

Pero si an le enredan todas estas frmulas, para calcular temporizaciones, probemos con estas tres:

Pruebe ahora realizar los mismos clculos siguiendo el 1, 2, 3

Prof. Luis Zurita

You might also like