IchigoJamで遊ぶ・その6 「7セグで3桁表示する」

(投稿日:2016-05-09)

ひさびさのIchigoJamネタです。

前回に引き続き7セグLEDを使うんですが、今回を桁を増やして3桁にチャレンジします。

3桁7セグLED

7seg3-1

今回使うのは、こういう3桁表示の7セグLED。
何故3桁という中途半端な桁になったのかというと、ちょうどこの部品が手許にあったから。

7seg3-2

裏はこんな感じで、ピンが12本あります。
7セグが3つのわりにピン数が少ない気がしますが、実はこれはダイナミック点灯用だから。

ダイナミック点灯とは

ダイナミック点灯というのは、LEDなどを高速に点滅させて使う方法のこと。
点滅スピードが速いと人間の目には普通に光ってるようにしか見えないため、点けっぱなしにするより消費電力を抑えたりできます。
(多少はチラチラしますが)

今回の場合のダイナミック点灯は、1桁目から3桁目に順番に高速に点灯させることによって、瞬間的には1桁しか点灯してないけど、あたかも3桁同時に光っているように見せるというもの。

こうすることで使用するピンを減らせて、マイコン等につなぐ際にポートの節約が出来るというワケです。

lg2
なぜピンが減らせるのかというと、内部の配線がこういう風に各桁で共通となっているため。
(図ではaの配線のみで他は省略してます)

信号の出口(図の上側)は別々になっているので、ここを制御することで点灯する桁を選べる仕組みです。
上側を3つとも接続すると同時に点灯できますが、表示内容が全部同じになってしまうのであまり意味が無いです。

ちなみに前回のように点滅させずに点灯させたままなのは「スタティック点灯」と言います。

目の錯覚を利用するなんて邪道、スタティック点灯こそ正義・・・とかいうのであれば、前回使った1桁のモノを3つ使えばできますが、配線も大変そうだし、ポートが足りなくなるのも何とかしないといけません。

なので、今回はダイナミックに点灯させます。

ダイナミック点灯でもポートが足りない?

前回、7セグを利用する時のポートを4つに節約できましたが、それでも残りは2ポート。
それでどうやって3桁を制御するのか?

まぁ、そこは例によって便利な汎用ロジックICがあるのです。

74138
今回使うのは74HC138、「3to8 ラインデコーダ」というもの。
(ピンセットでつまんでいるのは特に意味はない)
これは3ビットの入力信号から、8ビットのうち1つを選択した出力が得られるというもの。

table
真理値表はこんな感じ。
(フェアチャイルドのデータシートより引用)

左側のG1、G2というのはとりあえず無視して、A・B・Cが「X」でない3行目以降に注目。
このA・B・Cが入力する3ビットの信号で、この値によってOutputsのY0からY7のどれかが「L」になってます。

「L」とはLowのことで、電圧が低いことを表します。
今回は電流の出口側で桁を制御したいので、選択したビットの電圧が「L」になると電流が流れて好都合です。
(電流は電圧の高い方から低い方へ流れるため・・・と、理解してますが、厳密には違うかも)

しかし、入力に3ビット必要なら、やっぱりポートが足りない?
かと言うとそういうことは無く、今回使いたいのは3桁だけなので、真理値表でいうところのY0~Y2を制御できれば十分。
なので2ビットだけを使って、残り1ビットは「L」に固定してしまえば問題なしです。

実際に接続する

説明はこれくらいにして、実際にIchigoJamにつないでみましょう。

lg3
回路図?はこんな感じで、だんだんややこしくなってきました。

ij51
パズルめいてきたブレッドボード上の実装。
いかにヒモ状のジャンパーワイヤーを使わずに作れるかを考えるとちょっと楽しい。
(全然減らせてないですが)

それはさておき、この接続では出力する6ビットのうち、上位2ビット(ポート5と6)で桁の選択、下位4ビットが表示する値になります。

「5」は2進数で「000101」なので、「out 5」とすると1桁目が「5」になります。
ij54

2桁目を点灯させようとおもえば、表示させる値に2進数の「010000」、すなわち16を足せばOK。
「OUT 19」だと、2桁目が3になります。
ij52

同様に3桁目の場合は32をプラス。
「9」を3桁目に表示したいなら、「OUT 41」。
ij53

なので、以下のようなプログラムを実行すると。

7seg3

3桁表示できました。
といっても、固定値を表示しただけなので、次はもうちょっとまともな表示を行ってみたいと思いますが。

ところで、このプログラムを実行すると、3桁目の「9」が若干明るく見えます。
これは、3桁目の表示後にGOTO文を処理するため、その分他の桁より長く光ってるからでしょう。

明るさを均等にするには、以下のようにGOTO文の前に全桁を消灯すると良いかと(40行目)。

「OUT 0」では、1桁目に0が表示されてしまうので、何も表示されない値である「10」を1桁目に出力してます。

ちなみに、40行目を「OUT 0」にすると、「839」と表示されてるように見えます。
(そして8だけ微妙に明るさが違う)

というわけで、たぶん続きます。

投稿者: