Qualche motivo per non usare Timer0 su AVR?


10

Solo una domanda di base ... Per arduino / avr / ATMega328 trovo molti esempi usando Timer1 (c'è persino un'intera libreria per esso) ma raramente quelli che usano Timer0 (o Timer2).

Ora, so che l'utilizzo di uno qualsiasi di questi timer per controllare un metodo ISR disabiliterà l'uso di PWM sui pin associati, ma esiste un motivo specifico per cui le persone sembrano stare alla larga da Timer0? È usato per qualcos'altro internamente che non si dovrebbe confondere?

La mia attuale applicazione va bene usando Timer1, sono solo curioso di sapere se mi manca qualcosa su questi altri timer spesso trascurati.

Risposte:


16

Se la domanda riguarda un microcontrollore AVR nudo, allora no, non vi sono vincoli all'utilizzo di nessuno dei timer .

  • Per Arduino, è meglio evitare Timer0 , poiché il millis(), delay()e tutto il cronometraggio interno nelle librerie Arduino utilizzano questo timer. La modifica della costante di tempo influirà su queste operazioni.
  • Timer1 , come afferma la domanda, è la prima scelta popolare per qualsiasi attività timer / contatore, attraverso librerie come la libreria TimerOne e la manipolazione diretta. È un timer a 16 bit, quindi con una risoluzione più fine rispetto ai timer a 8 bit.
  • Timer2 è utilizzato dalla libreria tone (), ma poiché non è così diffuso, esiste anche la libreria msTimer2 che molti trovano molto utile, proprio come TimerOne. Anche la manipolazione diretta di Timer2 va bene.
  • I timer aggiuntivi su Mega, Timer3 , Timer4 e Timer5 , ciascuno un timer a 16 bit, sono anche disponibili per l'uso, se si utilizza una scheda Arduino Mega .

9

Oltre a disabilitare il PWM associato, altri motivi che mi vengono in mente sono:

  • TIMER0 è un timer a 8 bit mentre TIMER1 è un timer a 16 bit.

  • Nel mondo Arduino TIMER0 viene utilizzato per le funzioni del timer come delay () e millis (). Molti altri codici che ho visto lo usano allo stesso modo perché la risoluzione a 8 bit è normalmente ampia.

  • TIMER2 è anche un 8 bit, non riesco a pensare a un motivo per evitarlo specificamente se sono richiesti solo 8 bit. È tuttavia utilizzato dalla funzione tone () di Arduino.

Quindi immagino che lasci TIMER1 come una scelta abbastanza generica ed è l'unica scelta sugli AVR più piccoli quando è richiesto un timer a 16 bit. I dispositivi AVR Mega contengono anche TIMER3 - TIMER5 che sono tutti a 16 bit.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.