PIC で MP3 目覚まし時計がピクピク #11
内蔵クロックは時計として使えるか
PIC の内蔵クロックから1秒を周期的に取り出す方法について仕様書と格闘しました。クロック周波数1MHz で動いているものに対して Fosc/4 = 250kHz となります。 1:16 プリスケーラで 15,625 Hz まで逓倍し、これを 8 ビットタイマ TMR2 で 125(=PR2) までカウントさせると 125Hz でコンパレータが EQ 信号を出します。さらにポストスケーラで 1:5 逓倍すれば 25Hz で周期的に割り込み信号を発生させることができます。TMR2 は自動的にリセットされるので、この動作は一度設定すると CPU が TMR2 にアクセスすることなしに永久的に動き続けます。IYN の割り込みルーチンでは、25 回目の割り込みかどうか判断し、グローバル変数である 秒 変数に1インクリメントしています。
3月上旬、まだコートが手放せない気温の時期に実際に 24 時間つけっぱなしにしたときの精度について実験してみました。と言っても、普段使っている時計に合わせて時刻表示を設定し 24 時間 PIC マイコンの内蔵クロックだけで時計プログラムを動かしてみるという内容です。最高気温が 12~3 ℃だったこの日の夜 19 時ちょうどに時計をあわせて一昼夜放置してみました。
するとどうでしょう、5分と46秒も遅れていますよ。こんなにずれるものなのか、初めて体験しました。周期タイマーを正確に割り込み入れて動かしても 5分/日 の精度では、毎日時刻修正をするしかありません。これじゃあ高級機械式腕時計の何倍も出来が悪いということになります。はぁ、ちょっとがっかり。マイコンのクロックなんて大したことないんですねぇ。パソコンの CPU の内部クロックが周期がめちゃくちゃだというのと思想的に変わりないじゃないですか。
対策として PIC マイコンは内蔵する温度計の値によってクロックの刻む速度を自分である程度(~数%)変更する機能があります。よくまぁ温度計なんて内蔵しようと考えたものですけど、どのくらいクロック周波数を修正するかはマイコンのユーザーが各自で条件出しして調べなければならないようです。そこまで時計の自動補正に手間をかけても大した精度を維持できないと感覚的に決断して今回は何も対策しないことにしました。
時計の精度を上げるためにはどうしたらいいんでしょうか。32.768 kHz の水晶振動子をポートに接続するしか無いものなのか。それにしたって水晶も温度による誤差が生まれます。そもそもマイコンの電源投入時に毎回、時計の時刻合わせを手入力でやらなければならない不便さ自体が納得行きません。
どうせなら JJY を受信して電波時計にしてあげたいじゃないですか。そうだ、次はそうしよう。わたしの自作目覚まし時計は時刻合わせは永久に排除してあげます。はぁ、しかし AM 帯の電波の受信すらやったことがないのでそのあたりから勉強しなきゃいけないのか…。
































最近のコメント