![](https://blogimg.goo.ne.jp/user_image/3e/57/4f633f683db4c3fb99d149949f9fe8b6.png)
CPUにおける「リセット:RESET」回路とは、どんな役割があるんでしょう?
それは、大雑把に云って2つあります。 (本当はもう1つある)
① 最初に 電源が投入された時、Vcc(+5V)が安定するのと、かつ クロックの信号が安定して供給されるのを待つための時間調整。
→ 要は電源を入れてもしばらくの間 RESET=Lowを保ち、
周りの他の回路が安定してから やわらCPUが動き出す。
② プログラムが走っていようと、暴走していようと、RESET信号が入力されたら、それこそCPUが リセットされ、アドレス0番地から実行し直される。
この2点 です。
電源が投入されても しばらくは Lowに保たれる回路の 最も簡単な構成は、R(抵抗)を使って C(コンデンサ)に電気をゆっくり貯める ↓ こんな回路でしょう。
![](https://blogimg.goo.ne.jp/user_image/5b/58/ac6bb3dee002375afe723a85a5d59b4f.png?1567240846)
Vccは 5Vとし、仮に抵抗を1KΩ、コンデンサを 10uF とします(計算し易いように!)
では、あなたは この時 (緑の点の電圧が) Lowに保たれる 時間 を 自分で計算できますか?
この回路が(コンデンサが)「充電される時」と「放電される時」の電圧波形は、↓ こんな 感じになるはずです。
![](https://blogimg.goo.ne.jp/user_image/1b/26/f8628d50cea6e8f30f6a292ceede0197.png)
上の赤いのがVcc(5V)で、下の青いのが コンデンサのプラス側の電圧です。 電源電圧に対して その63.2%まで充電される時の時定数を τ (タウ) と言って、トランジスタの場合 0.69を使うのが普通でした。
つまり、
T = τ・R・C
が時間Tを計算する時の計算式で τ (タウ) =0.69 で計算すると だいたい合っていたのです。 T=時間、R=抵抗値、C=コンデンサ容量
なんか難しくて分かりづらいですよね? それと単位は?何でしょう??
具体例をあげてみます。
![](https://blogimg.goo.ne.jp/user_image/3e/57/4f633f683db4c3fb99d149949f9fe8b6.png)
抵抗Rの単位をKΩ ・・・ つまり 1KΩなら そのまま 1
コンデンサC単位をuF (=マイクロ・ファラッド) ・・・ 10uFなら 10
とすると、
T = 0.69 x 1 x 10
=6.9
この時の Tの単位が mS(ミリ秒)とするのが 一番 分かり易いでしょう。
ーーーーー
では、肝心の 8085AのCPUの場合、最低でどの位の時間(長さ)Lowにしておかないといけないのでしょう?
三菱の8085A のデータシート ↓ を見ると、
![](https://blogimg.goo.ne.jp/user_image/26/2c/26d1d29351aefc4697cea6053d87bee0.jpg)
at least 少なくとも 3倍のクロック・サイクル時間は必要・・・となっています。 で、「1クロック・サイクル」って何mSなの? となりますが、
次の資料 ↓で、
![](https://blogimg.goo.ne.jp/user_image/7a/24/0fc3d7f501397839eb39438100f630f0.png)
短くとも 320uS= 0.32mS、長くとも 2mSとありますので、長い方を取れば
2mS x 3倍 = 6mS
(短い方だと 0.32x3=0.96 =約1mS。 これ以下のLowパルスだと リセットされないのか?)
本家Intelのデータシートにこんな記述を見つけました。
![](https://blogimg.goo.ne.jp/user_image/3b/5b/9e724872f6718eeeaa967cabd3b32842.png)
電源Vccが最低動作可能な電圧に達してから、↑ 少なくとも10mSは Lowに保たなければいけない。
ちなみに、電圧の63.2%まで充電される時を 1τ(タウ) とすると、
電圧の86.5%まで充電される時を 2τ(タウ) と言い、時間は倍になります。
充電が進むにつれて、どんどん充電速度が落ちて行き、充電されにくくなるんですね?
![](https://blogimg.goo.ne.jp/user_image/62/61/228e6c78f1ab7dece73ef34dbaa5c400.jpg)
電源電圧5Vとして、その1τ(タウ) の 電圧で、本当に正しいのでしょうか?
5V x 0.632 = 3.16V
C-MOSレベルなら良いのでしょうが、TTLではもっと早く Hi と判断されてしまうはずです。 実際、こんな ↓ データがありました。
![](https://blogimg.goo.ne.jp/user_image/03/aa/d136156f67af9afcd2a6cc064c072a63.png?1567243126)
VIH(リセット入力端子にかぎり)= 最低でも 2.4V
VIL(リセット入力端子にかぎり)= 最高でも 0.8V
つまり、通常のTTLの入力レベル 2.0Vよりは 少し高い・・・でも、最低でも2.4Vを超えたら RESET信号は終了した と 判断されてしまうんですね?
要するに このRCでは 6.9mSよりもっと 短く判断されてしまうんです!
そこで、抵抗を 3倍 に 増やして余裕を持たせてみました。↓ R1 が 1K⇒3KΩ
いっそのこと 10KΩ くらいでも良いでしょう (T = 約70mS)
![](https://blogimg.goo.ne.jp/user_image/19/40/9e3f8f92f29922c04b6cf5b74b90a351.png)
D1のダイオードは、放電が速くなるように付けたもので、100Ωはコンデンサショートの時の保護です。 (0.8V 以下まで落ちれば良いので)
ーーー
ここで、回路設計に慣れている人の中には、
コンデンサが ゆっくり電圧があがっていくのだから、(HC14のような)ヒステリシス回路を入れないと心配だ! っと思う人もいるでしょう。
Hi と Lowの切り替わりの ギリギリの所で RESET信号が 「Hiと認識」「Lowと認識」を 激しく繰り返すのでは? と。
それを防ぐために おそらく ↓ こんな回路を設計しがち。
![](https://blogimg.goo.ne.jp/user_image/0c/9f/8a539fa055d1dbc9fc921e3c137b9028.png)
でも、おそらく こんな ヒステリシス内臓のインバイータ(14)を 2個も追加しなくとも大丈夫です。 (無駄なICは入れない! いつもの「習慣」だけで設計しない!!)
![](https://blogimg.goo.ne.jp/user_image/3f/b0/785da59d3cd0fc8591987688a914803c.png)
8085Aの RESET入力端子は、(最低でも 0.25V 差のある)ヒステリシス特性のある シュミット・トリガ回路(STの部分)を内蔵しています。 安全のため(0.6mA以上流さないと電圧が下がらないように)3KΩ相当のプルアップも内蔵されているようですね?
![](https://blogimg.goo.ne.jp/user_image/6b/cd/401f192dc65bb025c8b786c326e122d5.png)
ーーー
さて、こういった RCによる時間の計算が面倒だ!という人には、インターネット上で簡単に時間計算ができるサイトがあります。
最初の単純な例: 1KΩ、10μF で やってみると
![](https://blogimg.goo.ne.jp/user_image/22/18/9b7c2ad44bc57d5bded14502994651ce.png)
このサイトでは Min 7.6mS (~ 12.6mS)だったり、
また別のサイトでは、
![](https://blogimg.goo.ne.jp/user_image/6a/77/439b8a33c2cddd8ae23710b653479bba.png)
10mSだったりします。 ここも ↓
![](https://blogimg.goo.ne.jp/user_image/7d/70/1d373de63f415acb50e891fd48851ab7.png)
実際はこれより短く判定されるので、余裕をもって長めにしておいた方が安全です。 そして こんな RC回路では まったく正確な時間は作れず、部品のバラツキ、誤差の方が大きいのです。 そんな認識でいてください。
ちなみに、TK-85 では、
R=10KΩ、C=22μF
他の SBC-8085 では、
R=47KΩ、C=10μF
でした。
(どのくらいの時間になるか ネットで計算してみてください)
さらに、
本家 Intelにデータシートには、具体的なリセット回路が載っていました。
![](https://blogimg.goo.ne.jp/user_image/69/ef/1d21b7e8218e4652bf46403580c275a9.png)
R=75KΩ、C=1μF
これだと 約50mS のリセット時間となります。
これを そのまま真似しても良いのですが、75KΩ は手に入りにくいので 考えた末、↓ 二転三転しましたが、最終的に こんな値に落ち着きました。
![](https://blogimg.goo.ne.jp/user_image/10/82/b14c4e5e742fb58de5fae2de0f229a11.png)
R=10KΩ、C=10μF
これで 約70mS のリセット時間となります。
これなら部品も入手しやすいし、
70mSもあれば時間的にもかなり余裕があるはずです。
![](https://blogimg.goo.ne.jp/user_image/5f/c3/219bbfb396404116c0578d5af094917d.png)
※コメント投稿者のブログIDはブログ作成者のみに通知されます