Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

内蔵クロックで時間を計ってみた

内蔵のオシレーターで時計を作るとどんな感じなのか試してみた。

回路は簡単。

プログラムはこんな感じ。
5LEDs001

プログラム内の目新しいところを書く。
OSCCAL = 0x64 という行では、プログラム・メモリーの最後に書かれている内蔵オシレーターの補正値をOSCCALに書き込んでいる。
また、EEPROM_Write を使った部分は、スターとしてからの経過秒数をカウントしておき、EEPROMに書き込んでいる。

PIC12F675のタイマー関連の仕様は以下の通り。

±1%の精度の4MHzの内蔵クロックを持っている。
このクロックを4カウントしたものがTMR0に入る。
TMR0は8ビットのカウンターと8ビットのプリスケーラーを持っている。

以上から1MHzは1秒間に1000000クロックなので、1000000 / 256 / 256 = 15.26 となって、256 x 256 x 15 = 983040 が1秒に一番近いカウントになるので、これを1秒とみなすようにプログラムを書いたつもりだ。

よーいドンで、PICの回路に電源を入れ、同時にストップウォッチで時間を計測し、41分40秒経過したときに電源を切った。
41分40秒は2500秒で、EEPROMに残されていた値は0x0981で2433秒だったので、67秒の差ということになる。約3%だ。
もともときっちりと割り切れた数字でしかカウントできないので、そのあたりを計算し直すと、2433という値は、2433 x 15 x 256 x 256 x 4 = 9566945280クロック分で、本当なら 4MHz x 2500sec = 10000000000クロックとなるところだから、実は約4%の誤差ということで、ちょっと大きいのかな。

このエントリーをはてなブックマークに追加

Posted under: mikroBasic


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.