7セグメントLED×4桁①チュートリアル通りに動かす

2022/07/18

7セグメントLED Arduino

t f B! P L

7セグメントLED×4桁をArduinoで制御します。

 目次:

今回の目的

ELEGOOのチュートリアル「4 つのデジタル 7 セグメント表示」をチュートリアル通りに動かします。

※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。

Download ⇒「Arduino Kits & ~」⇒「UNO R3 Starter Kits」⇒ 「ELEGOO UNO R3 The Most Complete Starter Kit」 からダウンロードリンクに辿り着けます。


7セグメントLED×4桁

7セグメントLEDは以前に1桁のものを扱いました。今回はそれが4桁並ぶモジュールなのですが。。。

↓↓↓以前の記事↓↓↓

「7セグメントLEDをArduinoで動かす①品物を確認した」

「7セグメントLEDをArduinoで動かす②スケッチを読み解く」


先に言ってしまうと、今回4桁ばらばらに表示制御にするのかと思いきや、4桁同じ表示で連動させます。各セグメントへの入力をモジュール内部で4つに枝分かれさせているので、1桁表示と意識的にはほぼ変わりません。

各桁のGNDは分かれているので、タイミングをずらせば桁毎に異なる表示にできるのでしょうが、そのようなスケッチではありませんでした。


(1)表面

(2)裏面

(3)側面

図1.7セグメントLED(4桁)

カソード(-)コモン(桁毎)の7セグメントLEDです。リード端子が裏面に12本。

側面に「5641AS」の印字あり。この型式でネット検索すればそれらしきデータシートが見つかりました。定格や電気的特性を見られますが、本当にこれだという確証はありません。


器材接続

1桁版に同じく8ビットシフトレジスタ 74HC595と並べ、ブレッドボード上に組みました。

動かす原理も1桁版と同じですが、電流制限抵抗220Ωはカソード(-)側につけたので4本で済みます。1桁版(同じくカソード(-)コモン)ではアノード(+)側につけていたので、それに倣えば抵抗も32本(=8本×4桁)要るはずなので助かります。

。。。それならなぜ、1桁版ではカソード(-)側に電流制限抵抗をつけなかったのでしょうか。

1桁版でLEDの電流IFを11mA( ≒ (4.2V - 1.8V) ÷ 220Ω = (74HC595のVIH - LEDのVF) ÷ R)と仮定しました。今回は220Ωをコモン側につけたことで、この11mAが最大7セグメント(表示「8」)分の電流になります。この場合、1セグメントあたりの電流IFは1.6mA(≒11mA ÷ 7セグメント)。LEDの光度が電流IFに比例するとすれば、1セグメントあたりの光度が最小1/7になるわけですね。


図2.機材接続


スケッチ

オリジナルを少し変更。

unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};    // 配列「table」にLED表示を定義

void setup() {

  pinMode(9,OUTPUT);    // D9(ST_CPに接続)を出力設定

  pinMode(10,OUTPUT);    // D10(SH_CPに接続)を出力設定

  pinMode(8,OUTPUT);    // D8(DSに接続)を出力設定

}

void DISP(unsigned char num) {    // 関数「DISP」を以下定義

  digitalWrite(9,LOW);    // ST_CPにLOWを入力

  shiftOut(8,10,LSBFIRST,table[num]);    // DS,SH_CP指定。LSB側から配列「table」num番目をシフトアウト

  digitalWrite(11,HIGH);    // ST_CPにHIGHを入力

}

void loop() {

  for(int i=0;i<17;i++) {    //

    DISP(i);    // 関数「DISP」を引数0~16で実行

    delay(2000);    // 2秒間待つ

  }

}


動作

動かしました。

LED表示が4桁同時に「0」→「1」→「2」→「F」→「表示無」→「0」→・・・と順繰りに切り替わります。

(1)表示「2」

(2)表示「6」

(3)表示「C」

図3.LED表示


表示が切り替わるのを眺めていても、LEDの明るさが変わる印象は受けません。電流の考え方が誤っているのでしょうか。気になったので、4桁分のIFをまとめて電流計で測定しました。

(1)表示無。電流0mA

(2)表示「1」。41.2mA

(3)表示「8」。49.6mA

図4.LED表示と電流値

表示無しでの0mAは当然として、表示「1」はセグメント2個点灯で41.2mA、表示「8」はセグメント7個点灯で49.6mA、明らかに点灯セグメント数が増えると電流値が増えました。

点灯セグメント数に関わらず(0個点灯は除く)、44mA(=11mA×4桁=IF×桁数)と計算しておりましたがズレました。いえ、仮定を重ねた計算なので絶対値がズレるのは良いのですが、点灯セグメント数で増減するというのが問題です。

アノード(+)側の配線抵抗の影響、にしては大きすぎますし。。。LEDの直列抵抗成分?でしょうか。

少々すっきりしませんが、「49.6mA」を最大として定格確認します。


SN74HC595の定格Io = 70mA > 49.6mA ・・・OK

(±35mAの方を定格として満たすべきと考えると超過ですが TI製 SN74HC595 )

5641ASの定格Iaf = 30mA > 8mA(≒49.6mA ÷ 7セグメント) ・・・OK

5641ASの定格Pad = 100mW > 13mW(≒49.6mA ÷ 7セグメント × 1.8V(VF))・・・OK

(Iaf、Pad:某同型式データシートより、セグメント毎の電流、消費電力。と解釈)


所感

起きた現象を分析しきれない自分に技量の無さを実感しましたが、それはともかくせっかく4桁あるので、それぞれの桁をばらばらに表示してみたくなりました。いずれ再挑戦する時の課題にしたいと思います。

このブログを検索

ブログ アーカイブ

自己紹介

にほんブログ村

QooQ