Например TDA7294

Форум РадиоКот • Просмотр темы - nRF24L01+ двусторонняя связь
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:45:22

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: nRF24L01+ двусторонняя связь
СообщениеДобавлено: Пн мар 05, 2018 10:44:33 
Родился

Зарегистрирован: Сб сен 10, 2011 11:32:04
Сообщений: 1
Рейтинг сообщения: 0
Здравствуйте, Уважаемые форумчане.

Приходится просить помощи, т.к. что-то не так, а что не пойму.
Пытаюсь организовать двустроннюю связь на модулях 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 мкс


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y