Поюзал
эти часики, поюзал... и... чего-то не хватает. А не хватает мне точности. Так как планировалось, что будет использована микросхема с RTC у которой, вроде, есть подстройка точности, то на плате не было предусмотрено место для подстроечного конденсатора. Пришлось думать как сделать программную коррекцию.
Так как время в "пике" обычно делают с использованием TMR1, а это 16-разрядный счетчик у которого нет возможности задать коэффициент пересчета, поэтому приходится загружать стартовое значение 0х8000, чтобы переполнение наступило через одну секунду, а не через две. Правда, по переполнению нельзя снова загружать тоже самое значение, иначе из-за неминуемой задержки часы будут отставать, причем, совершенно непрогнозируемо. Хотя в
AN582 "эти итальянцы" так и сделали.

Но я (и, наверняка, все остальные) делаю иначе - просто прибавляю к текущему состоянию то самое 0х8000. Правда, тут еще один нюанс - счетчик 16-разрядный, а микроконтроллер только восьмиразрядный. Поэтому, это смещение прибавляется только в старший байт счетчика, а младший принципиально не трогается.
Вот тут и появилась мысля, а почему прибавлять именно 0х8000? Можно для коррекции прибавлять и иное значение. Тут я прикинул, что будет, если секунду укоротить (или удлиннить) на 1/8 секунды (прибавлять не 0х8000, а 0х9000 или 0х7000), скажем, раз в час? Очень просто, если такое творить раз в час, то в результате 24 таких отклонений, суммарное отклонение составит 3 секунды. А если изменить только младший бит (0х8100 или 0x7F00), то минимальный шаг коррекции будет 0,1875 c. Поэтому я решил, делать коррекцию раз в два часа. Тогда коррекция в 16 единиц составит 1.5 секунды в сутки, а одна единица около 0.1 секунды (0,09375).
Самая большая проблема, как сделать отображение этой настройки на индикаторе часов, на котором нет возможности вывести знак "-" и нет даже запятых? А вот как:
Таким образом вводится коррекция от -99 до 99 (+/- 9.2 сек). А может есть идеи лучше?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."