ELEGOO:Lesson 27,28 Segment Display

Lesson 27 74HC595 and Segment Display

シフトレジスタ74HC595を用いて、7セグメントディスプレイをコントロールします。

7セグメントディスプレイは、7つ(数字)+1つ(ピリオド)の個所にLEDが配置されていて、それぞれ個別にON/OFFできるようになっています。

ピンは10本。ピンは3番と8番がGNDで、残り8本が各LEDに繋がっています。

これを、74HC595 でON/OFFコントロールします。Lesson 24 の接続先を7セグメントディスプレイの各LEDにする感じですね。

プログラムでは、各数字を表示するためにどのLEDを点灯すればいいのかを定義。

byte seven_seg_digits[10] = { B11111100, // = 0
  B01100000, // = 1
  B11011010, // = 2
  B11110010, // = 3
  B01100110, // = 4
  B10110110, // = 5
  B10111110, // = 6
  B11100000, // = 7
  B11111110, // = 8
  B11100110 // = 9
};

その後、

shiftOut(dataPin, clockPin, LSBFIRST, seven_seg_digits[digit]);

で該当の数字状態を設定しています。

カウントダウン!


Lesson 28 Four Digital Seven Segment Display

7セグメントディスプレイが4つ並んだパーツです。

4つをどうやってコントロールするのかというと、順番に1つずつ点灯させていくとのこと。
じゅうぶんに高速動作させれば人間の目には4つとも点灯しているように見えるそうだ。

接続は、セグメントLEDの8つに加えて、どの桁数を光らせるか4つで、合計12。


Lesson 27では各LEDにバラで8つ付けていた抵抗ですが、今回は桁ごとに入力側に1つ付いてて、合計4つになってます。

unsigned char table[]=
  {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c
  ,0x39,0x5e,0x79,0x71,0x00};

Lesson 27では2進数でしたが、今回は16進数で設定。それぞれ、0~9,A,b,C,d,E,F が表示されるようにLEDの状態を定義しています。

最初、表示が点滅してしまってうまく動きませんでした。

なんでかと思って、Lesson 27の回路と比較してみたら、74HC595の10番ピン(MR)に5Vが入ってませんでした。

ここがL状態だと、シフトレジスタの全ビットがLに初期化されるので、それで全消灯になってしまっていたようです。うーん、回路図の間違いなのかな…?

10ピンに5Vを入れるように配線追加。うまくいきました!

(今、動画で見てみたら、0~EになっててFが出てなかった…。まあ良しとします!)

あと、説明の図だと「HALO.」って表示されそうに見えるんですが、
この回路だと、4つとも入力ON固定になってるので、全部が点灯して、同じ表示になります。

バラバラ表示にするには、この回路では足りなくて、ここのON/OFFを制御してあげる必要がありますね。せっかくの4連なのに残念。
というか、Lesson冒頭で、4つのセグメントLEDを個別コントロールする方法を説明しながら、回路&プログラムにそれを組み込んでいないのは、Lesson内容として、ちょっとダメなんじゃないかと思います…。

それぞれバラバラ表示も、そのうち挑戦してみたいですね。