Таймеры‑счетчики
В большинстве МК AVR присутствуют два или три таймера‑счетчика, один из которых 16‑разрядный, а остальные – 8‑разрядные (в старших моделях Mega общее число счетчиков может быть до 6). Все счетчики имеют возможность предварительной загрузки значений и могут работать непосредственно от тактовой частоты (СК) процессора или от нее же, поделенной на 8, 64, 256 или 1024 (в отдельных случаях еще на 16 и 32), а также от внешнего сигнала. В целом устройство таймеров в МК, как мы говорили, похоже на счетчики 561ИЕ11/14 (см. главу 15 ), только функциональность их значительно расширена.
В архитектуре AVR 8‑разрядным счетчикам‑таймерам присвоены номера 0 и 2, а 16‑разрядным – 1, 3 и далее. Некоторые 8‑разрядные счетчики (обычно Timer 2 , если их два) могут работать в асинхронном режиме от отдельного тактового генератора, причем продолжать функционировать даже в случае «спящего» состояния всей остальной части МК, что позволяет использовать их в качестве часов реального времени.
При использовании счетчиков‑таймеров как обычных счетчиков внешних импульсов (причем возможна реакция как по спаду, так и по фронту импульса) частота подсчитываемых импульсов не должна превышать половины частоты тактового генератора МК (причем при несимметричном внешнем меандре инструкция рекомендует еще меньшее значение предельной частоты – 0,4 от тактовой). Это обусловлено тем, что при счете внешних импульсов их фронты обнаруживаются синхронно (в моменты положительного перепада тактового сигнала). Кроме того, стоит учитывать, что задержка обновления содержимого счетчика после прихода внешнего импульса может составлять до 2,5 периода тактовой частоты.
Это довольно сильные ограничения, поэтому, например, использовать МК в качестве универсального частотомера не очень удобно – быстродействующие схемы лучше проектировать на соответствующей комбинационной логике или на ПЛИС (программируемых логических интегральных схемах).
При наступлении переполнения счетчика возникает событие, которое может вызывать соответствующее прерывание. 8‑разрядный счетчик Timer 0 в ряде случаев этой функцией и ограничивается. Счетчик Timer 2 , если он имеется, может также вызывать прерывание по совпадению подсчитанного значения с некоторой заранее заданной величиной. 16‑разрядные счетчики – более «продвинутые» и могут вызывать прерывания по совпадению с двумя независимо заданными числами А и В . При этом счетчики могут обнуляться или продолжать счет, а на специальных выводах при этом могут генерироваться импульсы (аппаратно, без участия программы).
Кроме того, 16‑разрядные счетчики могут осуществлять «захват» (capture) внешних одиночных импульсов на специальном выводе. При этом может вызываться прерывание, а содержимое счетчика помещается в некий регистр. Сам счетчик при этом может обнуляться и начинать счет заново или просто продолжать счет. Такой режим удобно использовать для измерения периода внешнего сигнала или для подсчета неких нерегулярных событий (вроде прохождения частиц в счетчике Гейгера). Немаловажно, что источником таких событий может быть и встроенный аналоговый компаратор, который тогда используется как формирователь импульсов.
Все счетчики‑таймеры могут работать в так называемых режимах PWM , т. е. в качестве 8‑, 9‑, 10‑ или 16‑битных широтно‑импульсных модуляторов (ШИМ), причем независимо друг от друга, что позволяет реализовать многоканальный ШИМ.
В технической документации режимам PWM, в силу их сложности, многовариантности и громоздкости, посвящено много страниц. Простейший вариант использования этих режимов – воспроизведение звука. Их также можно задействовать для регулирования мощности или тока (например, при зарядке аккумуляторов), управления двигателями, выпрямления сигнала, при цифроаналоговом преобразовании.
В этом издании я не буду рассматривать такие применения МК AVR, потому что они значительно упростились с появлением платформы Arduino , и им посвящено множество доступных интернет‑ресурсов.
Кроме таймеров‑счетчиков, во всех без исключения AVR‑контроллерах есть сторожевой (Watchdog ) таймер. Он предназначен в основном для вывода МК из режима энергосбережения через определенный интервал времени, но может использоваться и для аварийного перезапуска МК. Например, если работа программы зависит от прихода внешних сигналов, то при их потере (например, из‑за обрыва на линии) МК может «повиснуть», а Watchdog ‑таймер выведет его из этого состояния.
Дата добавления: 2016-05-11; просмотров: 1237;