TIMER 0 • Los TIMERs o Temporizadores son módulos integrados en el PIC que permiten realizar cuentas tanto de eventos internos como externos. • Cuando la cuenta es interna se habla de temporización y cuando la cuenta es externa se habla de contador.
TIMER 0 • TMR0: Registro de 8 bits de lectura/escritura • TRISA (PUERTO A): Permite el ingreso de pulsos cuando el TMR0 está configurado como contador por RA4
¿CÓMO CUENTA EL TMR0? El TMR0 Cuenta exclusivamente de forma ascendente, nunca descendente. 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
00H (28 – N10) 00H FFH Valor cargado En el TMR0 00H
CÁLCULOS CON EL TMR0 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 expresión:
Temporización= 4 * TOSC * Valor Real TMR0 * Rango del divisor de Frecuencia Valor Real TMR0 = (28 – N10) = (256 – N10) N10= Valor a cargar en el TMR0
¿QUÉ ES EL PRESCALER? (RANGO DIVISOR DE FRECUENCIA)
Divide la frecuencia de reloj de entrada del Timer0, entre valores predefinidos 1:32, 1: 64, 1:256, etc. Genera una nueva señal de menor frecuencia a la salida,
CÁLCULOS CON EL TMR0
Ejemplo: 1 Sea un valor a cargar en el TMR0 de 100, un preescalar seleccionado de 1:32 y un oscilador XT. Determine el tiempo en que tardará el TMR0 en desbordarse. Solución: Sea XT = Frecuencia = 4 MHz, T = 0.25 μs. Temporización= 4*0.25 μs* (256 – 100) * 32 = 4.992 ms.
EJ 2. Se desea saber: ¿Qué valor debemos cargar en el TMR0, si deseamos obtener una temporización de 10,24 ms, utilizando un preescaler de 128 y un cristal XT? Solución:
(256 – N10) =
Temporización 4 ∗ TOSC ∗ Rgodivisor
10,24ms = = 80 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.
TIMER0 EN LENGUAJE C Los distintos modos se pueden agrupar mediante el empleo del sĂmbolo |. Ejemplo: setup_timer_0 (RTCC_DIV_2 | RTCC_EXT_L_TO_H);
El compilador C suministra una serie de funciones para leer o escribir en el TIMER0. Para escribir un valor en el registro:
set_timer0(valor);
valor : es un entero de 8 bits. Para leer el valor actual del registro:
valor= get_timer0 ( );
valor: entero de 8 bits.
Ejemplo 3. Generar una señal cuadrada de 1 kHz utilizando la interrupción del TIMER0 • Para generar una señal cuadrada de 1 kHz con un duty cycle del 50 %, se necesita un período de 0,5 ms en nivel alto y 0,5 ms en nivel bajo. • Cálculos: Aplicando las fórmulas del TIMER0: Solución: 256 – N ) = 10
Temporización = 4 ∗ TOSC ∗ Rgodivisor
0,5ms = s62,5 4 ∗0.25µ ∗8
(256 – N10) = 62,5 y despejando N10 = (256 – 62,5) = 193,5 ≈194, por lo tanto el valor que debemos cargar en el TMR0 es 194, para que éste cuente desde 194 hasta 256, generándonos la temporización de 0,5 ms.