Ioann_II 0 5 марта, 2018 Опубликовано 5 марта, 2018 · Жалоба Здравствуйте, Уважаемые форумчане. Приходится просить помощи, т.к. что-то не так, а что не пойму. Пытаюсь организовать двустроннюю связь на модулях nRF24L01+ и натыкаюсь на какой-то глюк. По алгоритму каждый модуль постоянно находится в режиме приёма, и всё, что принял - отправляет на UART (управление на Atmega8). По таймеру, примерно каждые 90мс, модуль переключается в режим передачи и отправляет посылку (другому), после передачи переключается обратно на приём. Прошивка одинаковая. При включении питания фактически передача не происходит в течении примерно 16с! Хотя попытки отправки есть. Но другой модуль ничего не ловит. Если ставлю при включении питания дополнительную задержку в 16с (перед инициализацией модуля), то по прошествии этой задержки, модули передают (и принимают) пакеты сразу. Прошу подсказать, где косяк. Спасибо. Вот инициализация: sleep(NRF_TURN_ON_DELAY); // ожидание, пока заведётся генератор // sleep(16000); nrf24l01p_get_clear_irq_flags(); // чтение и очистка флагов прерываний nrf24l01p_close_pipe(NRF24L01P_ALL); // закрыть все ТРУБЫ nrf24l01p_open_pipe(NRF24L01P_TX, false); // открыть ТРУБУ TX 0, без автоподтверждения nrf24l01p_open_pipe(NRF24L01P_PIPE0, false); // открыть ТРУБУ 0, без автоподтверждения nrf24l01p_set_crc_mode(NRF24L01P_CRC_16BIT); // выбрать режим CRC16 nrf24l01p_set_auto_retr(0,250); // запретить АВТОРЕТРАНСМИССИИ nrf24l01p_set_address_width(NRF24L01P_AW_5BYTES); // выбрать ширину АДРЕСА в байтах nrf24l01p_set_address(NRF24L01P_TX, address); // установить АДРЕС передатчика nrf24l01p_set_address(NRF24L01P_PIPE0, address); // установить АДРЕС приёмника nrf24l01p_set_operation_mode(NRF24L01P_PRX); // установить режим работы (PRX или PTX) nrf24l01p_set_rx_payload_width(NRF24L01P_PIPE0, NRF_PAYLOAD_LENGTH); // установить РАЗМЕР ДАННЫХ для ТРУБЫ nrf24l01p_set_rf_channel(NRF_CHANNEL); // выбрать КАНАЛ nrf24l01p_set_power_mode(NRF24L01P_PWR_UP); // включить трансивер sleep(NRF_POWER_UP_DELAY); // ожидание пока перейдёт в режим STANDBY Передача сделана так: cbi(CE_pin); // установить на CE лог. 0 nrf24l01p_set_operation_mode(NRF24L01P_PTX); // переключить на передачу strcpy(payload, test_data); // загрузить данные для отправки nrf24l01p_write_tx_payload(payload, NRF_PAYLOAD_LENGTH); sbi(CE_pin); sleep(1); delay_us(10); cbi(CE_pin); // сделать импульс на CE delay_us(50); delay_us(50); delay_us(35); // ожидание 135 мкс // подождать окончания передачи и очистить соответствующий флаг while (!(nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_TX_DS))); nrf24l01p_clear_irq_flag(NRF24L01P_IRQ_TX_DS); nrf24l01p_set_operation_mode(NRF24L01P_PRX); // перейти на приём sbi(CE_pin); // установить на CE лог. 1 delay_us(50); delay_us(50); delay_us(35); // задержка 135 мкс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 5 марта, 2018 Опубликовано 5 марта, 2018 · Жалоба Здравствуйте. В данное время я как раз работаю с модулями RFM73, они сходны с вашими более современными. Я так вам скажу, что этот орешек крепок, пришлось не мало попотеть, чтобы его расколоть... Вы Банк 1 не загружаете? А адреса приёма и передачи у вас одинаковы? Если вы используете адрес канала ноль то адреса приёма и передачи лучше не загружать а использовать по умолчанию. А как вы контролируете что информация пришла? Я например проверяю FIFO приёмника на пустоту, и если он не пуст тогда считываю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 5 марта, 2018 Опубликовано 5 марта, 2018 · Жалоба Про Банк 1 не в курсе - в даташите не видел (этот модуль без внутреннего контроллера (управляется atmega по SPI). Адреса назначил одинаковые для передачи и на Pipe 0 для приёма. Проверяю, что информация пришла так: if((nrf24l01p_get_irq_flags() & (1 << NRF24L01P_IRQ_RX_DR))) Каждое отправляемое сообщение имеет свой номер, который передаётся, т.о. контролируется передача сообщений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Smoky 0 5 марта, 2018 Опубликовано 5 марта, 2018 · Жалоба Всё что у меня есть по этой теме. nRF2401.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться