Любая причина не использовать Timer0 на AVR?


10

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

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

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

Ответы:


16

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

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

9

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.