Ir para o conteúdo

Timer do microcontrolador: prescaler e OCR para a frequência

Informe o clock, a frequência desejada, o modo e o tamanho do timer para ver o prescaler, o valor do OCR e a frequência real com o erro.

  • Roda no seu navegador

Entrada

Arduino Uno: 16 MHz.

Modo de saída

Tamanho do timer

Resultado

O resultado aparece aqui.

Escolhendo prescaler e OCR

OCR = F_CPU ÷ (N · k · f) − 1; f real = F_CPU ÷ (N · k · (1 + OCR)); k = 2 com toggle e 1 em interrupção; N ∈ {1, 8, 64, 256, 1024}

Com clock de 16 MHz e frequência desejada de 1.000 Hz, o menor prescaler que cabe no registrador é 1, com OCR de 7.999. A frequência real é de 1.000 Hz, com erro de 0%.

Frequência baixa

Para 2 Hz com timer de 16 bits, o prescaler sobe para 256 e o OCR para 31.249; a frequência real é de 2 Hz, com erro de 0%. Quando nenhum prescaler cabe, a página avisa que a frequência está fora do alcance do timer.

Limites

  • Os prescalers de 1, 8, 64, 256 e 1024 são os do Timer1 do ATmega328P; outros timers e microcontroladores têm outros valores. Confira o datasheet do chip.
  • O clock de 16 MHz é o do Arduino Uno e é editável; placas de 8 MHz e 20 MHz têm outros valores.
  • A página escolhe o menor prescaler possível, que dá a melhor resolução; o erro vem do arredondamento do OCR.

Perguntas frequentes

Como calcular o prescaler e OCR do timer?

OCR = F_CPU ÷ (prescaler · f) − 1 no modo CTC. Com 16 MHz, interrupção de 1 kHz e timer de 8 bits, o prescaler é 64 e o OCR, 249.

Qual a frequência real do timer do Arduino?

F_CPU ÷ (prescaler · (1 + OCR)), com o fator 2 no modo toggle. O erro vem do arredondamento do OCR.

Qual prescaler escolher no timer?

O menor que mantenha o OCR dentro do registrador, de 255 em 8 bits ou 65535 em 16 bits, porque dá a melhor resolução.