Но видимо у вас их нет и не будет ..
Вот пожалуйте , выхлоп 130МГц с MCO F4 дискавери .
Только не надо что это фейк или монтаж или еще чего нибудь...


В данном случае... ИМХО до опорной/2... "Или нет?"(С)...метод reciprocal counter дает выигрыш вплоть до входной частоты, равной опорной. Переходить на частотах выше 1 МГц на метод прямого счета - это терять точность почти в 100 раз. Это несерьезно.
Леонид Иванович,Леонид Иванович писал(а): alexf58, если смириться с тем, что процесс измерения будет осуществляться не полностью аппаратно
Потому что оно не Ваше ?Леонид Иванович писал(а):с не очень изящным
А как по другому??? Число периодов то должно быть целое!!!???В описанной реализации мне не очень нравится формирование интервала измерения через число периодов Fin.
Другого варианта может и не быть... такое тоже бывает...Пытался сделать через Output Compare (в начале интервала настраиваем на set, в конце - на clear), но пока ничего не получается.
Это изящно??? И чем оно отличается от текущего изящества???специальные ситуации в частотомере - это отдельная тема. У себя делал так: ожидание в течение измерительного интервала фронта входного сигнала. Если не приходит - частота = 0. Если пришел, начинаем счет. Если интервал закончился, а следующего фронта всё нет, ждем еще один интервал. Если не приходит - частота = 0. Ожидание еще одного интервала нужно для того, чтобы гарантированно обеспечить на интервале 1 с измерение сигнала 1 Гц.
В Вашем случае формирование интервала зависимо от входного сигнала. Я не говорю про урезание интервала измерения до целого количества входных периодов - это другое. При Вашем алгоритме могут быть грубые ошибки формирования измерительного интервала. На входе может быть все, что угодно. За первую половину интервала в TIM2->CNT может насчитаться одно, а за другую половину - другое, если частота на входе меняется. Частотомер должен показать среднюю частоту, но за фиксированный интервал, а не за какое-то неопределенное время. В идеале мы должны сказать периферии "начать измерение", затем, спустя любое желаемое время, "закончить измерение". В результате в таймерах должно оказаться число входных импульсов и число импульсов заполнения. В моем частотомере на ПЛИС так и есть, а вот STM32 так не может. Все эти манипуляции с формированием измерительного интервала "на лету" я и называю "не очень изящными". То, что Ваш алгоритм работает, не сомневаюсь. Возможно даже, что это единственный вариант для STM32, ведь его навороченные таймеры не имеют возможности синхронного запуска/остановки.HHIMERA писал(а):Это изящно??? И чем оно отличается от текущего изящества???
В вашем варианте... насколько я понимаю... 1сек. тоже не выдерживается точно... девиация присутствует... потому что тоже привязана к целому числу входных периодов...Леонид Иванович писал(а): В Вашем случае формирование интервала зависимо от входного сигнала.
Показания при 0,9 1,0 и 1,1 сек. я выкладывал... При желании измерительный интервал можно и подстроить... если это нужно...При Вашем алгоритме могут быть грубые ошибки формирования измерительного интервала. На входе может быть все, что угодно. За первую половину интервала в TIM2->CNT может насчитаться одно, а за другую половину - другое, если частота на входе меняется. Частотомер должен показать среднюю частоту, но за фиксированный интервал, а не за какое-то неопределенное время.
Здесь уже конечно... "Я его слепила из того что было."(С)...В идеале мы должны сказать периферии "начать измерение", затем, спустя любое желаемое время, "закончить измерение". В результате в таймерах должно оказаться число входных импульсов и число импульсов заполнения. В моем частотомере на ПЛИС так и есть, а вот STM32 так не может.
Почему??? Если не Reciprocal... то от одного таймера два-три запускаются и останавливаются одновременно влёгкую... На STM8L15x делал простой частотомер до 60МГЦ... три канала работали одновременно...Все эти манипуляции с формированием измерительного интервала "на лету" я и называю "не очень изящными". То, что Ваш алгоритм работает, не сомневаюсь. Возможно даже, что это единственный вариант для STM32, ведь его навороченные таймеры не имеют возможности синхронного запуска/остановки.
Может все намного проще , вы всего лишь не в состоянии осознать и принять что весь накопленный опыт на AVR летит коту под хвост?Леонид Иванович писал(а):Приходится для каждой задачи пытаться сделать "из буханки хлеба троллейбус". Это не программирование контроллеров, а головоломка, извращение какое-то.
Никто и не спорит... Способ витиеватый... но что поделать... Многоканальный хардварный 1-wire ещё витиеватее...Леонид Иванович писал(а):Спорить здесь не о чем.
Ну... "Чем богаты, тем и рады!"(С)...А в STM логика синтезирована до нас. Приходится для каждой задачи пытаться сделать "из буханки хлеба троллейбус". Это не программирование контроллеров, а головоломка, извращение какое-то.
Леонид Иванович писал(а):Вопрос интересный, на сколько нужно ломать свою голову. Это ведь тоже затраты, по крайней мере, сил и времени.
Вероятно снова стоит добавить - "только у ЛИ"Причем с непредсказуемым результатом.