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

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

  1. ИгорьК

    ИгорьК Гуру

    Команды модуля не предусматривают "перезагрузки". Где Вы такое увидели?
     
  2. Gurf

    Gurf Нуб

    Я не увидел:) мне просто нужно решить проблему необходимости перезагрузок при сбоях (скажем, из-за помех в питании). Дело в том, что раза 3 в день приходится перезагружать приемник и передатчики руками - я вот и подумал, что хорошо бы решить это дело программно. Слетели настройки модуля после сбоя - в лупе они взяли и прописались еще раз... Как-то так можно сделать? Конденсаторы (керамика плюс электролит припаяны). Как еще улучшить ситуацию не знаю
     
  3. zhenya_alex

    zhenya_alex Нерд

    Всем здравствуйте. Пробую запустить связку Arduino nano 3.0/NRF24L01+ и Arduino Leonardo/NRF24L01+. Говорю честно - досконально изучены все 30 листов данной темы, учтены все возможные пожелания и по питанию модулей и по заданию начальных параметров в setup. Простейшая задача отправки сообщения с nano 3.0 на Leonardo работает отлично, а вот с Leonardo отправить ничего ну никак не выходит. То есть когда Leonardo выступает в качестве передатчика, то приёмник nano 3.0 не видит абсолютно ничего. При этом тестовый скетч Scanner на nano 3.0 отрабатывает как по примеру, а на Leonardo при выводе в serial отсутствуют первые две строки, по которым определяется номер канала (строки с зашумлённостью при этом на месте). Модули NRF местами менял, дело не в них. Пробовал библиотеки maniacbug и tmrh20. Начал подозревать о какой-то несовместимости то ли библиотек с Leonardo (то есть с atmega32u4 в целом, поскольку на Arduino Pro Micro аналогичная проблема) то ли самого модуля NRF. Поэтому вопрос - у кого-нибудь получилось осуществить передачу используя Arduino на контроллере atmega32u4 ? И если получилось, то какими средствами? Буду благодарен за любую помощь или подсказку.
     
    Последнее редактирование: 15 янв 2016
  4. Gurf

    Gurf Нуб

    Нашел в библиотеке метод failureDetected. Сделал в лупе проверку этим методом на наличие "неустойчивых проблем с модулем" (перевод цитаты из описания метода). Вот код проверки:
    Код (C++):
    //переменная для проверки
    boolean WrongRadio=false;

    //процедура инициализации модуля
    void StartRadio(void)
    {
       radio.begin();
       delay(2);
       radio.setDataRate(RF24_250KBPS); // Скорость передачи
       radio.setChannel(111); // Номер канала
       radio.setPALevel(RF24_PA_MAX);//мощу на максимум!!
       radio.setPayloadSize(1);//размер статич. буфера 1 байт -мне хватит
       radio.setRetries(15,15); // Кол-во попыток и время между попытками
       radio.openWritingPipe(pipes[0]); // Открываем канал передачи
    }
    void setup (void)
    {
       delay(2000);//пауза для прокачки конденсаторов
       StartRadio();
    //далее-еще какой-то код
    }
    void loop(void)
    {
      //проверка на хардварный сбой
       if(radio.failureDetected){
          WrongRadio=true;//запоминаем, что сбой имел место
          //м.б. сюда тоже добавить инициализацию модуля?
          radio.failureDetected = 0;//сброс ошибки
       }
      //если сбой исчез (скажем, питание модуля восстановилось, но перед этим сбой имел место)
      else if (WrongRadio==true){
          //... то "поднимаем модуль"
          delay(2000);//пауза для прокачки конденсаторов
          StartRadio();//инициализация модуля после сбоя
          WrongRadio = false; //сбрасываем инфу о сбое
      }
      else
    {
      рабочий код в лупе
    }
    }
    В общем, протестил тем кодом, что выше - после варварского отключения питания модуля (сдергиванием провода с ноги) происходит восстановление нормальной работы передатчика. Вот только не знаю - что это за "неустойчивые проблемы с модулем", которые отслеживает метод failureDetected - что еще он может отловить, кроме сбоя питания модуля? Хотел об этом знатоков этой ветки спросить! Например, возможно ли будет описанным способом программно решить проблему с неустойчивым питанием, наводками и еще бог весть какими сюрпризами энеэрэфки?
     
    Последнее редактирование: 15 янв 2016
  5. ИгорьК

    ИгорьК Гуру

    При правильном подключении, и тем более - получении сигналов, проблема может быть в конфликте ноги, отвечающей за CSN. Меняли ее?
     
  6. ИгорьК

    ИгорьК Гуру

    Модуль не имеет ноги, отвечающей за ресет. Соответственно, никаким программным способом его не перегрузить, можно только провести повторную инициализацию.
    Соответственно, если проблема в питании - конденсаторы, конденсаторы... Больше конденсаторов. Возможно, ионистр надо посмотреть, правда я даю совет навскидку - не разбирался с ними.
    Ну или жестокая релейная перезагрузка, или действительно реле на питание, или питание через транзистор. Здесь есть очень крутой товарищ Onkel - он может проконсультировать.
     
  7. Gurf

    Gurf Нуб

    ну это я повторную инициализацию после сбоя и называл перезагрузкой. Кондеи уже напаяны, что думаете про метод о котором я писал постом выше?
     
  8. ИгорьК

    ИгорьК Гуру

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

    Gurf Нуб

    В п
    Модули ко мне из Китая ходят подолгу-а что-то решать сейчас нужно. В проекте 4 модуля задействовано из 2-х разных партий и то с тем, то с другим затыка. После ручной перезагрузки - опять часы ждать до следующего сбоя. У меня дома пропахало как-то раз все двое суток без отдыха - без единого ресета. Перенес в другое помещение - и ресетики изредка требуются. Может там наводок больше - бесперебойники компьютерные кругом, провода какие-то... А наводки в принципе могут модуль ввести в ступор, или это только по питанию скачки делают? А м.б. эти наводки и вызывают помехи питания? Я не спец просто в электротехнике
     
  10. ИгорьК

    ИгорьК Гуру

    Кроме электоролитов паяйте керамические конденсаторы параллельно им. Питание можно "успокоить" различными ухищрениями - короткими проводами, индуктивностями.
    2 дня - это очень мало. У меня месяцев по шесть работают. Дальше не знаю - так или иначе электричество пропадает за это время.
     
  11. Gurf

    Gurf Нуб

    сейчас на контакты питания напаяна керамика 0,47 мкФ, параллельно - электролит 2,2 мкФ. Для питания модулей использую такие модули: http://ru.aliexpress.com/item/Free-...1117-3-3V-power-supply-module/1886284352.html
    А что значит "успокоить питание индуктивностями"?
     
  12. ИгорьК

    ИгорьК Гуру

    [​IMG]
    Поищите в интернете ключевые слова LC фильтр, дроссель.
    Но это, конечно, крайний случай. Вам бы осциллографом посмотреть на это питание.

    Ну или попросите Onkel помочь с жесткой перезагрузкой модуля по питанию. Может быть есть способ.
     
  13. Gurf

    Gurf Нуб

    Спасибо. Все ж таки, м.б. повторные инициализации модуля по условию, или по таймеру меня спасут... От нескольких ресетов в день
     
  14. ИгорьК

    ИгорьК Гуру

    Ну а что мешает код инициализации вынести в отдельную функцию и вызывать ее как в сетапе так и по таймеру? Посмотрите что получится.
    А сделаете перезагрузку по питанию - приходите, делитесь.
     
  15. Gurf

    Gurf Нуб

    интересно все же порыть метод failureDetected - что кроме сбоя питания он может отловить? Если он сможет отловить, что модуль у меня "просто висит" - то это решение. Походу, только испытания дадут ответ...
     
  16. ИгорьК

    ИгорьК Гуру

    В вашем коде не полная инициализация модуля, кстати. Я же в первом посте написал - ройте библиотеку и инициализируйте модуль по-полной. То есть, делайте одинаковыми все установки, которые только позволяет делать библиотека.
     
  17. Gurf

    Gurf Нуб

    Ну неполная то инициализация по моему - не причина таких проблем как у меня. Типа проработал час, потом вдруг заметил, что "не полностью инициализировался" и все зависло! Или и такое может быть?
    Там просто в разделе optional библиотеки столько этих самых опций, что мама не горюй. Пользуюсь этой библиотекой: http://tmrh20.github.io/RF24/classRF24.html#a2e40fe66d1231a333aa2534e8491f828
    А так, из того, что есть в рекомендованном Вами пакете инициализации у меня отсутствуют
    Код (C++):
    radio.setAutoAck(1);
    radio.setCRCLength(RF24_CRC_16);
    Первая строчка для меня неактуальна, т.к. я ответ приемника о приеме вообще не использую. Или ее тоже лучше прописать для стабильности?
     
    Последнее редактирование: 15 янв 2016
  18. zhenya_alex

    zhenya_alex Нерд

    Вмешаюсь в ваш разговор. Пин выбора режима приём/передача, конечно в какой-то момент и его перебирал (2-3 варианта), более того пробовал подключать к другому контроллеру на базе atmega32u4 (Pro Micro) и там тоже разные варианты пинов CSN - абсолютно аналогичное поведение. А есть конкретные требования к характеристикам, которыми должен обладать пин CSN контроллера ? Не знаю что ещё предположить.
     
    Последнее редактирование: 15 янв 2016
  19. ИгорьК

    ИгорьК Гуру

    Писать все что можно. Вы поймите - я подбирал для своих модулей, что есть у меня. Но это не значит, что этого достаточно для Вас.
     
  20. ИгорьК

    ИгорьК Гуру

    Питание. Все сделали по питанию?