Visão Geral
O coração do Timer1 é o registrador TCNT1, que é um contador incrementado (ou decrementado) por um clock (selecionável entre várias opções). Ele está ligado a comparadores para detectar, conforme a programação, quando:- Chega a Zero.
- Atinge os valores em OCR1A, OCR1B ou ICR1.
- Atinge os valores fixos 0x00F, 0x01FF, 0x03FF. ou 0xFFFF
Uma outra função que o Timer1 pode fazer é a "captura", onde o valor de TCNT1 é copiado para ICR1 quando é ocorrer um evento no pino de entrada ICP1 ou no comparador analógico.
Meu plano para esta série de posts é o seguinte:
- Visão geral e seleção de clock
- Operação nos modos Normal e CTC (Clear Timer on Compare)
- Captura
- PWM
Seleção do Clock
Como todo periférico do ATmega, o comportamento é definido por bits em registradores. A seleção do clock é feita através dos três bits menos significativos do registrador TCCR1B:As seleções disponíveis são sem clock (contador parado), certas divisões do clock de I/O (geradas pelo prescaler) e um clock externo:
CS12 CS11 CS10 0 0 0 sem clock (parado)
0 0 1 clkIO
0 1 0 clkIO/8
0 1 1 clkIO/64
1 0 0 clkIO/256
1 0 1 clkIO/1024
1 1 0 clock externo, borda de descida
1 1 1 clock externo, borda de subida
O clock de I/O tem a mesma frequência que o clock do processador, porém pode ser desligado para economia de energia.
Reparar que no caso de clock externo pode-se selecionar se a contagem é feita quando o sinal passa do nível alto para baixo (borda de descida) ou do nível baixo para o alto (borda de subida). Isto permite sincronizar a contagem com um circuito externo.
A seleção do clock deve ser feita considerando-se a precisão e o valor máximo desejado. Por exemplo, considerando um clock de 16MHz (como no Arduino), a seleção do clkIO dá uma precisão de 62,5 nanosegundo e um tempo máximo de 4 milisegundos. Já a seleção de clkIO/1024 fornece um tempo máximo de 4 segundos, mas precisão de 64 milisegundos.
Nenhum comentário:
Postar um comentário