Если верить даташиту: "В режиме ACK, количество повторных передач может достигать максимального числа, определенных в ARC. Если это произойдет, nRF24 установит флаг MAX_RT и вернется в режим ожидания-I." Или по-простому... количество ACK у NRF24 ограничено - 15 попыток. Затем надо сбрасывать флаг... и запускать всё заново...
У меня в одном месте так и сделано. Циклим эти 15 попыток по времени вплоть до минуты. Если уж за минуту не передалось, то бросаем это дело, т.к. нужно будет передавать уже другой пакет.
Цитата:
В "прозрачном" режиме количество ACK не ограничено...))
В "прозрачном" режиме их вообще нет и если они нужны, то придется их изображать самостоятельно, реализуя некий доморощенный протокол. Зачем это может потребоваться, если все это уже есть в железе, непонятно.
Mishany передавай не по байтно а пакетом и включи в пакет ID номер посылки(2 байта я думаю хватит), все посылки с одинаковым номером, считаются дублем и можно просто игнорировать
Зачем это может потребоваться, если все это уже есть в железе, непонятно.
Причины могут быть разные...
Во-первых ACK в nRF24 - это не гарантия что пакет дойдёт до адресата (МК - МК).
Во-вторых можно отключить ACK nRF24 для экономии трафика. Сделать например как протоколе TCP/IP. Вместо ACK для каждого пакета, делаем например указатель подтверждения (до какой позиции МК получил поток).
вот такая задача, постоянный поток данных в оба направления. использовал 2 пары NRF каждая NRFка работает в своем направлении PTX / RTX каждая NRFка на своем МК. Одно спасение, что прием, подтверждение, ответ как то должно быть организовано в программе ПК и ЧПУ. Я еще сначала мучился с 4-мя прошивками, потом все же сделал одну универсальную которая сама переходит в нужную конфигурацию по состоянию 2-х ножек МК. Спойлер
Если рассмотреть такое стечение обстоятельств: PTX отправляет байт PRX принял байт, отправил ACK, IRQ - Low и т.д.... PTX ACK не услышал, запускает повтор.... ...... PRX принимает дубликат? или там как то все иначе произойдет?
Последний раз редактировалось Mishany Чт янв 25, 2018 21:29:28, всего редактировалось 1 раз.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
кто в курсе, как работает команда: REUSE_TX_PL (1110 0011) = 0
Цитата:
Used for a PTX device Reuse last transmitted payload. TX payload reuse is active until W_TX_PAYLOAD or FLUSH TX is executed. TX payload reuse must not be activated or deactivated during package transmission.
? если поднимает флаг MAX_RT, то передача не удалась и в W_TX_PAYLOAD остаются данные. которые можно как я понимаю выплюнуть в воздух без перенастройки с помощью этой команды?
Ну во первых стоит наверно промониторить каналы, если это не было сделано, во вторых при решении данной задачи я бы порекомендовал смотреть в сторону ESP8266, так как сам игрался с NRFками, было сделано программа на ПК шлёт через уарт(usb-uart) данные на контроллер, контроллер это обрабатывает шлёт через пару NRFок на другой контроллер, получается полный В принципе работает, но сколько времени на это было убито А потом начал понимать: а нафига всё это надо? если только ради эксперемента или эротики. С самого начала надо было взять ESP12 и прикрутить её к удалённому контроллеру, а данные сразу слать из программы по TCP через WI-FI точку доступа, причём это всё заботы винды о которых даже не стоит задумываться, в том числе и о качестве связи.
В этом всё дело, я не изобретаю колёс, а использую стандартные сетевые протоколы. Меня интересует только одно: дошёл мой пакет из пункта А в пункт Б или нет. Настроил две nrf24 в режим моста. Пакеты идут сквозняком, без задержек... nrf24 >> nrf24 >> nrf24 >> nrf24... Передаю массивы данных. По статистике из ~10.000 пакетов 1 пакет потерялся... Не беда)) Отправил повторно 1 пакет из массива...
У Вас после каждого пакета (nrf24 >> пакет >> nrf24) оправляет ACK (nrf24 << ACK << nrf24) - это называется "непроизводительное занятие канала". У Вас точно какие то "колеса" ... ))
Какойто бесполезный разговор..))
Последний раз редактировалось roman.com Чт янв 25, 2018 22:32:05, всего редактировалось 1 раз.
-если не хватает отведенных чипом 15-ти попыток передачи пакета, можно использовать команду REUSE_TX_PL и пытаться отсылать хоть до бесконечности. Суть в том, что в каждом пакете есть PID и приемник точно отличит повторный пакет среди потока. Может быть ситуация, что ACK не дошел до передатчика и тот отправил пакет снова, приемник поймет, что пакет повторный, и отправит ACK снова. Не стоит мутить повторную отправку руками, через W_TX_PAYLOAD, это неверный путь, да и ненужный труд, все уже реализовано в железе.
под "экономией траффика" подразумеваете передачу больших объемов данных? nrf-ки малость не для этого предназначены и, как следствие, приспособлены; скорее для случаев типа моего - перекидываться десятком-другим байт между точками. Вытягивать из них пропускную способность при наличии esp и разных синезубых чипов - имхо, троллейбус_из_буханки.jpg
скорее как на канальном уровне wifi или bluetooth. Прям как в TCP, с установлением соединения и скользящим окном, будет довольно печально шевелиться. И да, еще мелкая придирка - только в TCP, IP никакого контроля передачи не предполагает.
Полагаю стоит попробовать, и думаю что результат понравиться.
roman.com писал(а):
вопрос не стоит в экономии трафика. Зачастую стоит.
Обычно под задачи выпирают железо а не железо разгоняют под задачи, я абсолютно согласен с arkhnchul хотите скорость используйте другой чип, это как хотите быстрее - вызывайте такси, автобус вас быстрее не повезёт.
roman.com писал(а):
В этом всё дело, я не изобретаю колёс, а использую стандартные сетевые протоколы.
Может быть но, зачем NRF склонять к сетевому протоколу, это как ехать на санках по асфальту, хотя они лучше едут по снегу.
на прикладном уровне удобно, если устройств больше двух и их переменное количество только в случае nrf он идеологически скорее должен быть чем-то из разряда fieldbus-ов (modbus, devicenet, что-то свое наподобие), нежели жирным протоколом больших сетей.
вопрос был про использование аппаратных функций модуля. Решил я уже задачу, все передается без ошибок, при потере связи за потерю пакетов отвечает только буфер в МК. Всем спасибо.
Здравствуйте. Нашёл у китайцев вот такой передатчик, NRF24L01, однако в интернете в информации к нему везде пишут подключение к arduino, я так понимаю что arduino это просто микроконтроллер атмеловский, тоесть чтобы запустить этот передатчик нужна программа? Вопрос в следующем- мне нужно просто передать сигнал из точки А (контакт замкнулся) в точку Б (реле включилось), это возможно без микроконтроллера?
спасибо вобщем то понятно, придётся МК городить, я так понимаю аттинка 13 не подайдёт? А что есть в природе попроще атмега 8? Нужно передавать всего одну команду.
_________________ Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
Сейчас этот форум просматривают: Cheshirski и гости: 26
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения