35年くらい前、ラジオの製作で見かけた74LS00一個による早押しゲームというのがあって、どんな回路だったか思い出せないでいた。おそらく基本はSRラッチで、早く押した方が確定したら自分はONのまま他方はONさせないんだろうなと考えてたら風呂で思いついた。
SRラッチを中心に、一度確定した方の入力をホールドしてしまえばよい。

で、手持ちの部品で作ってみた。秋月片面D基板。電源はUSBからもらう。

赤い方のボタンを先に押したら赤のLEDが、緑の方を先に押したら緑のLEDが点灯してそれ以降はどう操作しても変化しない。リセットするには電源をいったん切る。
さてコレで完成……ではなかった。試しに74LS00の代わりに無印7400と74HC00に差し替えて実験してみたら、電源投入後に片方のLEDが点灯したままロックしてしまう。74HC00では常に発生し、7400では高い頻度で発生する。74LS00でもたまに発生することがわかった。
このSRラッチの出力が両方とも"H","H"の初期状態になるためには、入力が両方共"L"になっていないといけない。その前段にあるNANDの出力が、電源投入時に"L"とみなされればうまくいくが、無印7400と74HC00では"H"となりどちらか片方に確定してしまうようだ。そこでこの部分をプルダウンしてみるとうまくいった。

これは修正済みの回路。Y,Zをプルダウンしているので電源投入時は"L"とみなされる。これによりSRラッチの出力B,Dは両方とも"H"になりLEDは消灯。
A,Cはスイッチ入力でプルアップされているので開放時は"H"。B,Dも"H"なのでY,Zは両方とも"L"である。
Aのスイッチが先に押されたとする。Aが"L"になり、Yが"H"となる。Y,Dが"H"なのでSRラッチの出力Bが"L"となりLEDが点灯する。Bが"L"になるとYは常に"H"となりSRラッチはこれ以降動かない。この状態でCのスイッチを押すと、Zは"H"だがBが"L"なので出力Dは"H"のままで変化しない。
先程の素子によってはレベルが確定せずどちらか片方が先にセレクトされてしまう問題は等価回路や出力/入力のスレッショルドレベル、ディレイなども確認しないといけないが、そもそも電源投入直後は論理演算素子として正常動作していない状態である。この時の信号線は不定値"X"として扱う。不定値"X"は"H","L"のどちらでもないが、NANDゲートの場合は片方の入力が"L"ならばもう片方の入力が何であろうと出力は"H"で確定する。過去に見た早押し回路にはプルダウンはなかった記憶なので、74LS00を使うことにより電源投入後の状態がスイッチの入力待ちになることをアテにしていたのだろう。
SN74LS00 (供給中) クワッド 2 入力 正論理 NAND ゲート
http://www.tij.co.jp/jp/lit/an/slva700/slva700.pdf
高速 CMOS ロジック HD74HC シリーズ アプリケーションノート
なお、LSIの中の同期回路ではこのような設計は避ける。意図しないラッチができるとクロックに同期せずに状態を記憶する部分ができてしまい検証が困難になる。


おまけ:USBを電源にしているが、スマホ用のバッテリーの中にはある程度の電流が流れないと切断してしまうものがある。PanasonicのQE-PL203はロジックIC一個程度でも切れないで実験に使用できた。
SRラッチを中心に、一度確定した方の入力をホールドしてしまえばよい。

で、手持ちの部品で作ってみた。秋月片面D基板。電源はUSBからもらう。

赤い方のボタンを先に押したら赤のLEDが、緑の方を先に押したら緑のLEDが点灯してそれ以降はどう操作しても変化しない。リセットするには電源をいったん切る。
さてコレで完成……ではなかった。試しに74LS00の代わりに無印7400と74HC00に差し替えて実験してみたら、電源投入後に片方のLEDが点灯したままロックしてしまう。74HC00では常に発生し、7400では高い頻度で発生する。74LS00でもたまに発生することがわかった。
このSRラッチの出力が両方とも"H","H"の初期状態になるためには、入力が両方共"L"になっていないといけない。その前段にあるNANDの出力が、電源投入時に"L"とみなされればうまくいくが、無印7400と74HC00では"H"となりどちらか片方に確定してしまうようだ。そこでこの部分をプルダウンしてみるとうまくいった。

これは修正済みの回路。Y,Zをプルダウンしているので電源投入時は"L"とみなされる。これによりSRラッチの出力B,Dは両方とも"H"になりLEDは消灯。
A,Cはスイッチ入力でプルアップされているので開放時は"H"。B,Dも"H"なのでY,Zは両方とも"L"である。
Aのスイッチが先に押されたとする。Aが"L"になり、Yが"H"となる。Y,Dが"H"なのでSRラッチの出力Bが"L"となりLEDが点灯する。Bが"L"になるとYは常に"H"となりSRラッチはこれ以降動かない。この状態でCのスイッチを押すと、Zは"H"だがBが"L"なので出力Dは"H"のままで変化しない。
先程の素子によってはレベルが確定せずどちらか片方が先にセレクトされてしまう問題は等価回路や出力/入力のスレッショルドレベル、ディレイなども確認しないといけないが、そもそも電源投入直後は論理演算素子として正常動作していない状態である。この時の信号線は不定値"X"として扱う。不定値"X"は"H","L"のどちらでもないが、NANDゲートの場合は片方の入力が"L"ならばもう片方の入力が何であろうと出力は"H"で確定する。過去に見た早押し回路にはプルダウンはなかった記憶なので、74LS00を使うことにより電源投入後の状態がスイッチの入力待ちになることをアテにしていたのだろう。
SN74LS00 (供給中) クワッド 2 入力 正論理 NAND ゲート
http://www.tij.co.jp/jp/lit/an/slva700/slva700.pdf
高速 CMOS ロジック HD74HC シリーズ アプリケーションノート
なお、LSIの中の同期回路ではこのような設計は避ける。意図しないラッチができるとクロックに同期せずに状態を記憶する部分ができてしまい検証が困難になる。


おまけ:USBを電源にしているが、スマホ用のバッテリーの中にはある程度の電流が流れないと切断してしまうものがある。PanasonicのQE-PL203はロジックIC一個程度でも切れないで実験に使用できた。
![]() | パナソニック モバイルバッテリー 5,800mAh 無接点充電(Qi)対応 USBモバイル電源 ホワイト QE-PL203-W パナソニック 2013-06-26 売り上げランキング : 14475 Amazonで詳しく見る by G-Tools |







