リセット機能


【リセット機能の強化】

PIC18Fxxxxシリーズになってリセットの発生要因がかなり多くなりました。
そしてプログラムでどのリセット条件でリセットされたかを判定することもできるように
なったので、それぞれのリセット条件に応じて処理内容を変えることもできるように
なりました。

【リセットの要因】

リセットが発生する要因には下記があります。

(1) 電源ONリセット(POR)
  これが初期スタートの基本です。

(2) 通常RUN状態でのMCLRピンによるリセット
  強制リセットに当たるもので、リセットスイッチなどによる意図的なリセットです。
  MCLRピンにはノイズフィルタが追加され、短時間のパルス的なノイズ信号は無視され
  リセットはかからないようになりました。

(3) スリープ状態でのMCLRピンによるリセット
  強制ウェイクアップになります。

(4) RUN状態でのウォッチドッグタイマのタイムアップによるリセット
  プログラム暴走などの異常状態を検出した時の自動リセット

(5) ブラウンアウトリセット機能によるリセット(BOR)
  電源電圧低下検出による強制リセットで、電源の異常が考えられます。
  検出スレッショルド電圧が選択できるようになりました。

(6) リセット命令によるリセット
  PIC18シリーズで新たに追加された命令によるリセットです。

(7) スタックメモリオーバーフローによるリセット
  スタックメモリが一杯でオーバーフローしたときに発生する異常リセットです。

(8) スタックメモリアンダーフローによるリセット
  スタックメモリの使い方が異常で、アンダーフローしたときのリセットです。

そしてこれらの各リセットの区別はRCONレジスタのビット状態で判定します。
そのRCONレジスタは下図のようになっていてそれぞれのリセット後の状態は下表の
ようになります。









 《リセット条件によるリセット後のRCONレジスタの状態一覧表》
リセット条件 プログラム
カウンタ
RCONレジスタ STKFUL STKUNF
電源ONリセット後 0000H 0--1 1100 0 0
RESET命令実行後 0000H 0--0 uuuu u u
ブラウンアウトリセット後 0000H 0--1 11u0 u u
RUNモード時のMCLRによるリセット 0000H 0--u 1uuu u u
IDLEモード時のMCLRによるリセット 0000H 0--u 10uu u u
RUNモード時のWDTタイムアウト 0000H 0--u 0uuu u u
フルパワー時のMCLRによるリセット 0000H 0--u uuuu u u
スタックオーバーフローによるリセット後 1 u
スタックアンダーフローによるリセット後 u 1
IDLEモードかSLEEP中のウォッチドッグ
タイマのタイムアウト
PC+2 u--u 00uu u u
低消費電力モード中の割込みによる
ウェイクアップ
PC+2 u--u u0uu u u
 (注)u は変化が無いことを表す


【リセットのタイミング】

 通常状態で電源が入った時の起動シーケンスは、ミッドレンジシリーズのPIC16シリーズと
ほぼ同じで、下図のようになります。
図のように、電源電圧が0.7Vを超えた時点で内部RESET(POR)が発生し、TPWRT時間の
間持続します。これは標準では66msecです。
その後クロック発振の確認のためクロックカウントを1024回実行します。この時間がTOSTです。
この条件が整ったあと内部RESETがOFFとなり命令の実行が開始されます。






 これに対し、外付けでリセットICなどを使って、電源オン時に長いMCLR信号を入れた
時のシーケンスは下図のようになり、外部からのMCLR信号が優先的に扱われて
リセット信号が延長されます。これで、外付けのリセットICを使えば、さらに安定確実な
リセットをかけることが出来ます。





 さらにPIC18シリーズでは、クロックにPLLによる4倍モードが追加されました。このためリセット
の際にもPLLの動作が安定しロックされるまで待つ必要があります。
これに伴い、リセットシーケンスが下図のように変更になりました。すなわち、従来のシーケンス
の最期、クロックカウント待ちのあと、さらにロック待ちの時間TPLLが追加されました。
この時間は標準は2msecとなっています。
このPLLロック待ち時間は、リセット時だけでなく、SLEEPからのWakeUp時にも必要とされます
のでWakeUpに必要な時間が2msecだけ延びたことになりますので注意が必要です。









   目次ページへ