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

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

  1. gavru

    gavru Нерд

    Питание от стационарного блока питания, потом через 1117 не от дуины.
    При кол только в том что без плюсов пашет на ура.
     
    Последнее редактирование: 2 июл 2015
  2. zaynus

    zaynus Нерд

    разные китайцы делали
    кондеры то ставили на модуль?
    printf то что пишет?
     
  3. gavru

    gavru Нерд

    Китайцы то понятно, что разные :) Кондёры стоят на плюсовых между лапами питания прямо на модуль впаял, а вот без плюсов голые, ни чего не припаяно, прямо из коробки достал и вотыкнул, и всё заработало без чего либо.
    Но их без антен выпускали, а хочется дальность поиметь, вот и маракую теперь :(
     
  4. gavru

    gavru Нерд

    Не знаю (не дуина), Xmega просто на плате тестовой, но по схеме могу сказать, что по тестеру Saleae:
    выдаются для передатчика правильные данные и правильная последовательность по SPI, приёмник при этом не выдаёт IRQ, передатчик ожидая ответку вываливается с ответом окончания количества повторов передачи.

    Но стоит дотронутся до антенны у плюсвых, или поставить безплюсовые всё начинает работать, чудеса да и только.

    P.S> передаётся структура, для структуры свой CRC естественно, проверка CRC говорит о правильно пришёдшем пакете, когда он приходит конечно.

    Видно есть всё же какае то разница между плюсовыми и не плюсовыми.
     
    Последнее редактирование: 2 июл 2015
  5. zaynus

    zaynus Нерд

    раньше в радисты толстых брали
    у них площадь тела больше антенна лучше пашет.
    пин СЕ оторвите у передатчика,ради прикола, что получится?
    что не идет прием или передача?
    кандеры на скока припаяны?
    проверьте провода, бывает косяк в соединениях, или дорожках
    у меня что с + что без него модули
    между собой общаются нормально
    кандеры стоят не на всех
     
  6. gavru

    gavru Нерд

    Не идёт приём, если поставить НЕ плюсовую вместо приёмник, то всё начинает работать с передатчиком плюсовым. Кондёра 2 (10мк и 10Н параллельно), косяков в проводах не может быть, так как без плюсов сразу всё заводится.
     
  7. gavru

    gavru Нерд

    Ещё параллельный вопросик, при сканировании если честно показывает туфту какуе то, то все каналы показывает забиты, то несколько всего, то показывает файфайные каналы как забитые, то не показывает, на сколько можно доверять RPD?
     
  8. ИгорьК

    ИгорьК Гуру

    Чтото у Вас не так. Вообще не так. Тот, который без плюса - у него интерфейс UART, а у плюсового - SPI. То есть ситуация еще более загадочная.
     
  9. zaynus

    zaynus Нерд

  10. gavru

    gavru Нерд

    [​IMG]

    Странно, а написано SPI. Чёт лыжи к вечеру вообще не едут. При чём оба работают по SPI от Xmega. Один от 256 другой от 34й. Может на одних модулях плюсик нарисовать забыли просто.
     
    ИгорьК нравится это.
  11. gavru

    gavru Нерд

    А вы в частном доме или в многоэтажке живёте? Я просто грешу на военный аэродром в 300 метрах, да куча домов рядов по 10 этажей, мож микроволновками пользуются часто :)
     
  12. zaynus

    zaynus Нерд

    я в частном доме в километре от телевышки
    на микроволновке стоит приемник с лсд экраном, принимает без проблем.
     
  13. ИгорьК

    ИгорьК Гуру

    Апшипся, извиняйте.
     
  14. gavru

    gavru Нерд

    Просто раз ни чё сканирует (ну показывает немного занятых каналов), а на другой раз все каналы забиты да при чём не по детски, я 100 раз сканирую все 126 каналов, при каждом скане канала если есть несущая то плюсую к предыдущему скану, и потом вывожу это всё на 3х дюймовый экранчик TFT в виде таблички, так вот скан скану рознь., вот и не знаю на что грешить.
     
  15. gavru

    gavru Нерд

    Бывает так:
    [​IMG]

    А бывает так:
    [​IMG]

    Зелёным номера каналов, красным количество нахождений несущей за 100 сканов.
     
  16. bleur

    bleur Нуб

    Да. Библиотека maniacbug.
    Сейчас попробую с посмотреть инфу.
     
  17. gavru

    gavru Нерд

    Хм может кому пригодится, по поводу своей проблемы: "Прикасаешься начинает работать, руку убираешь перестаёт", так вот у меня в разрыве цеплялся пробничек Saleae китайский, очень хорошая весчь смотреть всякие там SPI и прочее:

    [​IMG]

    и у него то ли от звёзд зависит, то ли от фаз луны, то работает то нет, ну короче говоря отключаешь и усё работает как часы, при чём просто usb с него выдёргиваешь, не отключая от схемы и всё начинает работать, придётся скорее всего с ним что то делать.


    Лежит у меня уже пару лет XZL Studio - DX но вот под Linux он не работает к сожалению.
     
  18.  
    gavru и ИгорьК нравится это.
  19. gavru

    gavru Нерд

    Разобрался с проблемой поиска несущей, перед тем как пытаться определить несущие требуется:
    1 - не включать рядом на передачу модуль со тем же каналом и адресом.
    2 - перед сканированием сбросить буфера приёмника.
    Если этого не сделать то вместо несущей получаешь вот такой хлам по всем каналам.
    Копаем модуль дальше :)
     
  20. gavru

    gavru Нерд

    Новый затык поймал, кто нить сталкивался с таким?
    Вводная:
    EN_AA установлено автоподтверждение получения пакетов
    SETUP_PETR установлено 750мкс, и 15 подтверждений
    DYNPD установлено разрешение произвольной длины
    FEATURE установлены поддержка произвольной длины

    Начинаю отправлять, пакеты уходят вроди бы всё в норме получаю в регистре STATUS нужный флаг TX_DS без флага MAX_RT, всё как и должно быть, приёмник дёргает лапками и в ответ шлёт нужный пакет который принимается передатчиком.
    НОООО отключаю приёмник, и о чудо блин, пакеты так же отправляются, устанавлен флаг TX_DS, флага MAX_RT нету, но приёмника то нет, почему не приходит флаг MAX_RT??????
    Сижу туплю, может кто сталкивался?

    Код инициализации:

    Код (Text):
        nrf24l01WR(RG_CONFIG,0b00111111);
        nrf24l01WR(RG_EN_AA,0b00111111);                // Enable auto ack on pipes 0 and 1
        nrf24l01WR(RG_EN_RXADDR,0b00111111);            // Enable Rx on pipes 0 and 1
        nrf24l01WR(RG_SETUP_AW,3);            // 5 byte addresses
        nrf24l01WR(RG_SETUP_RETR,0b1111111);        // 8 retries
        nrf24l01WR(RG_RF_CH,95);                // channel 2 NO HIGHER THAN 83 in USA!

        //NRFWriteRegister(RG_RF_SETUP,0b00100110);  // 250Kbps, 0db output
        //NRFWriteRegister(RG_RF_SETUP,0b00000110);  // 1Mbps
        //NRFWriteRegister(RG_RF_SETUP,0b00001110);    // 2Mbps

        nrf24l01WR(RG_RF_SETUP,pSpeed);

        nrf24l01WR(RG_RX_PW_P0,MAX_PACKET_SIZE);            // Receive 16 byte packets
        nrf24l01WR(RG_RX_PW_P1,MAX_PACKET_SIZE);
        nrf24l01WR(RG_RX_PW_P2,MAX_PACKET_SIZE);            //
        nrf24l01WR(RG_RX_PW_P3,MAX_PACKET_SIZE);
        nrf24l01WR(RG_RX_PW_P4,MAX_PACKET_SIZE);            //
        nrf24l01WR(RG_RX_PW_P5,MAX_PACKET_SIZE);

        nrf24l01WR(RG_DYNPD,0b00111111);                // Dynamic packet length on pipes 0-6
        nrf24l01WR(RG_FEATURE,0b100);            // Enable dynamic payload, and no payload in the ack.

    Кусок кода передачи:
    Код (Text):
        nrf24l01ModeTX();
        _delay_us(150);

        // Make sure in TX mode
        nrf24l01WR(RG_EN_AA,0b00111111);                // Enable auto ack on pipes 0-6
        if (ToAddress) nrf24l01SetTxAddress(ToAddress);
        nrf24l01WCMDNoValue(CMD_FLUSH_TX);


        CSLOW();
        spi->spi(CMD_WR_TX_PLOAD);
            for (uint8_t i = 0; i<Length; i++)
                spi->spi(Packet[i]);
        CSHIGH();

        CELOW();
            _delay_us(15) ; // At least 10 us
        CEHIGH();

        uint8_t st = 0;
        while ((st & ((1<<5) | (1<<4)))==0){
            st = nrf24l01RR(RG_STATUS);
            _delay_us(50);
        }; // Packet acked or timed out


        if (st & (1<<4))
            nrf24l01WCMDNoValue(CMD_FLUSH_TX);

        nrf24l01WR(RG_STATUS,st & ((1<<5) | (1<<4))); // Clear the bit

        nrf24l01ModeRX();
        return st;
     
    Последнее редактирование: 15 июл 2015