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

加算器でカウンタを作る / 16進カウンタ

4ビット加算器を使った 16進カウンタ (4ビットカウンタ) を、ロジックICで作ります。

前回は、4ビット加算器で 4ビットカウンタを構成し、シミュレーションしてみました。アップカウンタ、ダウンカウンタとしてうまく動くようです。

今回は、この 4ビット加算器による 16進カウンタ回路を、実際にロジックICで組み立ててみようと思います。

4ビット加算器による 16進カウンタ回路

ブロック図

4ビット加算器による 16進カウンタのブロック図です。回路をじっさいに組み立てるために、周辺回路を追加しました。

図 1. 4ビット加算器による 16進カウンタ ブロック図

FA-0 ~ FA-3 が全加算器を 4段連結した 4ビット加算器です。ストレージレジスタの出力値に 0b0001、または 0b1111 を加算します。

DFF-0 ~ DFF-3 が Dフリップフロップによる 4ビットストレージレジスタ回路です。加算器の出力を記憶して、加算器の入力に戻します。ストレージレジスタの出力は、LEDバー表示器でバイナリ表示させます。

ストレージレジスタを駆動するためのクロック発振回路。電源投入時に Dフリップフロップを初期化するための初期化回路。そして、加算器に与える加算値を変更し、アップカウンタ、ダウンカウンタを切り換えるための切り換え回路を、それぞれ周辺回路として追加しています。

初期化回路

図 2. 初期化回路図

電源投入時に Dフリップフロップの CLR に LOW 信号を与えることで、Dフリップフロップを初期化します。

回路は簡単ですね。シュミットトリガインバータ 74HC14 を使ったタイマ回路です。
電源が入ったとき、U1 の入力は LOW、U2 の出力 CLR も LOW です。C1 が充電されていくと U1 の入力が HIGH になり、CLR も HIGH になります。
LOW の時間は約 100ms です。

R2 は、インバータの保護抵抗です。入れておくこと、推奨です。

クロック発振回路

図 3. クロック発振回路図

Dフリップフロップを駆動するためのクロックを発生します。また、クロックの出力を制御して、カウンタを動作、または停止します。

左下が、インバータ 74HC04 による矩形波発振回路です。発振周波数は、約 1Hz です。
この回路は、これまで何回か使っていますね。わりと安定してきれいな矩形波を発振してくれるので、好きです。実験用なので、発振精度などは気にしていません。

押しボタンスイッチ START/STOP は、押すたびにカウンタが動作、停止します。動作再開時は、カウント数を継続します。シュミットトリガインバータ 74HC14 によるチャタリング防止回路のあと、Dフリップフロップ 74HC74 で切り換え (トグル動作) を行なっています。切り換え出力により、AND ゲート 74HC08 でクロックの出力を制御しています。

右上は、クロックと動作中の表示 LED です。クロック表示の LED にはバッファとしてインバータ 74HC04 を入れているので、HIGH、LOW を逆転させるために、LED をシンクで駆動しています。
動作の確認用なので、お好みで。

アップカウンタ・ダウンカウンタ切り換え回路

図 4. アップカウンタ・ダウンカウンタ切り換え回路図

アップカウンタとダウンカウンタの切り換えを行ないます。

シミュレーションでもやりましたが、このカウンタは、1 を加算することでカウントアップ、補数の 15 を加算することでカウントダウンします。そのための、加算する値を切り換える回路です。

Dフリップフロップ 74HC74 で、押しボタンスイッチを押すたびにアップ、ダウンの切り換え (トグル動作) を行ないます。

アップカウンタの場合は、加算器の入力 A[0-3] に 0b0001 を、ダウンカウンタの場合は 0b1111 を与えます。A[0] はつねに HIGH なので 5Vにつなぎます。A[1-3] を Dフリップフロップの出力につなぎ、LOW または HIGH に切り換えています。

シュミットトリガインバータ 74HC14 は、押しボタンスイッチのチャタリング防止用。右下の LED は、アップ、ダウンのモード表示です。

全加算器

図 5. 全加算器回路図

XOR (74HC86)、AND (74HC08)、OR (74HC32) ゲートによる全加算器です。この回路は、FA-0 ~ FA-3 まで、4 組必要になります。
ちなみに、XOR がなかったら NAND で作れます。桁上がりの AND、OR 部分も NAND でできます。お好みで。

最下桁は半加算器でよいのですが、すべて全加算器で作ります。そうすることで、この部分をひとつのパーツとして扱えるので、製作が楽になります。また、上下に自由に加算器を追加したりすることも可能になります。

ストレージレジスタ回路

図 6. ストレージレジスタ回路図

D フリップフロップ 74HC74、まんまです。4ビットストレージレジスタにするために、これも 4 組必要になります。

4個の Dフリップフロップは並列にならびます。クロック CK とリセット CLR は、それぞれ同一の信号です。PRE は使用しませんので、Vcc (5V) につないでおきます。

加算器の出力 S を D に入力すると、クロックの立ち上がりエッジで Q に出力されます。入力がラッチ (記憶) されるということ。
クロックが入るたびに、つまり約 1秒おきにカウントされた値がラッチされ、LEDバー表示回路に出力されます。
普通の、Dフリップフロップの働きですね。

LEDバー表示回路

図 7. 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 なので、充分に光ります。

ブレッドボードのようす

図 8. ブレッドボードのようす

実験したブレッドボードのようすです。

一番下のブレッドボード、左にスタートストップとアップダウンの切り換え押しボタンスイッチ。その右は 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進カウンタでしょ。お決まり。

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