Много мусора у NRF24L01 + PA + LNA

,

Я уже куда не давал питание на эти модули через ESC. И через саму ардуинку, и через стабилизатор, ничего не хочет. Мусор и мусор

а я говорил просматривается почерк! я своего брата определяю на раз в коде!)))

это вы зря, надо знать куда давать, а то и сгореть могли…

вы все таки нарисуйте схемку, ладня я все доделал, пошел спать)))

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

попробуйте в тестах поменять расстояние между можулями, их ориентацию.

CRC вам отсеивает битые пакеты, и это как раз функция CRC. Если с включеной CRC пропадают все пакеты, значмт все пакеты - битые.

Попробйте отсылать не строчу PING а 0, unsigned int 0xffffffff.

4 байта, то-есть. Посмотрите, что придет. У вас не просто битый пакет, он как-то уникально побился, с удвоением символов.

Поменяйте передающее устройство с приемным

ТС, всю тему я не читал, но мой тебе совет, отнеси все свои NRF в помойное ведро, орошая слезами, ничего путного ты с них не получишь.

1 лайк

Спасибо за ответ, но к сожалению не помогло. Пробовал менять расстояние, местами, но увы и ах.

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

RF24 radio(7, 8);
const byte address[6] = "00001";
unsigned int receivedData;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN, 0);
  radio.setDataRate(RF24_1MBPS);
  
  // Размер пакета (2 байта)
  radio.setPayloadSize(sizeof(receivedData)); 
  
  // ОТКЛЮЧАЕМ ВСЁ
  radio.setAutoAck(false);
  radio.disableCRC(); 
  
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read(&receivedData, sizeof(receivedData));
    // Выводим в 16-ричном формате
    Serial.println(receivedData, HEX); 
  }
}
#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>




RF24 radio(7, 8);

const byte address[6] = "00001";

unsigned int payload = 0xFFFF; // Это 2 байта (сплошные единицы)




void setup() {

  Serial.begin(9600);

  radio.begin();

  radio.openWritingPipe(address);

  radio.setPALevel(RF24_PA_MIN, 0);

  radio.setDataRate(RF24_1MBPS);

  

  // Жестко задаем размер пакета (2 байта)

  radio.setPayloadSize(sizeof(payload)); 

  

  // ОТКЛЮЧАЕМ ВСЁ

  radio.setAutoAck(false);

  radio.disableCRC(); 

  

  radio.stopListening();

}




void loop() {

  radio.write(&payload, sizeof(payload));

  delay(100);

}

Пробовал еще отправлять uint32_t payload = 0xFFFFFFFF;

Но результат один:

с вариантом unsigned int payload = 0xFFFF так получает:

FFFF
FFFF
FFFF
FFFF
7FE0
1FF8
7FE
FF9F
1FF8
FFFF
FFFF
FFFF
1FF8
FFFF
FEFF
FFFF
FF07
FFFF
FCFF
FFFF
FF07
E0FF
FFFF
FFFF
C0FF
FFFF
1FFC
1FF8

и со вторым вариантом тоже мусор приходит. Но я заметил, что первые пару пакетов идеально дошли. Подумал, может дело в питании, подключил через ESC с BEC, то есть пустил 5V/3A и также мусор.

С CRC вообще не приходит почему то, даже раз в минуту(((

Заработало, слава Богу, огромное спасибо. Но кроме того, у меня был задан адрес трубы как const byte address[6] = “00001”; Но я поменял на const byte address[6] = “RxTx1”; и поставил побольше скорость и все идеально работает.

Вот код

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>




RF24 radio(7, 8);

const byte address[6] = "RxTx1";

unsigned int receivedData;




void setup() {

  Serial.begin(9600);

  radio.begin();

  radio.openReadingPipe(0, address);

  radio.setPALevel(RF24_PA_MIN, 0);

  

  radio.setDataRate(RF24_2MBPS); 

  

  radio.setPayloadSize(sizeof(receivedData)); 

  

  // ВКЛЮЧАЕМ ПРОВЕРКУ ОШИБОК

  radio.setCRCLength(RF24_CRC_16); 

  radio.setAutoAck(false); 

  

  radio.startListening();

  Serial.println("RX: 2MBPS, CRC ВКЛЮЧЕН");

}




void loop() {

  if (radio.available()) {

    radio.read(&receivedData, sizeof(receivedData));

    Serial.println(receivedData, HEX); 

  }

}

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>




RF24 radio(7, 8);

const byte address[6] = "RxTx1";

unsigned int payload = 0xFFFF;




void setup() {

  Serial.begin(9600);

  radio.begin();

  radio.openWritingPipe(address);

  radio.setPALevel(RF24_PA_MIN, 0);

  

  // Ставим максимальную скорость. 250k этот чип не переваривает.

  radio.setDataRate(RF24_2MBPS); 

  

  radio.setPayloadSize(sizeof(payload)); 

  

  // ВКЛЮЧАЕМ ПРОВЕРКУ ОШИБОК

  radio.setCRCLength(RF24_CRC_16); 

  radio.setAutoAck(false); 

  

  radio.stopListening();

  Serial.println("TX: 2MBPS, CRC ВКЛЮЧЕН");

}




void loop() {

  radio.write(&payload, sizeof(payload));

  delay(100);

}
1 лайк

Ну тогда отметьте пост Бабосика, как решающий проблему :). У Бабосика завелся новый друг-программист, они вдвоем последнее время решили кучу вопросов на форуме.

1 лайк

я бы даже сказал - “железный друг”. Они уже давно вместе.

“- Исключено! Савранский не бросит железного друга!”