Во, про точность часов вспомили. Ну тут тогда я влезу.
Если часы на МК, но без микросхемы DS и без внешней регулировки, для облегчения можно ввести наиболее общий режим программной ручной калибровки по следующей системе.
Нажали один раз кнопку калибровки - часы запомнили текущее время по своему внутреннему таймеру.
Затем нажали кнопку через сутки-неделю-месяц (с интервалом, скажем, час, чтоб программно гарантированно точно можно было отличить, к чему надо "притягивать" показание. Часы вряд ли уйдут на полчаса). Программа рассчитала погрешность хода и вбила себе в башку корректировку.
Чем больше период - тем выйдет точнее калибровка.
Часовые интервалы можно брать откуда угодно, лучше всего подойдут сигналы точного времени с одной и той же станции.
Сама корректировка может делаться по принципу "пропуск X секунд каждые N секунд" или "добавление X секунд каждые N секунд", X << N.
Если часы показывают секунды, но имеют счётчик миллисекунд, то же самое можно сделать с миллисекундами, чтоб не было дерготни на табло в момент корректировки.
Смысл такой, если грубо. Пользователь нажал кнопку через 3607 сек. Округляем к ближайшему часу, получаем 3600 сек. По внутреннему таймеру натикало ровно 3600 сек, а по факту это должно быть 3607. Значит, в дальнейшем, каждые 3600 секунд внутреннего таймера надо корректировать время на 7 секунд.
Если мы выждали неделю и даже вручную дали корректировку, с погрешностью, допустим, 0.1 с (реакция между сигналом точного времени и нажатием кнопки), то через год эта погрешность выльется в 4,8 секунд максимум. Подождали две недели - снизили человеческий фактор уже до 2.4 сек/год. Месяц - до 1.2 сек. А главное, что действий никаких не надо особо. В любой момент вспомнил, что пора синхронизироваться, и в ближайший час по сигналу нажал кнопку.
Некоторые цифры из моей практики.
Кварц на МК 7.3728 МГц.
Без корректировки погрешность 2-3 сек/сутки.
С программной корректировкой, рассчитанной по GPS в течение одних суток, шли на этом кварце без синхронизации 5 недель. Никуда визуально не убежали ни на секунду (GPS даёт точность интервала микросекундного порядка, т.е. суток уже хватило).
Теперь про GPS.
Время принимается первым делом. Причём принимается намного раньше и на меньшем уровне сигнала, чем координаты. Дело в том, что для математического аппарата GPS, время - это база. Оно транслируется каждым спутником и без достоверной синхронизации часов, GPS приёмник никуда дальше не двинется.
По факту, мои часы работают в метре-двух от окна и захватывают время в 99% случаях без фиксации координат. Потери сигнала бывают от пары минут до часа. Тут как раз и работает автономный ход. То есть совершенно пофиг, что целый час не будет синхронизации, автономный ход будет тикать, а всё равно потом сигнал появится.
У GPS-модуля может быть аппаратный вывод 1PPS, который дёргается ровно в момент начала секунды независимо от UART. Вот его можно использовать для очень точной и быстрой калибровки.
GPS навигаторы и т.п. как правило, не заботятся о миллисекундах, там получается точность отображения вообще +/- 1 сек , так что сигналы точного времени с радио будут получше. Если подключать GPS к компу, то можно выжать точность около 0.1 сек, не сильно выше. В выдаче имеется информация о миллисекундах, но накладываются задержки передачи по UART, задержки ОС, задержки USB (если через USB-UART) плюс все задержки GPS модуля.
Да, и хвост (антенну) делать не обязательно. Существуют
интегрированные решения
Но, как показывает вышеприведённый расчёт, можно вообще не мучиться с GPS и обойтись радиоприёмником или телевизором и месяцем времени.