Anton.M писал(а):задача такова - хронометраж для соревнований.
Для этого нет смысла ставить на компьютере 5 nrf'ок, достаточно и одной.
Anton.M писал(а):дальность совсем не устраивает.
Не знаю какая дальность у ESP8266, а у простой nrf24L01+ (без усилителя) дальность уже проверяли тут.
http://radiokot.ru/forum/viewtopic.php? ... &start=767
- 5.jpg
- (141.5 КБ) 719 скачиваний
alex_ писал(а):Поскольку пакеты передаются довольно быстро
"быстро" - это понятие относительное)) Для когото и 1 милисекунда быстро.. а для меня это медленно))
В даташите nrf24L01+ есть даже формула для расчёта скорости передачи пакетов.
alex_ писал(а):Так же если два модуля решили передать одновременно, абсолютно одновременно у них начать передачу не получиться, а значит, что у одного из них скорее всего передать получиться, а второй передаст чуть попозже, через пару милисекунд, что думаю не критично.
Если вротой передатчик начнёт передавать раньше чем закончит передавать первый передатчик, то получим коллизию.
Тут есть один момент)) На самом деле тут всё зависит от того, у какого передатчика больше мощность, и сможет ли второй передатчик заглушить первый. Но это уже мелкие детали..))
Вообще... весь вопрос в точности измерения события. Какая допускается погрешность? секунды / милисекунды / микросекунды ?
Для точного измерения события нужно посчитать все "тайминги" (временна́я задержка сигнала). Например тут
http://radiokot.ru/forum/viewtopic.php?f=28&t=148087 делали радиоуправление на nrf24L01+ и смотрели/считали задержку сигнала, с точностью до микросекунд. ))
Anton.M писал(а):Два события могут случиться одновременно (например старт участника и финиш другого), поэтому если будет один радиоканал - посылки могут наложиться друг на друга или вообще пропасть.
Пропасть - это не проблема. )) Передатчик может отправит пакет повторно или много раз. Какой-нибудь один пакет дойдёт)).
Простой пример:
- Допустим каждый пакет имеет свой порядковый номер (ID = 0...255).
- Пауза между передачей пакетов извесно. Это величина постоянная. Допустим 3 милисекунды (настраивается программно).
- Время передачи одного пакета извесно. Это величина постоянная. Допустим 1 милисекунда (настраивается программно).
По номеру пакета определяем задержку передачи пакета:
Первый пакет (ID=1) получим через 4 милисекунды. - пакет пропал..
Второй пакет (ID=2) получим через 8 милисекунд. - пакет пропал..
...
Десятый пакет (ID=10) получим через 40 милисекунд. - пакет принят.
По номеру пакета (ID=10) компьютер автоматически вносит поправку таймера на 40 милисекунд.
А что бы пакеты не накладывались друг на друга от разных передатчиков постоянно (постоянная коллизия), каждый передатчик может например передавать пакеты со своей задержкой (паузой) между пакетами: 4 милисекунды, 5 милисекунд, 6 милисекунд...
Наверное надо добавить... Вообщее протокол в nrf24L01+
не гарантирует доставку пакета с первого раза . На практике пакеты у nrf24L01+ проходят с первого раза с вероятностью ~99,9 %. Это при хорошем сигнале.)) Поэтому в любой случае нужно предусмотреть повторную передачу пакетов. Иначе мы можем не узнать, что какое то событие вообще случилось))
Для гарантированной доставки пакетов у nrf24L01+ есть функция - автоматическая повторня передача пакетов. Лично я этой функцией не пользуюсь.
[uquote="alex_",url="/forum/viewtopic.php?p=3195156#p3195156"]модуль позволяет промониторить канал на занятость[/uquote]
Надо уточнить: каким образом? В nrf24L01+ есть детектор сигнала (типа S-метр). Только (если верить даташиту) он работает при достаточно сильном сигнале, значит он работает только на маленькое расстояние. А нам нужно большое расстояние.
(этот впрос надо уточнить, а лучше проверить на практике).
[uquote="alex_",url="/forum/viewtopic.php?p=3195156#p3195156"]модуль позволяет промониторить канал на занятость, если канал занят ждём освобождения и после этого передаём.[/uquote]
Так получим дополнительную задержку... грубо ~до 1 милисекунды )) (Можно посчитать точно).
P.S. Есть ещё один вариант, более сложный. Можно все события измерять по хронометрам в самих передатчиках. При этом все хронометры синхронизировать по одному, главному хронометру. И передавать (используя мультиплексирование с разделением по времени (TDM)) не сам момент события, а показания хронометров, которые в свою очередь будут зафиксировать события. (Например в любом нормальной МК есть таймер с режимом захвата по внешнему событию). В этом случае задержки передачи вообще не критичны)).
Я так понял все данные надо выводить на компьютер. А главный таймер где ? В самом компьютере? А как будете подключать nrf24L01+ к компьютеру? Через SPI или UART адаптер? А задержку передачи пакетов через адаптер учли? ))
И т.д. и т.п....))