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]);
で該当の数字状態を設定しています。
カウントダウン!
ELEGOO Lesson 27 pic.twitter.com/KHw56Fpzr0
— Nochi (@shikarunochi) 2019年6月23日
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の状態を定義しています。
ELEGOO Lesson 28-1 pic.twitter.com/j9QmUy4oJf
— Nochi (@shikarunochi) 2019年6月23日
最初、表示が点滅してしまってうまく動きませんでした。
なんでかと思って、Lesson 27の回路と比較してみたら、74HC595の10番ピン(MR)に5Vが入ってませんでした。
ここがL状態だと、シフトレジスタの全ビットがLに初期化されるので、それで全消灯になってしまっていたようです。うーん、回路図の間違いなのかな…?
10ピンに5Vを入れるように配線追加。うまくいきました!
ELEGOO Lesson 28-2 pic.twitter.com/NXz5bgngwa
— Nochi (@shikarunochi) 2019年6月23日
(今、動画で見てみたら、0~EになっててFが出てなかった…。まあ良しとします!)
あと、説明の図だと「HALO.」って表示されそうに見えるんですが、
この回路だと、4つとも入力ON固定になってるので、全部が点灯して、同じ表示になります。
バラバラ表示にするには、この回路では足りなくて、ここのON/OFFを制御してあげる必要がありますね。せっかくの4連なのに残念。
というか、Lesson冒頭で、4つのセグメントLEDを個別コントロールする方法を説明しながら、回路&プログラムにそれを組み込んでいないのは、Lesson内容として、ちょっとダメなんじゃないかと思います…。
それぞれバラバラ表示も、そのうち挑戦してみたいですね。