ここ2週間ほど、PC側の時計とJJY時計との間で誤差が出ていて
その原因がはっきりしなくて悩んでいた。
症状は、JJY時計の時刻が2秒あたり200mSec前後づつ遅れていくというもの。
タイマ割り込み処理内で行っているJJYに同期する処理が重く
(約600mSec掛かる)、この処理時間によって計時時間に誤差が出る懸念もある。
また、タイマ割り込みで計時ルーチンを呼んでおり、次の割り込みまでの間に
処理が完結しなければ、時計が遅れていく事も考えられる。
前者は、割り込み処理内で行う処理を最低限(1mSecでサンプリングして
パルス幅評価をする部分)にして、後でゆっくりやって良い処理
(受信データから時刻を抽出したりする部分とか。)は追い出した。
前者をFixしても遅れる現象は変化せず。
もしかして現状でも割り込み処理内の処理時間が1mSecを越えているのか?
…と思い、後者をつつく。
割り込み処理の末尾で、ポートを反転させる処理を入れ
1mSec幅でH/Lするかオシロでチェックしてみた。
特に脱調する事もなく、ちゃんと1mSec幅でH/Lしている事が確認出来た。
となると、もう遅れる要素は考えられない。
有るとしたら繰り上がりをミスっているとか、その辺だ。
でも繰り上がりは間違っていない。うーん。
ふと思い立って、机の隅に置いてあった卓上時計(デジタル)と
PCの時計を30秒程度にらめっこしてみた。
…進んでる。PCの時計。ほんとにどんどん進む。
卓上時計を神様にしてJJY時計との誤差を見たら、2時間経っても数十mSec。
今までPCの時計は正しいものだと思って、自作のプログラムを疑っていたんだが…。
2週間無駄にしたと思うか、正しい事を確認出来て安心出来たと思うか。
先を急がなくちゃ。
Comments