7 セグメント LED の複数桁を点灯させるには「ダイナミック点灯」という方式をとるのが一般的なようです。簡単に言うと、各桁を高速に時分割で点灯させることで、すべての桁が点灯しているように見せる方法です。
詳しくはグーグル先生に尋ねてみて下さい。
デジットの制御方法
下図は「Arduinoから7セグメントドライバへ入力する」で 7 セグメント LED を TC4511BP で駆動してみた回路です。
まだデジット制御回路はできておらず、押ボタンを押すことで各桁を点灯させる試験用の回路です。この回路では、デジット制御用の押ボタンは、同時に複数のボタンを押してはいけません。
ひとつには、各桁のセグメントが並列につながれていて電流制限用の抵抗が共通になりますから、同時に点灯させるとセグメントの明るさがばらついてしまいます。また、点灯させる桁数によっても電流値が変化してしまいます。
セグメントが並列接続された 7 セグメント LED は、あくまでもダイナミック点灯用です。
ダイナミック点灯で 4 桁を点灯させるとすると、実際に点灯する時間が 1/4 になりますから、単純に同じ明るさを得るためには 4 倍の電流を流す必要があることになります。つまり、スタティック点灯で 5mA 流すとすると、ダイナミック点灯では 20mA 必要です。ドライバ TC4511 で直接駆動するとき、許容できる出力電流は 25mA ですから、複数桁を点灯させるには不足します。
何よりも、ダイナミック点灯は各桁を異なった数値で時分割点灯させる方式なのですから、同時に複数桁を点灯させることに意味はありませんね。
デジットの同時点灯を禁止する
ダイナミック点灯についてググってみたのですが、デジットを制御する方法についてはほとんどがプログラムによるものでした。複数桁を同時に点灯させないことについて特段の配慮をしていることはなく、一桁ずつ順番に点灯させるようにプログラムするということだけです。
たしかに、プログラムがきちんとできあがれば問題ないのかもしれません。でも、俺のような初心者が作るプログラムでは、間違って複数桁を点灯させてしまうかもしれません。いや、きっとやってしまいます (^_^;)
そのために、複数桁が同時に点灯しないような回路を考えてみました。
って、いや (^_^;) いつものようにグーグル先生に教えてもらいましたんですけど。山本ワールド「SPIで7セグLED4桁をダイナミックドライブする回路」を参考にさせていただきました。ありがとうございます。
ラインデコーダを作ってみる
複数桁の同時点灯を禁止するには、4 つのうちのどれか 1 つだけが選ばれるようにすればいいわけです。そのためにラインデコーダを使います。
出力が 4 つの 2 to 4 ラインデコーダには SN74HC139 などがありますが、まずはそのようなラインデコーダを論理回路で作って、動作を試してみましょう。
真理値表です。
入力 Z1 Z0 がどの桁を選ぶかの値で、0 〜 3 を 2 ビットで与えます。
入力 G を 0 にすると、Z1 Z0 の値に関係なくすべての出力が 0 になります。
G が 1 のとき、出力は 4 つの桁のどれかひとつだけが出力されます。
D4 = G Z1 Z0 D3 = G Z1 Z0 D2 = G Z1 Z0 D1 = G Z1 Z0
真理値表にしたがって、左の論理式を作ります。
そして、この論理式から以下の論理回路を作りました。これを 7 セグメント LED のカソード側につないで、動作を確認してみます。
ラインデコーダによるデジット制御
左上の押ボタンスイッチは、左から G 、Z1 、Z0 の入力を与えます。
その右側、トランジスタとの間にある 3 つの IC がラインデコーダ部分です。
写真ではどの押ボタンスイッチも押されていませんので、G = 1 、Z1 =0 、Z0 = 0 ですので、1 桁目に数値を表示しています。
Z0 を押すと 2 桁目、Z1 を押すと 3 桁目が点灯します。
Z0 と Z1 を同時に押すと 4 桁目が点灯するので、複数の押ボタンを押してはならないという規則はなくなりました。
G の押ボタンを押すと、すべての桁が消灯します。このとき Z1 、Z0 の押ボタンの状態には影響されません。
では次は、このラインデコーダを Arduino で制御してみることにしましょう。