さてと、ではデジタル時計をつくっていきましょうか (^_^;)
全体の構想は、俺の頭の中ではほぼできているのだけれども、それはこれから、たぶん、いろいろ変わっていくだろうから、まだ頭の中に置いておきます。
各ブロックごとに、じっさいに作ってみながら、さらに考えていきたいと思います。
60 進カウンタ
最初に、60 進カウンタ回路を考えてみましょう。この回路で、秒と分のカウントができます。
クロックを入力し、0~59 までをカウント、桁上がり (キャリー) を出力して 0 にもどる。26=64 ですから 6bit カウンタです。うーん、変数が多いですが、なんとかなります?
いや、ちょっと問題があります。バイナリコードを出力すると、7 セグメント LED に表示させるのがめんどうくさい。2 進化 10 進コード (BCD) で出力したいです。となると、出力は 7bit になります。ちょっときびしいっすねぇ。
そこで、1 位と 10 位とをわけて考えることにします。1 位は 0~9 の 10 進カウンタ。10 位は 0~5 をカウントする 6 進カウンタ。それぞれが BCD を出力し、0~59 をカウントさせます。
10 進カウンタは 4bit、6 進カウンタは 3bit。これなら設計も簡単です。
図 1 がブロック図です。
みてわかるように、全体として非同期カウンタになっていますが、それぞれは同期カウンタとします。クロックより周期が短いようなあやしいパルスは発生しないと思うので、問題はないでしょう。
すべてを同期させる構成も考えてはいるので、気力があったら試してみたいなと思います。
10 進カウンタと 6 進カウンタは、それぞれ同じ回路にしましょう。設計が一度ですみます。たかがしれてるけど (^_^;)
10 進カウンタ
図 2 は 10 進カウンタの真理値表です。これまでと同じですが、キャリー CA 出力を追加しました。キャリーは、カウンタが 9 のときに出力します。
キャリーの論理式は、
CA = Q3 ・ Q0
です。カルノー図は載せませんが、考え方はこれまでと同じです。
図 3 が、これらを基にしてつくった 10 進カウンタ回路です。これまでとほぼ同じですが、キャリー出力ゲートを追加しました。
また、クロック入力にインバータをいれています。これは、下位からキャリーを受けとる場合に、キャリーの立ち下がりエッジで桁上がりさせるためです。したがって、クロックの場合も、立ち下がりエッジでカウントすることになります。
6進カウンタ
図 4 は 6 進カウンタの真理値表です。
カルノー図は載せませんが、むずかしくはないですね。これまでやってきたことと同じです。
論理式は、
J2 = Q1・Q0
K2 = Q2
J1 = Q2・Q0
K1 = Q0
J0 = 1
K0 = 1
CA = Q2・Q0
となります。
これを基につくった 6 進カウンタ回路が、図 5 です。
クロック入力と BCD 出力とキャリー出力がある。外部からみると、10進カウンタと同じ形のパーツです。
60 進カウンタの動作テスト
では、できあがった 60 進カウンタ回路の動作テストをしてみましょう。テストのための周辺回路をつくります。
クロック発振回路
とりあえず、てきとーなクロック発振回路を用意します。
これまでも利用してきた、インバータによる矩形波発振回路 (図 6) でいいですね。この定数で、だいたい 1Hz のパルスが出力されます。
でも、1Hz のクロックでテストしてると時間がかかるので、コンデンサ C1 を 0.22μF とかにして、早送りしたほうがいいかも (^_^;)
右の LED は、クロックの表示用です。
出力表示回路
カウンタ回路の出力がみられないと、動いているのかどうかさえわかりません。
LED をてきとーにならべて、各ビットが HIGH (1) か LOW (0) かがわかればいいですね。図 7 のような LED 表示回路を、必要な数だけ用意します。
あるいは「論理回路 / 10 進同期カウンタと 7 セグ LED」でやったみたいに、7 セグメント LED 表示器を 2 桁分、ちゃちゃっと作ってもいいです。
SET / RESET 回路
JK フリップフロップの SET と RESET については、あとできちんと考えないといけないと思っているのですが、とりあえず動くようにしておきましょう。
図 8 のように、トランジスタを使ったタイマ回路を作りました。電源が投入されたとき、短いパルスが出力されますので、これを RESET に入力してやることで、フリップフロップが初期化されます。
押しボタンを押すことでも RESET が HIGH になりますので、初期化することができます。
初期化時の出力は 0 でよいので、SET は GND に落としておきます。
動作テストの回路
以上の回路を組み合わせて、60 進カウンタの動作テストを行ないました。
うまく動いてます。動いていると、思います。
図 10 が、ブレッドボードのようすです。クロックが 10Hz ぐらいになっているので、動きが速いです。
下のブレッドボードが 10 進カウンタ。右側に LED が並んでいます。LED は右から 4 個が 4bit を表示しています。一番左の LED はキャリーです。
4bit 表示が 1001 のとき、キャリーが点灯します。キャリーが消灯 (立ち下がりエッジ) すると、6 進カウンタの値が増加します。
中央のブレッドボードが 6 進カウンタです。
LED は、右から 3 個が 3bit を表示します。101 のときキャリーが点灯し、消灯するとすべてが 0 にもどります。
上のブレッドボードの左側は、クロック発振回路。中央付近がリセット回路、右端は 5V 電源回路です。
後記
デジタル時計をつくる第一歩目として、60 進カウンタをつくってみました。これで、1Hz のクロックを 60 分周し、さらに 60 分をカウントすることができるようになります。
しかし、先は長いなぁ。やっぱり、なかなか大変だ (;´Д`)