アフィリエイト広告
アフィリエイト広告

DフリップフロップをTTL-NANDゲートで作る

2023.6.30
内容を新しくした記事を投稿しました。あわせてご覧ください。


前回は RS フリップフロップを TTL-NAND ゲート回路を使って組んでみました。「RSフリップフロップをTTL-NANDゲートで作る
フリップフロップには RS フリップフロップのほか、D フリップフロップ、JK フリップフロップなどがあります。今回は D フリップフロップを作ってみましょう。

D フリップフロップとは

D-Type Flip-flop Diagram.svg
jjbeard – Own drawing, done in Inkscape 0.43, パブリック・ドメイン, リンクによる

ウィキペディアによると、左図のような回路です。
クロック C の立ち下がりで、入力 D の状態が出力されます。

よく見ると同じ回路が二つつながっています。
一つでも基本的な D フリップフロップの動作はしますが、クロックが High のとき入力 D が変化すると、クロックに関係なくそのまま出力されてしまいます。

それを防ぐために、一つのクロックの間には一回だけ変化するように、前段部分が加えられています。
これをマスター・スレーブ型と呼びます。

今回は 4 つの TTL-NAND ゲート回路を使って、左図のような半分的 (^_^;) D フリップフロップの動作を試してみようと思います。

余談ですけど、fritzing のゲートのパーツを作り直しました。
MIL 規格に論理記号の記述推奨比率ってのがあるそうで、それにできるだけ準拠したつもり。ちょっと美しくなったかな (^_^;)

トランジスタの NAND ゲートで D フリップフロップを作る

Arduino はクロックを発生させるために利用しています。

スケッチはサンプル例の Blink ですが、D13 を HIGH にする時間を 900ms 、LOW を 100ms に変更しています。これにより、1 秒ごとに 100ms の短いクロックパルスを CLK に与え、クロックが High のときに入力 D がそのまま出力されるのを防いでいます。
もちろん 100ms の間に入力が変化してしまうと期待した動作をしないわけですが、そこはまぁ、基本的な動作を確認する実験ですから (^_^;)

上段の左側 Q1 は、入力 D のバッファ (NOT) 回路です。スイッチ S1 を押すとトランジスタ Q1 が OFF し、D が High になります。

左下 Q2 は Arduino で発生させたクロックパルスのバッファで、NOT ゲートになっています。

入力 D とクロック CLK を入力として、4 組の TTL-NAND ゲートで構成した D フリップフロップを動作させています。

右端の Q15 、Q16 は毎度々々の LED 駆動回路。フリップフロップの出力が High のとき、LED が点灯します。

ブレッドボード

D フリップフロップを実際に組んでみたブレッドボードです。
回路図と同じように組み立ててありますので、見比べれば各部分がどの回路にあたるかわかるかなと思います。

クロックパルスは 1 秒ごとに Arduino から入ってきます。
スイッチが押されていないときは、下側の LED2 が点灯しています。

スイッチ S1 を押すと、クロックパルスが入ったタイミングで上側の LED1 が点灯します。タイミングによって異なりますが、S1 を押してちょい間で LED1 が点灯することが確認できると思います。
S1 を離すときも、クロックパルスが入ったタイミングで LED1 が消灯し、LED2 が点灯します。
S1 を押し続ければ LED1 が点灯し続けます。

各部の電圧を計ってみた

入力 D が Low 、クロック CLK が Low のときの各部の電圧です。

Q9 、Q13 の入力電圧が 2.5V 前後ですが、TTL の場合の High レベルが 2V 以上だってことを考えると、こんな感じなのかな。

そうすると、Q10 、Q12 の High レベルが 0.8V と低くすぎることになるので、Q15 、Q16 のベースに抵抗をいれて、Q10 、Q12 の入力レベルを上げたほうがほうが良さそうですね。
でも、動作上はまったく問題はありません。

さてさて、ここまできたらあとは JK フリップフロップを残すだけです。次は JK フリップフロップをやってみましょう (^_^;)

タイトルとURLをコピーしました