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





Заметки на полях
Отметим, что собственно регистрация перепада уровней внешнего сигнала производится автономной асинхронной схемой. Потому из изложенного в руководстве не следует, что тактовая частота должна быть выше измеряемой именно в два раза — достаточно простого превышения. Однако окончательное суждение по этому вопросу я оставляю на усмотрение читателей — изложение в руководстве не очень толковое (не до конца прояснен вопрос с задержками регистрации фронта сигнала), и, конечно, лучше "на всякий случай" следовать фирменным рекомендациям.
Результат измерения частоты до 4 МГц с точностью до герца в принципе займет не менее трех 8-битовых регистров. Но реальное их число, которое требуется задействовать, будет зависеть от диапазона изменения измеряемой частоты. В самом деле — предположим, что частота может меняться не более чем на 256 Гц относительно номинальной величины 3 МГц. Тогда старшие два регистра всегда будут показывать одно и то же число (и точно известно, какое), а все изменения будут регистрироваться только в самом младшем регистре самого таймера. Если же частота 3 МГц не меняется более чем на 65 кГц, то можно оставить только два регистра (тоже собственные счетчики таймера). Важно только, чтобы в процессе изменений частота не переваливала за границу, когда старший регистр тоже должен меняться (что в данном случае произойдет, например, если средняя частота колеблется около значения 221 = 2 097 152 Гц), иначе возникнет неоднозначность (которую, впрочем, также в некоторых случаях можно учесть). Иногда (например, при измерении частоты термочувствительных "кварцев") эти соображения позволяют экономить регистры. Здесь мы будем рассматривать общий случай, и "тупо" предположим, что частота в пределах емкости трех регистров (т. е. с большим запасом — до 16,7 МГц) может быть любой.

Для измерения нам потребуется ввести прерывание Timerl по переполнению, в котором третий регистр (назовем его count3) будет всякий раз увеличиваться на единицу. Входной сигнал подадим на вход Т1 (вывод 9 для 2313), с которого внешние импульсы поступают прямо на счетчик таймера, если ему задать соответствующий режим.
Теперь разберемся с формированием измерительного интервала. При тактовой частоте 8 МГц и коэффициенте предделителя для TimerO, равном 1/256, прерывания переполнения будут происходить с частотой 122,07 Гц. Нам же требуется 1 с (1 Гц), потому мы введем счетчик (countsek) и будем его с каждым прерыванием увеличивать, пока он не отсчитает ровно 122 таких прерывания. После этого можно фиксировать число импульсов, сосчитанное к тому времени в регистрах Timer 1. Но если кварцевый резонатор идеально точный, то секунда получится чуть меньше настоящей (неучтенные 0,07 Гц дадут ошибку 576 мкс в сторону уменьшения). Для компенсации этой недостачи перед чтением значений мы введем задержку, с помощью которой наш частотомер можно еще дополнительно калибровать (т. е. учесть исходную неточность кварца). В начале и в конце интервала будем переключать разряд 6 порта D (вывод 11), чтобы контролировать измерительный интервал в процессе калибровки. На рис. 8.1 представлен МК AT90S2313 с обозначением выводов для нашей цели.

Листинг 8.7 содержит код программы частотомера (определение регистров я опускаю, в данном случае их потребуется всего три — temp, count3 и countsek). В секции прерываний введем прерывания TimerO и Timerl по переполнению (по меткам тшо и TIMI). Инициализация таймеров в секции начальной загрузки сводится к разрешению прерываний и запуску, но обязательно здесь же нужно очистить счетные регистры таймеров и все дополнительные регистры (к сожалению, очистка предделителя таймеров в серии Classic не предусмотрена) и только потом запускать TimerO.

Обратите внимание, что в начале работы (в секции Reset) нужно запустить оба таймера, иначе первое измерение будет ошибочным (даст одни нули), причем сделать это нужно после очистки регистров. Запись данных в память я не расшифровывал, потому что это может быть и запись в SRAM с последующим выводом на индикацию, и запись во внешнюю энергонезависимую память для последующего чтения из компьютера, как описано в главе 12, или одновременно и то и другое. Простейший частотомер можно сделать, если организовать автоматическую передачу данных через UART в компьютер, который и занимается отображением и записью информации.

Из-за инструкции sbiw, которая занимает два такта (а не один, как инструкция dec, встречавшаяся у нас в процедуре Delay ранее), здесь один цикл задержки равен четырем тактам, или 0,5 мкс при тактовой частоте 8 МГц. Меняя число циклов задержки, можно откорректировать длительность секундного интервала-относительно номинального значения от 576 мкс в сторону уменьшения (задержка равна нулю) до целых 131 мс в сторону увеличения. Этого достаточно для подстройки стандартного кварца, в крайнем случае, можно отобрать экземпляр из нескольких. Калибровка осуществляется измерением длительности импульса на контрольном выводе 11 МК с помощью точного частотомера (лучше использовать профессиональный лабораторный прибор, а не любительский, который имеет недостаточную точность).




     
 

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