• ベストアンサー

PIC TIMER0について

TIMER0は便利な装置だと思うけど、1mSとか5mSとかきりのいい時間になりません。なんかこれを補正して使う方法とかないんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

使用チップがわからないし、どの程度精度が要求されるのかで話はかわってきますが、 ○あまり正確でなくてもいい場合 クロックが内蔵4MHzとかだとすると、プリスケーラで16分周すれば、カウンタ8bitのオーバーフローとあわせて、1.024msごとの割り込みになります。 内蔵RCだとかセラロックだと、もともとのクロック周期に精度が出てませんから、普通はこの程度で十分でしょう。 2msとか4msはプリスケーラの設定で得られますが、5msが欲しい場合は、1msの割り込みでカウンターを使って5回に1回処理するようなルーチンを組めばOK。 ○それほど精度は要らないが、「1秒間に200回(平均5ms)」という頻度は正確であって欲しい場合 内蔵クロックが4MHzだとすると、プリスケーラ8分周で、512μsごとに割り込みがかかります。 割り込みがかかるたびに  ・カウンタに512を足す  ・カウンタが5000を超えたら     ・カウンタから5000を引いて     ・5msごとの処理を実行 すれば、秒間200回の処理ができます。 (実際には、周期は5.12msごとの中に、時々4.608msが入って、平均5msになる) この方法なら、半端な周期でも実現できます。 プリスケーラの分周倍率を下げれば精度があがりますが、 その場合は割り込みで処理できる時間余裕が減るので注意。 (例えば、分周無しなら64μ秒ごとの割り込みになり、カウンタ処理後の周期は4.992msに時々5.056msが入る形になります) ○正確な1msが欲しい場合 外部クロックで16.384MHzのクリスタルオシレータを使えば、プリスケーラで64分周すれば、カウンタ8bitのオーバーフローとあわせて、1msごとの割り込みになります。

noname#62952
質問者

お礼

回答ありがとうございます。 大変参考になりました。