Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Автоматика и аппаратура связи Дистанционное и непосредственное управление исполнительными механизмами, сотовая, а также радиосвязь.

 
Опции темы

nRF24L01+ двусторонняя связь

Непрочитано 05.03.2018, 13:49  
Ioann_II
Временная регистрация
 
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
Ioann_II на пути к лучшему
По умолчанию nRF24L01+ двусторонняя связь

Здравствуйте, Уважаемые форумчане.

Приходится просить помощи, т.к. что-то не так, а что не пойму.
Пытаюсь организовать двустроннюю связь на модулях nRF24L01+ и натыкаюсь на какой-то глюк.
По алгоритму каждый модуль постоянно находится в режиме приёма, и всё, что принял - отправляет на UART (управление на Atmega.
По таймеру, примерно каждые 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 мкс
Реклама:
Ioann_II вне форума  
Сказали "Спасибо" Ioann_II
Азорро (07.03.2018)
Непрочитано 05.03.2018, 22:23  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 370
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: nRF24L01+ двусторонняя связь

Цитата:
Прошивка одинаковая.
Вот это и не совсем удачно.
Работаю с MRF49 и там логика похожа.
Желательно иметь всё-таки master-slave.
У меня база (мастер) работают с 9 абонентами на одной частоте.
База выдаёт кодовую посылку старт.
По ней все абоненты по очереди отвечают. Времянка такая база каждые
50 мсек. На ответ абоненту 5 мсек . Сдвиг по времени №Аб * 5мсек.
У вас возможно один ловит обрывок сообщения и всё становиться колом.
Sergey_57 вне форума  
Эти 3 пользователя(ей) сказали Спасибо Sergey_57 за это сообщение:
-vitalik- (06.03.2018), Ioann_II (06.03.2018), Азорро (07.03.2018)
Непрочитано 06.03.2018, 09:18  
Ioann_II
Временная регистрация
 
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
Ioann_II на пути к лучшему
По умолчанию Re: nRF24L01+ двусторонняя связь

Да, Sergey_57, так и оказалось. Накладка по передаче.
Спасибо.
Ioann_II вне форума  
Непрочитано 06.03.2018, 15:03  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,290
Сказал спасибо: 11,862
Сказали Спасибо 4,160 раз(а) в 3,178 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: nRF24L01+ двусторонняя связь

При таком подходе необходимо решение по борьбе с коллизиями.
Иначе вполне возможна ситуация одновременной передачи для больше чем одного источника.
Можно посмотреть реализации CSMA/CD, попробовать вариант с передачей маркера по цепочке…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Сказали "Спасибо" mike-y-k
Азорро (07.03.2018)
Непрочитано 07.03.2018, 20:25  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 370
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: nRF24L01+ двусторонняя связь

Цитата:
При таком подходе необходимо решение по борьбе с коллизиями.
Да, для базы нет обмена ни с одним абонетом 15-20 сек. - перезагрузка трансивера базы.
С абонентом - нет сихро от базы 10сек - перезагрузка трансивера абонента.
Бывают помехи и всё виснет колом.
Sergey_57 вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение nRF24L01 к ПК через USB Nikopol Автоматика и аппаратура связи 16 24.06.2017 18:41
Усилитель для nrf24LU1 (nrf24l01, nrf24le1) sindo2 Автоматика и аппаратура связи 3 24.06.2011 22:49
громкая связь в авто pep2007 Электроника средств транспорта 0 17.04.2009 10:30
Связь двух компьютеров по радио nexio Автоматика и аппаратура связи 1 27.12.2005 08:35
Цифровая связь по проводам 220 в CD_Eater Автоматика и аппаратура связи 5 29.06.2005 10:24


Часовой пояс GMT +4, время: 03:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.