【リセットとは】
コンピュータのハードウェアは一般的に電源が投入されたときと、外部リセット信号
が入った時に内部回路を全て初期状態にします。
この初期状態とはどんな状態かというと、
・プログラムカウンタは0番地。
・内部で持っているコンピュータの状態、命令の実行結果状態などの状態
はあらかじめ決められた状態に戻っている。
・タイマや入出力ポートはあらかじめ決められた状態に戻っている。
・割込みを全て禁止状態。
という状態で、いわゆるコンピュータが全ての状態を初期化して何もしていない状態と
いうことになります。
これで判るように、プログラムは最初は常に0番地から実行されます。
【リセットの種類】
PICの「リセット」には下記のような複数の異なったリセットがあります。
(1) パワーオンリセット
(2) MCLR端子によるリセット(外部リセット)
(3) ウォッチドッグタイマタイムアウトによるリセット
これらのリセットでは、通常は大部分のレジスタ類は決められた初期状態にされます
が、SLEEP状態でのウォッチドッグタイマタイムアウトによるリセットの時だけは、
この機能がSLEEP状態から通常実行を再開させることにあるため、レジスタ類には
何ら影響が無く、もとのまま再開となります。
【パワーオンリセット(POR)】
一般的なコンピュータのリセット関連で難しくて常にトラブルの種になるのは、電源
がON/OFFする瞬間の時です。
まず、電源がONになったときに自動的にコンピュータが正常スタートする様にする
には、電源が入ったとき確実にリセットがかかるようにすることが必要です。
しかも、下図のように、電源電圧がPICの正常動作が保証されている規定電圧に
なるまで継続してリセットがかかっていることが必要です。
そうしないと、電源が安定な電圧に達するまでの短時間の間に、コンピュータが不安定
な動きをしたり、最悪の場合には電圧が正常になった後でも動かなかったりしてしまい
ます。
この規定電圧というのは、PICの種類と、クロック発振の種類によって決まっており、
PICの規格表に記述されています。
《PIC16F87xの規定動作電圧》
クロック発振モード
PICのデバイス種類
PIC16F87x-04
PIC16F87x-20
PIC16LF87x-04
RC
4.0V〜5.5V
4.5V〜5.5V
2.0V〜5.5V
XT
4.0V〜5.5V
4.5V〜5.5V
2.0V〜5.5V
HS
4.5V〜5.5V
4.5V〜5.5V
----
LP
4.0V〜5.5V
-----
2.0V〜5.5V
PICの場合、この電源投入時に確実にPICが正常スタートするようにするための
回路が「パワーオンリセット(POR)」として内蔵されており、単純に規定電圧になる
のを待つだけで無く、一定時間の間、リセット信号が内部で強制的に継続するよう
になっています。
PIC16C/Fxxシリーズの場合、これを図示すると下図のようになります。
まず電源がONし、規定電圧(標準で1.5V±0.3V)になったところでPIC内部で電源
ONを検出すると、そこからタイマが動作開始し、標準で72msecの間リセット信号を
継続させます。
一般の電源の出力電圧が安定な出力になるのは、遅い物でも30〜40msec程度
ですから、これで電源電圧が確実に安定することになります。
ただし、ここで少し問題があります。このPICの電源ON検出の規定電圧が1.5Vと
かなり低いので、電源立ち上げを感知するのが早く、電源の立ち上がり特性が悪いと、
リセット時間が不足してしまうことがあり得ます。そこで特に5V電源で動作させる時に
は、できるだけ早い立ち上りの電源を用意する必要があります。
PICのPOR機能はこれだけではありません。この72msecの後、さらにクロック発振
回路が安定発振しているのを確認するため、1024個のクロックをカウントした後、
内部リセット信号が解除され、やっとプログラムが開始することになります。
このクロック発振回路の安定というのは、PICのクロック回路の発振素子として用いら
れる水晶振動子やセラミック振動子が発振を始めるとき、下図のように、直ぐには、安定
な発振状態にはならず、徐々に発振振幅が大きくなって安定するという特性があるため
です。
この安定までの時間は長いものでも数10msecなので、電源投入後72msecも経っていれ
ば、発振回路は既に安定な発振状態となっているはずですから、ここで1024回カウント
出来ないということは、正常にクロックが発振していない状態だということになります。
このようにクロック回路の安定動作まで考慮に入れた電源投入時の動作保証回路に
より、PICはいろいろな特性の電源に対しても確実なスタートが出来るようになっています。
【外部リセット】
このPORによるリセットでもカバー出来ないような悪条件でも、確実にリセットがかかる
ようにするためには、外部でリセット信号を生成し、MCLR端子に挿入します。
この悪条件とは、例えば、電源の立ち下がりが非常に遅く、正常にPICが停止しないこと
が想定される場合や、瞬時断が頻繁に発生する場合などです。
この外部リセット回路にはいくつかの方法がありますが、良く使われる基本的な回路は、
CR時定数によるディレイ回路による方法と、専用リセット用ICを使う方法です。
CR回路によるリセットは簡易的な方法で、下図に示したように、コンデンサと抵抗による
ディレイ回路を使って外部リセット回路を構成します。
この外部回路の助けとPORの組み合わせで、電源が確実に立ち上がってからリセット信号
が解除されるようにします。
抵抗Rは、抵抗での電圧降下が大きくなり過ぎて、
論理の判定が出来なくなってしまわないように
40kΩ以下にする必要があります。
またダイオードDは電源がoffになった時に、急速に
コンデンサCを放電させ、リセットが早めにかかるよう
にする働きをします。
R1の抵抗は、MCLR端子にコンデンサからの過電流
が流れるのを防止するためのもので、100〜1kΩ程度
とします。
この方法では瞬時断が繰り返されるような環境では、コンデンサの放電が間に合わず
リセットがかからないケースが考えられます。
このような環境の場合には、外部にリセット専用のICを外付けする方法とします。
このリセット専用のICは、常時電源低下の監視も一緒に行っており、電源がある一定値より
下がると、自動的に一定時間リセット信号を出力してPICを強制停止させて誤動作を防止し
ます。
この監視電圧の下限をPICの正常動作保証下限電圧(4.0Vor4.5V)に調整しておきます。
【ブラウンアウトリセット(BOR)】
電源は、常時は一定の電圧で安定供給しています。しかし、例えば突然の停電とか、
瞬時停電とかが発生した時には、電源の供給元である商用電源が無くなる訳ですから、
電源電圧降下や突然の断が起きます。
このような時には、電源電圧は素直に0Vになるのでは無く、何回か瞬時電圧低下したり、
Off/Onを何度も短時間に繰り返したりするなど不安定な状態となることがあります。
このような場合の誤動作対策が最も難しく、トラブルを引起こす機会も多くあります。
このように、コンピュータが動作中に、突然電源が切れたり低下したとき、確実にコンピュ
ータを止めることも重要です。このためには、電源が降下する間に早めにリセットをかけて、
コンピュータが不安定な動作をして余計な信号を外部に出したりすることが無いようにする
必要があります。
この解決方法としては、通常外部に電源電圧の監視回路を設けて、あらかじめ定められた
電圧以下でリセットをかける様にしています。この目的の電圧監視専用のICも出来ています。
PICの場合、最新のデバイスでは、この電圧監視回路が内蔵されており
「ブラウンアウトリセット機能(BOR:Brown-out Reset)」と呼ばれています。
PICのBOR機能のシーケンスは下図のパターンAのようになっており、スレッショルド電圧
(標準は4.0V±0.2V)より電圧が下がると、内部的に強制リセット信号が出力され、PICは
リセットで停止します。
このあと電源電圧がスレッショルド以上の電圧に戻ってから72msec後にリセットが解除され
PICのプログラムは再スタートします。
電源の瞬断が続けて発生するような不安定な時には、電圧低下が連続して発生することが
あります。
そのような時にはパターンBのように、一旦電圧が復旧後72msec以内に再度低下する現象が
起きた時には、内部リセットは連続して出力されたままとなって、PICは停止状態を継続します。
最後に電圧が復旧してから72msec後にリセットが解除されて再スタートします。
【ウォッチドッグタイマリセット】
別ページのWDTの項を参照して下さい。