Любой микроконтроллер серии AVR содержит несколько встроенных таймеров, которые по назначению можно разделить на два вида:
- Таймеры общего назначения
- Сторожевой таймер
Зачем нужен сторожевой таймер?
По разным причинам микроконтроллер может зависнуть. Например, это может случиться из-за ошибки в программе или из-за внешней помехи. Однако, в отличие от компьютеров, микроконтроллеры, как правило, работают без участия человека, часто находятся в удалённых труднодоступных местах и т.п. То есть не всегда возможно быстро перезагрузить микроконтроллер в случае зависания.
Можно, конечно, поизвращаться и принять меры для удалённой перезагрузки. Однако разработчики микроконтроллеров предусмотрели другой способ - сторожевой таймер, который автоматически перезагружает микроконтроллер в случае его зависания.
Таймеры общего назначения используются для формирования различных интервалов времени (например, задержек) и прямоугольных импульсов заданной частоты. Кроме того, они могут работать в режиме счетчика и подсчитывать тактовые импульсы заданной частоты, измеряя таким образом
длительность внешних сигналов, а также при необходимости подсчитывать количество любых внешних импульсов. Поэтому такие таймеры называют “таймеры/счетчики”.
В микроконтроллерах AVR применяются как восьмиразрядные, так и шестнадцатиразрядные таймеры/счетчики. Их количество для разных микроконтроллеров изменяется от одного до четырех. Точное количество
таймеров/счетчиков для каждой микросхемы серии AVR можно узнать
из документации. Все таймеры обозначаются числами от 0 до 3.
Каждый восьмиразрядный таймер представляет собой один восьмиразрядный регистр, который для микроконтроллера является регистром ввода-вывода. Этот регистр хранит текущее значение таймера и называется счетным регистром.
Шестнадцатиразрядные таймеры имеют шестнадцатиразрядный счетный регистр. Каждый счетный регистр имеет свое имя.
Счетный регистр восьмиразрядного таймера именуется TCNTx, где “x” - это номер таймера. Для таймера T0 регистр называется TCNT0. Для таймера T1 — TCNT1 и т.п.
Шестнадцатиразрядные регистры именуются подобным образом. Отличие от восьмиразрядных в том, что каждый шестнадцатиразрядный счетный регистр для микроконтроллера представляет собой два регистра ввода-вывода. Один предназначен для хранения старших битов числа, а второй - для хранения младших битов. К имени регистра старших разрядов добавляется буква H, а для регистра младших разрядов добавляется буква L. Таким образом, счетный регистр таймера T1 - это два регистра ввода-вывода: TCNT1H и TCNT1L.
В документации и англоязычной литературе можно встретить наименования типа Timer/Counter0 и т.п. В русскоязычной литературе таймеры обычно именуют сокращенно T0, T1, T2, T3. Таймеры T0 и T2 в большинстве микроконтроллеров восьмиразрядные. Таймеры T1 и T3 обычно шестнадцатиразрядные. Таймер T0 имеется в любой микросхеме AVR. Остальные добавляются по мере усложнения модели.
Микроконтроллер может записать в любой счетный регистр любое число в любой момент времени, а также в любой момент прочитать содержимое любого счетного регистра. Когда таймер включается в режим счета, то на его вход начинают поступать счетные импульсы.
После прихода каждого такого импульса содержимое счетного регистра увеличивается на единицу. Счетными импульсами могут служить как специальные тактовые импульсы, вырабатываемые внутри самого микроконтроллера, так и внешние импульсы, поступающие на специальные входы микросхемы. При переполнении счетного регистра его содержимое обнуляется, и счет начинается заново.
Любой таймер жестко завязан с системой прерываний. Вызвать прерывание может целый ряд событий, связанных с таймером. Например, существует прерывание по переполнению таймера, по срабатыванию специальной схемы совпадения. Отдельные прерывания может вызывать сторожевой таймер.
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить…