Просто основной вопрос... Для arduino/avr/ATMega328 я нашел много примеров, использующих Timer1 (для него даже есть целая библиотека), но редко такие, которые используют Timer0 (или Timer2).
Теперь я знаю, что использование любого из этих таймеров для управления методом ISR отключит использование ШИМ на связанных с ним выводах, но есть ли конкретная причина, по которой люди держатся подальше от Timer0? Используется ли он для чего-то другого внутри, с чем не следует связываться?
Мое текущее приложение отлично работает с Timer1, мне просто любопытно, не упускаю ли я что-то из этих других таймеров, которыми часто пренебрегают.
Если вопрос про голый микроконтроллер AVR, то нет, ограничений на использование любого из таймеров нет .
millis()
, так как этот таймер используется delay()
во всех внутренних хронометриях в библиотеках Arduino. Изменение постоянной времени повлияет на эти операции.Помимо отключения связанного ШИМ, я могу придумать другие причины:
TIMER0 — это 8-битный таймер, а TIMER1 — 16-битный таймер.
В мире Arduino TIMER0 используется для функций таймера, таких как delay() и millis(). Много другого кода, который я видел, использует его таким же образом, потому что 8-битного разрешения обычно достаточно.
TIMER2 также является 8-битным, я не могу придумать причину, чтобы специально избегать этого, если требуется только 8-битный. Однако он используется функцией тона() Arduino.
Таким образом, я предполагаю, что TIMER1 остается довольно общим выбором и единственным выбором для небольших AVR, когда требуется 16-битный таймер. Устройства AVR Mega также содержат 16-битные таймеры TIMER3 - TIMER5.