納得いくところまで出来上がったので実用フェーズに。
筐体内部
LEDドライバ側の電源を強化してDC-DCコンバータの5V2A出力に変更、2系統の5V出力の電源基板を5V出力1系統とDC-DC向けの12Vにデカップリングコンデンサを入れた12V系出力へと変更した電源基板(MPU基板の下に実装)で正規に実用開始しました。
プログラムも残っていた細かいバグ(時刻調整で『分』をUpすると59→00になるのが正しいのに60になってしまうなど)を修正し、DS3231に内蔵されている温度センサの値も表示するプログラムを追加しました。筐体内の、しかもRTCのオンチップ温度センサーなので表示させる意味もほとんどないのですが、まあ、なんとなくです。RTCは内部でキャリブレーションを行なっているようなので発信周波数補正の温度補償のための温度センサーではないかと。
使用していない機能に2系統のアラーム(秒単位指定・分単位指定)が使えるのですが外部機器をコントロールするとか目覚ましにするとかの用途は全く考えていないので、アラーム機能の実装はありません。
運用中
デスクサイドに置いて動作を観察をしていると妙な挙動をするのを発見しました。
秒の桁部分が結構ずれてゆくのです。だいたい進みがちで、精度ないのかなぁ〜などと思ってみていたのですが、目を離している隙になぜか戻って1秒以内ぐらいの時刻になります。
よく観察すると10秒以上ずれた時に何かのタイミングで一気に表示される時刻に補正が入ったのごとく突然時刻が変更されて1秒以内程度の正しい時刻になります。NTPのように外部の時計に同期しているわけではないので時刻が不連続になるのは不思議な挙動です。
RTCの動作なのかsetSyncProvier()の動作なのかは突き止められていませんが、短期的にはずれた時刻が表示されても長期的には正しい時刻を保持しているようなので放置しています。
2024/06/28 追記
上記の時計の進み方が突然変更される理由が判明しました。
setSyncPorivder()で時計の同期を行う間隔がデフォルトで300秒である事、同期のタイミングはsetSuncInterval(sec)で設定可能である事が判明しました。
時計の時刻修正のタイミングを観察すると確かに5分ほどで時間が補正されます。内部8MHzクロックは8.000000MHzからはズレがあるという事が分かっていますので、システム時間をベースに表示のしていることから時刻表示のズレの原因はこれでしょう。300秒で10秒以上のズレが生じていたため30秒経過すると1秒以上の差が生じている状態です。
初期設定時にsetSyncInterval(5)とし同期間隔を5秒に設定する事で、実時間と表示時間のずれが生じることはほぼ無くなりました。
16MHz外部水晶発振器で動作をしていればここまでずれる事無く全く目立たない事案だったでしょう。あるいはシステム時間の表示ではなく、常にRTCからの時刻読み取りを行なっていれば、このような現象も生じなかったと思われます。
・バイナリクロック(その1)
・バイナリクロック(その2)
・バイナリクロック(その3)
・バイナリクロック(その4)
・バイナリクロック(その5)
・バイナリクロック(その6)
・バイナリクロック(その7)
・バイナリクロック(その8)
・バイナリクロック(その9)
・バイナリクロック(その10) この記事
・バイナリクロック(その11)