Комментарии 19
Какая-то проблема со ссылкой на набор
Садись, Два!
С микроконтроллером будет дешевле.
А зачем такие сложности то? Любой микроконтроллер за несколько долларов и импульсы посчитает, и индикацю сделает, и ещё определит когда частоту считать, а когда период, и пересчитает в удобное вам представление.
Тут больше работы придумать удобный пользовательский интерфейс.
Чтобы понимать, как работает на низком уровне. Чтобы уметь делать микроконтроллеры
А так ли просто сделать частотомер на микроконтроллере?
Как считать импульсы? Первое, что напрашивается -- считать в прерывании. Но далеко на этом не уйдешь. По личному опыту, даже STM32F407 с тактовой частотой 168 МГц таким способом с трудом справляется даже с парой мегагерц -- слишком много времени занимает обработка прерывания. И кроме того, результат измерения становится очень уж зависим от других прерываний, от которых далеко не всегда можно избавиться. Другой вариант: использовать в качестве счетчика один из таймеров. К сожалению, тут есть загвоздка: непосредственно содержимое счетчика в таймере не прочитаешь. Нужно использовать разные "грязные хаки" типа досчета импульсов. Хороший результат это дает только на простейших контроллерах типа PIC16F628, где метод досчета работает прекрасно, а сам таймер умеет считать почти до 70 МГц при том, что тактовая частота не превышает четырех мегагерц. Последний, самый разумный вариант -- внешний счетчик нужной разрядности, чтобы на выходе его получался сигнал, который можно без напряга посчитать любым удобным способом, а состояние его после счета легко вычитывалось программой. И мы имеем... уже половину частотомера на логике.
Как отсчитывать интервал времени для счета? Опять же, с решением в лоб -- отсчитывать секунду по прерываниям от таймераy -- ничего хорошего не получится, если только это не будет единственное прерывание в системе, а контроллер не будет предельно "жестким" типа того же PIC или Holtek. Хитроумная связка из трех таймеров (https://we.easyelectronics.ru/STM32/chastotomer-na-stm32f10x.html) -- лучшее, пожалуй, решение средствами одного только МК -- но увы, даже оно неидеально. Больше семи разрядов таким образом делать не имеет смысла из-за, опять-таки, нестабильности длительности интервала от раза к разу. Хотим лучше -- делаем вторые пол-частотомера на логике.
В результате хороший частотомер, достойный серьезного опорного генератора, мы делаем на ПЛИС, то есть по сути на той же мелкой логике, а микроконтроллер в нем работает в основном пользовательским интерфейсом, ну и всякую подсобную работу выполняет.
Крайне просто. В большинстве контроллеров есть таймеры которые можно управлять внешним сигналом.
Схема такова запускаем ТРИ таймера. Один на аппаратное прерывание 0.1 сек. Второй на счёт внешних импульсов по программному сигналу и третий, на счёт внутренней частоты (например, 10мгц) по внешнему сигналу вкл-выкл.
По прерыванию считывает значение второго таймера и обнуляем его. Таким образом получаем число входных импульсов за этот период, т. е частоту. Смотрим, было ли срабатывания вкл-выкл в третьем таймере. Если было, то считываем с него значение периода и сбрасываем . И так повторяем всегда.
В асинхронном цикле неспешно смотрим, что получилось точнее, период, или частота и простой арифметикой преобразуем то что точнее к тому что нужно отображать. Опрашиваем кнопки, выводим индикацию. Все очень неспешно, ибо времени на это аж целых 0.1 секунды.
Всё это можно и на совсем тупеньком контроллере и без таймером (если такие ещё бывают) но тут долго описывать реализацию.
Главный бонус, что программу можно изменить под любые нужды. А любое изменение аппаратной реализации весьма трудоёмко.
Можно ещё сделать реализацию и на программируемой логике. Но это как танком давить блох.
Супер! 90-е: давайте изобретем микроконтроллер т.к. наши сборки с n количеством компонентов уже никуда не лезут. 2000: давайте ставить микроконтроллеры везде. 2010: теперь даже в зубной щётке! 2020: давайте вернёмся в 90..
2010: теперь даже в зубной щётке!
С линуксом или андройдом внутри.
если это не для вас, ЗАЧЕМ вы оставляете свои говнокомментарии?
а как убрать эти три секунды? сократить до 0,5 или хотябы единицы?
Цифровой частотомер без микроконтроллера