質問: カウンタ 0~59をカウントしたい時に、写真は10進カウンタで数字の1ケタを0~9を繰り返すのはわかりますが、2ケタ目の6進カウンタ(0~5を繰り返す)をどう配線し6進カウンタはなにを使うのですか。2ケタ目の6進カウンタは3ビットだと思いますが。
回答: こんにちは。 フリップフロップ(ff)を使ったカウンタですね。 自分でもっと勉強しろ・・・と言う人が多いかもしれませんが、まあ、勉強途中なら・・・。 また、設問の趣旨がちょっと理解できないのですが、ひょっとしたら質問者さんも勘違いされているかも。 次のような回答ではいかがでしょう。 ポイントは、「通常は、60を直接二進数にする。まあ、質問者さんのお考えのように十進数である6と0で表現する方法もあるが・・・」 ○ 直接、二進数にする場合。 まず、ffを使って例えば60進カウンタ(59まで計数し、60になった瞬間リセットする)を作る場合、一般的には二進数を直接使います。 例えば、十進数の10を二進数に直すと「00001010」ですよね。(この場合、左から読む。質問者さんの回路図と桁数方向が逆であることと、あえて8ビット表記にしている点は注意。理由はあとで。) 回路図を見ても、低い方から2桁目と4桁目が同時に「1」になると、これは十進数の「10」(8+2)に相当し、リセットがかかる、すなわちこれが10進カウンタで、数えられる数は9までであるという点はご納得かと思います。 では、60を二進数に直すと・・・8ビット表記ならば、「00111100」となることがご理解いただければ、すぐに連想できるかと思います。(32+16+8+4) そうなれば、今は4つしかないffを増やして6つ並べて、3桁目から6桁目の4つのffが全て「1」になるとリセットがかかるようにすればよい・・・ことになります。(60でリセットなので、60進カウンタ。数えられる数は59まで。なお、この段階で、先ほど8ビットで表記していたものの、上2ビットは0のままなので、6ビットあればよいことをお気づきいただければと思います。また、このためには4入力nand回路が必要ですね。) ○ 十進数と桁並べしたい場合。 質問者さんのお考えのもので、bcd表記法といわれるものです。十進数の1の桁に4ビット使い、十の桁にもう4ビットを使うもの。(なお、さらに百の桁が必要なら、またそのために4ビット使いますね。) デジタルでは十進数の桁にとらわれる必要はないのですが、やはり人間は十進数のほうが良い場合もしばしばありますので、4ビットずつを区切って使うこともよくあります。 質問者さんも既に十の桁は最低3ビットあれば何とかなることはおわかりのようですね。そうなれば、まず、3つのffを並べ、59から60になった瞬間にリセットしたいので、十進数の6が「00000110」であることがわかれば、3ビット目と2ビット目がどちらも1になったた瞬間にリセットする回路を作ることはおわかりと思います。 さらに、十の桁の3ビットカウンタは、どのパルスを数えれば良いのかというと・・・、「一の桁のリセットパルス」ですよね。 一の桁のリセットパルスは、元の入力パルスが10回あるごとに1回発射されるので、十の桁ではそのパルスを入力にすればいい・・ということになります。 一方、この回路には問題があることもお気づきでしょう。 今回は60進カウンタ。すなわち10を数えるごとのリセットパルスをそのまま桁上がりとして十の桁のパルスに使えますが、これが、56まで計数する(57進カウンタ)だとすると、桁上がりのパルスのほかに、「7」を検出して「57」を判定するand回路が別に必要になってちょっと複雑になるので工夫が必要です。 (なお、他の方からも示唆があるように、リセットパルスを流用する場合に立ち上がりと下がりの問題やパルスが短すぎるせいでで不安定になる場合がある。まあ、今回は詳細な誤動作を考えなくても問題ないかもしれませんが。いずれにしても、このような面倒くささもあって、カウンタだけが必要な場合には普通はbcd表記法は使わないです。) さてさて、すっかり長くなってしまい、読むだけでも大変かと思いますいかがでしょうか。 お役に立てば幸いです。