Попробовал просто Ping с мобилки на ЕСПку. Результат разочаровал 8.21-26.1мс. Я думаю что UDP не будет быстрее, там кажется пакет ещё длиннее, и тем более оочень уж большой разброс по времениТак как код обработки UDP пакета у Вас будет одинаков, то и время периферийного устройства будет сохранятся в один и тот же момент (от возникающих аппаратных прерываний
Пинг для ESP8266 не более 1ms, если это не Arduino. В Arduino циклический "опрос" в свободное время в цикле Loop() и прием у вас бьет с его исполнением. Приходящий пакет на WiFi обрабатывается по прерыванию и сразу обслуживается в LwIP, но у вас это не используется.@sasasa Вы точно не путаете мс и мкс? У ping мс прыгают в диапазоне десятков мс!!! Как тут может быть точность в микро? Забудьте про wifi. Лучше nrf мучайте, если на 100 м добьют.
Это именно Ардуино и картинки выше наглядно показывает время ответа, но записано в loop() всего чтение UDP пакета и больше ничего. Пока до 1мс как до луны, Хотя и 1мс мне многовато. Хотя бы стабильные 0.2мс получить с разбросом не более 0.05мс.если это не Arduino
Сам не пробовал, но по отзывам в интернете что с наружной антенной ЕСПка 100м без проблем потянетКак Вы на 100 м "стрелять" будете? Через роутер?
Что такое LwIP, и как его использовать?Приходящий пакет на WiFi обрабатывается по прерыванию и сразу обслуживается в LwIP, но у вас это не используется.
На данный момент планируется сигнал синхронизации с частотой 1Гц.не один пакет туда-сюда, а много, с коррекциями и постоянно
>ping atesp8266 -n 20
Обмен пакетами с atesp8266 [192.168.3.1] с 32 байтами данных:
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Ответ от 192.168.3.1: число байт=32 время<1мс TTL=255
Статистика Ping для 192.168.3.1:
Пакетов: отправлено = 20, получено = 20, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек
Посылки данных обычно сопровождаются штампом таймера и неважно когда они придут... У вас видео по инет работает или плавают кадры?@sasasa предположим Вы получили 5 мкс, дальше что? Как Вы на 100 м "стрелять" будете? Через роутер? Там Ваши 5 мкс превратятся в "тыкву".
А потому, что он для точности в +-1 сек (SNTP).А почему бы не использовать SNTP и механизм синхронизации времени как в винде ?
Arduino поддерживает и чистый СИ и C++. Проблема в используемых библиотеках писаных кое-как, для галочки "портировщиками"...@pvvx 5 мкс ТС хотел. Не милли, а микро. И Вы не объяснили ему, что на Arduino IDE он этого не получит, пока не перейдёт на чистый С.
Нет. Для SNTP прямая зависимость от удаленности сервера и всей сети. Это +-20 секундВ качестве примера синхронизации времени компьютера с помощью SNTP привожу результаты синхронизации своего компа для исследования запаздывания данных с биржи:
По оси Х -время в секундах от момента включения компа,
по Y - ошибка в секундах локальных часов компа относительно атомных часов.
Наглядно видно что ошибка составляет примерно 40 мс и является систематической (это время пинга до сервер точного времени).
Если ее учесть , то погрешность в пределах 5 mc, которую можно снижать.
-------------------------------
Т е SNTP позволяет получить синхронизацию в предела ms для секунд минут часов дней и лет.
Без проблем - давайте ваш личный эксп Найду вам сервер для SNTP за тридевятъ земельЯ не теорию рассказываю, а результат работы привел.
---------------------------
Можете экспериментально доказать ? Нет!
---------------------------
Ну и не надо трындеть.
И как это всё написать? Есть идеи?Надо глянуть - может вообще драйвер WiFi вставляет сам таймштамп в us (он аппаратный в блоке PHY ESP8266) и тогда делать вообще почти нечего, кроме пары формул хоть на бэйсике. Если нет, то вписать вставку счетчика тактов CPU - он в 6.3 наносекунд.
Надо чтобы в течении всего дня любая пара импульсов полученных с обоих сенсоров была с погрешностью не более 5мкс.На каком интервале Вам нужна синхронизация и с какой погрешностью?
Как считать счетчик тактов CPU или 64-х битный mactime?И как это всё написать? Есть идеи?
/* MAC_TIMER64BIT_COUNT: 0x3ff21048
* Step: 1us * wDev_MacTim1Arm() */
#define MAC_TIMER64BIT_COUNT_ADDR 0x3ff21048
uint64 ICACHE_FLASH_ATTR get_mac_time(void)
{
union {
volatile uint32 dw[2];
uint64 dd;
}ux;
volatile uint32 * ptr = (volatile uint32 *)MAC_TIMER64BIT_COUNT_ADDR;
ux.dw[0] = ptr[0];
ux.dw[1] = ptr[1];
if(ux.dw[1] != ptr[1]) {
ux.dw[0] = ptr[0];
ux.dw[1] = ptr[1];
}
return ux.dd;
}
Но надо знать отклонения (на сколько спешат или отстают часы устройств).! Сейчас появилась идея сделать всё наоборот - не посылать синхроимпульсы с "базы" на сенсор, а с сенсорного блока на базу и там делать все вычисления. Т.е. делать синхронизацию базы по сенсора. В результате ЕСПке на сенсоре не надо ничего вычислять а только посылать импульсы, скажем 1Гц. Обратная связь не нужна. Импульс срабатывания сенсора посылается в промежутке между синхроимпульсом. Кажется идеальный вариант - никто никому не мешает, процессор не нагружен и вся работа только по 2-м прерываниям. Кажется я ничего не упустил.
Я думаю что не надо. По полученным сигналам база сможет вычислить работу генераторов импульса сенсорных блоков. Сигналы с экстремальным отклонением будет удалены. Уже после несколько минут нестабильность задержки пакетов на столько снизится путём усреднения, что не повлияет на результат. А сигнал срабатывания самого сенсора будет вычисляться по отношении к генератору синхросигналов сенсорного блока. Я не вижу необходимости в обратной связи. Это при условии что время передачи/приёма пакетов не плавает в таких экстремальных пределах как сейчас у меня. Хотя бы в 200мкс уложится, не время отклика а разница задержек.Но надо знать отклонения (на сколько спешат или отстают часы устройств).
Без обратной связи быстро точность не получить...