Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
230 Часть ///. Практическое программирование микроконтроллеров АVR При необходимости точной подстройки частоты по такому способу время, уходя щее на вызов прерываний и выполнение команд, можно не учитывать, т. к. таймер считает независимо от работы ядра, и частота прерываний будет точно равна за данной. Но вот сама эта заданная частота отличается от точного значения 1 кГц на величину нестабильности «кварца», которая может достигать заметных величин. Для миниатюрного часового «кварца» 32768 Гц типа РК206 разброс номинальной частоты составляет порядка 2· 1 0- 5 (плюс еще не менее 4· 1 0- 5 ухода в интервале тем ператур от --40 до +70 °С), для обычного в корпусе HC-49U он несколько меньше, и может составлять около 1 5 · 1 о- 6 • Следовательно, номинальная частота «кварца» 4 МГц может оказаться в диапазоне от 3 999 940 до 4 ООО 060 Гц. Это усредненные величины, а реально ошибка может оказаться еще больше, т. к. на корпусе тип «кварца>> чаще всего указывается не полностью, и определить допуск для куплен ного экземпляра, особенно импортного, нередко крайне затруднительно. Самые «плохие» кварцевые резонаторы дают разброс до 5 · 1 0- 4 (0,05%, т. е. 4000 кГц ± 2 кГц) . Такой разброс может показаться небольшим, но, между прочим, его величина в 2· 1 0- 5 дает ошибку хода часов около 1 с в сутки или даже несколько больше (на верняка вам надоело корректировать дешевые часы, уходящие на минуту-другую каждые два-три месяца) . Поэтому при необходимости частоту срабатывания тайме ра приходится подстраивать индивидуально. Как это можно сделать, мы поговорим позже, а сейчас остановимся на более «прогрессивном» способе формирования точных временных интервалов и частот с помощью 1 6-разрядного таймера. Заметим, что уже рассмотренный способ получения частоты - универсальный, и годится для всех таймеров всех моделей контроллеров, причем частоту можно сформировать на любом выводе МК. На практике же куда удобнее использовать специальные выводы ОСпх (где п - номер таймера, а х может отсутствовать или принимать значение А, В или, в некоторых случаях, С - в зависимости от того, какой регистр сравнения задействован), которые в МК AVR семейств Tiny и Mega имеют все 1 6-разрядные таймеры (Timer l ), а в большинстве моделей и 8-разрядные (ТimerO и Timer2) . Выводы ОСпх аппаратно привязаны к прерыванию сравнения с заданным числом, потому для их активации достаточно один раз установить нуж ный вывод порта на выход, установить соответствующее прерывание по сравнению и завести таймер. Режим этот организован так, что вывод переключается один раз за установленный период («туда» и в следующем периоде «обратно»), потому на выходе мы имеем строгий меандр, частота которого равна половине от частоты прерываний. Посмотрим, как с использованием этого режима можно построить часы. Отс чет времени Способ отсчета времени мы рассмотрим н а примере формирования частоты в 1 Гц для отсчета секунд - это базовая функция для построения часов на основе МК. Идея состоит в том, чтобы использовать режим сравнения (compare) значения счет чика с наперед заданным числом . Причем 1 6-разрядные таймеры имеют таких режимов по два или иногда по три. Из двух 8-разрядных таймеров в АTmega8
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==