Ошибка базы данных WordPress: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

0

Частотомер на микроконтроллере PIC16F873

Автор: Н.Заец, г.Азов Ростовской обл.

 Предлагаемый частотомер собран на микроконтроллере PIC16F873 и семиэлементных светодиодных индикаторах  с общим катодом. Его расширяющая способность  состовляет

0.1  Гц  что может быть полезным при проведении точных измерений..

 

Основные технические характеристики:

Диапазон измеряемых частот  ………………0.1Гц….40 МГц

Время измерения частот    …………………….…….1с или 10с

Чувствительность           …………………………………………0.1в

Напряжение питания     ……………………………….…… 4.5-5в

Потребляемый ток в режиме ожидания ……………… 10ма

в режиме измерения…………30ма

схема

 

Схема частотомера показанная на рисунке выше, На входе устройства установлен компаратор DA1, который включен по типовой схеме с инвертирующим входом. Порог срабатывания компаратора можно изменять подборкой резистора R4  — чем больше его сопротивление, тем выше порог. Робота компаратора управляется сигналом на входе LATCH (вывод 5) DA1, который поступает с линии порта RA3 (вывод 5 DD1), и разрешена при низком логическом уровне на этом входе.

Порт в микроконтроллере DD1 задействован для подачи напряжения на элементы a-h индикаторов HG1. HG2.

Входной сигнал преобразуется компаратором  DA1 в прямоугольные импульсы с уровнями ТЛЛ, которые поступают на вход микроконтроллера для их дальнейшего счета. Восьмиразрядные регистры предделителя, таймера TMRO и двух счетчиков прерывания по переполнению TMR0 подсчитывают эти импульсы. Измерительный интервал задает таймер TMR1.

Информация в регистрах таймера TMR0 и счетчиков доступна для чтения, а вот содержимое высокочастотного (до 90 МГц) регистрапредделителя не доступно. Поэтому для извлечения  информации, хранящейся в нем, применен ставший ставший уже классическим способом досчета импульсов  до переполнения предделителя. После остановки счета значения TMR0 сохраняется в цыфровом компараторе. Число поданных на вход  предделителя импульсов подсчитывается, и после каждого импульса сравниваются с текущее и сохраненное значения TMR0. При изменении текущего значения TMR0 подача импульсов на предделителе прекращается. Накопленное в младшем регистре число преобразованное  в дополнительный код, и будет тем числом, которое было в предделителе Двоичный код на выходах четырех восьмиразрядных регистров преобразуется в двоично-десятичный, а  затем в код для управления семиэлементными индикаторами.

После подачи питающего напряжения осуществляется инициализация регистров микроконтроллера. Частота переключения разрядов при динамической индикации должна быть такой чтобы не было видно мерцания индикатора. Как известно эта частота должна быть не ниже 25 Гц. Выбранная длительность индикации одного разряда на восьмиразрядном индикаторе  составления F=1/T=1?(0.003*8) =41.7Гц, где F-частота обновления индикатора, Т- период. При такой частоте мерцание индикатора не заметно.

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

В программе использованы два прерывания: одно по результату сравнения значений шестнадцатиразрядных регистров специального события (CCPR1H и CCPR1L) и регистров  таймера TMR1 (TMR1H и TMR1L), другое – по переполнению таймера TMR0. Регистры CCP1 b TMR1 используются для формирования временного интервала измерения частоты. Делитель на 10 для получения интервала 10с реализованы на отдельных регистрах которые заполняются прерывании.

После сохранения значений контекстных регистров проверяются флаги прерывания. Если прерывание произошло по переполнению таймера TMR0, то инкрементируется счетчик и программа выходит из прерывания. При прерывании по результату сравнения модуля CCP1 заполняется регистр делителя на 10 и проверяется флаг временю Если установлено время измерения 10с заполняются регистр делителя на 10. После окончания времени измерения выполняются  досчет и определение  содержимого  предделителя Полученные данные перекодируются в девять разрядов двоичного-десятичного кода. Для экономии энергии батарей портативного прибора  все не значущие нули гасятся. При выполнении  операций во время   прерываний работа таймеров TMR0 и TMR1 не останавливается, поэтому цикл измерения повторяется непрерывно!

Фото собранного устройства  и печатная плата от  Александр Палей

а также исправленная ошибка  в программе Александром

прошивка и исходник — скачать

печатная плата          — скачать

Источник: http://Журнал Радио 2010.3

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *