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

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.

Nun, ich weiß, dass die Verwendung eines dieser Timer zur Steuerung einer ISR-Methode die Verwendung von PWM an den zugehörigen Pins deaktiviert, aber gibt es 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 ich etwas an diesen anderen oft vernachlässigten Timern vermisse.

Antworten (2)

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

  • Für den Arduino wird Timer0 am besten vermieden, da der millis(), delay()und alle internen Zeitmessungen in den Arduino-Bibliotheken diesen Timer verwenden. Eine Änderung der Zeitkonstante wirkt sich auf diese Vorgänge aus.
  • Timer1 ist, wie die Frage besagt, die beliebte erste Wahl für alle Timer-/Zähleraufgaben, sowohl durch Bibliotheken wie die TimerOne-Bibliothek als auch durch direkte Manipulation. Es ist ein 16-Bit-Timer, also mit feinerer 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 auch in Ordnung.
  • Die zusätzlichen Timer auf dem Mega, Timer3 , Timer4 und Timer5 , jeweils ein 16-Bit-Timer, stehen ebenfalls zur Verfügung, wenn Sie ein Arduino Mega - Board verwenden.

Abgesehen von der Deaktivierung des zugehörigen PWM fallen mir folgende Gründe ein:

  • 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 es auf die gleiche Weise, da eine 8-Bit-Auflösung normalerweise ausreichend ist.

  • TIMER2 ist auch ein 8-Bit, ich kann mir keinen Grund vorstellen, das ausdrücklich zu vermeiden, wenn nur 8-Bit erforderlich sind. Es wird jedoch von der Arduino-Funktion tone() verwendet.

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