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

デジタル時計をつくる (3) / 12 進カウンタ

前回は、秒、分をカウントする 60 進カウンタを作りました。

デジタル時計をつくる (2) / 60 進カウンタ
さてと、ではデジタル時計をつくっていきましょうか (^_^;) 全体の構想は、俺の頭の中ではほぼできているのだけれども、それはこれから、たぶん、いろいろ変わっていくだろうから、まだ頭の中に置いておきます。各ブロックごとに、じっさいに作ってみ...

今回は、時をカウントする 12 進カウンタを作りましょう。

12 進カウンタ

60 進カウンタと同様に、1 位と 10 位とをわけて考えてみましょう。
1 位は 0~9 をカウントする 10 進カウンタ、10 位は 0~1 をカウントする 2 進カウンタとなります。が、全体で表示する値は 1~12 です。ん?ややっこしいですねぇ。

時刻は 12 時から始まって、次が 1 時、2 時、…、11 時、12 時ときて、1 時にもどる。だから、1 位は 1 から始まって、9 でキャリー出力し、0、1、2 とカウントしたら 1 に戻る。10 位は、0、1 だけ。
でもって、12 時で午前/午後の表示を切り換える。電源投入時は午前 12 時を表示させる。
えーっとですねぇ、10 位が 1 のときは、1 位を 2 でリセットしないといけない? RESET へパルス送って強制リセット? いやぁ、それ、短いパルスになりますよ。基本的に、クロックより周期の短いパルスが定期的にでてくる、ってのは、避けたい。

あ〜、12進カウンタにしましょうや。素直に、率直に、1~12 をカウントする 12 進カウンタ。
初期値は 12 です。11 で午前/午後切換え信号を出力する。カウンタ出力は BCD。1 位が 4bit、10 位が 1bit なので、5bit カウンタです。なんとかなるっしょ。

「時」12 進カウンタ

とゆーことで、12 進カウンタ、「時」を表示させるための特別仕様です。が、考え方はこれまでと同じです。途中でリセットぉ、なんて荒業はしません。

真理値表

真理値表です。でかいです。適当に分割してみてもらうとよいか、と。

図 1 12進カウンタ 真理値表

Q(n) は、現在の出力の状態。5bit ですが、10 位の 1bit と 1 位の 4bit (BCD) の組み合わせになります。Q(n+1) は、クロックが入った次の状態。

出力は 1~12 ですから、Q(n)=00000 は don’t care。Q(n)=00001 から始まって、次の状態が Q(n+1)=00010 。下位 4bit が BCD なので、Q(n)=01001 のとき桁上がりして Q(n+1)=10000 となる。Q(n)=10010 の次が Q(n+1)=00001 へ戻る。これら以外は、すべて don’t care。

図 2 JK-FFの出力の遷移

Q(n) → Q(n+1) の変化に対しての J、K の値を、図 2 をもとに埋め込んでいきます。これはこれまでと同じですね。
0→1 のとき J=1、1→0 のとき K=1、変化しないときは 0。覚えちゃいました?

日付が変わる午前 0 時は「午前 12 時」、お昼の正午は「午後 12 時」としますので、午前/午後の切換え信号 PM は Q(n)=10001 のときに出力させます。

表示値の範囲外は、すべて don’t care とします。

カルノー図

真理値表をもとに、カルノー図をつくります。

さてさて、変数が 5 個のカルノー図はどうやるの? 簡単に言うと、Q4=1 と Q4=0 の場合のカルノー図をそれぞれ描いて、2 つを重ね合わせる。だから、くくるとき上下をあわせて考える、ってこと。

図 3 カルノー図の一例

たとえば K1 の場合 (図 3)。

左が Q4=0 のとき、右が Q4=1 のときのカルノー図。この 2 つを、上下に重ね合わせて考えます。
赤枠は、Q4=1 の図内の 16 個をくくっています。青枠は、上下のカルノー図にわたってくくった部分。全部で 16 個をくくっています。

赤枠は、Q4=1 で、Q3~Q0 は don’t care。青枠は上下にかかっているので、Q4 が don’t care。Q3~Q1 も don’t care で、Q0=1 となっている。したがって、論理式は K1=Q4+Q0 となります。

ってことを、J4~K0 までの 10 個と PM の、合わせて 11 個、せっせとやります。手間かかるけど、don’t care ばっかりのスッカスカな真理値表なので、むずかしくはありません。

論理式

ってことで求めた論理式が、以下になります。

J4 = Q3・Q0
K4 = Q1
J3 = Q2・Q1・Q0
K3 = Q0
J2 = Q1・Q0
K2 = Q1・Q0
J1 = Q3・Q0
K1 = Q4 + Q0
J0 = 1
K0 = 1

Q1・Q0 はいくつかでてくるので、3 入力 AND ゲートは必要ないね。けど、うーん、OR ゲートがでてきたなぁ (;´Д`)

回路図

では、回路を作りましょう。これまでやってきたことと、まったく同じ。JK フリップフロップをならべて、それぞれの入力ゲートをおく。

図 4 12進カウンタ 回路図

5bit なので、必要な JK フリップフロップは 5 個です。6 個目の JK フリップフロップ (FF5) は、午前/午後の表示出力。PM が入るたびに出力が反転する、T フリップフロップ的な動きします。
ゲート回路は、説明するまでもない。論理式どおりです。クロック入力は、下位からのキャリーを受けとるので、インバータをいれて立ち下がりエッジで動くようにする。これも、60進カウンタでやったことと同じです。
外からみると、クロック入力があって、BCD 出力がある、同じ形のパーツ。ちょっと違うのは、キャリーじゃなくて AM/PM 出力にしてある、ってところ。

あ、そうだ、だいじなこと忘れてた。
電源投入時、午前 12 時 (10010) に初期化するため、ビット 1 (FF1) とビット 4 (FF4) をセットするようにします。この 2 つには、リセットパルスを SET に入力しています。

12 進カウンタの動作テスト

図 5 12進カウンタ テスト回路 ブロック図

ブレッドボードに回路を組んだら、動作テストをしましょう。

テスト回路は図 5 のとおり。6 進カウンタのキャリーをクロックとして受けとり、時表示と午前/午後表示を出力します。

7 セグメント LED 表示回路は、前につくった TC4511 ドライバを使った回路を 4 つ組んだものです。次回にでも紹介します。

図 6 12進カウンタ 動作テスト ブレッドボードのようす

ブレッドボードです (図 6)。

分表示は、前回までにつくった 60 進カウンタによります。59 でキャリーされ、時が増加します。

時表示。一番左の 7 セグメント LED の、セグメント f が午前、e が午後を表示しています。動画では、午前 11 時から午後 12 時へ遷移していることがわかります。また、12 時から 1 時へ遷移しています。
設計どおりに動くことが、確認できました。

後記

とりあえず、時刻を表示するための基本的なカウンタ回路ができたかな、と思います。時計のようなモノになってきました。が、残念ながら、この時計、時刻合わせができませんので、使いものにはなりませぬ m(_ _;)m

いろいろと、つくらないといけない回路がありますけど、つぎは時刻合わせのしかけを考えてみましょうか。

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