SI4432 - вопрос по возможностям железяки и библиотеки
- Войдите на сайт для отправки комментариев
Пнд, 29/06/2020 - 12:13
Добрый день!
Собираю устройство, сканирующее выбранный диапазон частот с настраиваемым шагом сканирования.
Использую Arduino + SI4432 и библиотеку RF22 от RadioHead
Для установки частоты использую функцию setFrequency() которая принимает два параметра:
centre Frequency in MHz. 240.0 to 960.0. Caution, some versions of RH_RF22 and derivatives implemented more restricted frequency ranges.
[in]
[in] afcPullInRange Sets the AF Pull In Range in MHz. Defaults to 0.05MHz (50kHz). Range is 0.0 to 0.159375 for frequencies 240.0 to 480MHz, and 0.0 to 0.318750MHz for frequencies 480.0 to 960MHz,
Может кто-то подсказать, что это за второй параметр afcPullInRange? На что он влияет?
И второй вопрос: с какой точностью SI4432 может устанавливать частоту? Ну то есть сколько знаков после запятой имеет смысл передавать в первый параметр?
У меня задача отловить пики RSSI при сканировании, но создается впечатление, что для нее +/-100кГц не имеют значения. Либо частота выбирается из какого-то заданного ряда частот и при выполнении setFrequency() просто устанавливается ближайшая из этого ряда.
afcPullInRange можно не трогать (лучше AFC отключить)
Спасибо, а может подскажете примерный алгоритм работы. Допустим мне надо просканировать диапазон 430-345 МГц с шагом, например 50кГц. Когда частоту лучше переключать установкой центральной частоты, а когда подгонять каналами? И как вычислить итоговую частоту при переключении каналов?
Как можно узнать какому каналу SI4432 какая соответствует частота? Я загуглил список каналов, например для частоты 433 МГц, получил таблицу типа вот этой http://www.viva-telecom.ru/SHOP/DOPINFO/FREQ/lpd.php Таблица довольно странная (для меня), например первый канал 433.075МГц, и далее идет с шагом 0.025МГц. Непонятно куда делись частоты 433.025 и 433.050. Дальше смотрим канал 38 - это уже 434 МГц.
Как тогда можно организовать перебор частот и каналов в цикле? Например если бы было известно, что каждый канал это 0.025МГц, то было бы просто: встал на частоту 433 и листаешь все каналы (40 штук), затем переключился на 434 и снова листаешь 40 каналов. Тут же без таблицы не разобраться. То есть нужен массив частот и массивы частот каналов.
И второй вопрос: соответствуют ли каналы si4432 этим каналам из таблички. И как узнать что значит "канал" для этого устройства? То есть проблема в том, что листая каналы - нужно знать какая частота им соответствует. У меня с этим "затык".
На остальные вопросы найдешь ответы здесь.
Благодарю всех откликнувшихся, похоже я немного начинаю понимать принцип.
Ответ здесь.
На остальные вопросы найдешь ответы здесь.
По частотам понял, значит все дело в нашем законодательстве, а не в железках.
По каналам тоже примерно начал понимать. Нашел на странице 55 даташита формулу несущей частоты
fcarrier = (fb+24+(fc+fo)/64000) x 10000 x (hbsel+1) + (fhch x fhs x 10) [kHz]
важнее подстраивать channel RBW (50-600kHz) чтобы не перескочить сигнал
Я правильно понял, что изменяя регистры 79h и 7Ah можно сделать шаг частоты, кратный, например 50 или 100 кГц и "плавненько" сканировать диапазон?
Ну например я устанавливаю базовую частоту 433 МГц и подстраивая параметры fhch и fhs могу получить корректный RSSI на всех этих частотах. Затем устанавливаю базовую, например, 434МГц и снова оперирую правой скобкой в этой формуле. Все верно?
Прошу прощения, я немного не понял несколько моментов:
Это значит, что устанавливаем, например, 433.025 и листаем каналы 1..3..5, но ведь каналы просто дают смещение от базовой частоты. Или я неправильно понял "базовую частоту +25"?
Разъясните пожалуйста что это значит "с 0 offset". Опять непонятно.
И еще непонятно: могу я установить сразу базовый частоты с нужным шагом не переключая каналы? 433.025...433.050 и т.д. Если не думать про скорость сканирования. Допустим, что меня устраивают паузы между переключением базовых частот.
Ваше устройство где-то описано? Можете ссылочку скинуть, если не трудно. Интересно посмотреть как у других реализовано.
2 года назад первые опыты, сейчас работает гораздо быстрее но не успел сделать ролик
https://www.youtube.com/watch?v=f0O7nw0VF2M
И все-таки, может кто-то объяснить, почему листать каналы быстрее и точнее, чем изменять частоты? Вроде все должно быть так же: меняем регистры, считываем показания... Или установка частоты невозможно с точностью до 25-50 кГц?
2 года назад первые опыты, сейчас работает гораздо быстрее но не успел сделать ролик
https://www.youtube.com/watch?v=f0O7nw0VF2M
хорошая реализация
kost82: что быстрее -вычислять базовую частоту и писать 6 байт в регистры
или инкримент канал и передать 2 байта ?
https://www.youtube.com/watch?v=QQ-WbklLRqg
https://youtu.be/eD7MLr27BTY
Но ведь вычислять полученную частоту все равно надо. Чтобы строить график зависимости RSSI от частоты.
Два байта конечно быстрее передать, чем шесть.
Может есть другая возможность спросить у si4432 на какой частоте она по факту работает в данный момент, кроме как чтение регистров и вычисления по ним частоты?
Задам более конкретный вопрос
Ссылка на библиотеку RF22 в первом сообщении топика.
Сканируем устройство с несущей частотой 433,92, а максимум RSSI получается на частоте 433,95 то есть погрешность как минимум 30 кГц.
Если заглянуть в библиотеку, то метод setFrequency выглядит так:
Вроде похоже на описание в доках: частота устанавливается через регистры 76 и 77, никаких дополнительных смещений нет. Не пойму почему такая точность низкая? Вопрос сейчас именно в точности сканирования, а не в скорости. Я ожидаю точность в пределах 5 кГц, возможно ли ее достигнуть?
https://www.sparkfun.com/datasheets/Wireless/General/RFM22.PDF
Нашел тут на 22 странице описание магии настройки несущей частоты. Там реально без пузыря не разобраться.
Оказывается весь диапазон 240-930МГц разделен на два: 240-479,9 и 480-930. Диапазон задаётся битом hbsel регистра 75h (0 - первый диапазон, 1 - второй).
Дальше каждый диапазон делится на 24 поддиапазона (по 10 МГц). Поддиапазоны
задаются пятью битами fb того же регистра 75h.
То есть регистр 75h оперирует отрезками по 10МГц. Это называется integerPart в доках и библиотеке.
Регистры 76h и 77h (в сумме 16 бит) "добивают" частоту до нужной. Это назвали fractional part (F).