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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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
Сообщений: 369
Сказал спасибо: 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
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
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
Сообщений: 369
Сказал спасибо: 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, время: 12:57.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot