NRF24 и Arduino Nano при одновременном использовании

Я создаю проект радиоуправляемого автомобиля и использую 2 NRF24 для связи. У меня есть Arduino Uno, Nano и Nano Every. NRF отлично работает с Uno и Nano в любых комбинациях, но использование Nano в качестве TX или RX не работает.

Я попробовал NRF24 и NRFLite, и оба говорят: "Не удается связаться с радио".

При использовании примеров библиотеки NRFLite, Basic_TX в Uno/Nano и Basic_RX в Nano Every, Uno/Nano сообщает, что передача прошла успешно, даже если в каждом указано "Не удается связаться с радио". Это длится около 1 секунды, прежде чем Uno/Nano сообщит, что передача снова не удалась. Это происходит каждый раз, когда вы сбрасываете настройки. Это похоже на то, как если бы NRF24 включился, но затем не смог связаться с каждым.

Я использую адаптеры питания для NRF и подключаю их через вывод 5 В. С конденсаторами тоже не повезло. Поменяли местами все провода, а также дважды проверили все соединения.

Что-то не так с нанотехнологиями? Работает ли это с NRF24 для кого-нибудь?

У меня совершенно закончились идеи, как это исправить. Заранее благодарю вас

, 👍3

Обсуждение

Как вы подключаете Nano каждый и определяете определение контакта на своем скетче? Нано у каждого есть штифт SS на [D8](https://github.com/arduino/ArduinoCore-megaavr/blob/master/variants/nona4809/pins_arduino.h#L47), не похоже на большинство плат на базе Arduino AVR на выводе 10., @hcheung

У меня есть SCK на D13, MISO на D12, MOSI на D11, CE на 7 и CSE на 8. Я не знаю, что такое пин SS :(, @Sumemerboy

SS-это ведомый выбор, некоторые называются Chip Select (CS), вы можете попробовать использовать контакт 8 в качестве CE и выбрать другой контакт для CSE., @hcheung

К сожалению, с этим не повезло. Я купил новый nrf24, и это тоже не помогло, он работал с обычным Nano tho. Похоже, у меня все Нано просто сломано., @Sumemerboy


1 ответ


3

Я столкнулся с той же проблемой, когда использовал nRF24L01+ и Arduino Nano Every для передачи данных в Arduino Uno с помощью nRF24L01+. Поэтому я решил проблему следующим образом. Я надеюсь, что это может помочь вам и кому-то еще.

  1. Прежде всего, вы должны добавить платы Arduino megaAVR в менеджер плат.

1.1 Сначала необходимо добавить URL-адрес JSON-файла их Менеджера плат в: Файл > Настройки >> Дополнительные URL-адреса менеджера плат и вставить ссылку: >>https://raw.githubusercontent.com/amperka/iskra-boards/master/package_amperka_index.json

1.2. Затем перейдите в раздел Инструменты>Менеджер плат, найдите платы Arduino SAMD и установите их>

1.3. Выберите Arduino Nano Every в меню Инструменты>Плата>>Платы Arduino megaAVR>>>Arduino Nano Every>>>

  1. Загрузите библиотеку для RF24. Он должен быть совместим с архитектурой megaavr, потому что в Arduino Nano Every использует микросхему ATmega4809. Я использую последнюю версию RF24-1.4.1. Вот ссылка на библиотеку: https://www.arduinolibraries.info/libraries/rf24

  2. Вы должны проверить, правильно ли вы подключили nRF24L01+ и arduino.

Распиновка Arduino Uno выглядит следующим образом: 5 В - VCC при подключении nRF24L01+ через адаптер nRF24L01+ (я использую адаптер) или 3,3 В - VCC без адаптера

GND - GND

9 - контактный - CE

10 - контактный - CSN

11 pin - MOSI

12 контакт - МИСО

13 контакт - SCK

не подключен - IRQ

Тем не менее, я использую другую распиновку для Arduino Nano Every. Когда я использую ту же распиновку, что и Arduino Uno, он не может найти nRF24L01+. Вы можете проверить это в последовательном мониторе, используя рисунок ниже. Если вы получите нули в третьей строке, например, что-то вроде этого: RX_ADDR_P0-1 = 0x0000000070 0x0000000000. Это означает, что Arduino Nano Every неправильно подключен к nRF24L01+, и Arduino Nano Every этого не видит. Я полагаю, что проблема с библиотекой RF24 и ее следует исправить. Возможно, я ошибаюсь, и проблема в другом.

Поэтому я использую следующие распиновки для Arduino Nano Every: 5 В - VCC при подключении nRF24L01+ через адаптер nRF24L01+ (я использую адаптер) или 3,3 В - VCC без адаптера

GND - GND

10 - контактный - CE

A3 - CSN (если вы получите нули в третьей строке RX_ADDR_P0-1 в последовательном мониторе, затем измените A3 на другой. Вы можете варьировать вывод от A5 и так далее до A0). не используйте A7 и A6, потому что на некоторых платах разработчиков моделей A6 и A7 являются только аналоговым входом.

11 pin - MOSI

12 контакт - МИСО

13 контакт - SCK

не подключен - IRQ

Скетч для проверки:

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

RF24 radio(10,A3);  // for arduino nano every
//RF24 radio(9,10); // for arduino uno

const uint8_t num_channels = 128;
uint8_t values[num_channels];
void setup(void)
{
  Serial.begin(9600);
  printf_begin();
  radio.begin();
  radio.setAutoAck(false);
  radio.startListening();

  radio.printDetails();
  delay(5000);

  radio.stopListening();
  int i = 0;
  while ( i < num_channels )  {
    printf("%x",i>>4);
    ++i;
  }
  printf("\n\r");
  i = 0;
  while ( i < num_channels ) {
    printf("%x",i&0xf);
    ++i;
  }
  printf("\n\r");
}
const int num_reps = 100;

void loop(void)
{
  memset(values,0,sizeof(values));
  int rep_counter = num_reps;
  while (rep_counter--) {
    int i = num_channels;
    while (i--) {
      radio.setChannel(i);
      radio.startListening();
      delayMicroseconds(128);
      radio.stopListening();
      if ( radio.testCarrier() )
        ++values[i];
    }
  }
  int i = 0;
  while ( i < num_channels ) {
    printf("%x",min(0xf,values[i]&0xf));
    ++i;
  }
  printf("\n\r");
}
int serial_putc( char c, FILE * ) {
  Serial.write( c );
  return c;
}

void printf_begin(void) {
  fdevopen( &serial_putc, 0 );
}

Вот правильный вывод в последовательном мониторе третьей строки без нулей: RX_ADDR_P0-1 = 0xf0f0f0f0d2 0xc2c2c2c2c2

SPI Speedz  = 10 Mhz
STATUS      = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1    = 0xf0f0f0f0d2 0xc2c2c2c2c2
RX_ADDR_P2-5    = 0xc3 0xc4 0xc5 0xc6
TX_ADDR     = 0xf0f0f0f0d2
RX_PW_P0-6  = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA       = 0x00
EN_RXADDR   = 0x02
RF_CH       = 0x00
RF_SETUP    = 0x14
CONFIG      = 0x0f
DYNPD/FEATURE   = 0x38 0x38
Data Rate   = 1 MBPS
Model       = nRF24L01+
CRC Length  = 16 bits
PA Power    = PA_HIGH
ARC     = 15

следующие две строки представляют собой список доступных каналов, которые следует читать сверху вниз (т. е. у нас 127 каналов, еру каналы представлены в 16-разрядной версии, первая строка-первая цифра каждого из 127 каналов, вторая строка-вторая цифра каждого из 127 каналов).

00000000000000001111111111111111222222222222222233333333333333334444444444444444555555555555555566666666666666667777777777777777

0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

затем отображается уровень шумности каналов. Примерно от канала 09 до канала 3f есть шумы. этот шум от моего Wi-Fi-роутера и какой-то другой электроники. вы должны выбрать бесплатные каналы для своей цели.

00000010114663444533233300000000001000011233544433221100112223212010000000000000000000000000000000000000000000000000000000000000

00200000035575656777697332111321022125625559643632551111000333012000000000100000010001000000001000000000000011010000000000000000

00000001135a9a767767c89a85646565866555645897434644445200121212122000000000000000000000001000000000000000011000000010000000000000

00101000035567667357878a51123341220322335373542222122000112313112000000001010000000001000000020000000010000000000000100000000010

11000011047587577457694521122232111121243247542232210100002222111000000000100002000002000000000000000000000000000010000000000000

Примечание:

  1. Проверьте Инструменты. Там должно быть: Плата:Arduino Nano Every; Эмуляция регистров: "ATMEGA328"; Порт:COM#(каждый Arduino Nano).

  2. некоторые ошибки передачи могут возникать из-за плохих контактов между проводами и выводами arduino, поэтому провода следует припаять.

Если все в порядке, то вы можете использовать свои скетчи для приемника и передатчика соответственно. Удачи!

,

итак, вы говорите: вывод 9 не работает как CE или вывод 10 не работает как CS, если Nano Every используется с эмуляцией ATmega328? не могли бы вы попробовать, в чем проблема?, @Juraj

Проблема в том, что CSN не работает на цифровых выводах Arduino Nano, но он работает на одном из Arduino Uno. CSN работает только на аналоговых выводах (A5-A0) Arduino Nano Каждый. CE хорошо работает, если вы подключаете его к 9 или 10 контактам arduino nano каждый. На самом деле я нашел его случайно., @stremyanka2000

UPD: Если вы используете эмуляцию регистров "Нет (ATMEGA4809)", это тоже работает. Я имею в виду, если вы используете распиновку, как показано выше. Иначе это не сработает., @stremyanka2000

У меня нет проблем с использованием pin 10 в качестве CS (для Ethernet) даже в режиме эмуляции 328p, @Juraj

Спасибо вам за эти прекрасные инструкции. После нескольких дней попыток заставить эту проклятую нанотехнологию работать с nRF24L01+, ваш гид сделал это! Я не могу думать о тебе достаточно. Я надеюсь, что это нормально, поделиться этим URL-адресом с другими, кто также пытается встречаться...?? Овации, @Blondie SL