標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第33回]

●プルアップはダイオードがあるとダメ、でした

昨日は更新をさぼってしまいました。ご訪問いただいた方々にはお詫び申し上げます。
久々の休日だったものですから、家族奉仕とやらでレジャーランドに行っておりました。
私自身は、高所恐怖症で、ジェットコースターはなにより恐怖!ですし、なんたって、真性ワーカーホリックだものですから、
うう、仕事がぁ、仕事が、したいぃ…!
と終日禁断症状を訴えておりました。

前回メールをいただいた、長崎県のN.M様から[第26回]について、以下のようなご指摘をいただきました。

最後のところでLED+抵抗をプルアップ抵抗の代わりに使うことができる、とした部分についてです。
…出力回路がオープンドレインのとき、抵抗+LEDには電流が流れないので、ラインはハイインピーダンスになってしまうため、プルアップ抵抗の用をなさないのではないか。
この方は以前に同様の回路をPICの入力部に用いて失敗した、と書いておられます。

気がつきませんでした。言われてみればその通りです。
ご指摘有難うございました。
さっそく訂正することにいたします。

何十年も回路設計をしていて、こういうことではまことに恥ずかしい限りです。
サルも木から落ちる、のたとえもありますし、上手の手から水、河童の川流れ、とも申しますね。反省!です。

でも、正直なところ、回路設計といったって、その昔はオールTTLでカラーグラフックインタフェース基板などを組んだこともありましたけれど、便利なLSIがどんどん出てくるものですから、ロジック回路といえば聞こえがよいものの、その実はCPU周りのデコーダ回路とか、周辺のI/O回路なんてものが大半ということで、今日まできてしまいました。
当然今回の、ロジックIC300個を使っての、「つくるCPU」などという基板は、初めてです。

まあ、言ってみれば、ほんの初心者みたいなものですから、多分、いろいろまずいところが、でてくるだろうなぁ(と、まだ基板が出来上がってくる前から、はやばやと、居直り&退路の確保、の弁でした)。

●なんと、リレー1000個を使った計算機!

今回メールをいただいた、N.M様は、以前に、なんとリレー1000個を使った計算機を手作りされたそうです。
小型のリレーを30個ほどのせた基板、36枚を5段のスチール棚に組み込んで!ということなのだそうです。

たかがIC300個、基板3枚でハムレットになっている私など、もう顔色無し、ですねえ。

いやぁ。前進あるのみ!撃ちてし止まん!(こういう表現を使うと、トシがばればれになってしまいますねぇ)
という勇気を与えられました。
N.M様に感謝!申し上げます。
N.M様のサイトはこちらです。

●なにごとにも検証が大事です

恥をかいてしまっただけで終わってしまってはいけません。
転んでもただでは起きない、姿勢が大切です。

というわけで、LEDをつなぐと、本当にプルアップの用をなさなくなるのかどうか、念のため、確認をしてみました。
さっそく即席で用意したのは、下図の回路です。

図のRは全て1KΩです。
INに適当なパルスを入力します。
74HC05はオープンドレインですから、前段のゲートの出力(pin2およびpin6)は、Hの期間はハイインピーダンスになります。
理屈の上では、pin13の入力はその期間は不定となりますから、正しい出力は得られない、はずです。

図の回路の通りに作ってみました。
捨てるつもりの試作基板のジャノ目部分を、廃物利用です。



裏は実にいいかげんです。でも、これでよいのだ(赤塚不二夫さんのご冥福をお祈りいたします)。

で、さっそくパルスを入れてみると。

上がpin12(R+LED)の出力、下はpin8(Rプルアップ)の出力です。おやまあ、予想に反して両者に違いは出ていないようです。

もう少し遅いパルスも入れてみました。

変化は無いようです。

出力はしっかりしていても、入力はバタついているかも知れませんね。
入力波形も見てみました。

pin13およびpin9の入力波形です。
パルス幅が長すぎて、スイープがきつそうです。

入力パルスの周波数を上げて、もう一度観察してみることにしました。

さきほどのパルスはH、Lそれぞれの期間が、速い方が1msで遅い方は20msでした。
今度は1.6μsとかなり速いパルスになりました。
今度は時間軸を速くしてもうまく見えそうです。

今度ははっきり見えました。
うーん。プルアップが全く利いていないなら、こんなに速い立ち上がりはしないと思うのですが…。
ということで、意外にも、R+LEDでもけっこう使えるじゃないの、という結果が出てしまいました。

ここらへんになると、よくわからないのですが、多分、LED(ダイオード)はわずかに漏れ電流があるのでは?などとも思えます。
CMOS入力は基本的に電流動作ではなくて電圧動作ですから、電流がなくても電位さえあれば動作する、とも言えます。
まあ、しかし、いずれにせよ、R+LEDが相当のハイハンピーダンスになることは間違いありませんし、たかがR1本をR+LEDと並列に入れればよいだけのことですから、以上のことは実験だけにして、実際にはR追加が正解だと思います(はい。素直に、そのように、いたします)。

N.M様貴重なご意見を有難うございました。今後ともご支援をお願いいたします。

●うちのシステムはほんと、便利なシステムなんですよー

たかがプルアップをテストするために、ここまで長々とお話を引っ張ってきたのには、実は意図するところがあったのです。
ただの暇人の遊びではありません。
これでもあくまで業務の一環としてやっているのですよ。
そこで、たまには、中日電工のボードも宣伝しておかなくてはいけません。
さあ、コマーシャルタイムです。

今回のテスト、パルスジェネレータがあれば、簡単でしょうけれど、そんなもの、持っていませんし、その必要もありません。
どうやってテストしたかというと、こんな具合です。

左がテスト基板、右が当社のBASIC制御ボード、ZB25Kです。
ZB25Kの左上側のフラットケーブルには82C55の出力が出ていて、そのうちの1本(PA5)とGNDをミノムシクリップでテスト基板の入力につないでいます。

ウチのボードのウリは「簡単BASIC」なのです(BASICなど、いまどき、流行りませんけれど…)。
実に簡単なのですよ。
写真右上に少し見えているのがWindowsパソコンにつないであるプリンタケーブルです。
プリンタケーブルを通してWindowsパソコンと交信しています。

古き良き時代のDOSプログラムは未だ健在です。

画面はWindows98のDOS窓(DOSプロンプト)です。
WindowsXPにUSB接続でも使えますが、アクションが遅いので、私は今でも、Windows98+プリンタポート接続で使っています。
ちなみに、Windows98のプリンタポート用接続プログラムは自作の8086アセンブラを使って書きましたが、WindowsXPのUSB接続版はborlandC++で書きました。

写真が少しピンボケで見にくいかも知れませんが、OUT文とFOR〜NEXT文をこうやってキーボードから入力して、RUNと入力すれば(省略形で、R.と入力している)、すぐにWindowsパソコンにつながっているZB25KがBASICを実行し、I/Oポートからパルスが出力されます。

DOSプロンプトですけれど、ちゃんとスクリーンエディタ機能が使えるようにしてありますから、LISTを表示させておいて、カーソルを移動して、必要な部分を書き直すことも簡単にできてしまいます。
画面では上(元のプログラム)のリストの行番号20を、下で、N=1からN=100に変更しているところです。

一旦終了して電源を切ってしまったのですけれど、あとから思いついて、再度テストしたのですが、そういう場合でも、ボード上のニッカドバッテリによってプログラムがバックアップされていますから、これ、この通り、簡単に再開できます。

注)もちろん、プログラムをファイルとしてハードディスクにSAVE/LOADすることもできますし、ROMに書いて、Windowsパソコンから切り離して、スタンドアローンで動作させることもできます。

さきほどのオシロで観測したパルスのところで、入力パルスの周波数をうんとアップしてみたところがありました。
BASICは実行に時間がかかるので、1KHz程度のパルスを出すのが限界です。
それよりも速いパルスが必要なときには、マシン語を使うことになります。
ZBK開発システムは、オンラインのラインアセンブラが使えますから、マシン語コードを入力しなくても、アセンブラニーモニックを入力すれば、一行入力するごとに、マシン語コードに変換して、指定メモリアドレスに格納してくれます。

白抜き文字がキーから入力したもので、グリーンの文字が翻訳後のマシン語コードをメモリアドレスに格納しているところを示しています。
このマシン語プログラムの実行で、約300KHzのパルスが出力されます。
2008.8.11upload

前へ
次へ
ホームページトップへ戻る