4ビット加算器を使った 16進カウンタ (4ビットカウンタ) を、ロジックICで作ります。
前回は、4ビット加算器で 4ビットカウンタを構成し、シミュレーションしてみました。アップカウンタ、ダウンカウンタとしてうまく動くようです。
今回は、この 4ビット加算器による 16進カウンタ回路を、実際にロジックICで組み立ててみようと思います。
4ビット加算器による 16進カウンタ回路
ブロック図
4ビット加算器による 16進カウンタのブロック図です。回路をじっさいに組み立てるために、周辺回路を追加しました。
FA-0 ~ FA-3 が全加算器を 4段連結した 4ビット加算器です。ストレージレジスタの出力値に 0b0001、または 0b1111 を加算します。
DFF-0 ~ DFF-3 が Dフリップフロップによる 4ビットストレージレジスタ回路です。加算器の出力を記憶して、加算器の入力に戻します。ストレージレジスタの出力は、LEDバー表示器でバイナリ表示させます。
ストレージレジスタを駆動するためのクロック発振回路。電源投入時に Dフリップフロップを初期化するための初期化回路。そして、加算器に与える加算値を変更し、アップカウンタ、ダウンカウンタを切り換えるための切り換え回路を、それぞれ周辺回路として追加しています。
初期化回路
電源投入時に Dフリップフロップの CLR に LOW 信号を与えることで、Dフリップフロップを初期化します。
回路は簡単ですね。シュミットトリガインバータ 74HC14 を使ったタイマ回路です。
電源が入ったとき、U1 の入力は LOW、U2 の出力 CLR も LOW です。C1 が充電されていくと U1 の入力が HIGH になり、CLR も HIGH になります。
LOW の時間は約 100ms です。
R2 は、インバータの保護抵抗です。入れておくこと、推奨です。
クロック発振回路
Dフリップフロップを駆動するためのクロックを発生します。また、クロックの出力を制御して、カウンタを動作、または停止します。
左下が、インバータ 74HC04 による矩形波発振回路です。発振周波数は、約 1Hz です。
この回路は、これまで何回か使っていますね。わりと安定してきれいな矩形波を発振してくれるので、好きです。実験用なので、発振精度などは気にしていません。
押しボタンスイッチ START/STOP は、押すたびにカウンタが動作、停止します。動作再開時は、カウント数を継続します。シュミットトリガインバータ 74HC14 によるチャタリング防止回路のあと、Dフリップフロップ 74HC74 で切り換え (トグル動作) を行なっています。切り換え出力により、AND ゲート 74HC08 でクロックの出力を制御しています。
右上は、クロックと動作中の表示 LED です。クロック表示の LED にはバッファとしてインバータ 74HC04 を入れているので、HIGH、LOW を逆転させるために、LED をシンクで駆動しています。
動作の確認用なので、お好みで。
アップカウンタ・ダウンカウンタ切り換え回路
アップカウンタとダウンカウンタの切り換えを行ないます。
シミュレーションでもやりましたが、このカウンタは、1 を加算することでカウントアップ、補数の 15 を加算することでカウントダウンします。そのための、加算する値を切り換える回路です。
Dフリップフロップ 74HC74 で、押しボタンスイッチを押すたびにアップ、ダウンの切り換え (トグル動作) を行ないます。
アップカウンタの場合は、加算器の入力 A[0-3] に 0b0001 を、ダウンカウンタの場合は 0b1111 を与えます。A[0] はつねに HIGH なので 5Vにつなぎます。A[1-3] を Dフリップフロップの出力につなぎ、LOW または HIGH に切り換えています。
シュミットトリガインバータ 74HC14 は、押しボタンスイッチのチャタリング防止用。右下の LED は、アップ、ダウンのモード表示です。
全加算器
XOR (74HC86)、AND (74HC08)、OR (74HC32) ゲートによる全加算器です。この回路は、FA-0 ~ FA-3 まで、4 組必要になります。
ちなみに、XOR がなかったら NAND で作れます。桁上がりの AND、OR 部分も NAND でできます。お好みで。
最下桁は半加算器でよいのですが、すべて全加算器で作ります。そうすることで、この部分をひとつのパーツとして扱えるので、製作が楽になります。また、上下に自由に加算器を追加したりすることも可能になります。
ストレージレジスタ回路
D フリップフロップ 74HC74、まんまです。4ビットストレージレジスタにするために、これも 4 組必要になります。
4個の Dフリップフロップは並列にならびます。クロック CK とリセット CLR は、それぞれ同一の信号です。PRE は使用しませんので、Vcc (5V) につないでおきます。
加算器の出力 S を D に入力すると、クロックの立ち上がりエッジで Q に出力されます。入力がラッチ (記憶) されるということ。
クロックが入るたびに、つまり約 1秒おきにカウントされた値がラッチされ、LEDバー表示回路に出力されます。
普通の、Dフリップフロップの働きですね。
LEDバー表示回路
フリップフロップでラッチされたデータを、LEDバーで表示します。
バイナリデータですので、4個ならべた LED で表示させます。点灯を 1、消灯を 0 として、2進数で表示させる、簡単なしくみです。
Dフリップフロップ 74HC74 の出力電圧は 4.5V、LED の順方向電圧 を 2V とすると、LED に流れる電流 IF は、
IF = (4.5 - 2) / 3.3 = 0.61 [mA]
高輝度 LED なので、充分に光ります。
ブレッドボードのようす
実験したブレッドボードのようすです。
一番下のブレッドボード、左にスタートストップとアップダウンの切り換え押しボタンスイッチ。その右は 74HC14、74HC74。初期化回路と切り換え回路です。
中央が 4ビット加算器。74HC86、74HC08、74HC32 で 2ビット分の回路、それが 2セットで、4ビット加算器になっています。
74HC32 はそれぞれ 2 回路しか使っていないので、1個減らすこともできますが、ブロックごとに組み立ててるので、余らせています。未使用の回路は、入力端子を GND にどうぞ。
上のブレッドボードは、左から 74HC04、74HC08 のクロック発振回路。右の 2 個はストレージレジスタ回路の 74HC74 です。
右端は LEDバー表示回路で、写真では 10 (0b1010) を表示しています。
一番上は電源回路。写真がちょっと欠けてますが、まぁ普通に 5V の三端子レギュレータです。入力は 7.2V の ACアダプタ (ジャンク品)。電源は、お好みで。
製作後記
加算器をつかったカウンタって、あまり使われないんだろうか?
アップダウンの切り換えが簡単なんで、たとえばエンコーダの正転逆転を数えるとかに使えそうな気がするんだけど。
それから、シミュレーションしてるときにやってみてたんだけど、たとえば加算する値を 0b0010 にしたらどうなるか。2ずつカウントアップするから 8分周になる。0b0100 だと 4ずつカウントアップするから 4分周。0b0011 だったら? 5分周して 1 余る。割り切れない変な分周 (;´Д`)
まぁ、そんなこんなで、どんな方式をとるかは、用途次第、なんだろうなぁ。わからんけど。
さて、16進カウンタを作ったら、次は 10進カウンタでしょ。お決まり。