Цитата(SasaVitebsk @ Jun 16 2016, 15:00)

Немного не в тему, конечно, но синхронизировать часы по RS485, это не самый точный способ. А использовать ds1306 вообще странновато, на мой взгляд. Я конечно не знаю полного техзадания ...
На своих образцах калибровал часы. Можно добиться точности пару секунд в месяц. Собственно реальная точность указана в руководстве по эксплуатации.
Если требуется совместная работа (то есть взаимная синхронизация) то лучше синхронизировать по какому-нибудь высокоскоростному интерфейсу. Обычно используется GPS, либо ethernet.
Это только модель, в которой DS1306 формирует сигнал 1PPS (эмулятор импульсов с высокой точностью по времени). По RS485 часы синхронизируются с точностью до секунд (широковещательным запросом), а по сигналу 1PPS синхронизируются с точностью до миллисекунд. На практике желающие смогут использовать хоть сервер точного времени, хоть другую какую коробку с 1PPS. Хоть простой маячок с GPS и выходом 1PPS.
В любом случае, какой бы интерфейс и алгоритм не использовался, часы нужно подводить либо назад (это работает), либо вперед - это и интересует (как получить корректное время после сдвига).
Всем спасибо! Вопрос решен.
Все просто: после сдвига вперед, в случае, если RTC_SSR превышает (PREDIV_S+1) нужно из RTC_SSR вычесть (PREDIV_S+1), а затем преобразовать остаток в миллисекунды. И из секунд вычесть 1 секунду. И часы синхронизируются до тысячной доли. Это как раз этот случай.
Цитата
Note: SS can be larger than PREDIV_S only after a shift operation. In that case, the correct
time/date is one second less than as indicated by RTC_TR/RTC_DR.
Сообщение отредактировал Pridnya - Jun 16 2016, 13:21