NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
Полное раскрытие: я новичок.
У меня есть Arduino Nano и Mega, а также пара модулей NRF24L01+ PA (именно эти: http ://www.elektrotedarik.com/Images/Urun/11122013173429.jpeg)
Я пытаюсь заставить их работать. Я работаю над этим руководством с библиотекой RF24: https://arduino-info.wikispaces.com/Nrf24L01-2.4 ГГц-HowTo
На Arduino Nano все работает идеально. Подключаю всё как сказано и настраиваю рацию:
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
fdevopen( &my_putc, 0);
radio.begin();
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipe);
Когда я вызываю radio.printDetails();
, я получаю хороший результат в последовательном мониторе:
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 � = 0xe8e8f0f0e1 0xc2c2c2c2c2
RX_ADDR_P2-5 � = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe8e8f0f0e1
RX_PW_P0-6 � = 0x20 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR � = 0x03
RF_CH = 0x4c
RF_SETUP � = 0x27
CONFIG = 0x0c
DYNPD/FEATURE � = 0x00 0x00
Data Rate = 250KBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_HIGH
Все как и ожидалось. Если вынуть провод (для проверки), то на нем отображаются все нули, когда подключаю обратно, снова отображается правильно, так что я предполагаю, что он в рабочем состоянии. Потом пробую то же самое с Мегой, но даже после перепроверки проводки через 4 раза не работает. Вот что я получаю с тем же кодом:
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 � = 0x0000000000 0x0000000000
RX_ADDR_P2-5 � = 0x00 0x00 0x00 0x00
TX_ADDR = 0x0000000000
RX_PW_P0-6 � = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR � = 0x00
RF_CH = 0x00
RF_SETUP � = 0x00
CONFIG = 0x00
DYNPD/FEATURE � = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = Disabled
PA Power = PA_MIN
Пробывал много раз, безрезультатно. Затем я наткнулся на несколько тем, в которых говорилось о разных пинах. Изменил контакты, чтобы они соответствовали контактам MOSI, MISO, SCK, CE, CSN Mega, безрезультатно. Я пробовал ту же самую конфигурацию с людьми, которые говорили, что она работает, но безрезультатно. Затем я наткнулся на то, что Mega по иронии судьбы не может подавать достаточный ток от контакта 3V3 (в то время как Nano прекрасно может) и не может питать NRF24L01 + PA. Я попробовал получить 3 В от моего блока питания (мой блок питания имеет либо 3, либо 4,5 В, я не могу рисковать сжечь свой трансивер напряжением 4,5 В). Он по-прежнему не работает и за считанные секунды стал очень горячим (тот, что подключен к моему нано, вообще не нагревается). Я сразу его выключил, подумал, что что-то спалил, поменял местами трансивер Нано, и он (к счастью) работает. Так что с усилителями NRF24L01+ проблем нет. Почему он не работает с Mega (я также пробовал самую низкую мощность) и почему он сильно нагревается при подключении к внешнему источнику питания? Что еще я могу сделать?
ОБНОВЛЕНИЕ: Я добавил на приемную сторону развязывающий конденсатор емкостью 470 мкФ (тот, который подключен к Mega), кажется, стало хуже.
Очень интересное наблюдение: если прикоснуться к неработающему приемнику, он начинает отлично принимать сигнал. Если я отпущу его, сигнал снова потеряется.
ОБНОВЛЕНИЕ 2: Не обращайте внимания на последнее обновление «когда я касаюсь...», похоже, оно связано с проводкой (их еще не паял, просто использовал перемычки)
ОБНОВЛЕНИЕ 3: Мое первоначальное предположение верно: что-то происходит, когда я касаюсь кабелей. Происходит нечто более странное. Я припаял свой модуль к плате-прототипу, и мой модуль иногда работает даже без подключенного контакта CE. Когда я прикасаюсь к кабелю, он передает и останавливается. Здесь загорание контакта TX означает, что он получает сигнал (я записываю данные в последовательный порт). Он получает данные (и да, правильные данные), когда я прикасаюсь к кабелю контакта CE:
Как это возможно? Выполняет ли контакт/кабель CE (и я) роль антенны? Нет смысла.
ОБНОВЛЕНИЕ 4: Если я подключу этот контакт к 5 В, весь приемник начнет работать абсолютно идеально, без каких-либо ошибок или падений. Но я не могу понять: почему? И не перегреется ли он или не закоротит ли что-нибудь?
@Can Poyrazoğlu, 👍-1
Обсуждение2 ответа
У меня NRF24L01 — не совсем та модель, моя выглядит так:
Распиновка:
Я подключил его к своему Mega2560 вот так:
NRF24L01 Mega2560
---------- ----------------
VCC 3.3V pin
Gnd Gnd
CSN D10
CE D9
MOSI D51 - (MOSI)
SCK D52 - (SCK)
IRQ N/C
MISO D50 - (MISO)
Я использовал библиотеку RF24. Затем я столкнулся с рядом проблем.
Во-первых, скетч «Начало работы» не очень хорошо работает даже между двумя Уно по причинам, которые я так и не понял.
Однако скетч "pingpair" работал нормально между двумя Unos. Но не, когда одно устройство было перемещено в Mega2560! Я пробовал разные вещи, включая отдельный источник питания и перемещение контактов CSN/CE, но безрезультатно.
Затем я взглянул на Vcc/Gnd с помощью осциллографа:
Это более половины вольта пульсации! Я припаял конденсатор 0,1 мкФ между Vcc и Gnd на NRF24L01, и проблемы исчезли. Используя скетч pingpair, у меня теперь есть:
Now sending 56...ok...Got response 56, round-trip delay: 23
Now sending 1080...ok...Got response 1080, round-trip delay: 21
Now sending 2103...ok...Got response 2103, round-trip delay: 21
Now sending 3126...ok...Got response 3126, round-trip delay: 21
Now sending 4148...ok...Got response 4148, round-trip delay: 22
Now sending 5171...ok...Got response 5171, round-trip delay: 22
Now sending 6194...ok...Got response 6194, round-trip delay: 22
Now sending 7217...ok...Got response 7217, round-trip delay: 22
Now sending 8240...ok...Got response 8240, round-trip delay: 21
Now sending 9263...ok...Got response 9263, round-trip delay: 21
Now sending 10286...ok...Got response 10286, round-trip delay: 21
Поэтому я предлагаю использовать развязывающий конденсатор на NRF24L01.
Дополнительно
У меня все еще были некоторые странные проблемы, когда вышеуказанные результаты фактически были получены с NRF24L01 без антенны. Тот, что с антенной, имел гораздо более маргинальные результаты.
Вот результаты с антенной:
Now sending 181378...ok...Failed, response timed out.
Now sending 182581...ok...Failed, response timed out.
Now sending 183784...failed.
Failed, response timed out.
Now sending 185047...failed.
Failed, response timed out.
Now sending 186309...ok...Got response 186309, round-trip delay: 26
Now sending 187336...ok...Got response 187336, round-trip delay: 22
Now sending 188359...ok...Failed, response timed out.
Now sending 189561...ok...Got response 189561, round-trip delay: 22
Тем не менее, я думаю, что стоит попробовать развязывающий конденсатор.
И почему он может сильно нагреваться при подключении к внешнему источнику питания?
Вы подключили землю?
Нет, заземление не было подключено, более того, это был неисправный источник питания, в режиме 3 В я видел на вольтметре около 4-4,2 В. Я думаю, что это в совокупности объясняет это., @Can Poyrazoğlu
Что бы вы ни делали, всегда подключайте заземление. В противном случае у вас может возникнуть огромное напряжение, которое возникает из-за разницы в заземлении в вашей домашней проводке и появляется на чипе процессора., @Nick Gammon
Вы определенно правы, и я на самом деле знал об этом (и это действительно имеет смысл интуитивно, GND должны быть равны). Мой новичок и отсутствие опыта заставили меня забыть об этом :), @Can Poyrazoğlu
Старая тема.
Но хочу поделиться своим решением при подключении nRF24 к МЕГЕ. Я забыл сайт, на котором нашел решение.
Это просто добавление pinMode(x, OUTPUT)
в setup
, где x
— выбранный вами контакт CSN.
Я считаю, что проблема связана только с контактом 53 только на MEGA.
Однако добавляйте это во все мои скетчи, с MEGA или без нее, просто для предосторожности.
- SPI с преобразователем уровня на другом конце соединения
- nRF24l01+ вывод мусорных значений
- Отправка структуры данных с 2 полями int из Arduino в Raspberry через NRF24L01
- Питание Arduino Mega 2560 от Raspberry Pi Usb
- nRF24L01 использует отправителя в качестве получателя и наоборот с помощью библиотеки RF24
- Проблема с SPI при использовании трансивера RF24 NRF24L01 со светодиодной матрицей MD_MAX72xx
- Модули NRF24L01 +pa +lna не взаимодействуют
- Как разделить входящую строку?
Отсутствие питания звучит правильно, получение горячего звучит неправильно. Даже когда он не работает правильно при питании от контакта 3v3, вы установили конденсатор на 10 мкФ на контакты питания nRF?, @Roger Rowland
Вы так и не упомянули, применяли ли вы конденсатор, предложенный Роджером. Даже в руководстве, на которое вы ссылаетесь, упоминается, что Megas, в частности, демонстрируют эту проблему., @Jake C
@JakeC Я припаял конденсатор на 470 мкФ и все стало еще хуже. Теперь он подключается гораздо сложнее и сразу отключается., @Can Poyrazoğlu
@JakeC он передает очередями. Секунду-две отличная передача, потом, скажем, секунд 5-6 вообще ничего., @Can Poyrazoğlu