Algum motivo para não usar o Timer0 no AVR?

10

Apenas uma pergunta básica ... Para o arduino / avr / ATMega328, encontro muitos exemplos usando o Timer1 (há até uma biblioteca inteira), mas raramente alguns que utilizam o Timer0 (ou o Timer2).

Agora, eu sei que o uso de qualquer um desses cronômetros para controlar um método ISR desabilitará o uso do PWM nos pinos associados, mas há um motivo específico para que as pessoas pareçam ficar longe do Timer0? É usado para algo internamente que não se deve mexer?

Meu aplicativo atual é bom usando o Timer1, só estou curioso para saber se está faltando alguma coisa sobre esses outros temporizadores frequentemente negligenciados.

Adam Haile
fonte

Respostas:

16

Se a pergunta é sobre um microcontrolador simples AVR, não, não há nenhuma restrição ao uso de qualquer um dos temporizadores .

  • Para o Arduino, Timer0 é melhor evitar, como o millis(), delay()e todos cronometragem interna nas bibliotecas do Arduino usar este temporizador. Mudar sua constante de tempo afetará essas operações.
  • O Timer1 , como a pergunta indica, é a primeira escolha popular para qualquer tarefa de timer / contador, por meio de bibliotecas como a biblioteca TimerOne , bem como manipulação direta. É um cronômetro de 16 bits, com resolução mais fina que os cronômetros de 8 bits.
  • O Timer2 é usado pela biblioteca tone (), mas como isso não é onipresente, também existe a biblioteca msTimer2 que muitos consideram muito útil, como o TimerOne. A manipulação direta do Timer2 também é boa.
  • Os temporizadores adicionais no Mega, Timer3 , Timer4 e Timer5 , cada um com um temporizador de 16 bits, também estão disponíveis para uso, se você usar uma placa Arduino Mega .
Anindo Ghosh
fonte
9

Além de desativar o PWM associado, outras razões pelas quais posso pensar são:

  • TIMER0 é um cronômetro de 8 bits, enquanto TIMER1 é um cronômetro de 16 bits.

  • No mundo do Arduino, TIMER0 é usado para as funções de timer como delay () e millis (). Muitos outros códigos que eu vi usam da mesma maneira, porque a resolução de 8 bits é normalmente ampla.

  • O TIMER2 também é de 8 bits, não consigo pensar em um motivo para evitá-lo especificamente, se apenas forem necessários 8 bits. No entanto, é usado pela função tone () do Arduino.

Então, acho que isso deixa TIMER1 como uma escolha bastante genérica e é a única opção nos AVRs menores quando é necessário um timer de 16 bits. Os dispositivos AVR Mega também contêm TIMER3 - TIMER5, todos com 16 bits.

PeterJ
fonte