Сканер диапазона 2,4ГГц из готовых модулей
Я пробовал визуализировать логи стандартными средствами построения диаграмм Excel, но при таком объеме данных рендеринг трехмерного представления идет ОЧЕНЬ долго, час-полтора, иногда обваливается Excel.
Надо использовать специализированные программы, но пока нет времени в это вникать. Если кто-нибудь посоветует, буду благодарен 😃
[2Rover]
Простите за немного общий вопрос…
Я работал с СС1100, там регистры - один в один с СС2500. Но я так и не понял - как узнать уровень принимаемого сигнала. Там имеется регистр RSSI. Я его читаю, вывожу через СОМ-порт на экран… Ну… и там, как мне показалось, очень много сильных флуктуаций (при неизменной частоте трансивера).
Вопрос такой: вы выводите на дисплей уровень принимаемого сигнала в условных единицах. А как вы его считываете ? Там три регистра настройки частоты. Передвинули частоту (инкрементировали FREQ0…FREQ2), запустили перекалибровку… А дальше что ? Перешли в RX и надо считать RSSI ?
Я почему пытаюсь это узнать… У меня была задача -ри помощи этого регистра RSSI настроить пару трансиверов как можно точнее путём программной подстройки частоты одного из трансиверов (типа кварцы одинаковые, да вот не не одинаковые…). Ну я и написал софт для чтения этого RSSI. Я когда удалял-подносил модули друг к другу (были настроены на минимум мощности), я не смог понять по какому закону менялся этот RSSI. Хотя модуль успешно принимал 7-и байтный пакет данных. И как-то я подумал, что или эфир сильно загашен на 433, либо у меня лыжи не едут. В итоге, я настроил всё, но только путём выяснения того, как и на какой граничной частоте, связь вообще пропадает. И с тех пор я немного в недоумении.
Буду очень рад, если кто-то меня в это сфере разтормозит…
Заранее спасибо.
Да, вы совершенно правильно понимаете последовательность действий. С той лишь разницей, что для ускорения сканирования в самом начале программы один раз запускается предкалибровка по заданному набору частот, полученные калибровочные константы сохраняются в массив. Далее, задаем частоту, записываем в нужный регистр калибровочную константу из массива соответственно номеру частоты, делаем паузу несколько микросекунд согласно даташиту на установление синтезатора и читаем регистр RSSI.
Но вот со значением в этом регистре не всё так просто, если спецификация CC1100 полностью совпадает с CC2500 в этой части. Для СС2500 значение необходимо обработать по определенному закону и нормализовать!!! Прочитайте соответствующий раздел даташита для CC2500 и сравните, так же для CC1100 или нет. Ну и разрядность переменной для считывания сырого значения RSSI должна быть правильной. У меня была какая-то нестыковка то ли со знаками, то ли с разрядностью и на выходе творилась чертовщина. Когда сделал всё строго по даташиту, стало нормально.
И еще, когда я пытался поработать с СС1020, то чуть умом не тронулся. Оказывается, у этой серии какой-то странный конструктивный косяк, требующий каких-то плясок с бубном при инициализации, информация в сети противоречивая и путаная. Какие-то шаманы владеют сакральными знаниями, но толком не делятся. Короче, так и не заработало, надоело время зря терять.
Спасибо. Пошел читать про алгоритм обработки RSSI…
Я пробовал визуализировать логи стандартными средствами построения диаграмм Excel, но при таком объеме данных рендеринг трехмерного представления идет ОЧЕНЬ долго, час-полтора, иногда обваливается Excel.
Надо использовать специализированные программы, но пока нет времени в это вникать. Если кто-нибудь посоветует, буду благодарен
Можно использовать такую прогу:
P.S. Таблица соединений, из первого поста не соответствует скетчу из #12. Насколько помнится там не соответствует CS для дисплея и reset дисплея нужно соединить с RST Arduino. В принципе, из скетча это видно, но можно потратить время на выяснение этого…
Да, последующий скетч может не соответствовать таблице из первого поста, как-то выпустил это из вида. Линию сброса дисплея можно подключать как на отдельный порт ардуино, тогда дисплей будет сбрасываться программно при старте прошивки, так и на RST Arduino. Библиотека дисплея позволяет это выбирать.
Интересный проект. Я сейчас ковыряюсь с трансивером А7105 и хочу попробовать соорудить нечто подобное. В связи с этим имею вопрос: а что-таки ловится из эфира и с чем сравнивается для получения RSSI? Или по-другому: что есть тот полезный сигнал, с которым сравнивается входной шум?
Никакой особый “полезный сигнал” там не подразумевается. Меряется тупо уровень несущей на входе приемника. Точнее даже, внутри микросхемы фактически измеряется степень изменения напряжения в цепи АРУ, выделяется дифференциальным усилителем, оцифровывается и записывается в регистр RSSI. Некоторые микросхемы меряют только уровень несущей полезного сигнала и только на канале, на котором установлена связь по заданному протоколу. Разумеется, для наших целей это не подходит. Нам ведь надо и помеху измерить, причем на любой частоте. А микросхема C2500 при определенном сочетании настроек меряет всё, что попало на вход приемника, включая шум и сосредоточенные помехи. Поскольку измерение уровня сигнала завязано на цепь АРУ, результат прогона по спектру сильно зависит от настройки скорости срабатывания АРУ. Иначе цифровой фильтр в цепи АРУ сильно “сглаживает” входной шум, скрывая возможные спорадические выбросы помех.
Всё сказанное относится именно к микросхеме C2500, про другие ничего сказать не могу…
Большое спасибо за разъяснения. Жаль, но в моём случае (А7105) измерение RSSI происходит только по детектированию приёма полезного сигнала и само значение RSSI записывается в регистр только после окончания RX-State. Иными словами: читать RSSI можно, но, пока нет приёма сигнала, регистр не обновляется.
Вообще, информация по А7105 крайне скудная и неудобоваримая, не смотря на то, что чип этот довольно популярен.
Покопался в даташите и обнаружил, что был неправ. Есть режим измерения RSSI без приёма полезного сигнала. Китайцы обозвали его: Auto RSSI measurement for Background Power. А режим, который я описывал выше называется Auto RSSI measurement for TX Power.
Auto RSSI measurement for Background Power:
- Set wanted FRXLO. Установка частоты гетеродина.
- Set RSS= 1 (1Eh), FSARS= 1 (1Eh, 4MHz ADC clock). Биты конфигурации
- Enable ARSSI= 1 (01h). Бит разрешения автоматического измерения RSSI
- Send RX Strobe command. Переключение в состояние приёмника
- MCU delays min. 140us.
- Read digital RSSI value from ADC [7:0] (1Dh) to get background power.
- Send other Strobe command to let A7105 exit RX mode.
Думаю, что теперь я смогу сделать анализатор.
P.S. Вы выложили проект для Меги, но я с Атмелами не дружу и хотел попросить, если возможно, выложите библиотеки для дисплеев отдельно.
выложите библиотеки для дисплеев отдельно.
На всякий случай хочу уточнить, для дисплеев на каких дисплейных чипах? Те, которые упомянуты в исходнике прошивки?
Те, которые упомянуты в исходнике прошивки?
Да, библиотеки для тех дисплеев, которые Вы использовали в данном проекте.
Михаил, все необходимые исходники библиотек дисплеев уже выложены в архивах, прикрепленных к сообщениям #1 и #12.
Папки называются
Adafruit_GFX - это графическое ядро, его надо устанавливать обязательно, для любого графического дисплея
Adafruit_ILI9341
Adafruit_QDTech
Adafruit_ST7735
выберите из этих трех ту библиотеку, которая соответствует микросхеме в вашем дисплее. В большинстве случаев одной из них достаточно.
Но китайцы те еще затейники, иногда бывают совсем неведомые варианты, хотя визуально дисплей ничем не отличается.
Если пришлете мне в личку фото вашего дисплея или ссылку на него, попробую подсказать, какая из этих библиотек наиболее вероятна.
А какие ещё трансиверы можно использовать для спектроскопа на 2,4 ггц? RFM73 можно?
Ключевое условие упомянуто в сообщениях #23 и #24. Трансивер должен иметь возможность измерять RSSI не только для уже действующего канала связи между двумя устройствами, а без установления связи с кем-либо (standalone or standby RSSI) просто по входу приемника и желательно на произвольной (или условно произвольной) частоте из своего рабочего диапазона. Нужно читать даташит конкретной микросхемы и смотреть, может она это или нет.
А какие ещё трансиверы можно использовать для спектроскопа на 2,4 ггц? RFM73 можно?
Возможно, NRF24L01+
Но сканер NRF24L01+ выглядит блекло на фоне данной темы.
…amperka.ru/…/nrf24l01-побеждаем-модуль.3205/#post…
Ковырялся периодически во время отсутствия на форуме со своим вариантом спектроанализатора на А7105. Сначала воодушевился вариантом сделать монитор на дисплейчике от Nokia 3310(5510), разломал несколько библиотек под свои нужды, но в конце концов понял, что экран очень маленький и спектр можно будет увидеть только приблизительно. Покупать какой-либо другой дисплей покрупнее не захотелось и я решил написать приложение под Windows, которое будет отрисовывать пришедшие с приёмника А7105 по USART значения RSSI.
Ну, на стороне приёмника программа примитивнейшая: инициализация, ожидание команды на сканирование(ждём прихода символа ‘S’ по USART), цикл сканирования(переключается канал, пауза для установки частоты гетеродина, чтение значения из регистра RSSI, передача значения RSSI по USART), при выходе из цикла обнуляем номер канала.
С отрисовкой я провошкался довольно долго, но всё таки победил. Оказалось, что есть проблема в скорости приёма компом информации по USART. Опытным путём добился максимальной скорости 40 байт/сек и то при смене приоритета для приложения в диспетчере задач на “реального времени”. Это грустно. Но запуская сканирование несколько раз подряд спектр увидеть можно.
Если кому интересно поиграться, выложу приложение. Однако, в нём есть ряд ограничений, которые надо учитывать при использовании.
Поиграться интересно.
Оказалось, что есть проблема в скорости приёма компом информации по USART. Опытным путём добился максимальной скорости 40 байт/сек и то при смене приоритета…
Здесь я чего-то не врубился. 115200 бит/сек = 10 кбайт/сек, 19200 = 2 килобайта/сек. Проблема может возникнуть разве что при передаче байтов по одному, да и то наверное только при использовании очень плохого переходника USB ->COM. Суть проблемы непонятна.
Странно.
У меня отрисовка 2 каналов(10 бит разрешение) при 200 точках около 1 секунды.
Скорость не максимальная, 57600, без всякой оптимизации.
Странно.
У меня отрисовка 2 каналов(10 бит разрешение) при 200 точках около 1 секунды.
Скорость не максимальная, 57600, без всякой оптимизации.
Я, честно говоря, уже не в первый раз натыкаюсь на невозможность обмена данными с компом на нормальной скорости. Одиночные байты пролетают без проблем(пробовал скорости до 2МБит.сек), но стоит запустить пакеты данных - тут же возникают тормоза или вовсе виснет комп. Причём я пробовал по крайней мере два варианта переходников: один на USB/USART на FS-ке, другой - BlueTooth модуль. К компам тоже подключал разным(по меньшей мере 3 варианта), но результат тот же.
Консультировался на Cyberforum.ru, там мне всяко-разно советовали, но существенного улучшения добиться так и не удалось.
Может проблема в алгоритме отрисовки? Я пытаюсь каждый канал отрисовывать в реальном времени(по приходу каждого значения RSSI с приёмника). Может нужно засовывать весь спектр в буфер, а потом отрисовывать из буфера? Или метод какой-то другой на форме использовать?
Я рисую в реальном времени.
Оптимально - передавать по строкам. Между строками желательно маркеры (конец строки). Строка принимается в буфер порта, быстро считывается в память, и начинает отрисовываться, в это время в буфере порта накапливается следующая строка. Отрисовка должна происходить быстрее чем период между строками - иначе буфер будет переполняться. Com порт работает автономно и процессор не грузит.