今回は7セグLEDの表示を動かしてみます。数字が0、1、2……と増えていくカウンターを作ります。 そうした処理を実現したいときはマイクロコントローラ(マイコン)の出番です。マイコン上で走るソフトウエアによって、自由にコントロールできます。しかし、今回はソフトウエアの力を借りず、ハードウエアのみで作ってみましょう。デジタル回路の黎明期の雰囲気を少しだけ味わってみることが目的です。 汎用ロジックICと呼ばれるチップが今回の主役です。74から始まる型番のチップを5つ使います。そのほかに、555も1つ使用します。 コンピュータ・ヒストリー・ミュージアムの資料によると、74シリーズの最初の製品がテキサス・インスツルメンツ(TI)から発売されたのは1966年のことです。その後74シリーズは汎用ロジックICのデファクトスタンダードとなり、ラインアップは年々拡大されました。Wikipediaの汎用ロジックICの項目には240種類の74シリーズICが記載されています。 そのなかから必要な機能を持つICを選んで組み合わせることで、さまざまなデジタル回路を構築できます。
回路を出力側から見ていきましょう。 7セグLEDはアバゴ・テクノロジーのHDSP-H213という製品で、カソードコモンタイプです。赤色で1桁のものならば、他の製品も使えます(ピン配置は異なるかもしれません)。アノードコモンのものは、そのままでは使えません。 前回、7セグLEDは抵抗を通して電池につなぎました。今回は電池ではなく、74HC4511というICにつなぎます。 74HC4511は7セグメント・デコーダと呼ばれ、2進数の入力を7セグメントの表示に変換するのが仕事です。たとえば、2進数の11が入力されたら、7セグLED上の5つのLEDを光らせて数字の“3”を表示します。 いま簡単に「2進数の11が入力されたら」と書きましたが、それはどうやって行なうのでしょうか? 74HC4511は4桁の2進数を受け付けます。4桁を4bitと言い換えても同じ意味ですね。4bitはそのまま4本の入力ピンに対応付けられていて、それぞれのピンの電圧で0か1かを判断します。電圧が電源電圧(ここでは3V)と同じならば1、GND(0V)と同じならば0です。この2つの状態をHIとLOWとも言います。さらに略してH、Lと記述することもあります。 4本のピンがすべてLならば、0000が入力されていることになります。つまり0です。7セグLEDには0が表示されます。4本のピンがHLLHのときは1001、つまり9です。7セグLEDには9が表示されます。では、HHHHのときはどうなるでしょう? 2進数の1111は15ですから、1桁では表示できません。 74HC4511が扱う2進数はBCDと呼ばれる形式で、4bitで0から9までの数字を表し、10から15までは無視します。HHHHという組み合わせは存在しないものとして処理され、LEDには何も表示されません。
7セグLEDに表示する数字を4bitの2進数で表していること、2進数は電圧の高低(H/L)で表現すること、BCDという2進数は0~9の数を扱い10~15は無視すること、この3つがここまでのポイントです。 さて、数字の表示は74HC4511で可能になりました。次に重要なのが「カウント」をする部分です。74HC192の担当です。 74HC192は十進カウンタと呼ばれるICで、BCDで4bitの数字を1つ記憶していて、外部からの入力に応じてその数を1つずつ増やします(逆に減らすこともできます)。N=N+1という計算をする素子と見てもいいでしょう。 BCD形式で数を表現するので、7、8、9と数が増えていったら、次は0に戻ります。人間にとって自然な「9の次は0」という表現のためにBCDは便利です。 さきほど「外部からの入力に応じて数を1つずつ増やす」と書きましたが、これはどういう仕組みになっているのでしょうか。 回路図の74HC192を見ると、CUPという名前のついたピンがあります。これはカウントアップの略です。このピンにかかる電圧がLからHに切り替わるごとに、1を加える処理が実行されます。上記の回路では、この機能をタクトスイッチと抵抗の組み合わせで実現しています(赤い部分)。スイッチを押すと、CUPの端子がLからHになってカウンタが1つ進みます。スイッチを離すと、HからLに戻ります。このときはなにも起こりません。
電源は乾電池2本を使用してください。配線の密度が高めなので、作業の順序を決めて確実に接続していってください。我々は、込み入っている7セグLEDの周辺から始めて、スイッチ回路へ向かって繋いでいきました。もちろん、順序は逆でも構いません。 電源を入れるとまず0が表示され、タクトスイッチを押すたびに数字が1つ増えるはずです。しかし何度か試していると、1回押しただけで、数字がいくつも進んでしまうことがあるでしょう。 これはタクトスイッチのバウンシングが原因です。機械式のスイッチは切り替わる瞬間に必ず接点がバウンドして細かくON/OFFを繰り返します。これが回路に伝わってしまうと、何度もスイッチが押されたと判断されて、誤動作につながります。今回の回路では、1回押しただけで、数字がいくつも進んでしまうという現象になって現れます。 なお、似た現象にチャタリングがあります。古くからのPCユーザーは、「キーボードのチャタリング」という言葉を聞いたことがあるかもしれません。キーを1回叩いただけのはずなのに、数個分の文字が入力されてしまう状況を指します。 スイッチメーカーのオムロンは、バウンシングとチャタリングを区別していて、FAQのページには「チャタリングは外部からの衝撃・振動により起こり、バウンシングはスイッチのON/OFFにより必ず起こる現象です」とあります。我々はその定義にならってバウンシングと表記していますが、一般的には区別せずチャタリングと総称することも多いようです。 さて、このバウンシングを取り除く方法ですが、ネットを検索すると、いろいろな手法が存在します。今回は汎用ロジックICを使う作例ですので、ここでも74シリーズを使用してみましょう。
74HC14はシュミット・トリガと呼ばれる回路を6つ内蔵しており、デジタル回路の作例によく登場します。74シリーズの14番目という型番の若さからも、汎用性が高いパーツであることが読み取れます。 シュミット・トリガ回路はHとLの識別を明確にしたいときに使われ、コンデンサと組み合わせることで、バウンシングを確実に取り除いてくれます。
続いて、自動的に数字が増えていく回路に改造してみましょう。タクトスイッチのかわりに、以前作った555回路を流用して信号を生成し、74HC192に入力します。
デジタル回路の面白さの1つは、このように単純な方法で機能を足していけるところにあると思います。 さらに、追加してみましょう。7セグ・カウンタ回路をもう1つ作り、2桁のカウンタにしてみます。74HC192は数珠繋ぎにすることで複数桁の表示装置が作れるようになっています。
555回路の可変抵抗を調整して、正確に1秒を刻むようにすれば、ストップウオッチとして使えるかもしれません。もちろん、市販のデジタル時計並みの安定した正確さを実現するのは難しいと思われます。 回路図を見ると、74HC192にはTCUというピンがあります。これはTerminal Count Upの略で、カウンタが9から0に変わるとき、ここにパルスが生じます。このパルスを1つ上の桁のカウンタに入れてやることで、十の位を表現しています。 ちなみに、TCUという記号はTIのデータシートのもので、意味がわかりにくいと思います。ルネサスのデータシートでは同じ端子がCarryと表記されています。carryを普通の辞書で調べると「繰り上げる」という意味がありました。このほうが自然ですね。 もう少しよくルネサスのデータシートを見てみると、Carryの隣に、Borrowというピンがあることに気付くでしょう。borrowは「借りる」ですが、引き算をするときに1桁上から借りてくるときもborrowというようです。このピンは複数桁のカウントダウン回路を作るときに使います。限られたピン数でいろいろな使い方ができる、よく考えられたICです。カウントダウン回路への改造は簡単ですから、皆さん研究してみてください。
今回使用した部品をまとめました(555回路で使う部品は含まれていません)。もしかすると74HC192を扱っているお店がなかなか見つからないかもしれません。我々が調べた範囲では、国内で販売中なのは共立電子と若松通商の2社でした。
今回使用した74シリーズのICについては、ルネサス・テクノロジの汎用ロジックIC「HD74HCシリーズ」のページに日本語のデータシートが用意されています。 □関連記事 (2008年11月27日)
【PC Watchホームページ】
|