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

10

Solo una pregunta básica ... Para arduino / avr / ATMega328, encuentro muchos ejemplos usando Timer1 (incluso hay una biblioteca completa para él) pero raramente 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 que las personas parecen mantenerse alejadas de Timer0? ¿Se usa para algo más interno con el que no se debe meterse?

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

    
pregunta Adam Haile

2 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 todos los tiempos internos en las bibliotecas de Arduino usan este temporizador. Cambiar su constante de tiempo afectará estas operaciones.
  • Timer1 , como indica la pregunta, es la popular primera opción para cualquier tarea de temporizador / contador, a través de bibliotecas como TimerOne library , 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.
  • Timer2 es usado por la biblioteca tone (), pero como no se usa de manera ubicua, también está el La biblioteca msTimer2 que muchos encuentran muy útil, como TimerOne. La manipulación directa de Timer2 también está bien.
  • Los temporizadores adicionales en Mega, Timer3 , Timer4 y Timer5 , cada uno de ellos un temporizador de 16 bits, también están disponibles para su uso. si utiliza un tablero Arduino Mega .
respondido por el Anindo Ghosh
9

Aparte de deshabilitar el PWM asociado, otras razones que se me ocurren son:

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

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

  • TIMER2 también es un 8 bits, no puedo pensar en una razón para evitarlo específicamente si solo se requieren 8 bits. Sin embargo, es utilizado por la función tono () de Arduino.

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 Mega AVR también contienen TIMER3 - TIMER5 que son todos de 16 bits.

    
respondido por el PeterJ

Lea otras preguntas en las etiquetas