2. Temporizador vs. Contador
Untemporizador es un dispositivo, con frecuencia
programable, que permite medir el tiempo.
Normalmente, cuando transcurre el tiempo configurado
se hace saltar una alarma.
Uncontador asíncrono es un circuito capaz de
realizar el cómputo de los impulsos que recibe en
una entrada destinada a tal efecto.
http://paginaspersonales.deusto.es/jonathan.garibay/
3. Temporizadores/Contadores
Los PIC18 disponen de hasta 5 temporizadores:
TMR0 Temporizador de 8 o 16 bits de resolución que puede
trabajar como contador.
TMR1 y TMR3 Temporizadores de 16 bits de resolución que
pueden trabajar como contadores.
TMR2 y TMR4 Temporizadores especiales de 8 bits.
El valor de todos los temporizados es accesible por medio de
registros (TMR0H:TMR0L, TMR1H:TMR1L, TMR2…).
Todos los temporizadores llevan asociada una interrupción
Por desbordamiento del temporizador/contador (TMR0, TMR1 y
TMR3).
Por alcanzar el valor del registro de periodo (TMR2 y TMR4).
El TMR3 y el TMR4 no se verán en detalle
porque son prácticamente iguales que el
TMR1 y el TMR2, respectivamente.
http://paginaspersonales.deusto.es/jonathan.garibay/
4. Temporizador/Contador TMR0
Puede funcionar como temporizador o como contador
asíncrono (por medio del pin RA4/T0CKI).
Flanco activo configurable cuando trabajar como contador.
Puede trabajar con 8 o 16 bits de precisión.
Valor del temporizador/contador accesible por medio de los
registros TMR0H:TMR0L.
Cuando se trabaja con 8 bits, se usa sólo el registro TMR0L.
Posibilidad de usar pre-divisor:
Pre-divisor configurable de 1:2 a 1:256.
Interrupción por desbordamiento.
http://paginaspersonales.deusto.es/jonathan.garibay/
5. Temporizador/Contador TMR0 (continuación…)
Señal de Aplicación del Autoincremento
Entrada pre-divisor del registro
…
0h00
0h01
1:2 …
0hFE
1:4 0hFF
Temporizador Interrupción TMR0
0h00
0h01
…
Contador 1:2
1:4
http://paginaspersonales.deusto.es/jonathan.garibay/
6. Temporizador/Contador TMR0 (continuación…)
En el modo de 16 bits, el registro TMRH no contiene
el valor real, sino que éste está almacenado en un
buffer interno no accesible.
El registro TMR0H se actualiza con el valor real durante
la lectura del registro TMR0L.
La escritura del valor real en el buffer interno desde el
registro TMR0H se realiza durante la escritura del registro
TMR0L.
Se debe leer primero el
TMR0L y después el TMR0H
Se debe escribir primero el
TMR0H y después el TMR0L
http://paginaspersonales.deusto.es/jonathan.garibay/
7. Temporizador/Contador TMR0 (continuación…)
Habilita el TMR0
Selecciona el modo
temporizador o
modo contador
Flanco activo para
el modo contador
Selecciona del
pre-escaler
http://paginaspersonales.deusto.es/jonathan.garibay/
8. Dominios de tiempo
Lamedida de tiempo natural es la que usamos de
forma normal en la realidad.
Se mide en segundos (S) y todos sus múltiplos: mS, µS…
En los PIC’s el tiempo de mide en ‘ticks’, siendo un
‘tick’ el tiempo necesario para que se genere una
señal de incremento del reloj del sistema.
El ‘tick’ es la unidad mínima de temporización de un
µcontrolador.
La relación entre tiempo natural y ‘ticks’ es:
tiempo ticks Treloj pre divisor
Periodo del reloj del sistema
http://paginaspersonales.deusto.es/jonathan.garibay/
9. Cálculo de temporizaciones
ticks Timer0 La interrupción por desbordamiento va a
255 avisar del fin de una temporización.
número de ‘ticks’ Por ello, no se empieza a contar desde 0,
sino desde una valor inicial que se calcula
de la siguiente forma:
TMR0L valor _ inicial 256 número_ de _ ticks
Con este valor inicial, al cabo de ‘n’ ticks se
producirá el desbordamiento.
valor inicial
En unidades naturales, la interrupción se
producirá al cabo de un tiempo que se
calcula con la siguiente fórmula:
4
temporización num _ ticks pre divisor
Fosc
0
http://paginaspersonales.deusto.es/jonathan.garibay/
10. Cálculo de temporizaciones (continuación…)
Para temporizar un valor concreto se necesita calcular:
El valor del pre-divisor.
Se calcula la temporización máxima con cada pre-divisor para
identificar cual es el valor de pre-divisor mínimo a utilizar.
4
temp _ max num _ max_ tick pre divisor
Fosc
El valor inicial de temporización.
Aplicando la siguiente formula (derivada de las anteriores).
Fosc
valor _ inicial 256 temporización
4 pre divisor
Como el valor inicial tiene que ser un entero, habrá que
redondear, y por tanto existirá un error de redondeo.
Habrá que tratar de minimizar este error realizando los cálculos
para diferentes pre-divisores.
http://paginaspersonales.deusto.es/jonathan.garibay/
11. Cálculo de temporizaciones (continuación…)
Resumen de la metodología:
1. Obtener los valores posibles de los pre-divisores.
2. Obtener el valor inicial del temporizador para cada uno
de los pre-divisores posibles.
3. Todos los pares (pre-divisor, valor inicial) serán
soluciones válidas. Sin embargo, debido al error de
redondeo unas serán mejores que otras.
4. Calcular el error de redondeo y seleccionar como
solución el que lo tenga más bajo
4
temp _ real (256 valor _ inicial) pre divisor
Fosc
error temporización temp _ real
http://paginaspersonales.deusto.es/jonathan.garibay/
12. Temporizador/Contador TMR1
Puede funcionar como temporizador, como contador
asíncrono (RC0/T1CKI) y como contador síncrono
(RC1/T1OSI y RC0/T1OSO).
Cuando trabaja como contador asíncrono, se trabaja siempre
con flanco ascendente.
Tiene 16 bits de precisión.
Valor del temporizador accesible por medio de los
registros TMR1H:TMR1L.
Permite utilizar un pre-divisor configurable de 1:1, 1:2,
1:4 y 1:8.
Interrupción por desbordamiento.
http://paginaspersonales.deusto.es/jonathan.garibay/
13. Temporizador/Contador TMR1 (continuación…)
El funcionamiento es similar al del TMR0.
La fuente externa del Esta señal se puede utilizar
timer puede ser como entrada del oscilador
síncrona o asíncrona interno del µcontrolador
El timer se puede resetear
desde los módulos CCP
http://paginaspersonales.deusto.es/jonathan.garibay/
14. Temporizador/Contador TMR1 (continuación…)
Para la lectura y escritura del valor del TMR1, se
utiliza el mismo modelo que el del TMR0 en el que el
registro TMR1H no contiene el valor real.
Esto no quiere decir que
se configure como 1:1.
Quiere decir que se
reinicia la cuenta de los
flancos detectados.
El pre-escaler se borra cuando
se escribe el registro TMR1L
http://paginaspersonales.deusto.es/jonathan.garibay/
15. Temporizador/Contador TMR1 (continuación…)
Selecciona del
pre-escaler
Selecciona entre
contador síncrono o
contador asíncrono
Selecciona el modo
temporizador o
modo contador
Habilita el TMR1
http://paginaspersonales.deusto.es/jonathan.garibay/
16. Temporizador TMR2
Esun temporizador de 8 bits con un registro de
periodo (PR2).
Cuando el timer alcanza el valor del registro PR2, se
resetea y comienza una nueva temporización.
Valor del temporizador accesible por medio del
registro TMR2.
Pre-divisor configurable de 1:1, 1:4 o 1:16.
Incluye un post-divisor configurable desde 1:1 a 1:16
(1:2, 1:3, 1:4…).
Se incrementa cada vez que el timer alcanza el valor del
registro PR2.
http://paginaspersonales.deusto.es/jonathan.garibay/
17. Temporizador TMR2 (continuación…)
Interrupción especial después del post-divisor.
Se genera cuando se haya realizado ‘n’ temporizaciones,
siendo ‘n’ el valor del post-divisor.
La interrupción depende
Reset del contador del post-divisor
Salida para el
módulo PWM
No hay entradas externas
para contadores
http://paginaspersonales.deusto.es/jonathan.garibay/
18. Temporizador TMR2 (continuación…)
Selecciona del
post-escaler
Habilita el TMR1
Selecciona del
pre-escaler
http://paginaspersonales.deusto.es/jonathan.garibay/