Вы находитесь на странице: 1из 4

Creado

por David lvarez para tallerarduino.worpress.com

Cap 3. Interrupciones (II)


Que es un Timer?
A grandes rasgos, es un contador interno que puede funcionar a la frecuencia que
marca un reloj. Este reloj puede ser interno o externo.

Como funciona?
Funciona mediante un aumento del counter register, segn como se configure, su
contaje ser a una frecuencia mayor o menor, y una vez finalice el contaje
(desbordamiento) para el que lo hemos configurado activar el bit flag (bandera),
el cual nos indica que el timer ha acabado de contar y empezar de nuevo.
Debido a que el timer depende de una fuente reloj, tal y como hemos dicho al
principio, la unidad ms pequea medible ser el periodo:

!=

!
!
=
= !"! !"#
! !"#$%


Tipos de Timers.
En los chips AVR Atmega 168 y Atmega 328 disponemos de 3 Timers, en los
Atmega 1280 y Atmega 2560 contamos con 6.
Timer 0: Temporizador de 8 bits (registrar como mximo 256 valores).
Es usado en las funciones delay() y millis(), por lo que debemos
tenerlo en cuenta a la hora de programar.

Timer 1: Temporizador de 16 bits (registrar como mximo 1024 valores).
Es usado en la librera servo, por lo que deberemos tenerlo en
cuenta a la hora de programar.

Timer 2: Temporizador de 8 bits. Es muy similar al Timer 0 y es usado por
la funcin tono().

Timer 3, 4 y 5: Estos tres Timers son usados por los chips Atmega 1280 y
Atmega 2560. Los tres son de 16 bits y funcionan de manera
muy similar al Timer 1.

Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com


Configurar y ejecutar Timer.
Para poder usar los Timers o contadores, deberemos modificar sus registros. Para
este segundo ejemplo vamos a usar el Timer 1 (16 bits, al modificarlo no
podremos usar la funcin servo), por lo que nos centraremos en los registros
TCCR1A, TCCR1B y TIMSK (TCCR Timer Counter Control Register, TIMSK
Timer/counter Interrupt Mask register).

Los registros tienen la siguiente composicin:

Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com



1er ejemplo
!=

1
1
=
= !"! !"#
! 16!"#


2!"!! = 65535 65535 62! 5!" = 0! 0041! !! !"#

Como vemos el tiempo de parpadeo es tan rpido que ser prcticamente
imperceptible para el ojo humano.

Bajo licencia creative commons

Creado por David lvarez para tallerarduino.worpress.com



2 ejemplo
Para evitar el problema del primer ejemplo vamos a hacer que la velocidad de
parpadeo sea de 1s gracias al uso del preescaler y del CTC.

!=

1
1
1024
=
=
= !"#$
!/!"##$%&'#" 16!"#/1024 16!"#

2!"!! = 65535 64!" = !! !"#$

Con el uso del preescaler provocamos que el timer finalice su ciclo cada 4194s por
lo que debemos finalizar el ciclo 3194s antes, para ello vamos hacer uso del CTC.

!"#$% !"! =

!"#$%& !"#"$!%
1!
1 !"! =
1 = !"#$%
!!"#$%&'! !"#$%
64!"


Este valor se almacenar en el registro OCR1A, el cual se comparar por
constantemente con el Timer.

Bajo licencia creative commons

Вам также может понравиться