レトロ電子工作

電子工作はじめました!
基本的な所からゆっくりゆっくり進めていきます

DIP6モジュール (オープン コレクタ変換)

2019年09月07日 06時31分16秒 | 回路
RESET回路の検証のため、5Hzくらいのゆっくりとした方形波を与えて オシロロスコープで 時間を測ろうとした時、
 直接 TTL信号を 入れるのではなく、オープンコレクタ信号に変換してから接続する必要があります。 (リセットの入力は 押しボタンスイッチが付いているわけで、直にGNDにショートされる可能性があるからです)
 そんな時、14ピンのDIPサイズの IC : 例えば、74LS05 とか 74LS07 とかの「オープンコレクタ出力」のICを使って、ブレッドボード上に その都度 回路を組んでもいいのですが・・・
 面倒です。
たかだか 14ピンのICですが、この中の6個ものゲートが入っていて、実際に必要なのは(使うのは)1個です。
使っていない(空きゲートの)入力ピンは GNDに接続しないといけませんし、つなぐ必要のある配線がけっこうな本数になります。 そこで、少しでも楽をしようと、1信号だけ TTL信号をオープンコレクタ信号に変えるモジュールを作ってしまう ことにしました。
 できるだけ小さく作りたかったので(入力1出力1 使用部品1個のみなので) DIP8ピンを さらに削って、DIP6ピンモジュールで作ってみようと思います。 回路図は↓ これだけ!

 DTC114EKA という部品は、「チップ トランジスタ」なのですが、数あるチップトランジスタの中でも、TTL信号に接続するための抵抗まで内臓している 便利品です。 入手もしやすい!
大きさは こんな ↓ 感じ。

わずか3ピン ↑ なので、ユニバーサル基板のランド上にも 少し傾けて配置すれば↓ 、問題無く ハンダ付けできます。
データシートはこれ ↓




余談ですが・・・
オープン・コレクタ出力の回路図の書き方:
昔は ちゃんと O.C. だと分かるよう、三角の頭に *(アスタリスク)を付けるか、縦に短い線 ↓ を入れていたものです。(もしくは、OCと そのまま文字で書いていた)

 最近は こういった大事な所を省略しがちなのはなぜでしょう?
そして 抵抗の記号を 波線ではなく、単なる四角で書くような JIS勧告まで出ているし・・・ そんな回路図 見づらいのにね!
 省略すべき方向性が間違ってるように思います。




RESET回路の検証

2019年09月04日 06時30分27秒 | 回路
RCによる リセット回路で、本当に計算道理の時間 Lowが保たれるのか? 確認してみなければなりません。
きっと なるだろう・・・ では 正しく設計した検証にはなりません。

 そこで、確認用に もう1種類 「DIP8モジュール」による リセット回路基板を作る事にしました。 なぜなら、先の回路では 8085AのCPUをつながないと時間測定が出来ないからです。 せっかく、モジュール単位で基板を作っているのですから CPUにつながなくとも単体で動作の確認が出来なければ意味がありません。
 先の説明で、8085A の CPU内部にシュミット・トリガ回路が入っているので 外部には不要です・・・ と 話ましたが、あえてシュミット・トリガを乗せたモジュールを作ります。 新たに、もう一つ。 回路は↓こんな感じ。
 リセットの為の押しボタン(タクト)スイッチは 不要ですので、取り付けず、その代わりに RESET信号確認用のLEDを付けておきます。 リセット中は赤く点灯するようにします。 TC7SH14FUは C-MOSですので LEDを「ソース接続」で使っても 電流は十分に取れます。
 これなら シュミット・トリガ回路もモジュール内に入れてあるので、このモジュール単体で確認ができます。
 ただ、RESET信号が 単発では、オシロスコープ等で測定しようと思っても難しいです。 そこで、ファンクション・ジェネレータで 5Hzくらいの 方形波を作り、それを(オープンコレクタを通して)/RESINに入れて 連続で測定できるようにします。

 ファンクション・ジェネレータは ↓ こんなのを使おうと思います。
 数Hzのゆっくりとした 連続波形が出せれば何でもかまいません。

 全体の接続は、↓ こんな感じ。

これなら(連続波形なら)オシロスコープで 楽に測れます。

これで、10KΩ、10uF の組み合わせで 70mS ぐらいのLowの期間が作れるかを検証します。
 LEDがチカチカするので、見た目でも確認できますし、外部に付けるRESETの配線確認にも使えると思います。







リセット回路 と RC時間計算

2019年09月02日 06時30分50秒 | 回路
CPUにおける「リセット:RESET」回路とは、どんな役割があるんでしょう?
それは、大雑把に云って2つあります。 (本当はもう1つある)

 ① 最初に 電源が投入された時、Vcc(+5V)が安定するのと、かつ クロックの信号が安定して供給されるのを待つための時間調整。
  → 要は電源を入れてもしばらくの間 RESET=Lowを保ち、
    周りの他の回路が安定してから やわらCPUが動き出す。

 ② プログラムが走っていようと、暴走していようと、RESET信号が入力されたら、それこそCPUが リセットされ、アドレス0番地から実行し直される。

 この2点 です。

電源が投入されても しばらくは Lowに保たれる回路の 最も簡単な構成は、R(抵抗)を使って C(コンデンサ)に電気をゆっくり貯める ↓ こんな回路でしょう。

Vccは 5Vとし、仮に抵抗を1KΩ、コンデンサを 10uF とします(計算し易いように!) 
 では、あなたは この時 (緑の点の電圧が) Lowに保たれる 時間 を 自分で計算できますか?

この回路が(コンデンサが)「充電される時」と「放電される時」の電圧波形は、↓ こんな 感じになるはずです。

 上の赤いのがVcc(5V)で、下の青いのが コンデンサのプラス側の電圧です。 電源電圧に対して その63.2%まで充電される時の時定数を τ (タウ) と言って、トランジスタの場合 0.69を使うのが普通でした。

つまり、
T =  τ・R・C
が時間Tを計算する時の計算式で τ (タウ) =0.69 で計算すると だいたい合っていたのです。 T=時間、R=抵抗値、C=コンデンサ容量

なんか難しくて分かりづらいですよね? それと単位は?何でしょう??
具体例をあげてみます。

 抵抗Rの単位をKΩ ・・・ つまり 1KΩなら そのまま 1
コンデンサC単位をuF (=マイクロ・ファラッド) ・・・ 10uFなら 10
とすると、
T = 0.69 x 1 x 10
=6.9  
この時の Tの単位が mS(ミリ秒)とするのが 一番 分かり易いでしょう。

ーーーーー
では、肝心の 8085AのCPUの場合、最低でどの位の時間(長さ)Lowにしておかないといけないのでしょう?
三菱の8085A のデータシート ↓ を見ると、

 at least 少なくとも 3倍のクロック・サイクル時間は必要・・・となっています。 で、「1クロック・サイクル」って何mSなの? となりますが、
次の資料 ↓で、
短くとも 320uS= 0.32mS、長くとも 2mSとありますので、長い方を取れば
 2mS x 3倍 = 6mS
(短い方だと 0.32x3=0.96 =約1mS。 これ以下のLowパルスだと リセットされないのか?)
 本家Intelのデータシートにこんな記述を見つけました。

電源Vccが最低動作可能な電圧に達してから、↑ 少なくとも10mSは Lowに保たなければいけない。


ちなみに、電圧の63.2%まで充電される時を 1τ(タウ) とすると、
 電圧の86.5%まで充電される時を  2τ(タウ) と言い、時間は倍になります。
充電が進むにつれて、どんどん充電速度が落ちて行き、充電されにくくなるんですね?
電源電圧5Vとして、その1τ(タウ) の 電圧で、本当に正しいのでしょうか?
5V x 0.632 = 3.16V 
C-MOSレベルなら良いのでしょうが、TTLではもっと早く Hi と判断されてしまうはずです。 実際、こんな ↓ データがありました。
   VIH(リセット入力端子にかぎり)= 最低でも 2.4V
   VIL(リセット入力端子にかぎり)= 最高でも 0.8V
つまり、通常のTTLの入力レベル 2.0Vよりは 少し高い・・・でも、最低でも2.4Vを超えたら RESET信号は終了した と 判断されてしまうんですね?
要するに このRCでは 6.9mSよりもっと 短く判断されてしまうんです!

そこで、抵抗を 3倍 に 増やして余裕を持たせてみました。↓ R1 が 1K⇒3KΩ
いっそのこと 10KΩ くらいでも良いでしょう (T = 約70mS)

D1のダイオードは、放電が速くなるように付けたもので、100Ωはコンデンサショートの時の保護です。 (0.8V 以下まで落ちれば良いので)

ーーー
ここで、回路設計に慣れている人の中には、
 コンデンサが ゆっくり電圧があがっていくのだから、(HC14のような)ヒステリシス回路を入れないと心配だ! っと思う人もいるでしょう。
 Hi と Lowの切り替わりの ギリギリの所で RESET信号が 「Hiと認識」「Lowと認識」を 激しく繰り返すのでは?   と。
 それを防ぐために おそらく ↓ こんな回路を設計しがち。
でも、おそらく こんな ヒステリシス内臓のインバイータ(14)を 2個も追加しなくとも大丈夫です。 (無駄なICは入れない! いつもの「習慣」だけで設計しない!!)

8085Aの RESET入力端子は、(最低でも 0.25V 差のある)ヒステリシス特性のある シュミット・トリガ回路(STの部分)を内蔵しています。 安全のため(0.6mA以上流さないと電圧が下がらないように)3KΩ相当のプルアップも内蔵されているようですね?

ーーー
さて、こういった RCによる時間の計算が面倒だ!という人には、インターネット上で簡単に時間計算ができるサイトがあります。

 最初の単純な例: 1KΩ、10μF で やってみると
 このサイトでは Min 7.6mS (~ 12.6mS)だったり、

また別のサイトでは、

10mSだったりします。 ここも ↓
実際はこれより短く判定されるので、余裕をもって長めにしておいた方が安全です。 そして こんな RC回路では まったく正確な時間は作れず、部品のバラツキ、誤差の方が大きいのです。 そんな認識でいてください。


ちなみに、TK-85  では、
    R=10KΩ、C=22μF
他の SBC-8085 では、
    R=47KΩ、C=10μF
でした。
(どのくらいの時間になるか ネットで計算してみてください)
さらに、
本家 Intelにデータシートには、具体的なリセット回路が載っていました。

    R=75KΩ、C=1μF
これだと 約50mS のリセット時間となります。


これを そのまま真似しても良いのですが、75KΩ は手に入りにくいので 考えた末、↓  二転三転しましたが、最終的に こんな値に落ち着きました。

    R=10KΩ、C=10μF
これで 約70mS のリセット時間となります。

   これなら部品も入手しやすいし、 
   70mSもあれば時間的にもかなり余裕があるはずです。



DIPモジュール仕様、アイデアの提案

2019年09月01日 06時30分00秒 | 回路
これから、CPU回路に不可欠な
 ① リセット回路 と
 ② クロック回路 の 2つを
設計し、製作して行く事になりますが、これも いきなり本基板の上に作るのでは無く、丸ピンICソケット(DIP8ピン)を付けて、そこに交換可能なモジュールとして挿します。
 何かしら名称を付けた方が 呼びやすいので、(安易に)

     命名: DIPモジュール

 とします。
今回はこの2つとも 8ピンのICソケット( 300mil:通称=幅狭 )に挿せるように 作るので、特に「DIPモジュール」と呼ぶ事にします。

ここで、よくよく考えないといけない事があります。 それは、どのピンを電源とし、どこに入出力ピンを配置するか?です。
これまでの「標準ロジックIC」の電源は、右下角がGNDで、左上角がVccです。 DIP8ピンでいうと、4ピン=GND、8ピン=Vcc。 これは、ピン数が多くなっても同じルールです。

上の図で、黒丸ピン がGND、赤丸が Vcc を表しています。

実は この仕様  欠点があり、あまり評判がよくありません。
 ① ICを逆に挿すと、VccとGNDが モロに逆に接続されてしまう。
 ② ピン数が多くなると Vcc-GND間の距離が どんどん遠くなる。

①については、実際 何度 逆挿しをしてICを壊したことか・・・ 経験のある人も多いと思います。
②については、CPUのように40ピンにもなると、対角線上で離れ過ぎていて 回路性能から云っても 思わしくはありません。 実際、電源ピンをICの中央に持って来たり、片側にVcc-GNDを並べて配置する改良を行ったICも存在します。 大きなICで 電源ラインが一番遠くては IC内の配線も大変になって来るのです。
 また、ICの下に2本の電源ラインが通っている事が多いので、VccとGNDを 同じ1列に横並び配置するより、「手前側」「奥側」に分けて配置した方が配線しやすいし、パスコンも取り付け易くなるでしょう。


 そんな  こんなを、考えに考え抜いた末、  DIPモジュールは、↓ こんな仕様にしました。 (これはDIP 8ピンでの配置)


 ① Vccは奥の左上角(最大ピン)とするのは これまでと同じ。
 ② GNDは(必ず)1番ピン・・・ 手前の左下角。
 ③ これまでのGNDだった 右下の角は 使用せず 「空き」ピンとする
 ④ Vccピンの右隣のピンも(可能であれば)使用せず 空けておく。
 (もし、どうしても使用したい場合は、「入力」として使用する)
 ---
 ⑤ 手前側のピン(ここでは2番、3番)は 「入力」信号を配置する
 ⑥  奥側 のピン(ここでは5番、6番)は 「出力」信号を配置する
これらのルールは、ピン数が多くなっても同じです。 ↓ こんな感じ。

このピン配置にすることで、どんな利点があるか? (8ピンDIPで)説明します。
 ① まず 「逆挿し」をしても、4番ピンが「空き」なので モジュールへのVccが どこへもつながらず電源が入らないので壊れません。
 
 ② 左に1ピン ずれて挿したとしても、やはり7番ピンが「空き」ピンのため電源が入りません。
 ③ 右に1ピン ずれて挿した場合も(もともと電源が左に並んでいるので)電源が入りません。

 電源ピンが近いのと、左端に並んでいるので、拡張された信号ピンはすべて右側に伸びていきます。 よって、ピン数の異なる モジュールとICソケットの組み合わせでも、うまく信号配置が合えば 共有できることもあるはずで、その点でも便利です。

 実際に、「リセット回路」と「クロック回路」を DIP8モジュール仕様に当てはめて、↓ こんなピン配置にしようと考えています。
① リセット用モジュール

②クロック用モジュール
「クロック入力」ってなんだ? と不思議に思うかもしれませんが、おいおい説明して行きます。



逆挿し防止 機構 の 工夫

2019年08月29日 06時30分28秒 | 回路
基板上のコネクタとケーブルを接続する際、
 ① フラットケーブル用のコネクタ ↓ や

 ② ボックス型のヘッダー ↓ なら、

 逆挿し防止用の凹み(黄色の矢印部分)があるので、絶対に逆に挿すというミスは起こりえません。 囲まれているので ずらして挿してしまう事もありません。
 ただ、今回 使ったコネクタの様に なんの囲いも突起もないヘッダピンだと、逆にも 横に1ピンずらしても挿せてしまいます。 できるだけ そんなミスを防止するために、こんな工夫をしています。

■ 1つ目の工夫は:
S1モジュールの場合、1番=+5V、2番=GNDなので、その反対の最後のピンを「空きピン」にする・・・という 前にも説明した通りの方法です。

基板側 回路図:
 20ピンの 「S1モジュール」用 ピンヘッダ ↓ が 2本並んでいる状態

ここに アドレスライン(A0~A15をつなぐ予定)
最後の1ピンだけ「空き」にしておけば事は足りるのですが、それだと19ピンになってしまい 19ピンのソケットは入手しずらいので、20ピンの物を使用し、最後の2ピンを使わないようにしています。
  逆に挿しても 電源が供給されないので壊れません。

ケーブル側も こんな感じ ↓

 ここで、19番の所に何か詰め物をして、ピンが入らないようにしておけば完璧です。 「ズレ挿し」も出来なくなります。 (ただ、今回はやっていません。 半透明なのはホットボンド)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
■ 2つ目の工夫は:
 20ピンのL字コネクタで、20番目の穴に詰め物をして (切ったピンで可)これで 逆挿し防止とする工夫です。
 基板側:

 これを回路図で見ると、↓ こんな感じ。

できるだけ、最後のピンを「無効ピン」とすることにします。

ケーブル側は、↓ こんな感じ。

20番目のピンを抜いておく か↑ 、または 、

最終ピンをカットしておき、このカットしたピンを メス側に挿しこ込んで接着固定しておくと良い。

ケーブルの配線図は、↓こんな感じ。
 20ピン(10x2列)ヘッダから カラーすだれ ケーブルで 20ピンソケットにつなぐ。
 
19番、20番を使わず、空けておき、かつ 20番にピンを詰めてあるので、この専用の手作りケーブルしか 挿す事ができません。 
 これで、ボックス型の(多少)高価なコネクタを使わなくても 逆挿し、ズレ挿しを防止する事が出来ます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ちなみに
 通所はケーブル側に メスのソケットを使う事が多いのですが、今回の様にケーブル側にピンタイプの部品を使う際、必ず 一度 「基板受け」をしてからケーブルをつないだ方が良いです。 
 
そうでないと、ピンだけ抜けたり ヘッダが折れたりしがちです。
これは、
 ケーブル側にピンソケットを使う時の同様です。
小さな基板で良いので、一度 基板にハンダ付けをしてから使わないと かなりの確率でピンが抜けます。

 1番ピンの目印 ↑ 基板角をカットするのも お忘れなく!

動作確認が全てOKだったら、基板とケーブルのハンダ付けした部分を「ホットボンド」で固めて補強しておくと長持ちします。 何度も 触っているとここにストレスが生じて、線が切れたり、ハンダが外れたりします。


  こういった、チマチマした内容は ここまでにして
  いよいよ 回路設計に入ります。