nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. gavru

    gavru Нерд

    Нашёл проблему, ответы приходят трубе 0, по этой причине при обращении к трубе например 5, необходимо сперва присвоить трубе адрес трубы 5, а только потом вести передачу, после передачи можно вернуть трубе 0 свой адрес и продолжить принимать по ней пакеты.
    Блин как всё криво, а куда денутся пакеты которые во время смены перемены адреса придут, походу в урну :(
     
  2. Lagvin

    Lagvin Нерд

    Для победителей модуля актуальна тема.
     
  3. darli

    darli Нуб

    Добрый день! уважаемые друзья,не могли бы вы показать как по радиоканалу,используя модули nrf, зажечь и выключить светодиод. на передатчике кнопка управления,а на приёмнике сами светодиоды
     
  4. Lagvin

    Lagvin Нерд

    Смотри .здесь
     
  5. gavru

    gavru Нерд

    Главное начать делать, а остальное приложится :) Вы уж вводную дайте что ли, какой микрик хотя бы.

    Начни с этого:
    http://www.avislab.com/blog/nrf24l01_ru/
     
  6. Green

    Green Гик

    Мужики, а на скорости 250 кб/с у кого-нибудь работает сканер?
     
  7. Coolblaster

    Coolblaster Нерд

    Вот интересно узнать как, не меняя программно ног на Меге, подключить к ней Ethernet shield и nRF24L01+
     
  8. ИгорьК

    ИгорьК Гуру

    Вот так: http://www.gaw.ru/html.cgi/txt/interface/spi

    [​IMG]
     
  9. Coolblaster

    Coolblaster Нерд

    Исчерпывающий ответ :) 2 и более устройств по SPI можно подключить, но как просто это сделать в коде. По I2C совсем все просто зацепить, а вот по SPI что-то не хватает тяму. Надо разобраться.
     
  10. ИгорьК

    ИгорьК Гуру

    В коде, перед обращением к конкретному устройству, надо сбрасывать в ноль соответствующую ногу SS, которая идет к этому устройству. Да и вообще - это будет делаться автоматически, поскольку в начальных установках каждого устройства эта нога указывается. В шилде, скорее всего, она забита по умолчанию в библиотеке (надо узнать ее), а при соединении модуля она должна определяться вами. Надо пробовать.
     
  11. Coolblaster

    Coolblaster Нерд

    Получается на передатчике SCK,MISO,MOSI оставляем на месте, CSN и CE переопределяем на свободные пины Меги, CSN ставим в ноль и пробуем слать ?
     
  12. ИгорьК

    ИгорьК Гуру

    Даже еще проще. Всего то: CSN и CE переопределяем на свободные пины Меги. Все.

    Но может и не заработать. Смотрите какой алгоритм у шины. Когда мастер обращается к какому-то устройству, он сигнал CSN этого устройства должен сбросить в ноль. Остальные аналогичные сигналы других устройств должны находиться в единице.
    Если с модулем NRF все более менее понятно, то как работает интернет-шилд - не известно. Возможно его библиотека считает шилд единственным устройством и всегда держит его сигнал CSN в нуле. Это придется проверять опытным путем.
    Короче, или заработает, или - нет.
    Если нет - придется разбираться с обоими библиотеками поглубже.
     
    Последнее редактирование: 12 авг 2015
  13. Coolblaster

    Coolblaster Нерд

    Подключил, заработало, правда как то очень туповато. Отправляю 11 приходит 1, пробую еще раз не приходит совсем ничего, Мегу в ребут отправляю снова, приходит 11 с ходу, далее не приходит ничего :) может кондера не хватает, но по старой схеме все работало без него. Сейчас пробую другой передатчик с кондером, отпишусь.
     
  14. Coolblaster

    Coolblaster Нерд

    Нет та же беда, через раз и то не весь пакет.
     
  15. ИгорьК

    ИгорьК Гуру

    Запитайте модуль от отдельного 3.3 вольта. Вы же Мегу догрузили еще питанием. Здесь однозначно надо делать самостоятельное питание. Без сомнений.
     
  16. Coolblaster

    Coolblaster Нерд

    хм а ведь идея, сейчас запитаю
     
  17. AlexVS

    AlexVS Гик

    Если не поможет попробуйте softSPI для nRF24. Работает на ура на практически любых пинах.
    Так выглядит инициализация:
    Код (Text):
    #include <DigitalIO.h>
    #include <RF24.h>

    /*
    Конфигурация пинов в файле RF24_config.h
    MISO_PIN = 13;
    MOSI_PIN = 10;
    SCK_PIN = 12;
    */
    const int _ce = 11;
    const int _csn = 9;
    SoftSPI<SOFT_SPI_MISO_PIN, SOFT_SPI_MOSI_PIN, SOFT_SPI_SCK_PIN, SPI_MODE> spi;
    // Конфигурация модуля nRF24L01(+)
    RF24 radio(_ce, _csn);
    Правда для подключения Ethernet у меня есть такая приписочка, чтоб не забыть
    Код (Text):
    /*
    Ардуино взаимодействует с платой расширения по шине SPI,
    объединяющей в себе выводы 11, 12 и 13 в Arduino Uno
    и 50, 51 и 52 - в Arduino Mega.
    На обеих платах в качестве линии SS используется вывод 10.
    В Arduino Mega аппаратный вывод SS (53) не используется для выбора W5100.
    Для Mega2560 заменил SS с Pin 10 на Pin 53.
    // По этому вносим изменения в файле w5100.h
    #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
      inline static void initSS()    { DDRB  |=  _BV(0); };    // вместо Pin 10 используем Pin 53
      inline static void setSS()    { PORTB &= ~_BV(0); };
      inline static void resetSS()  { PORTB |=  _BV(0); };
    */
     
    ИгорьК нравится это.
  18. Coolblaster

    Coolblaster Нерд

    не помогла замена питания, когда отправляешь много мусора например 11111111111111111111 приходит 111 или 1 как то так
     
  19. Coolblaster

    Coolblaster Нерд

    Все, победил его. Проблема была в коде, необходимо было в лупе прогрузить ethernet а только потом выполнить отправку команд через сериал. Теперь осталось допилить веб интерфейс до нормального состояния. Огромное спасибо всем за помощь. -1 свободная нано, пригодится, займусь переписыванием кода, т.к до этого все шло через 2 сериал Меги на вторую нано.
     
  20. Андрей М

    Андрей М Нерд

    Всем привет. Почитал ветку и решил поделиться опытом полугодового использования этих модулей.

    Использую STM8/32, библиотека - адаптированный и чуть-чуть дописанный Mirf. Итак:
    1. Кондер действительно нужен, без него может и не работать, причем признаков провала питания (пустыре регистры) может не быть. Видимо, блок ВЧ модуля критичен к наводкам по питанию.
    2. Проблемы стабильности работы почему-то решились, как только перестал постоянно пинать модуль по SPI и перешел на прерывание. Как оказалось, крайне полезная вещь - никакого поллинга и лишней возни. Единственное НО - по приходу прерывания обязательно нужно его обработать. Прерывание приходит в двух случаях - когда что-то пришло, и когда закончилась передача. В обоих случаях нужно после завершения нужно зачистить буферы и включать режим приема, даже если передача будет уже через 10 мс.

    Использовал модули, как обычные, так и большой дальности (которые PA+LNA), везде все работает, потерь пакетов практически нет, даже рядом с работающим роутером.

    UPD.
    Для режимов работы "вопрос-ответ" полезно делать таймаут по получению данных, к примеру, если в эфире больше 5 секунд тишина, то переконфигурируем модуль и снова взводим таймер. Это позволяет модулю "выплыть" через какое-то время, если он перестал отвечать.
     
    Последнее редактирование: 13 авг 2015
    Coolblaster и ИгорьК нравится это.