Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

Шаг 5. Переходим непосредственно к разработке устройств и программ 229 ров/счетчиков может работать как с использованием прерываний, так и без прерываний. Далее мы рассмотрим оба эти варианта. И начнем мы с более простого случая. Итак, заново сформулируем нашу задачу: «Доработать программу «Бегущие огни», изменив процедуру форми ­ рования задержки. Новая процедура должна использовать один из вну ­ тренних таймеров/счетчиков и не использовать прерывания.» Схема Так как мы разрабатываем не самостоятельное устройство, а лишь усо ­ вершенствуем управляющую программу, то схема устройства (рис. 5.11) не изменяется. Алгоритм Как известно, в микроконтроллере ATtiny2313 имеются два встро ­ енных таймера-счетчика. Поэтому сначала нам нужно выбрать, какой из них мы будем использовать. Исходить будем из заданного времени задержки 200 мс. Как известно, для формирования временных интерва ­ лов таймер/счетчик просто подсчитывает тактовые импульсы от систем ­ ного генератора. Частота сигнала этого генератора в нашем случае равна 4 МГц. А период импульсов 1/4=0,25 мкс. Для того, чтобы получить на выходе 200 мс, необходимо иметь коэффициент деления, равный 200-10 ’ 3 /0,25-10 ’ 6 =800-10 3 (восемьсот тысяч раз). Микросхема ATtiny2313 содержит два таймера. Один восьмиразряд ­ ный и один шестнадцати. Восьмиразрядный таймер имеет максимальный коэффициент пересчета 2 8 =256, а шестнадцатиразрядный — 2 16 =6553б. То есть даже шестнадцатиразрядного таймера нам не хватит для формиро ­ вания требуемой задержки. Придется воспользоваться предварительным делителем. Этот делитель производит предварительное деление тактового сигнала перед тем, как тот поступит на вход таймера/счетчика. Программным путем можно выбрать один из четырех фиксирован ­ ных коэффициентов деления (см. приложение). Выберем самый боль ­ шой возможный коэффициент деления предделителя (1024). Тогда на его выходе мы получим сигнал с частотой 4- 10 6 / 1024 = 3906 Гц. Период такого сигнала будет равен 1/3906 ~ 0,256- 10' 3 с или 0,256 мс. Именно этот сиг ­ нал поступает на вход нашего таймера, который обеспечивает оконча ­ тельное деление. Посчитаем коэффициент деления, который наш таймер должен нам обеспечить: 200/0,256 = 780. Такой коэффициент пересчета нам может обеспечить только таймер Т1. Итак, мы определились как с выбором таймера, так и с его настрой ­ ками. Теперь можно приступать к созданию новой подпрограммы

RkJQdWJsaXNoZXIy MTExODQxMg==