2023/04/23

6ピン7セグ

7セグ表示は普通モジュールになってるのを使う。モジュールの中の配線はすべてのLEDの片方がコモンになってるだけというのが多い。もしもLEDを7個並べてそれと同じものを作ろうとしたら、実際の配線は意外と複雑かもしれない。いっそのこと単純にこんな風にしてしまったらどうだろう。

これなら配線が簡単だし、なんと端子数が6個になってる。7セグなのに6個とは。これで全パターン表示できるわけないのだが、できるのだ。複数桁の場合の常套手段であるダイナミック表示を、この1桁の中で行えばいい。1セグメントずつ表示するのを7回繰り返してもいいけど、うまくやると3回にまとめることができる。

(c,f), (b,e), (a,d,g)という3つのグループに分けて点灯させることを考えると、それぞれのLEDの回路がほぼ独立しているので、グループ内で何個点灯する場合でもそれぞれ独立して制御できる。このとき関係ないLEDが点灯しないように、用のない端子は適宜H/Lのどちらかにしておく。一つの端子から複数のLEDに電流が流れることはない(ようにする)ので、各端子は普通に抵抗を入れるだけ(あるいは定電流制御)で良い。

たとえば「0」のパターンを表示するには、各グループごとに6個の端子をこういうふうにする。


123456
1HLLLHH
2LLHHHL
3LLLHLH

横方向が端子の番号を、縦方向がグループを表している。この3グループのパターンを高速で切り替えれば、aからfの全セグメントがデューティ1/3で点灯して「0」に見えるはず。

他の数字についても同様に、3つのグループで表すことができる。一般化するとこうなる。


123456
1H!fLLcH
2L!eHHbL
3LgLdLa

ここで「a」とかはセグメント点灯のときH、消灯のときLにする。「!f」と「!e」は逆に点灯のときL、消灯のときHにする。この表に従って0~9のセグメント構成のパターンでそれぞれテーブルを用意しておけば良い。

(ちなみに点灯するかしないかだけで考えれば3回じゃなくて2回にもできるけど、その場合は一部のLEDを並列で点灯することになるので明るさにばらつきが出てしまう。うまく電流やタイミングを制御してやれば明るさを揃えることはできるかもしれない。)

この方式の場合、とりあえず1桁だけなら普通の7セグよりも一つ少ない6個の端子で制御できる、というのは一応メリットといえるかもしれない。でも複数桁をマトリクスにしたりできないので2桁以上だと非常に効率が悪い。つまり1桁だけでよくて7セグのモジュールを使わなくてGPIOが7本はないけど6本ならある、という場合にはこの方式が有効だろう。一つ問題があるとすれば、おそらくそんな場合などない、ということだけだ。

0 件のコメント: