ウォッチドックタイマノイズでマイコンのプログラムカウンタが書き換わるとプログラムがとんでもない番地にとんでいってしまい暴走が発生します。暴走が発生した場合ポートは0か1になってしまうことが多いようです。昔のことですが、暴走した工作ロボットが作業者を死亡させてしまった記事が新聞に大きくとりあげられていたことをよく覚えています。マイコンを誤動作させる外乱としては、静電気ノイズ、電源ラインからの伝導EMIノイズ、バーストノイズ、放射EMIノイズ、雷サージノイズ、ディップ等いろいろあります。不良、塵埃、結露といった要因でも暴走は発生することがあります。制御対象がクリティカルな場合だけでなくてもウォッチドックタイマを使用した設計の習慣を身につけたいものです。ウォッチドック(番犬)タイマとはマイコンが暴走したことをハード的に検出してリセットをおこなうハードのタイマ回路です。ウォッチドックタイマが動作した場合の処理をきめる。タイマ時間の上限はマイコンが暴走した場合の危害程度と時間の関係から決定します。工作ロボットなどのアクチュエータが1秒間もの長い時間勝手に動いた場合は極めて危険なことが発生します。設計的に難しくないならできるだけ短い時間に設定します。PICの場合最小が18msecです。プリスケーラの設定により36msec、72msec、144msec、288msec、576msec、1152msec、2304msecが選択できます。組込マイコンの場合処理ルーチンが繰り返されているのがふつうですので、以下のような方法があります。繰り返しルーチンのなかで複数回に分けてリセットをおこなう★ルーチンの中で1回だけのリセットではウォッチドックタイマがタイムアウトしてしまう場合、音声制御などでインタ-バルタイマを使かうとノイズ音がでたりするなどでインターバルタイマが使用できない場合及び割込みが別の目的使用されている為インターバルタイマが使用できない場合など好ましいものではありませんが実際の設計では多々遭遇します。電源を投入した状態に戻すのが一般的ですが、ウォッチドックタイマが動作したことを表示してシステムを停止させておくといった処理もあります。システムによっては再び誤動作が発生する直前と同じ状態でのシステム再稼動をおこなう場合があります。この場合誤動作発生の直前のシステムの状態を記憶しておく必要があります。記憶の方法としてEEPROMに記憶しておいたり、またスイッチはモメンタリースイッチはやめてオルタネートスイッチにしておくといった方法があります。ウォッチドックタイマのリセット方法違いでの例を、以下に紹介します。インターバルタイマをつかって定期的にウォッチドックタイマのリセットをおこなう<試作品仕様>・電源を投入した状態ではRB0〜RB7のLEDはすべて消灯している・モーメンタリースイッチを押すととRB0〜RB7のLEDはON時間1秒、OFF時間1秒のフリッカーを繰り返す・モーメンタリースイッチを押すとRB0〜RB7のLEDはすべて消灯する・ウォッチドックタイマが動作した場合はRB0〜RB3は点灯、RB4〜RB7は消灯した状態となり、スイッチを押してもLEDは動作しない・ウォッチドックタイマの設定時間は36msecとする<試作品回路図>(→回路図のPDFファイル)PIC18F452をつかった場合の回路図を以下に示します。外付けの水晶発振子の周波数は10MHzですがPIC内部のPLL回路で4倍にしているため内部動作クロック周波数は40MHzです。・プログラム起動後1秒後にLEDを点滅させる。・点滅はON時間200msec、OFF時間200msecとする。・WDTのクリアは実施しない。}}<動作結果>以下は、RG2ポートの電圧をデジタルオシロで測定した結果です。WDTがタイムアウトしてPICがリセットされています。これがくりかえされているのがわかります。<C18編>(WDTのクリアをおこなった場合)<試作品仕様>・プログラム起動後1秒後にLEDを点滅させる。・点滅はON時間200msec、OFF時間200msecとする。約400msec毎に実施する。WDTにより停止させられることなく行われています。繰り返しルーチンのなかで複数回に分けてリセットをおこな(1)(2)がどうしても無理な場合にのみこの方法をとります。以下の例ではプログラム中の2ヶ所でウォッチドックタイマのリセットはおこなわれています。ウェークアップするだけです。)命令の後の命令からプログラムが再開されます。・プログラム起動後の1秒後にLEDを点滅させる。・点滅はON時間200msec、OFF時間200msecとする。・WDTのクリアは実施しない。・スリープしたWDTがウェークアップしたらRJ0ポートののLEDを1秒間点灯させる。・RJ0のLEDを消灯後は、再びスリープする。その後再びスリープへ移行。4秒スリープ後、ウェークアップしてRJ0ポートのLEDを1秒点灯させる繰り返しをおこなっているWDTの動作が確認できます。ウェィクアップするだけです。ウェィクアップ直後にリセットを行った場合です。<試作品仕様>・プログラム起動後の1秒後にLEDを点滅させる。・点滅はON時間200msec、OFF時間200msecとする。・ウォッチドックタイマのタイム(WDT)アウト時間は4096msecとする・WDTのクリアは実施しない。その後再びスリープへ移行。}}<動作結果>RG2ポートの波形です。ウェイク直後リセットがかかり、プログラムが再起動していることが確認できます。WDTなども含め全クロックが停止させます。WDTをクリアする必要はありません。ほとんどのクロックがクロックが停止してしまいますが、スリープ中でも動作させることができるクロックとして、SOSCがあります。リセットがかからずウェークするだけとなり通常の場合とWDTの挙動と異なります。Flag)をチェックしてリセットします。クロックとしてSOSC(32.768KHz)を用いる。PICをリセットする。//タイマ割りこみがないとリセットは発生する。RJ0ポートの電圧波形です。1sec毎に割り込みが発生していることが確認できます。