Сканер диапазона 2,4ГГц из готовых модулей

MPetrovich

Ковырялся периодически во время отсутствия на форуме со своим вариантом спектроанализатора на А7105. Сначала воодушевился вариантом сделать монитор на дисплейчике от Nokia 3310(5510), разломал несколько библиотек под свои нужды, но в конце концов понял, что экран очень маленький и спектр можно будет увидеть только приблизительно. Покупать какой-либо другой дисплей покрупнее не захотелось и я решил написать приложение под Windows, которое будет отрисовывать пришедшие с приёмника А7105 по USART значения RSSI.
Ну, на стороне приёмника программа примитивнейшая: инициализация, ожидание команды на сканирование(ждём прихода символа ‘S’ по USART), цикл сканирования(переключается канал, пауза для установки частоты гетеродина, чтение значения из регистра RSSI, передача значения RSSI по USART), при выходе из цикла обнуляем номер канала.
С отрисовкой я провошкался довольно долго, но всё таки победил. Оказалось, что есть проблема в скорости приёма компом информации по USART. Опытным путём добился максимальной скорости 40 байт/сек и то при смене приоритета для приложения в диспетчере задач на “реального времени”. Это грустно. Но запуская сканирование несколько раз подряд спектр увидеть можно.
Если кому интересно поиграться, выложу приложение. Однако, в нём есть ряд ограничений, которые надо учитывать при использовании.

Buranov_P

Поиграться интересно.

MPetrovich:

Оказалось, что есть проблема в скорости приёма компом информации по USART. Опытным путём добился максимальной скорости 40 байт/сек и то при смене приоритета…

Здесь я чего-то не врубился. 115200 бит/сек = 10 кбайт/сек, 19200 = 2 килобайта/сек. Проблема может возникнуть разве что при передаче байтов по одному, да и то наверное только при использовании очень плохого переходника USB ->COM. Суть проблемы непонятна.

Панкратов_Сергей

Странно.
У меня отрисовка 2 каналов(10 бит разрешение) при 200 точках около 1 секунды.
Скорость не максимальная, 57600, без всякой оптимизации.

MPetrovich
Панкратов_Сергей:

Странно.
У меня отрисовка 2 каналов(10 бит разрешение) при 200 точках около 1 секунды.
Скорость не максимальная, 57600, без всякой оптимизации.

Я, честно говоря, уже не в первый раз натыкаюсь на невозможность обмена данными с компом на нормальной скорости. Одиночные байты пролетают без проблем(пробовал скорости до 2МБит.сек), но стоит запустить пакеты данных - тут же возникают тормоза или вовсе виснет комп. Причём я пробовал по крайней мере два варианта переходников: один на USB/USART на FS-ке, другой - BlueTooth модуль. К компам тоже подключал разным(по меньшей мере 3 варианта), но результат тот же.
Консультировался на Cyberforum.ru, там мне всяко-разно советовали, но существенного улучшения добиться так и не удалось.
Может проблема в алгоритме отрисовки? Я пытаюсь каждый канал отрисовывать в реальном времени(по приходу каждого значения RSSI с приёмника). Может нужно засовывать весь спектр в буфер, а потом отрисовывать из буфера? Или метод какой-то другой на форме использовать?

Buranov_P

Оптимально - передавать по строкам. Между строками желательно маркеры (конец строки). Строка принимается в буфер порта, быстро считывается в память, и начинает отрисовываться, в это время в буфере порта накапливается следующая строка. Отрисовка должна происходить быстрее чем период между строками - иначе буфер будет переполняться. Com порт работает автономно и процессор не грузит.

MPetrovich
Buranov_P:

Оптимально - передавать по строкам.

А какие параметры строки(длина, кол-во стоп-битов)?

Buranov_P:

Строка принимается в буфер порта, быстро считывается в память, и начинает отрисовываться

Если я правильно понял, отрисовка спектра будет производится кусками размером определяемом кол-вом символов в строке?
P.S. Вы WinFormApplicatin используете?

Buranov_P

To MPetrovich.
Длина строки определяется сканером. В этой теме 160 или 204 байта, плюс маркер.
В качестве маркера можно, например, использовать 0x00 а сигналы каналов сделать в диапазоне 1 - 255. Можно использовать комбинацию байт, но в данном случае не стоит.
Отрисовка построчно. Алгоритм например такой: Проверяется число байт в буфере COM порта. Если больше длины строки - считываем до маркера (включительно) и рисуем строку. Если количество байт в буфере меньше длины строки - ожидаем, когда накопится. Далее все это в цикле. (На самом деле не все так просто. В этом алгоритме нет времени на опрос событий формы (окна), поэтому все заткнется. Скорее всего придется использовать таймер. (Или переходить к многопоточности 😉 ). Главное - отрисовка должна быть быстрее, чем период прихода строк.

P.S. Вы WinFormApplicatin используете?

Не понял вопроса. Я обычно использую VB2008 (а если удается - то и VB6). Другие языки для меня “не родные” (хотя случается…). При выборе типа проекта выбираю WinFormApplication. Или здесь о другом?
P.S. Что понимается под “отрисовка строки” ? IMHO достаточно наглядно представление в виде “водопада” (термин из радиолюбительской практики. SDR приемники).

Edward_tlt

Сергей, поделитесь более подробной информацией об этом проекте?

MPetrovich

Переделал приложение на основе идеи Buranov_P, за что ему большое спасибо!
Теперь периодичность вывода спектра на экран порядка 200мкСек * 164канала = 33 мСек, видно как циклически бегает по диапазону частота какого-то устройства (вероятно мышь на 2,4ГГц). Есть постоянно торчащие палки примерно одного уровня мощности сигнала. Вобщем - картинка стала вполне информативной и теперь не требуется никаких доп. настроек.

Buranov_P

Давно хотел сделать вывод на экран компа в реальном времени. Наконец дошли руки. Выводятся 200 (не 100 как написано на картинке) строк по 206 байт в строке. Изображение в режиме “водопада”, строки смещаются вверх.
При скорости порта 19200 теоретически можно достичь 10 строк/сек, т.е. строка пройдет экран за 20 сек. Реально получилось 25 сек. В качестве датчика использован мелкий аналог сс2500 (см пост #1). Скетч из #12 поста переделан - убрано все что касается вывода на дисплей и добавлен вывод на USART 19200 baud. Так же добавлены маркеры строки (0х00), а уровень сигнала в пределах 1 - 255. На видео виден мой WiFi в режиме, когда нет активного обмена, и в режиме просмотра фильма на планшете. Канал WiFi установлен 7.

5 months later
moon7

Вот бы этот проект но от 400 до 2400 мгц, технически сложно? или достаточно выбрать подходящий модуль?

Rover

Именно в выборе модуля вся сложность и заключается.
Мне неизвестен недорогой автономный модуль, работающий в безразрывном диапазоне 400-2400.
Прежде всего, при такой разности частот это уже очень разные антенны и параметры цепей согласования и антенных фильтров.
Соответственно, в идеале должны быть коммутируемые антенные цепи.
В итоге это составит 90% конструкции дорогого профессионального сканера, что лишает затею всякого смысла.

Еще один момент, который я всегда особо подчеркиваю: модуль должен уметь выдавать наружу измеренное значение уровня сигнала (RSSI) на любой рабочей частоте диапазона, и независимо от того, установлена связь с другим модулем или нет. Некоторые модули допускают измерение RSSI только после того, как установлена связь на заданном канале с другим таким же модулем. Разумеется, нам это совершенно не подходит.

RW9UAO
moon7:

Вот бы этот проект но от 400 до 2400 мгц

RTL SDR

Rover

Since a typical R820T/2 RTL-SDR’s maximum frequency limit is about 1.7 GHz, an external downconverter circuit is required.

Это уже концептуально иная штуковина получается))

Хотя… с нынешними контроллерами можно, пожалуй, взять даунковертер за $5, обычный SDR донгл за $18, и замутить эмуляцию USB хоста с дисплейчиком на каком-нибудь модном контроллере, но это получится, как говорится, “well frankensteined device” 😁
не будет простоты конструкции выходного дня за 5 копеек. Опять же, мой любительский уровень программирования не для таких задач.

Buranov_P
Rover:

взять даунковертер за $5, обычный SDR донгл за $18, и замутить эмуляцию USB хоста с дисплейчиком на каком-нибудь модном контроллере

Проще воткнуть в планшет на Win8.1/Win10. Сейчас их много появилось. Ссылку на даунковертер за $5 можно ?

Rover

Повторю, что RTL SDR воткнутый в разъем OTG андроидного или Win- гаджета это принципиально иная концепция устройства. Тут паять-то нечего, воткнул одно в другое, софт поставил и работает. Это не будет конструкция выходного дна для тех, кто хочет попаять и поковырять ардуинку.
Упоминание даунконвертера за $5 я встречал в статье на одном из зарубежных сайтов, где приводился перечень компонентов с расчетом стоимости.
Мне это не нужно, поэтому ссылку не сохранил и привести не могу. Погуглите по запросу “RTL SDR Android”, наверняка вам она попадется.

7 months later
RK3AMS

Здравствуйте, Валерий!
Собрал Ваше устройство. Заработало сразу, спасибо за подробные комментарии.
В процессе испытаний появились вопросы. Устройство никак не реагирует на
подключение антенны. Уровень шума должен был увеличиться при подключении антенны и на экране данные
изменяются относительно какого то уровня, а не от нуля. В какую строну копать?
Заранее спасибо.

Rover

Не, это еще не совсем заработало… Конечно, некоторый уровень шума на входе будет всегда, это правильно.
Но этот уровень должен быть меньше, чем у вас. И конечно, не должен быть настолько ровный по всему спектру.
При подключении антенны должны сразу появляться пики от ближайших соседских вайфаев.
Картинка выглядит так, будто приемный модуль не получает команды настройки от контроллера,
а просто стоит на одной частоте и ловит шум. Прежде всего, надо проверить правильность подключения
приемника по шине SPI.