nRF24L01+ Всегда готов
- Войдите на сайт для отправки комментариев
Доброго времени суток. Так же купил россыпью (10шт) этих модулей. Все исправны, Сканером проверял. Конденсаторы напаял. Питаю от 2 разных источников 3.3В по 1А каждый. Написал код для ардуино Децимия (передатчик) и Мега (приемник). Коды, думаю, приводить смысла нет, т.к. по ним вопросов нет и они идеально работают. НО! эти передатчики часть бОльшего проекта с кучей периферии. (Экран, EEPROM, GPS, часы реального времени, SD карта и т.п.). Когда же я в ключаю код приемника в общий код в серийный порт постоянно выдаются нули, т.е. модуль якобы всегда принимает какие-то сообщения. Никак не могу разобраться что не так. Имею мнение, что это влияет SD карта (больше к ICSP порту ничего не подключено). Это возможно?
Код приемника, на всякий случай.
#include<SPI.h> #include<nRF24L01.h> #include<RF24.h> const uint64_t pipe = {0xF0F0F0F0E1LL}; //адрес трубы RF24 radionrf(7, 6); //Мега byte red[4] = {1, 2, 3, 4}; //куда получем сообщение void setup() { Serial.begin(9600); //запуск серийного опрта radionrf.begin(); //запуск радиомодуля delay(100); //небольшая задержка для запуска radionrf.enableDynamicPayloads(); //отключаем изменение размера передаваемого буфера???? radionrf.openReadingPipe(1, pipe); //открываем трубу для прослушки radionrf.openWritingPipe(pipe); //Открывем трубу для отправки radionrf.startListening(); //начинаем слушать эфир } void loop() { int y = 4; if (y != 8) { while(9){ if ( radionrf.available() ) { //если в эфире что-то есть, то radionrf.read( red, sizeof(red) ); //принимаем сообщение Serial.print(red[0]); //и выводим в серийный порт Serial.print(" "); Serial.print(red[1]); Serial.print(" "); Serial.print(red[2]); Serial.print(" "); Serial.print(red[3]); Serial.println(" "); } } } }//конец loop
Цикл while я вставил для проверки, т.к. в основном коде для которого я приготовил этот кусок, код приемника в loop тоже будет в таком цикле.
Понимаю, что информации мало, но в основном проекте более 3500 строк, вряд ли кто будет разбираться, мне бы понять хоть в какую сторону копать(
Буду признателен за любую помощь.
а вы уверены что рядом нет никаких передатчиков на 2.4 Ггц?
попробуйте канал выше 108
а вы уверены что рядом нет никаких передатчиков на 2.4 Ггц?
попробуйте канал выше 108
Передатчики есть, но я использовал сканер частот с форума Амперки, выбрал чистый канал. Попробовал канал radionrf.setChannel(0x112); к сожалению не помогло.
строка 28 должна выглядеть так
еще можно добавить в setup() чтобы не ждал автоответа
Я делал на основе этого форума, вроде как перед массивом не нужен знак &. И мне кажется что функция ожидания автоответа относится больше к передатчику и врядли повлияет на работу приемника.
Тоже не помогло. А SD карта не может влиять?
строку 18 удалите, зачем вам часть передатчика, да и еще одинаковая с приемником в одном флаконе
А SD карта не может влиять?
а отключить не?
Тоже не помогло. А SD карта не может влиять?
Очень даже может влиять, ибо и SD и nRF24 сидят на SPI.
Тоже не помогло. А SD карта не может влиять?
Очень даже может влиять, ибо и SD и nRF24 сидят на SPI.
Благодарю, как я и полагал (см.1 сообщение) и как Вы и сказали, дело в SD карте, если после загрузки с нее картинки отключить управляющий пин или просто ее достать, то приемник начинает работать. Есть какие-либо пути решения? Может можно как-то на время отключать карту? Смотрел библиотеку, не нашел там как можно отключить карту( Еще нашел похожий топик про совместимость. Не помогло.
Отключить SD не могу, т.к. там куча картинок, необходимых для проекта.
строку 18 удалите, зачем вам часть передатчика, да и еще одинаковая с приемником в одном флаконе
Спсибо, не заметил.
Не сталкивался пока с работой sd но можно ли их использовать отдельно? На пример свободной ногой подавать питане к sd. Это костыль конечно но все же. Похоже у Вас библиотеки к sd и передатчику изпользуют какие то совсестные функции. Может попробывать другие библиотеки?
Зачастую хватает манипулирование пинами SS (или CE - пин выбора устройства) , ну например как то так:
Но, нередко встречаются не правильные модули, с которыми это не прокатывает. В таких случаях одно из устройств или SD или NRF можно пересадить на softSPI. В библиотеке SD.h это предусмотрено, если же это будет NRF-модуль, то дополнительно подключается библиотека DigitalIO.h, а в файле RF24_config.h который входит в состав RF22.h делаются соответсвующие изменения #define SOFTSPI // Requires library from https://github.com/greiman/DigitalIO
PS У меня радиомодуль nRF24L01+ замечательно работает на softSPI.
у меня на МК висит nrf24l01, enc28j60, sd card и все работает нормально, правда все подключено через конвертер логических уровней 3.3 - 5в на TXS0108E
Благодарю всех, попробую - отпишусь.
Таки попробовал. Помогла строка
перед инициализацией SD карты. Техномагия блин. Теперь радиомодуль и карточка мирно уживаются на одном железном SPI.
А нет, что-то я рано обрадовался. Работало запусков 5 потом вернулось как было.
Проблема решилась подключением SD к SPI через буфер HEF4050, а nRF24L01+ напрямую к выходам SPI на ардуино.