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; }