TIMER CERO

Page 1

TIMER 0 • TMR0: Registro de 8 bits de lectura/escritura • El Timer0 es un dispositivo puede funcionar conceptualmente de dos formas: como contador de pulsos externos o como temporizador para calcular intervalos de tiempo. • TRISA (PUERTO A): Permite el ingreso de pulsos cuando el TMR0 está configurado como contador por RA4


TIMER 0 • En el caso que dicha señal provenga del reloj interno de instrucciones (Fint), el Timer0 se utiliza para generar interrupciones periódicas a través de una cuenta programada. Ya que conocemos la frecuencia de funcionamiento y en base a un valor cargado en el contador del timer podemos temporizar eventos.

• En el caso que dicha señal sea de una fuente externa al microcontrolador (Fext), es especialmente útil para contar el número de pulsos que dicha señal genera en el tiempo ya que cada pulso de dicha señal incrementa el TMR0.


¿CÓMO CUENTA EL TMR0? 00H FFH

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 (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, que será la señal de reloj de entrada al registro TMR0.


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.


OTRO EJEMPLO

• Elegir el TMR0, para generar un retraso • de 1.5 ms utilizando un oscilador de 10 MHz. Solución: Sea Fosc= 10 MHz, T = 100 ns Temporización (256 – N10) = 4  T  Rgodivisor OSC 1.5ms = 4 100ns  RgoDivisor

N10 = 256 - (3750/RgoDivisor)


CONTINUACIÓN EJEMPLO ANTERIOR

Démosle valores al Rango del divisor, hasta obtener un valor que se acerque lo más 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 práctica, realice usted, el cálculo de la Temporización, para cada uno de los valores que se consiguieron en los cálculos anteriores. Escoja uno y justifique. Particularmente parece que el que tiene el rango de divisor de 64, es el mejor.


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 –

N10)

=

Temporización 4  TOSC  Rgodivisor

0,5ms = = 62,5 4  0.25s  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.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.