Czy jest jakiś powód, aby nie używać Timera0 w AVR?

10

Tylko podstawowe pytanie ... Dla arduino / avr / ATMega328 znajduję wiele przykładów przy użyciu Timera 1 (jest nawet cała biblioteka), ale rzadko takich, które wykorzystują Timer 0 (lub Timer 2).

Teraz wiem, że użycie dowolnego z tych timerów do sterowania metodą ISR spowoduje wyłączenie użycia PWM na powiązanych pinach, ale czy istnieje konkretny powód, dla którego ludzie zdają się trzymać z dala od Timera0? Czy jest używany do czegoś innego wewnętrznie, z czym nie należy się bawić?

Moja bieżąca aplikacja działa dobrze przy użyciu Timera 1, jestem ciekawa, czy coś pomijam w tych innych, często zaniedbanych zegarach.

Adam Haile
źródło

Odpowiedzi:

16

Jeśli pytanie dotyczy samego mikrokontrolera AVR, to nie, nie ma żadnych ograniczeń co do korzystania z dowolnego z timerów .

  • Dla Arduino, Timer0 najlepiej unikać, ponieważ millis(), delay()i wszystko wewnętrzny czasomierz w Arduino bibliotek użyć tego czasomierza. Zmiana stałej czasowej wpłynie na te operacje.
  • Timer 1 , jak stwierdza pytanie, jest popularnym pierwszym wyborem dla dowolnych zadań licznika / licznika, za pośrednictwem bibliotek takich jak biblioteka TimerOne , a także bezpośredniej manipulacji. Jest to 16-bitowy zegar, a więc z lepszą rozdzielczością niż timery 8-bitowe.
  • Timer2 jest używany przez bibliotekę tone (), ale ponieważ nie jest to tak powszechnie stosowane, istnieje również biblioteka msTimer2, która dla wielu jest bardzo przydatna, podobnie jak TimerOne. Bezpośrednia manipulacja Timerem 2 też jest w porządku.
  • Dodatkowe timery na Mega, Timer3 , Timer4 i Timer5 , każdy 16-bitowy, są również dostępne do użycia, jeśli używasz płyty Arduino Mega .
Anindo Ghosh
źródło
9

Oprócz wyłączenia powiązanego PWM, inne powody, o których mogę myśleć, to:

  • TIMER0 jest 8-bitowym zegarem, podczas gdy TIMER1 jest 16-bitowym zegarem.

  • W świecie Arduino TIMER0 jest używany do funkcji timera, takich jak delay () i millis (). Wiele innych kodów, które widziałem, używa go w ten sam sposób, ponieważ 8-bitowa rozdzielczość jest zwykle wystarczająca.

  • TIMER2 jest także 8-bitowy, nie mogę wymyślić żadnego powodu, aby tego uniknąć, jeśli wymagany jest tylko 8-bitowy. Jest jednak używany przez funkcję tonu Arduino ().

Sądzę więc, że pozostawia TIMER1 jako dość ogólny wybór i jest jedynym wyborem w mniejszych AVR, gdy wymagany jest 16-bitowy zegar. Urządzenia AVR Mega zawierają również TIMER3 - TIMER5, wszystkie w wersji 16-bitowej.

PeterJ
źródło