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

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

  1. ИгорьК

    ИгорьК Гуру

    Друзья, BGreen, вы когда-то уперлись в тему nRF24 и начали лопатить эту ветку, в которой уже 34 страницы чтения, чтобы найти для себя ответ на один вопрос - как справиться с модулем.
    Я вас очень прошу - поудаляйте свои сообщения про кнопки - это в другой раздел.
    Уважайте тех, кто придет еще сюда не раз с вопросами о модуле.
     
    BGreen нравится это.
  2. shpock

    shpock Гик

    У меня на Leonardo отсылает и принимает на nano и на uno. Питание с модулей, плюс 10 мкФ 25в на саму NRF.
    В сканер на леонардо после инициализации serial, добавляйте while (!Serial), что-бы увидеть все что передает контроллер.
    И конечно MISO, MOSI, SCK только через ICSP. CSN, CE - у меня на 10,9 пинах.
    Leonardo оригинальная ;).
     
  3. Sabantyi

    Sabantyi Нуб

    Народ. Подскажите куда копать или сразу выбрасить
    Купил на али 2 модуля NRF24L01 + spf-pa мшу
    один модуль подключил отдельно 3.3в от лабораторного БП ставил на УНО и НАНО но не как не мог запустить
    первый модель выдавал ток 1А и грелся неимоверно, выяснилось что у него короткое VCC и земля
    второй вроде норм но ничего с ним сделать не могу
    32423423.jpg
    менял пины местами библеотека https://github.com/maniacbug/RF24 и много разных пробовал
    это получается что чип дохлый?!?!
     
  4. WASP

    WASP Нерд

    Господа! Я тут еще кое что нарыл.
    62 мм провод одножильный припаиваем к кончику антенны на плате - связь улучшается раза в полтора!!!!
    Пробовал в квартире. Знаю что это бубны еще те, антенны дело очень не простое, но реально выход если не устраивает связь. Буду пробовать всю длину волны (120мм)...
    Потом отпишусь.
     
  5. BGreen

    BGreen Нерд

    Это риск серьезный, можно спалить RF. Потому что согласование изначально кривое, скорее всего. А провод или улучшит его, или вконец добьет.
     
  6. WASP

    WASP Нерд

    ну вот я и проверю... мне не жалко спалить эту чертову хуюм.....болу:))))) она дешевая.
     
  7. WASP

    WASP Нерд

    Хотя вот подумал. И решил спросить у общественности. А кто пробовал вообще реальное расстояние уверенной передачи данных на этом модуле? Может отпишитесь у кого какие результаты что бы составить статистику для поколений?
     
  8. Carrot

    Carrot Нуб

    Скажите, кто знает: Модули с усилителем и внешней антенной и простой модуль полностью совместимы и взаимозаменяемы?
     
  9. forfrends

    forfrends Нерд

    Добрый день! Пытаюсь подключить nRF24L01+ к двум ардуинам. К Меге2560 подключается без проблем. Закинул тестовый код
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    //#include "printf.h"

    //RF24 radio(9,10); // Для Уно
    RF24 radio(9,53);// Для Меги
    const uint8_t num_channels = 128;
    uint8_t values[num_channels];
    void setup(void)
    {
    Serial.begin(57600);
    printf_begin();
    radio.begin();
    radio.setAutoAck(false);
    radio.startListening();

    radio.printDetails(); // Вот эта строка напечатает нам что-то, если все правильно соединили.
    delay(5000); // И посмотрим на это пять секунд.

    radio.stopListening();
    int i = 0; // А это напечатает нам заголовки всех 127 каналов
    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;
    }
    }
    int i = 0;
    while ( i < num_channels ) {
    printf("%x",min(0xf,values&0xf));
    ++i;
    }
    printf("\n\r");
    }
    int serial_putc( char c, FILE * ) {
    Serial.write( c );
    return c;
    }

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

    получил это:
    STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
    RX_ADDR_P0-1 = 0xe7e7e7e7e7 0xc2c2c2c2c2
    RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
    TX_ADDR = 0xe7e7e7e7e7
    RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
    EN_AA = 0x00
    EN_RXADDR = 0x02
    RF_CH = 0x4c
    RF_SETUP = 0x07
    CONFIG = 0x0f
    DYNPD/FEATURE = 0x00 0x00
    Data Rate = 1MBPS
    Model = nRF24L01+
    CRC Length = 16 bits
    PA Power = PA_MAX
    00000000000000001111111111111111222222222222222233333333333333334444444444444444555555555555555566666666666666667777777777777777
    0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    Вторая Ардуина Дуе. Подключаю модуль, загружаю тот же код - ошибка компиляции. Ругается на
    'fdevopen' was not declared in this scope
    Где-то нашел что fdevopen надо заменить на
    #if !defined(__arm__)
    fdevopen( &serial_putc, 0 );
    #endif

    Подключаю модуль, загружаю код, прошивка идет без проблем. Но ответа от модуля нет.
    STATUS = 0xff RX_DR=1 TX_DS=1 MAX_RT=1 RX_P_NO=7 TX_FULL=1
    RX_ADDR_P0-1 = 0xffffffffff 0xffffffffff
    RX_ADDR_P2-5 = 0xff 0xff 0xff 0xff
    TX_ADDR = 0xffffffffff
    RX_PW_P0-6 = 0xff 0xff 0xff 0xff 0xff 0xff
    EN_AA = 0xff
    EN_RXADDR = 0xff
    RF_CH = 0xff
    RF_SETUP = 0xff
    CONFIG = 0xff
    DYNPD/FEATURE = 0xff 0xff
    Data Rate = 1MBPS
    Model = nRF24L01
    CRC Length = 16 bits
    PA Power = PA_MAX
    00000000000000001111111111111111222222222222222233333333333333334444444444444444555555555555555566666666666666667777777777777777
    0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
    44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
    44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
    В чем может быть причина?

    :confused: все оказалось очень просто: на ДУЕ перепутал контакты. Правильно подключил и все заработало!
     
    Последнее редактирование: 4 фев 2016
  10. IvanDnonskoi

    IvanDnonskoi Нуб

    Землю от БП и землю ардуины соединяете?
    Для начала ваша проблема не в "respons timed out" а в неправильном подключении см. картинку ИгорьК в посте №6. Строчки начиная с RX_ADDR... до строки DYNPD/.. не должны быть "нулевыми" как у вас.
    У меня так же модули китайские с усилителем и антенной, как писалось уже миллион раз необходимо припаять конденсатор на плату между питанием и землей. К тому же скетч GettingStarted хоть и выдавал мне данные о модуле, но при попытке передачи данных как и у вас имелась ошибка "response timed out", однако скетч собранный мной из разных сообщений ИгорьК все таки заставил два модуля общаться между собой.
     
    Последнее редактирование: 4 фев 2016
  11. Sabantyi

    Sabantyi Нуб

    Да землю соединяю.
    картинку смотрел, перепроверял с его таблицей, у некоторых нулевые строчки идут у некоторых одни fffffff
    вот я и интересуюсь из-за чего может быть, модуль не определяется
    по поводу конденсатора, да цеплял его, но он нужен для питания, чтобы не было просадки напряжения, если я подключаю от лабораторного блока то можно исключить данный кондер вовсе
     
  12. BGreen

    BGreen Нерд

    В таком случае, почему производители не ставят 1 большой конденсатор на блоке питания вместо 100 мелких по всей плате вплотную к каждому IC? (к вопросу о назначении конденсаторов в цепях сигнальных и ВЧ)
     
  13. Sabantyi

    Sabantyi Нуб

    хм, обычно на выходе БП ставят один кондер большой емкости для уменьшения пульсации и просадок напряжения, вплотную к каждому IC наверно для уменьшения каких либо помех, фильтр, но обычные керамические
    наверно так ?!
     
  14. BGreen

    BGreen Нерд

    У вас по земле и линии питания бегут помехи от 2.4ГГц, бросков тока и гармоники по всей схеме. Антенна NRF гадит в него же обратно по питанию. А длина провода от БП к NRF достаточно велика, чтобы при резком увеличении потребления NRF заткнулся, а кондер на далеком БП не успел устранить просадку.
     
  15. Helix59

    Helix59 Нуб

    Вопрос, с помощью nrf24l01 за один раз можно передать 32 байта данных. А как поступать, если нужно передать больше байт данных, например 40 (т.е. передать время работы программы и еще штук 15-20 переменных типа int). Как разделить эти передачи данных?
     
  16. Sabantyi

    Sabantyi Нуб

    возможно , но в моем случае это все равно не помогает
     
  17. Megawollt

    Megawollt Нуб

    Товарищи, подскажите как организовать двухстороннюю связь на этих модулях. У меня они работают исключительно как приемник и передатчик, но обратно приемник передатчику ничего не пересылает. Может есть какие то готовые программные примеры?
     
  18. ИгорьК

    ИгорьК Гуру

    Если работают, это уже щастье!
    А двустороннюю связь организовать просто. Оба модуля основное время работают в режиме приема.
    Когда надо что-то передать, передающий останавливает " слушание" (radio.stopListening();) и передает информацию.
    В общем.... Вот здесь я вроде объяснял.
     
  19. Megawollt

    Megawollt Нуб

    Я прочитал много тем по этому модулю и уже неплохо знаю алгоритм его работы, поэтому про эту функцию и ее необходимость я в курсе :) но не работает блин :)
    Есть ли какие то подводные камни в организации приемопередачи или просто старт и стоп в любой момент времени?
     
  20. Sabantyi

    Sabantyi Нуб

    всем спасибо разобрался с модулем

    Все оказало намного проще, как и предполагалось они дохлые сразу 2 модуля

    Заказал пришло 10шт(заказ был от 10шт), поставил на теже панельки с тойже платой и прогой, завелась с пол оборота