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

ラインデコーダによるデジット制御をArduinoで行なう(回路)

ダイナミック点灯のデジット制御を考える」で作ったラインデコーダによるデジット制御回路を、Arduino から制御してみましょう。まずは回路を作ります。

ラインデコーダによるデジット制御回路

ラインデコーダは 2 to 4 で、入力は Arduino の D7 、D8 ピンにつないでいます。D9 ピンは入力 G で、インバータは省略しましたので、HIGH にするとデジットが点灯、LOW で全桁消灯します。
G のインバータをなくした以外は「ダイナミック点灯のデジット制御を考える」で作った論理回路と同じです。

左表がデジット制御の真理値表です。

Z1 、Z0 に 0 〜 3 の値を 2 ビットで与えると、それに応じた桁の出力が HIGH になります。
セグメントをセットしたら、G を HIGH にすることで LED が点灯します。

これにしたがって Arduino のスケッチを作ることになります。

その他の変更点

実際に動作させてみた結果、いくつか変更した点があります。

センサーボリュームの電源

Arduino の A0 ピンにつないだボリュームの電源を、Arduino の 5V 電源からとりました。

A0 ピンの入力は、0 〜 5V の電圧で 0 〜 1023 の出力が得られます。このとき別電源から 5V を取っていると、Arduino 内部の 5V 電源と差が生じてしまい、全範囲のデジタル出力が得られなくなることがあります。
つまり、4 桁のデジタル値を LED で表示させるとき、ボリュームが最大のとき 1023 を表示するように、ということです。センサー出力の精度とはちょっと違う話ですけどね。

セグメント電流、デジット電流

実際に LED 4 桁をダイナミック点灯させると、これまで押ボタンで動作を試していたときより暗くなります。これは、点灯する時間が 1/4 になるためです。
そこで、セグメントの電流制限用の抵抗の値を 150Ω に変更しました。

ドライバ TC4511 の出力電圧が 4.5V 、セグメントの順方向電圧が 2V ですから、セグメントに流れる電流は

IS = ( 4.5 - 2 ) / 0.15 = 16.7 mA

となります。実際に点灯してみると、室内で十分な明るさになっています。

ちなみにこの 4 桁 7 セグメント LED OSL40562-LR の最大順方向電流は 20mA ですが、デューティー比 10% のときの最大電流は 100mA となっています。テスト中にダイナミック点灯を停止して 1 桁を点灯させたとしても、とりあえず問題はありませんね。

[ 8 ] を表示したときのデジット電流は

ID = 16.7 × 7 = 117 mA 

になります。デジット制御をしているトランジスタ 2SC1815 の最大コレクタ電流は 150mA 。許容値としてはちょっと不足気味?って感じるかもしれませんが、今回のダイナミック点灯はデューティー比 25% で使うので、まぁ壊れることはありませんでしょ (^_^;)
増幅率を 40 としてベース電流は 2.9mA 、ベースエミッタ間抵抗に 0.07mA 流れますから、合わせて 3.0mA 。SN74HC08 の出力電圧を 4.5V とすると、べース抵抗は

RB = (4.5 - 0.7 ) / 3.0 = 1.3 KΩ 

となりますので、1KΩ としました。
ちなみに SN74HC08 の出力電流は 25mA ですので、十分です。

ゼロサプレス制御

無用な 0 を表示させないゼロサプレスのために、ドライバ TC4511 の BI 入力を、Arduino の D6 ピンにつなぎました。これを HIGH にすることで全セグメントを消灯することができます。
また、TC4511 の真理値表によれば、数値データを 1010 以上にすることでも全セグメントが消灯します。

ゼロサプレスは、ラインデコーダの G 入力を LOW にすることでも実現可能だと思いますが、今回は G はデジットの制御、BI はセグメントの制御と分けて使うように考えようと思います。

起動時の表示抑止

電源 ON 時や Arduino のリセット (スケッチの書き込み) 時に無用な表示がでてしまいましたので、これを防止しておきたいと思います。
起動時にもし複数桁が点灯してしまうと電流値が許容値を越えてしまう場合もありますし、ラインデコーダを使ってデジット制御している場合は必ずどれかの桁が点灯してしまうようです。電流値に問題がなくても目障り (^_^;) です。

これを防止するために、ドライバの BI 入力を 100KΩ の抵抗でプルダウンしています。
Arduino から HIGH 信号がくるまで、BI を LOW にしておくことで全セグメントを消灯できます。これはラインデコーダの G 入力をプルダウンすることでも、同様の効果があります。

次回は、この回路を制御する Arduino のスケッチを作りましょう。

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