Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Последовательность действий следующая: внутри возникшего прерывания мы останавливаем счет таймера, затем отсчитываем нужную задержку, и опять запускаем таймер. Инициализация таймера точно такая же, как раньше, только предварительно в регистр сравнения нужно записать число 62 437 (или даже меньшее) вместо 62 500. Соответствующий фрагмент прерывания по сравнению приведен в листинге 8.6 (предположим, что необходимая задержка составляет 1 мс, что составляет 1000 циклов по четыре такта частоты 4 МГц).

Листинг 8.6
TIM1COMPA: /прерывание по сравнению 1 сек clr temp /останавливаем Timerl out TCCRlB,temp
ldi RazrO,low(1000) /младший бит задержки
ldi Razrl,high(1000) /старший бит задержки Delay:
subi RazrO,1
suci Razrl,0 brcc Delay
ldi temp,ObOOOOlOll /включить Timerl 1/64
out TCCRlB,temp /запускаем таймер заново /и переходим к счету времени
ldi ZH,0x01 /старший адреса SRAM для сохранения в памяти

<и т. д. >
reti

Разумеется, для формирования задержки можно использовать и другой таймер, если он свободен, но алгоритм получается гораздо более громоздкий. Пример такой организации процесса "по полной программе" с заданием коэффициента задержки через внешний компьютер см. в моей книге [8].

Перед тем как мы перейдем к вопросу управления индикаторами, в чем таймеры также играют ключевую роль, рассмотрим еще одно распространенное применение таймеров для измерения частоты и периода внешних сигналов.

Частотомер и периодомер
Частота может измеряться, как известно, двояко: либо подсчетом числа импульсов измеряемой частоты за определенный промежуток времени, либо, наоборот, подсчетом числа импульсов известной частоты за период (или несколько периодов) измеряемого сигнала. В первом случае мы получаем именно значение частоты (если промежуток времени равен 1 с, то сразу в герцах), а во втором — обратную величину, значение периода. Первый способ удобнее для измерения высоких частот, второй — для низких. С помощью контроллеров МК частоту можно измерять несколькими путями. Сначала займемся методом прямого измерения (по способу частотомера) достаточно высокой частоты, причем с подстройкой измерительного интервала для получения более точного результата прямо в физических величинах — герцах.

Частотомер
Предположим, измеряемая частота находится в диапазоне около 4 МГц, и нам желательно измерить ее с разрешением до 1 Гц. Прежде всего, напомним, что тактовая частота контроллера должна превышать измеряемую не менее чем в два раза — таково требование руководства. Обнаружение изменения внешнего сигнала производится по фронту тактового, и если период измеряемого сигнала слишком короткий, то в регистрации могут быть пропуски. Так.что нам следует ориентироваться на МК с тактовой частотой не менее 8 МГц. Выберем опять АТ90С2313 Classic (при необходимости легко модифицировать алгоритм для любого AVR) с частотой 8 МГц. Для измерения мы задействуем два таймера— один 16-разрядный Timerl для отсчета собственно внешней частоты, и второй 8-разрядный TimerO для отсчета измерительного интервала.



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru