Контроль частоты

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
sheva_s
Грызет канифоль
Сообщения: 256
Зарегистрирован: Пт апр 27, 2007 14:32:48
Откуда: Украина Кривой Рог
Контактная информация:

Контроль частоты

Сообщение sheva_s »

Всем привет нужно создать девайс который будет мерять частоту и при превышении какого то установленного предела выдавать звуковой сигнал. Планирую сделать на тини13 или тини2313 если не хватит памяти. Максимальная измеряемая частота составляет около 60-70 гц. Подскажите какой алгоритм работы программы должен быть а то что то на ум нечего не лезет ? Как правильно измерять время периода импульса ? Хочу через измерение времени между импульсами сделать что бы было точнее.
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Контроль частоты

Сообщение akl »

nox<Fo/Fx, где
Fo-частота тактирования таймера
Fx-задаваемая пользователем пороговая частота
nox-число тиков таймера за период Fx
Если за период измеряемой частоты таймер насчитает меньше nox, то порог превышен.
Реклама
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: Контроль частоты

Сообщение aleksandr-zh »

использовать режим ICP (если в АВР)
вот реальная программа измерения частоты 50 Гц

(не показан режим преобразования данных на индикатор...)

Код: Выделить всё

$regfile = "2313def.dat"                ' Частотомер 50.00 Герц   компилятор BASCOM
$crystal = 4000000                      ' кварц !!!

In_hertz Alias Pind.6

Led7_segm1 Alias Portd.4                ' Автор: Данилин Александр
Led7_segm2 Alias Portd.3                ' 2011-11  Для Эл.сетей города
Led7_segm3 Alias Portd.1
Led7_segm4 Alias Portd.0

Led_port Alias Portb

Const Indikator_cikl = 10               ' Сколько раз будет прорисовываться значение индикаторе
Const Indikator_delay = 5               ' Влияет на яркость свечения. Делать в пределах 3-5.

Declare Sub Byte2led(data_2byte As Word)

Dim Tempb As Byte , Data_2byte As Word , Tempw As Word
Dim Data_1 As Byte , Data_2 As Byte , Data_3 As Byte , Data_4 As Byte

Config Portb = Output : Portb = 255
Config Pind.6 = Input

Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising
On Capture1 Captmr
Enable Capture1

Enable Interrupts                       ' разрешаем прерывания и включаем таймер

Config Watchdog = 1024 : Start Watchdog ' защита от зависания

' =====   С Т А Р Т   =======
 Start_main_prog:

  Timercounter = 25000000 \ Timercounter
  Data_2byte = Timercounter

           Call Byte2led(data_2byte)
           Led_data_1 = Data_1          '  преобразуем в данные для индикатора
           Led_data_2 = Data_2          '  преобразуем в данные для индикатора
           Led_data_3 = Data_3          '  преобразуем в данные для индикатора
           Led_data_4 = Data_4          '  преобразуем в данные для индикатора

 Goto Print7seg

' =====================
Captmr:                                 ' Считаем импульсы, как-бы наполняем пачками между импульсами
   Timercounter = Capture1
   Timer1 = 0
Return

' ============     Выводим 4 числа на 7-сегм. индикатор    ==========
.......
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»