Вопрос по созданию частотомера

vlad0951
Offline
Зарегистрирован: 08.07.2016

Здравствуйте форумчане, такой у меня вопрос.

Годна ли идея для частотомера на меге328?

Идея:

Запускаем таймер считать 1 секунду (я сосчитаю время 1 переполнения таймера, сосчитаю число переполнений равных 1 секунде). Пока идет секунда на пин внешних прерываний  INT0 поступает сигнал с генератора. Прерывание устанавливается по нарастанию фронта. В самом обработчике прерывания делаем инкремент некой переменной "с". По прошествию секунды отключаем прерывания, выводим на экран значение "с", и далее делаем далее по кругу.

Годна ли такая идея? Какие частоты тактирования посоветуете? Справится МК с такой задачей?

Спасибо за уделенное время.

ptr
Offline
Зарегистрирован: 28.05.2016

Частоту даже 100КГц, не факт что корректно отработаете. Рекомендовал бы иначе:

1. Переводим SPI в режим слейва.
2. На вход SCK подаем сигнал с генератора.
3. Фиксируем время обычным micros()
4. Считываем из ресивера SPI байты, по мере их появления там, не сохраняя то что читаем, но подсчитывая их количество.
5. Когда надоест, обычным micros() фиксируем время завершения процедуры.

Вычисляем частоту, зная время (разницу между двумя micros()) и количество колебаний (количество принятых байт умноженное на 8)

Профит до 8МГц

 

vlad0951
Offline
Зарегистрирован: 08.07.2016

ptr пишет:

Частоту даже 100КГц, не факт что корректно отработаете. Рекомендовал бы иначе:

1. Переводим SPI в режим слейва.
2. На вход SCK подаем сигнал с генератора.
3. Фиксируем время обычным micros()
4. Считываем из ресивера SPI байты, по мере их появления там, не сохраняя то что читаем, но подсчитывая их количество.
5. Когда надоест, обычным micros() фиксируем время завершения процедуры.

Вычисляем частоту, зная время (разницу между двумя micros()) и количество колебаний (количество принятых байт умноженное на 8)

Профит до 8МГц

 

Очень неординарный и интересный вариант. Еще всплыл такой. Тем же таймером отсчитываем секунду, а другому на вход подаем счетные импульсы. Далее аналогично

ptr
Offline
Зарегистрирован: 28.05.2016

Можно и так. Можно даже воспользоваться возможностью таймера считать импульсы с аналогового компаратора. Но в даташит написано:

The external clock must be guaranteed to have less than half the system clock frequency (fExtClk < Tn_sync (To Clock Select Logic) Synchronization Edge Detector given a 50/50% duty cycle.

 

 

vlad0951
Offline
Зарегистрирован: 08.07.2016

ptr пишет:

Можно и так. Можно даже воспользоваться возможностью таймера считать импульсы с аналогового компаратора. Но в даташит написано:

The external clock must be guaranteed to have less than half the system clock frequency (fExtClk < Tn_sync (To Clock Select Logic) Synchronization Edge Detector given a 50/50% duty cycle.

 

 

Спасибо большое за информацию, чтож приступим...

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

vlad0951, вы думаете, за 5 лет существования форума вы первый, кто захотел сделать частотометр? вбейте слова частотометр в форму гугло-поиска сверху форума, увидите что эта тема давно разжёвана до состояния манной каши.  Есть готовая либа что б не парится.