mixiユーザー(id:187068)

2019年03月25日17:02

178 view

PICで正確な時計

PICのプログラム久しぶりにしていて、正確な時計を作る部分でちょっと気になった記述。
PIC12F1822に32.768KHzの水晶つけてTimer1を駆動。
そのままオーバーフローするまでカウントさせると、プリスケーラ1,2,4,8の設定で、
2,4,8,16秒ごとに割り込みが入る。
今回は1秒ではなくてもいいので、2の4秒を使うからいい。
しかし、例えば1秒を作りたいときにプリスケーラ1でカウンタを割り込みが入るたびに8000hに書き直さないといけないのだが、この時に16ビットカウンタの数値を上位8ビットだけ書き換えてカウントと書き換えが衝突しないようにしなければいけない。
が、プリスケーラ2,4,8でもカウンタを合わせてやれば1秒は作れる。

どれを選んでもいいだろう、と思いきや、PICのマニュアルにこう書いてあった。
"the prescaler counter is cleared upon a write toTMR1H or TMR1L."
上位8bitのTMR1Hだけ書き換えても、プリスケーラはクリアされちゃうぞ!ってことだ。
つまりカウンタを書き変えて正確な1秒作りたいときはプリスケーラ1以外を選択してはならない。
プリスケーラに何が書かれているかわからない状態でその数値を保持せずに、TMR1xに何かを書き込んだ時点でプリスケーラがクリアされるってのは、プリスケーラの選択によっては誤差の元になるという、、、
実につまらぬ話だけど、こういう細かいハード依存の罠は、必要に応じて見落としが無いか考えていないと見つからない。
ネットや書籍にも、わかってんだろ?常識!的な感じで紹介されて無いのだよな、、、

何作ってるのかって?
この前直してたセイコーのトランジスタ振り子時計ソノーラに12時間タイマーくっつけて夜の間時報を止めるための追加装置だよ。
これがうまく動いたら実用で使えるな、ソノーラ。
よさげだったらヤフオクで売ってみるかw
1 0

コメント

mixiユーザー

ログインしてコメントを確認・投稿する

<2019年03月>
     12
3456789
10111213141516
17181920212223
24252627282930
31      

最近の日記

もっと見る