6ピン7セグ(1)
(2024/8/1追記) このページの内容には少し問題があります。詳しくは次の記事で。
アイデア
7セグLEDは普通モジュールになってるものを使う。モジュールの中の配線はすべてのLEDの片方がコモンになってるだけというのが多いはず。もしも普通のLEDを7個並べてそれと同じものを作ろうとしたら、実際の配線は意外と複雑かもしれない。いっそのこと単純にこんな風に接続してしまったらどうだろう。
表示方法
この配線では7つのLEDを独立して制御することはできないのでダイナミック表示する必要がある。ただ1セグメントずつ7回に分けて表示する必要はなく、(c,f), (b,e), (a,d,g)というグループにまとめれば3回で済む。 各グループ内ではそれぞれのLEDの回路がほぼ独立していて、どういう組み合わせで点灯する場合でも一つの端子から複数のLEDに電流が流れることはない(ようにする)ので、各端子は定電流制御あるいは単に抵抗を入れるだけで良い。
具体的には各端子をこういうふうに制御して3つのパターンを高速で切り替えれば各セグメントがデューティ1/3で点灯して任意の数字を表示できる。
TP1 | TP2 | TP3 | TP4 | TP5 | TP6 | |
---|---|---|---|---|---|---|
1/3 | H | !f | L | L | c | H |
2/3 | L | !e | H | H | b | L |
3/3 | L | g | L | d | L | a |
横方向が端子の番号を、縦方向がグループを表している。 「a」とかはセグメント点灯のときH、消灯のときLにする。「!f」と「!e」は逆に点灯のときL、消灯のときHにする。
この表に従って0~9のセグメント構成のパターンについてTP1側をLSBとする6ビットの数値で表すとこういうテーブルができる。 これを使って、表示する数字に対応する行の3個のパターンを繰り返すように制御すれば良い。
static const unsigned char tbl[] = {
0x31,0x1C,0x28, // 0
0x33,0x1E,0x00, // 1
0x23,0x1C,0x2A, // 2
0x33,0x1E,0x2A, // 3
0x31,0x1E,0x02, // 4
0x31,0x0E,0x2A, // 5
0x31,0x0C,0x2A, // 6
0x31,0x1E,0x20, // 7
0x31,0x1C,0x2A, // 8
0x31,0x1E,0x2A // 9
};
実装例
秋月のF基板に回路図の通りの配置でチップLEDを並べて、裏側にあるPIC16F1823で制御する。 この場合はピン配置がちょうどPortC(を裏側から見たもの)に当てはまるので、上のテーブルがそのまま使える。 青LEDを使い電源電圧3Vで動作させるので抵抗を入れずにLED直結にしている。 (抵抗を入れる場合はLEDとICの間を直結している6箇所の配線を抵抗に置き換えればいい。)