Переключение каналов NRF24l01

У меня есть радиомодуль NRF24L01. В описании указано, что он может работать в частотном диапазоне ISM 2,400...2,525 ГГц. Шаг канала составляет 1 МГц, и всего имеется 125 каналов.

Номер канала можно установить с помощью радио.setChannel (0x125); Максимальное число предположительно равно 125. Однако я исследовал спектр сигнала в Sdrsharp с помощью радиотюнера, и оказалось, что частота на максимальном канале очень низкая.

Я начал увеличивать число и добрался до 180 radio.setChannel (125); частота была 2525 МГц, как указано. Получается, что количество каналов радиомодуля не 125, а 180? Я определил число 180 экспериментально. В литературе говорится, что он имеет 125 каналов шириной 1 МГц. Самое интересное, что Arduino IDE не выдает ошибок при вводе большого количества каналов. Скажите мне, как вы можете ускорить процесс переключения каналов, чтобы понять, как они переключаются. Чтобы вручную перепрошивать его в течение длительного времени при смене каждого канала.

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9, 10); // использовать 9 × 10
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; 
byte counter = 1;

void setup() {
  Serial.begin(9600); 

  radio.begin(); //активировать модуль
  radio.setAutoAck(0); //режим подтверждения, 1 вкл. 0 выкл
  radio.setRetries(0, 15); //(время между попытками связаться, количество попыток)

  radio.setPayloadSize(32); //размер пакета, в байтах

  radio.openWritingPipe(address[0]); //у нас канал 0, мы открываем канал передачи данных
  radio.setChannel(125); //выбираем канал (в котором нет шума!) 0...125

  radio.setPALevel (RF24_PA_MIN); // уровень мощности передатчика. Чтобы выбрать RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate (RF24_2MBPS); //обменный курс. Чтобы выбрать RF24_2 МБИТ/с, RF24_1 МБИТ/с, RF24_250 КБИТ/с
  radio.powerUp(); //начало
  radio.stopListening(); // не слушайте радиопередачи, мы являемся передатчиком
}

void loop(void) {
  while (1)
  {
    radio.write(&counter, 1);
    //Serial.println(счетчик);
  }
}

Можно ли последовательно переключать номер канала radio.setChannel (0x180) в пустом цикле? Спасибо!

Я попытался сделать это:

void loop (void) {
     for (int n = 0; n <126; n ++)
     {
       radio.setChannel (n); // выберите канал (в котором нет шума!) 0 ... 125
       radio.write (& counter, 1);
       delay (1000);
     }
}

Однако radio.write (& counter, 1) должен работать отдельно от любых циклов, чтобы избежать задержек. В противном случае он не будет работать корректно.

, 👍1

Обсуждение

181 != 0x181 - изучите свои основы., @Majenko

setChannel ожидает однобайтовое значение, поэтому ваше 0x180 будет усечено до 0x80 (что равно 128 в десятичной системе счисления). Затем библиотека [понижает это значение до 125, потому что это слишком высокое значение] (https://github.com/nRF24/RF24/blob/master/RF24.cpp#L448 )., @Gerben


1 ответ


2

Вы путаетесь с числовыми базами. Число с префиксом 0x является шестнадцатеричным. Это база 16, а не база 10.

0x125 на самом деле равно 293. Если вы попытаетесь втиснуть 293 в 8-битный регистр, он сократится до 37.

Канал 125 равен 0x7D в шестнадцатеричном формате.

Я не могу сразу вспомнить, насколько велик регистр для номера канала, но будет достаточно 7 или 8 бит (вероятно, фактически используется только 7 бит), поэтому наибольший номер канала, который вы могли бы ввести, будет 127, что равно 0x7F, после чего он снова начнется с канала 0 для 128 или 0x80.

,

Спасибо, но как вы можете автоматически переключать каналы по порядку?, @Антон

В том виде, в каком вы уже есть, но вам может потребоваться отключить питание перед переключением каналов., @Majenko

Можно ли удалить префикс 0x и ввести номер канала от 0 до 125 в виде десятичного числа? В конце концов, это гораздо понятнее и удобнее., @Антон

Конечно. Это просто человеческое представление числа. Вы могли бы даже зайти так далеко, чтобы использовать от 0 до 0175 и использовать восьмеричное число, если хотите. Это просто цифры., @Majenko

В конечном счете, от вас зависит следовать правилам и положениям, установленным агентством по регулированию беспроводного спектра вашей страны. Если вы находитесь в радиочастотном диапазоне, имеете соответствующую лицензию и законную власть, с вами все в порядке. Судя по вашему сообщению, вы можете сделать это с помощью Sdrsharp., @Gil