デジタル時計をつくるシリーズ。時刻表示を行なうための基本的な回路が、だんだんできあがってきました。7 セグメント LED 表示部もできて、外観はすでに時計な気分。
しかし、できあがった時計のようなモノは、時刻合わせができないので、使いものになりません。そこで、時刻合わせの仕組みを考えていたのですが、秒カウンタも合わせて制御しないといけないよなぁと気づきました。
で、60 進カウンタをもう一組つくろうと思ったら……、
JK フリップフロップがちょっと足りないっす
えー、どーしましょ。
- 買う
もっとも簡単、確実。でも、あるものを使おう、というアマチュア精神に反する (^_^;) - やりくりする
ブロックごとに回路を組んでいるので、未使用の回路がある。しかし、それらをやりくりすると、配線が行ったり来たりになる。実験中はブロックごとに組んでおきたいので、ない。 - 置き換える
D フリップフロップがあるので、JK フリップフロップが T フリップフロップ動作をしている部分を D フリップフロップで置き換える。設計変更する必要がないけど、ブレッドボードの組み直しが必要。むずかしくはないけど、めんどう。 - 新たに回路設計する
D フリップフロップがあるので、新たに 60 分周回路を設計する。ただし、非同期カウンタで 60 進は中途半端なので、同期カウンタにすべき。D フリップフロップではゲート回路が複雑になりがち。できなくはないが、めんどう。
てなことを考えていたんですが、ふと、ひらめいた。「ジョンソンカウンタ」ってどーよ?
シフトレジスタを使った 60 分周回路
ジョンソンカウンタについては、以前にちょこっと書いたことがあります。
部品箱に、シフトレジスタ 74LS164 ってのがありました。こいつで分周回路をつくってみたのですが、これがジョンソンカウンタといわれるものです。
部品箱には TTL しかなかったのですが、74 シリーズでは 74HC164 が使えます。
74HC595 ではダメでしょうか? うーん、ストレージレジスタを、なんかこう、うまく動かせば、なんとかなんないかしら。試してないんで m(_ _;)m
図 1 が、シフトレジスタ 74LS164 を使った 60 分周回路です。左側が 10 分周、右が 6 分周で、全体で 60 分周しています。
回路、簡単でしょ。
10 分周回路。
リセット信号が入ると、シフトレジスタの出力はすべて 0、シリアル入力は 1 です。
クロックが 5 個入ると、QE が 1 になるので、こいつを反転して入力に戻します。さらにクロックが 5 個はいると、QE が 0 になります。つまり、10 分周されたってこと。
6 分周回路も、10 分周と、動作は同じです。出力を QC から取りだすことで 6 分周になります。
LED は出力の表示用です。TTL で直接 LED を駆動する場合、ソースでは電流容量が足りません。かといって、シンクにすると負理論になってしまいます。なので、インバータ 74HC04 の出力を取りだしています。
LED は、最初の 30 秒間は消灯、次の 30秒間点灯し、60 秒ごとに消灯する立ち下がりエッジが、上位カウンタへのキャリーとなります。
構成ブロック図
ここまでにできたデジタル時計のブロック図は、図 2 のようになりました。
クロック発振回路は 1Hz、つまり 1 秒ごとのクロックを出力します。現在はまだできていません。仮の矩形波発振回路です。
60分周器は、今回つくった、シフトレジスタを使ったジョンソンカウンタによる 60 分周回路です。60 秒をカウントして、1 分周期のパルスを出力します。
10 進カウンタは、分表示の 1 位をカウント出力する回路。JK フリップフロップを使った BCD 出力 10 進同期カウンタです。10 分おきにキャリー信号を出力します。
6 進カウンタ。分表示の 10 位をカウント出力します。JK フリップフロップを使った 6 進同期カウンタで、60 分ごとにキャリー信号を出力します。
12 進カウンタは、時を表示するための回路です。JK フリップフロップを使った BCD 出力 12 進同期カウンタですが、出力する値は 1~12 の範囲です。12 時で午前/午後の表示を切換えます。
後記
デジタル時計 (のようなモノ) が、さらに姿を現してきました。基準クロックが不正確なので、時差が大きいですが、とりあえず時を刻んでいます。
ちなみに、現在までに使ったロジック IC は 22 個。大きい時計じゃ (^_^;)
では、次回は、時刻合わせのしかけをつくっていきましょう。