Да. Замерить частоту SSB напрямую практически невозможно. Тональной посылки CW пожалуйста, в SSB нет постоянного уровня и "каша" всех частот. Там у меня работает мой алгоритм определения частоты в SSB.
Сейчас интервал измерения 1мс и 2мс на ожидание результата подсчета. Алгоритм определения частоты достаточно простой (но ушло на его создание 3 месяца), запускаем цикл измерения частоты, четыре измерения в одном цикле. Выбираем наиболее высшую частоту и сохраняем. Запускаем второй цикл измерения, четыре измерения в цикле. Так же сортируем по наивысшей частоте и сохраняем в переменную. Третий и последний цикл измерений, все как выше описано. После чего сравниваем результаты из трех циклов, если они равны, значит частота получилась истинная. Если нет, идем на измерение. Вот здесь и получается задержка в алгоритме SSB, три цикла по 4 измерения это уже 12 измерений, каждая как минимум занимает 3мс плюс время на перезапись максимальных значений и сравнения. Вот и набегает 50мс. Но смущает то что до 21МГц определяется быстро, выше уже алгоритму приходится дольше крутится в цикле. Любое изменение количества измерений в цикле, как и самих циклов измерений только ухудшает ситуацию по времени. Альтернативных алгоритмов в интернете я не видел.
Скрытый текст
Код:if (FreqCount.available()){ // если есть сигнал на входе for (byte i=0; i<3; i++){frq = FreqCount.read()*0.16; delay(4); // измеряем входную частоту и приводим её к виду 17...300 if (frq>frq_old1) { frq_old1 = frq;}} // получаем наивысшую частоту "frq_old1" for (byte i=0; i<3; i++){frq = FreqCount.read()*0.16; delay(4); // измеряем входную частоту и приводим её к виду 17...300 if (frq>frq_old2) { frq_old2 = frq;}} // получаем наивысшую частоту "frq_old2" for (byte i=0; i<3; i++){frq = FreqCount.read()*0.16; delay(4); // измеряем входную частоту и приводим её к виду 17...300 if (frq>frq_old3) { frq_old3 = frq;}}} // получаем наивысшую частоту "frq_old3" else FreqCount.end(); if ((frq_old1 == frq_old2) && (frq_old2 == frq_old3)){frq_get = frq_old1;} // сравниваем три частоты и при их равенстве записываем в "frq_get"
Там используется два таймера. Первый настраивается на пин D5 как счетчик тиков, а второй таймер формирует отрезки времени 1мс. Нулевой таймер трогать нельзя, он аппаратный.