【iOS版アプリ】不具合のお知らせ

0~59をカウントしたい時に、写真は10進カウンタで数字の1ケタを0~9を繰り返すのはわかりますが、2ケタ目の6進カウンタ(0~5を繰り返す)をどう配線し6進カウンタはなにを使うのですか。2ケタ目の6進カウンタは3ビットだと思いますが。

「カウンタ」の質問画像

A 回答 (4件)

こんにちは。


フリップフロップ(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表記法は使わないです。)

さてさて、すっかり長くなってしまい、読むだけでも大変かと思いますいかがでしょうか。
お役に立てば幸いです。
    • good
    • 2

Q: 0~59をカウントしたい時に…



■「1~59」のカウンタでしたら
60番目のCkでを"1"と記憶するので私でも作れますが、
"0"を数えるカウンタの作り方は知らないです。
    • good
    • 0

10進カウンターが"9"から"0"に変化した時に6進カウンターが計数するように接続します。

具体的にはあなたが添付した10進カウンター回路図のQ3を6進カウンターのCKに接続します。
Q3は"9"から"0"になった時に H→L に立下りますね。6進のCKはこの立下りで動作しなくてはなりません。もしCKが立上がりで動作するタイプでしたら Q3バー に接続すればOKです。

6進カウンターはフリップフロップ(以下FFと略記)を3個使います。そのままでは"0"~"7"のカウントになるので"6"(2進数で110)を検出して3個のFFにリセットを掛けます。具体的にはあなたの10進の回路図でQ3のFFを撤去し、Q2をNANDゲートに接続すれば6進になります。
このように"10"とか"6"を検出してリセットを掛ける方法は実に簡単なのですが実用回路としては使われません。理由はリセットパルスの時間が極めて短いため全部のFFがリセットされないことがあるためです。実用回路としては"9"の次は強制的に"0"(2進数で0000)に変化するようFFの周囲にゲート回路を組み込んだものが使われています。
もうひとつ問題があります。電源ON時に各FFがゼロにクリアーされているとは限りません。10進カウンターが"12"とか"13"など"9"を超えた状態になっていることもあり得ます。正常な状態ではないですね。そのまま働かせるとミスカウントになります。これを防ぐにはカウントを始める前に全FFをクリアーしなくてはなりません。

実際の製品としての10進カウンターはTTL系では74LS90、74LS390などが有名なところ。C-MOSでは4518が有名です。
6進は少ないですね。TTLでは74LS92があります。カタログでは12進カウンターとなっていますが2進部と6進部が独立しているので6進カウンターとして使用できます。
C-MOSでは4566があります。10進カウンターと5進と6進の切換え式のカウンターが入っています。ということは4566を使えばIC 1個で60進(10進×6進)のカウンターができることになるのですがモトローラ(MC14566BP)、日立(HD14566BP)程度しか製造していなかったので入手は難しいかもしれません。
    • good
    • 0

回路については門外漢なのですが、10進カウンターの回路を見た感じでは下図かな。


 10は2進数で1010だから、10になったときにQ3とQ1の信号がともに1になりNANDを通った信号が0になって各カウンターがクリアされるようにみえます。
 そうだとすると6は0110だからQ2とQ1だけをつなげばいいことになると思います。Q3は使っていないので無視です。なくてもいいでしょう。
 6進カウンターのCK1は1桁目のNANDからの信号をNOTで変換したものをつなぐのかな。途中でリセットしたい場合とかは考えていません。
「カウンタ」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング