PIC時計を調整するには、どこを調整するか?
割り込み関数内のカウンターを調整してみた。
最初の段階で遅れたので設定値を小さく(RELOADSに1を足さずにそのままに)してみた。時分表示だと時間がかかるので分秒表示にして確認。ちょっと早い。
半分を元の値で半分を小さくした値にしてみた。ちょっと遅れる。
と、調整していき、1時間で4〜5秒遅れるくらいまで調整できた。これで誤差は0.15%程度。これはセラロックの精度が0.5%なので、これ以上調整してもあまり意味が無いだろうからこれで止める。
次はタイマーのクロックにクオーツを使って精度を見てみたい。
調整したタイマー0の割り込み関数部分。
void interrupt timer0_proc(void)
{
if(reload == 0){
// effect a change on PORTB whenever our desired period is reached.
// Note this timing will contain a margin of error.
if (sec & 1) {
reload = RELOADS;
} else if (sec & 2) {
reload = RELOADS;
} else {
reload = RELOADS + 1;
}
sec++;
if (sec > 59) {
sec = 0;
min++;
if (min > 59) {
min = 0;
hour++;
if (hour > 23) {
hour = 0;
}
}
}
RB0 = !RB0;
RB1 = !RB1;
}
reload--;
T0IF = 0;
}