Есть ли причина не использовать Timer0 на AVR?

Просто основной вопрос... Для arduino/avr/ATMega328 я нашел много примеров, использующих Timer1 (для него даже есть целая библиотека), но редко такие, которые используют Timer0 (или Timer2).

Теперь я знаю, что использование любого из этих таймеров для управления методом ISR отключит использование ШИМ на связанных с ним выводах, но есть ли конкретная причина, по которой люди держатся подальше от Timer0? Используется ли он для чего-то другого внутри, с чем не следует связываться?

Мое текущее приложение отлично работает с Timer1, мне просто любопытно, не упускаю ли я что-то из этих других таймеров, которыми часто пренебрегают.

Ответы (2)

Если вопрос про голый микроконтроллер AVR, то нет, ограничений на использование любого из таймеров нет .

  • Для Arduino лучше избегать Timer0millis() , так как этот таймер используется delay()во всех внутренних хронометриях в библиотеках Arduino. Изменение постоянной времени повлияет на эти операции.
  • Timer1 , как говорится в вопросе, является популярным первым выбором для любых задач таймера/счетчика, с помощью библиотек, таких как библиотека TimerOne , а также прямого манипулирования. Это 16-битный таймер, поэтому с более высоким разрешением, чем 8-битные таймеры.
  • Timer2 используется библиотекой tone(), но поскольку она используется не так повсеместно, существует также библиотека msTimer2 , которую многие находят очень полезной, как и TimerOne. Прямые манипуляции с Timer2 тоже допустимы.
  • Дополнительные таймеры на Mega, Timer3 , Timer4 и Timer5 , каждый из которых является 16-битным таймером, также доступны для использования, если вы используете плату Arduino Mega .

Помимо отключения связанного ШИМ, я могу придумать другие причины:

  • TIMER0 — это 8-битный таймер, а TIMER1 — 16-битный таймер.

  • В мире Arduino TIMER0 используется для функций таймера, таких как delay() и millis(). Много другого кода, который я видел, использует его таким же образом, потому что 8-битного разрешения обычно достаточно.

  • TIMER2 также является 8-битным, я не могу придумать причину, чтобы специально избегать этого, если требуется только 8-битный. Однако он используется функцией тона() Arduino.

Таким образом, я предполагаю, что TIMER1 остается довольно общим выбором и единственным выбором для небольших AVR, когда требуется 16-битный таймер. Устройства AVR Mega также содержат 16-битные таймеры TIMER3 - TIMER5.