Цитата(Дон Амброзио @ Mar 7 2008, 16:47)

Вопрос: как обеспечить , чтобы локальные часы (реализованные на базе таймера ATmega) на всех девайсах расходились друг относительно друга не более, чем на 0,5 Сек ?
Можно пойти путем RTCP (real-time control protocol):
Завести два таймера во всех устройствах сети, один для RTC, второй - системный (независимый).
Системный таймер не привязан к реальному времени, но тикает точно (скажем с интервалом 1ms).
Далее пусть есть некий Хост (X) на котором задано точное реальное время, и Slave (S) RTC которого надо синхронизировать с Х.
Процедуру синхронизации можно сделать так:
1. S посылает синхропакет с показаниями своего системного таймера.
2. X отправляет этот пакет обратно, добавив к нему показания своего системного таймера и своего RTC.
3. S получает пакет от X, вычисляет Round-trip-delay, но основе текущего значения системного таймера и данных своего системного таймера в пришедшем пакете.
4. S делит round-trip-delay пополам, прибавляет получившееся число к значению RTC от Host'a и записывает в свой RTC.
5. S шлет к X принятый пакет, добавляя в него показания своего RTC и системного таймера.
6. X вычисляет Round-trip-delay на основе показаний своего системного таймера, прибавляет 1/2 от этого числа к показаниям RTC от S и если ошибка будет в допустимых пределах, уведомляет S о том, что синхронизация прошла успешно и расчитанную ошибку на своей стороне.
На этом процедура синхронизации заканчивается.
И так раз в сутки-час-минуту, чем чаще будете синхронизироваться тем меньше будет ошибка.