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

●7segLED表示回路を手直ししました

前回の説明には誤りがありました。
説明の下の方、7segLED表示回路の説明のところです(誤っていた部分を抜き出して下に示します)。

74HC191のCKにはT3が入力されています。
CPUはHALT命令が実行されない限りは、少なくともT0〜T4は毎回必ず繰り返し実行を続けます。
そして毎回T3が入力されるごとに74HC191からは000〜111が順に繰り返し出力されることになります。
すると、T3の入力ごとにA0〜A2は、M1の期間だけ強制的に000〜111になります。

赤で表示した「T3」が誤りで、ここは全て「M1」になります。
74HC374にセグメントデータがラッチされるのはT3のタイミングなのですが、メモリアドレスA0〜A2とMEMRQはM1(つまりT2+T3)の間アクティブでなければならないからです。
回路図も間違っていました。
訂正後の回路図です。


74HC191の14pin(CK入力)をM1に直しました。

じつは、この訂正のほかにも直したところがあります。

訂正前の回路図では74HC244の1、9pin(OE入力)と74LS145の12pin(D入力)はともにGNDに接続していました。
訂正後の回路図では、ここにもM1が入力されています。
また、74HC374を74HC373に変更し、CK入力もT3からT2に変更しました。

●74HC373と74HC374、見かけは同じ、ですが中身は大きく違います

当初74HC373ではなくて74HC374にしたのにはわけがありました。
しかし、あとになってそれは考え違いだったことがわかりました。
最終的には今回の訂正後の回路図にあるように、74HC373でもよかったわけですが、せっかく試行錯誤の過程で異なるタイプのレジスタについて考える機会ができたわけですから、この際、その試行錯誤の過程とともに、両者の相違、特徴についても説明することにしたいと思います。

まずは74HC373と74HC374のデータシートを比較してみます。

●74HC373のデータシート(部分)です



注目すべき点は下線部(赤)です。
最初のDescription(説明、特徴)のところを読むと、「74HC373はTransparent Latch である」と書いてあります。直訳すると「透過型」のラッチです。
その下の下線部(赤)の説明では、「LEがHighのときに、入力が出力につつぬけになり、LEがHからLになるときにラッチされる」と書いてあります。
下の真理表では、LE(Latch Enable)がHおよびLとなっているだけで、「下がりエッジでラッチされる」ことまでは、ちょっとわかりにくいのですが、表の下の注記を読むとわかります(なんて書いてあるか、訳してみてください。英語の勉強です)。

●74HC374のデータシート(部分)です



さて、つぎは74HC374です。
74HC373は「透過型のデータラッチ」だったのですが、74HC374はDフリップフロップになっています。
Dフリップフロップは、クロックの立ち上がりエッジで、そのときの入力のH、Lが、Q出力からそのまま出力され、そこでホールドされます(クロックの下がりエッジで動作するフリップフロップもあります)。

74HC373と74HC374の相違点は、第一にはクロックの下がりエッジでデータをホールドする(74HC373)のか、上がりエッジでホールドする(74HC374)のか、ということです。
しかしもっと大きな相違点は、クロックがHの期間中、データが「つつぬけ」になる(74HC373)のか、クロックの上がりエッジ以外は出力が変化しない(74HC374)のか、という点です。

●74HC373の場合のタイミングチャートです

その相違点がどのように回路に影響してくるのかを、タイミングチャートを使って説明してみます。
まず、変更前の回路図で74HC374だけを74HC373に換えてみました。
74HC191と74HC126へのT3入力からM1入力は、回路が間違っていたのですから、M1に訂正後の回路で考えます。
それと、74HC373へのラッチ入力はT2にしました。


問題点がはっきりわかるように、タイミングは「遅れ」を意識して書いてあります。
問題は赤で示した期間にあります。

M1の上がりエッジで7segLEDの表示桁が切り換わります(74HC191〜74LS145の出力によって、7segLEDのカソードへの信号が切り換わります)。
その一方で、セグメントデータの方は、メモリから出力されるデータがもとになりますから、当然、M1の立ち上がりから遅れて変化します。たぶんT2の期間のどこかで変化します。

74HC373はラッチ信号がHの期間中(T2の期間中)は、入力データが出力につつぬけになってしまいますから、上のタイミングチャートで赤で示した期間に、7segLEDには表示データとは関係のないデータが表示されてしまうことになります。

おそらく非常に短い期間ですから、あるいは気になるほどは見えないかもしれません。
でも、これが繰り返し発生するわけですから、ひょっとすると、表示のちらつきとして見えてしまうかもしれません。

それなら、74HC373へのラッチパルスをT3にすればよいではないか、と言われるかもしれません。
しかしそれは、なお悪い結果になります。

繰り返しますが7segLEDの表示桁はM1の立ち上がりで切り換わります。
しかし表示データが切り換わるのがその真中のT3の立ち上がりということになりますから、表示桁が切り換わってから、表示データが切り換わるまで、つまりM1の前半(T2の期間)は、一桁前の表示データが表示されてしまうことになります。
多分これははっきりと見えてしまうはずです。

そこで、74HC373はここには使えないので、74HC374を使うことにしたのでしたが、じつはこれも間違っていました。

●74HC374の場合のタイミングチャートです



74HC374はクロックの上がりエッジでのみ出力データが変化するから、使えると思ってしまったのですが、さきほどの74HC373でラッチ信号をT3にした場合と結果は同じになってしまうことに気がついていませんでした。
なお、74HC374のクロック入力はT3にする必要があります。T2では表示データをラッチすることができません。

74HC373でも74HC374でもどちらでも結果は同じだったのです。
このままでは、どちらも使うことができません。
あれまあ、さて困った。どうしましょう…。

●そこで、今回の回路図になりました

もう一度、今回の変更回路図を見てください。
74HC244のG入力と74LS145のD入力をGNDからM1に変更した、と説明しました。
ここにM1を入れることで、M1の期間中は、7segLEDがドライブされないようにしたのです。
74HC244はM1の期間だけ、G入力がHになるので、出力が禁止されます(ハイインピーダンスになる)。

そして、74LS145についてですが。
あ。74LS145については、説明がまだでした。
74LS145はBCDから10進へのデコーダ(およびドライバ)です。
このICだけはホンモノのTTLです。

7segLEDのカソードには全点灯時(”8”とdpを表示したとき)には8セグメント分の電流が流れます。
74LS145には最大で80mAを流すことができます。
ということで、ここには74LS145を使います。

下手な説明をするよりもデータシートを見たほうがわかりやすいですね。

●74LS145のデータシート(部分)です

データシートを見ていただいたところで、さきほどの説明の続きです。
74LS145のD入力(データシートではP3になっています)にM1を入れると、その期間はD入力(P3)はHになりますから、出力のQ0〜Q7はHになります(真理表では”H”出力になっていますが、オープンコレクタ出力ですから、本当はハイインピーダンスです)。
このとき、7segLEDのカソードには電流は流れませんから、LEDは光りません。

74HC244と74LS145のどちらか片方にM1を入れれば、その期間だけ7segLEDは表示オフになりますから、それで十分なのですが、GNDをM1につなぎかえるだけのことですから、両方ともM1を入れることにしました。

こうすることで、「M1の期間中に表示データが切り換わることで、LEDの表示が乱れて見えるかもしれない」という心配を取り除くことができました(と思います)。
めでたし、めでたし。
2008.12.5upload

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