¿Alguna razón para no usar Timer0 en AVR?

10

Solo una pregunta básica ... Para arduino / avr / ATMega328, encuentro muchos ejemplos que usan Timer1 (incluso hay una biblioteca completa), pero rara vez hay alguno que utilice Timer0 (o Timer2).

Ahora, sé que usar cualquiera de estos temporizadores para controlar un método ISR deshabilitará el uso de PWM en sus pines asociados, pero ¿hay alguna razón específica por la cual las personas parecen mantenerse alejadas de Timer0? ¿Se usa para otra cosa internamente con la que uno no debería meterse?

Mi aplicación actual está bien usando Timer1, solo tengo curiosidad si me falta algo sobre estos otros temporizadores a menudo descuidados.

Adam Haile
fuente

Respuestas:

16

Si la pregunta es sobre un microcontrolador AVR simple, entonces no, no hay ninguna restricción en el uso de ninguno de los temporizadores .

  • Para Arduino, es mejor evitar Timer0 , ya que millis(), delay()y todo el cronometraje interno en las bibliotecas Arduino usa este temporizador. Cambiar su constante de tiempo afectará estas operaciones.
  • Timer1 , como dice la pregunta, es la primera opción popular para cualquier tarea de temporizador / contador, a través de bibliotecas como la biblioteca TimerOne , así como la manipulación directa. Es un temporizador de 16 bits, por lo tanto, con una resolución más fina que los temporizadores de 8 bits.
  • La biblioteca de tonos () usa Timer2 , pero como no se usa de manera tan ubicua, también existe la biblioteca msTimer2 que muchos encuentran muy útil, al igual que TimerOne. La manipulación directa de Timer2 también está bien.
  • Los temporizadores adicionales en el Mega, Temporizador 3 , Timer4 y Timer5 , cada temporizador de 16 bits, también están disponibles para su uso, si se utiliza un Arduino Mega bordo.
Anindo Ghosh
fuente
9

Además de deshabilitar el PWM asociado, se me ocurren otras razones:

  • TIMER0 es un temporizador de 8 bits, mientras que TIMER1 es un temporizador de 16 bits.

  • En el mundo Arduino, TIMER0 se usa para las funciones de temporizador como delay () y millis (). Muchos otros códigos que he visto lo usan de la misma manera porque la resolución de 8 bits normalmente es amplia.

  • TIMER2 también es de 8 bits, no se me ocurre una razón para evitarlo específicamente si solo se requieren 8 bits. Sin embargo, lo utiliza la función tone () de Arduino.

Así que supongo que eso deja a TIMER1 como una opción bastante genérica y es la única opción en los AVR más pequeños cuando se requiere un temporizador de 16 bits. Los dispositivos AVR Mega también contienen TIMER3 - TIMER5 que son todos de 16 bits.

PeterJ
fuente