Une raison de ne pas utiliser Timer0 sur AVR?

10

Juste une question de base ... Pour arduino / avr / ATMega328, je trouve beaucoup d'exemples utilisant Timer1 (il y a même toute une bibliothèque pour cela) mais rarement tous ceux qui utilisent Timer0 (ou Timer2).

Maintenant, je sais que l'utilisation de ces minuteries pour contrôler une méthode ISR désactivera l'utilisation de PWM sur ses broches associées, mais y a-t-il une raison particulière pour laquelle les gens semblent rester à l'écart de Timer0? Est-il utilisé pour autre chose en interne avec lequel il ne faut pas jouer?

Mon application actuelle fonctionne bien avec Timer1, je suis juste curieux de savoir si je manque quelque chose à propos de ces autres minuteries souvent négligées.

Adam Haile
la source

Réponses:

16

Si la question concerne un microcontrôleur AVR nu, alors non, il n'y a aucune contrainte sur l'utilisation des minuteries .

  • Pour l'Arduino, il est préférable d'éviter Timer0 , car le millis(), delay()et tout le chronométrage interne dans les bibliothèques Arduino utilisent ce minuteur. La modification de sa constante de temps aura un impact sur ces opérations.
  • Timer1 , comme l'indique la question, est le premier choix populaire pour toutes les tâches de minuterie / compteur, via des bibliothèques telles que la bibliothèque TimerOne , ainsi que la manipulation directe. Il s'agit d'un temporisateur 16 bits, donc avec une résolution plus fine que les temporisateurs 8 bits.
  • Timer2 est utilisé par la bibliothèque tone (), mais comme cela n'est pas utilisé de manière omniprésente, il existe également la bibliothèque msTimer2 que beaucoup trouvent très utile, tout comme TimerOne. La manipulation directe de Timer2 est également très bien.
  • Les minuteries supplémentaires sur les Mega, Timer3 , Timer4 et Timer5 , chacune une minuterie 16 bits, sont également disponibles pour une utilisation, si vous utilisez une carte Arduino Mega .
Anindo Ghosh
la source
9

Outre la désactivation du PWM associé, je peux penser à d'autres raisons:

  • TIMER0 est un temporisateur 8 bits tandis que TIMER1 est un temporisateur 16 bits.

  • Dans le monde Arduino, TIMER0 est utilisé pour les fonctions de temporisation comme delay () et millis (). Beaucoup d'autres codes que j'ai vus l'utilisent de la même manière car la résolution 8 bits est normalement suffisante.

  • TIMER2 est également un 8 bits, je ne peux pas penser à une raison pour éviter spécifiquement cela si seulement 8 bits sont nécessaires. Il est cependant utilisé par la fonction Arduino tone ().

Je suppose donc que TIMER1 reste un choix assez générique et est le seul choix sur les AVR plus petits lorsqu'un minuteur 16 bits est requis. Les appareils AVR Mega contiennent également TIMER3 - TIMER5 qui sont tous en 16 bits.

PeterJ
la source