何でいまさら Watchdog Timer かというと、昨日から PIC10F222 で遊んでて、なぜかWatchdog Timer をONにしてしまっていて、しかもそれに気づかずに、「おかしいなあ」って思ってたというバカをやらかしたからだ。
この際、自戒の意味を込めて PIC10F222 の Data Sheet の説明を見直しておこう。
そもそも、あそびでやってる分には Watchdog Timer を ON にして動作を監視させるような必要はまったく無い。
なので、その存在がほとんど念頭に無く、何かの拍子に ON にしてしまっても気づかないということになる。
WDTは他のシステムから独立していて、SLEEP中でも動いてますよ。
そうだろうね、番犬がご主人様と一緒に休んでたら意味ないから。
WDT をリセットするとTO bit がクリアされますよ。
configuration の WDTE を 0 にすることで使わない設定に出来ますよ。
これを間違えて設定しちゃってんだな、今回は。
そもそも使ったことが無いので、リセットの仕方とかまったく気にしたことも無かった。
時間間隔はプリスケーラで変更できて、基本的には18msから2.3sの間だけど、諸条件によって変わるから、数秒間必要な場合もあるよ。
OPTION register で設定できるよ。
ということは Timer0 と排他利用ということなのかな。
CLRWDT命令で WDT と Postscaler がクリアされるし、SLEEP命令でもリセットされるよ。
つまり、Watchdog Timer を使うなら、決められた間隔内で定期的にクリアする必要があり、それをしないとシステムに異常があったと判断されて Reset がかかるというわけ。
いや、そのこと自体は知ってたんだけど、使ったことも無かったので、この覚書きとなった。