【ウォッチドッグタイマ】(Watch Dog Timer)
ウォッチドッグタイマ(WDT)は、プログラムの正常な実行状態を監視するための
タイマです。
ウォッチドッグタイマは常時一定間隔でカウントアップしており、一定時間後に
フルカウントに達するとリセット信号を発生してプログラムを0番地から再起動します。
このカウントアップ中に、命令でウォッチドッグタイマをクリアすると、タイマは最初
からカウントアップを再開します。
従って、一定時間以内にこのクリア命令を実行し続ければ、ウォッチドッグタイマは
カウントアップしないことになり、リセットも発生しません。
そこでプログラムが正常に実行中は、一定時間以内にクリア命令を実行するように
しておけば、もし、プログラム実行が異常になった場合には、このクリア命令が実行
されないため、リセットがかかり0番地からプログラムを再開させることが可能になり
ます。 これが「番犬」と呼ばれる所以です。
【WDTの構成】
ウォッチドッグタイマの内部回路構成は、下図のようになっています。
まず、ウォッチドッグタイマ自身は、図中のWDT Counterです。これのクロック入力は、
内部RC発振クロックであるINTRC(31kHz)となっています。従ってこれを125カウント
するので、そのままの状態では、約4msecでWDT Counterがカウントアップします。
このカウントアップの許可を、WDTENとSWDTENの2つのコンフィギュレーションビット
で行っています。
タイムアップが4msecでは余りにも短い時間なので、これにポストスケーラが追加されて
いて、最大32768倍の長さの時間にすることができます。
従ってWDT Resetの信号は、4msecから4msec×32768=131秒まで延ばせることに
なります。
このWDTカウンタは「CLRWDT」命令とRESET信号でリセットされ、0からカウントを再開
します。
さらに「SLEEP」命令でSLEEP中はリセットではなくWakeUp信号となります。
WDTの時間の精度は、内部RC発振のINTRCの精度に依存しています。このINTRCの
発振周波数精度は、工場出荷時に±1%に調整されていますが、OSCTUNEレジスタ
の値を変更することで、周波数を変更することも可能です。
【WDTの設定】
上記の動作モードを設定するためには、WDTCONレジスタとCONFIG2Hレジスタを
使います。
(1) WDTCONレジスタ
PIC18Fxxxxシリーズで新たに追加された機能で、ソフトウェアでウォッチドッグ
タイマの使う/使わないを制御できるようになりました。そのための制御レジスタ
がWDTCONレジスタで、内容は下図のようになっています。
(2) CONFIG2Hレジスタ
コンフィギュレーション時に、WDTの使用と時間を設定するためのレジスタです。
内容は下図のようになっています。
時間は4msec×ポストスケーラ値 となります。