Gibt es einen Grund, Timer0 nicht auf AVR zu verwenden?

10

Nur eine grundlegende Frage ... Für arduino / avr / ATMega328 finde ich viele Beispiele mit Timer1 (es gibt sogar eine ganze Bibliothek dafür), aber selten solche, die Timer0 (oder Timer2) verwenden.

Jetzt weiß ich, dass die Verwendung eines dieser Timer zur Steuerung einer ISR-Methode die Verwendung von PWM an den zugehörigen Pins deaktiviert. Gibt es jedoch einen bestimmten Grund, warum sich die Leute von Timer0 fernzuhalten scheinen? Wird es intern für etwas anderes verwendet, mit dem man sich nicht anlegen sollte?

Meine aktuelle Anwendung ist mit Timer1 in Ordnung. Ich bin nur neugierig, ob mir etwas an diesen anderen oft vernachlässigten Timern fehlt.

Adam Haile
quelle

Antworten:

16

Wenn es sich um einen bloßen AVR-Mikrocontroller handelt , gibt es keine Einschränkung für die Verwendung eines der Timer .

  • Für die Arduino, Timer0 wird am besten vermieden werden, da das millis(), delay()und alle internen Zeitnahme in den Arduino - Bibliotheken verwenden Sie diesen Timer. Das Ändern der Zeitkonstante wirkt sich auf diese Vorgänge aus.
  • Timer1 ist , wie in der Frage angegeben, die beliebteste erste Wahl für alle Timer- / Zähleraufgaben , und zwar über Bibliotheken wie die TimerOne-Bibliothek sowie über direkte Manipulationen. Es ist ein 16-Bit-Timer, also mit einer feineren Auflösung als die 8-Bit-Timer.
  • Timer2 wird von der Tone () - Bibliothek verwendet, aber da dies nicht so allgegenwärtig ist, gibt es auch die msTimer2-Bibliothek , die viele sehr nützlich finden, ähnlich wie TimerOne. Die direkte Manipulation von Timer2 ist ebenfalls in Ordnung.
  • Die zusätzlichen Timer auf Mega, Timer3 , Timer4 und Timer5 , jeweils ein 16-Bit-Timer, können ebenfalls verwendet werden, wenn Sie ein Arduino Mega- Board verwenden.
Anindo Ghosh
quelle
9

Abgesehen von der Deaktivierung der zugehörigen PWM kann ich mir folgende Gründe vorstellen:

  • TIMER0 ist ein 8-Bit-Timer, während TIMER1 ein 16-Bit-Timer ist.

  • In der Arduino-Welt wird TIMER0 für die Timer-Funktionen wie delay () und millis () verwendet. Viele andere Codes, die ich gesehen habe, verwenden sie auf die gleiche Weise, da die 8-Bit-Auflösung normalerweise ausreichend ist.

  • TIMER2 ist auch ein 8-Bit, ich kann mir keinen Grund vorstellen, dies ausdrücklich zu vermeiden, wenn nur 8-Bit benötigt wird. Es wird jedoch von der Arduino Tone () -Funktion verwendet.

Ich denke also, dass TIMER1 eine ziemlich generische Wahl bleibt und die einzige Wahl bei den kleineren AVRs ist, wenn ein 16-Bit-Timer benötigt wird. AVR Mega-Geräte enthalten auch TIMER3 - TIMER5, die alle 16-Bit sind.

PeterJ
quelle