Attiny13a 18:Display for 7segment LED


 7セグメントLEDを使いたい!

 Attiny13aは安価に手に入って使い易いICです。このICは8Pinで、自由に使える端子はその内の6Pinです、そしてリセットピンは「リセッター」が無いと再利用出来なくなります。しかも出力コントロール能力は他の端子に比べ1/100ぐらいと弱いです。でもギリギリで使う場合、一つでもあればありがたいですねー。

 アマチュアではPin数の多いICを使ってもたいしたコストアップは有りませんので、本来はこんな考え方はしないでしょう。
 無駄な事にエネルギーを使う、というのはまあ「ロマン」でしょうか!…

 7セグメントLED 

 以前からこのIC(Attiny13a)だけで7セグメントLEDを使えないか考えていました。ピンが足らないので「難しいなー」と思っていました。
 その後、リング式のLEDの点灯を考えましたがこれを使えば「もしかしてコントロール出来るかも知れない」と昨年の暮れ(2014)に思い付きました。
 「誰かやっていないか!」Web上で調べたのですが出て来ません。もしかして誰もやってないかも知れない!別方法があれば参考にしょうかと思ったのですが残念でした。

 以下実験をしたものを書き出すと次の通りです。

 表示させる方法

 以前発表した方法では「特殊な7セグメントLED」を作らないとコントロール出来ません。そこで市販の「7セグメントLED」使う方法を考えました。
 画面は携帯の[.3gp]画像です。
 動かす方法

A] 4つのPinを使うと3つのLEDを点灯や消灯が可能
1 図で1Pinを[H]にして、2.3.4Pinを何もしなければ、3つのLEDは全部点灯します。
2 そのままで、3.4Pinを[L]にすると[a]のLED以外は消えます。電流はLEDの方へ流れずシリコンダイオードの方を経由して流れ、LEDに十分な電圧が確保出来ずに点灯しないのです。
3 この時2Pinは「何もしない」事を実行するには[HでもLでもダメです]、Pinを入力に設定し関与させない事にします。
4 この方法で[aのLED]を点灯させることが出来ます。
5 同様にコントロールすれば[a]と同様に[bやc]のLEDもコントロール出来ます。
B] 4つのPinで3つのLEDをコントロール  これをリング状に結線すると最大4*3=12個のLEDがコントロール出来るのです。
 つまりMax12個ですから7セグメントLEDはコントロール出来るという事になります。
C] 便利さの反面、欠点あり 1 全部一度に点灯出来ない。
2 コントロールする時、点灯に関係ない部分をショートさせ動作を止めている。そのため無駄にしている部分が有り、省エネという点ではまずい(なにか工夫があるかも!)。
3 回路が複雑で、煩わしい。
4 部品が多くなる。
5 コントロールが複雑になる。
6 コントロールが多くなると「時間が短くなり暗くなる」。
D] Softは「7個のセグメントをリング状」にコントロールする  つまり[a]から初めて[b.c.d.e.f.g]とON-OFFなどをさせて行きます。
 これを繰り返して数字を表示させます。

 

 部 品

 コントロールに(シリコーン)ダイオードを使っていますが、これは他の干渉が無いように入れています。Pinが[L]の時は電流を吸い込みますが、[H]の時は不動作になります。
 7セグメントLEDは手持ちのカソードコモン・タイプを使いました。
 mcuはもちろんattiny13aの1個のみです。前記の様に「7セグメントLED」は4Pin使って残り2つあります。内一つはLEDを切り替えに使えば2ケタの「7セグメントLED」がコントロール出来そうです。

 -----------------------------------
 LEDをコントロール出来る事が分かりました。ここではもう少し詳しい動作の説明です。

A] 数字表示、例えば[0:ゼロ]  まず、7セグメントDATAに分解する。
a,b,c,d,e,f,gの内、aからfまでをONすれば良い。8bitでは0b00111111となる。
後ろが[a]
 これが「0の7セグメントDATA」です。
B] このdataを7つに分解する。(上記のdata) 0 ⇒ 1 (aを意味する ON)
1 ⇒ 1 (bを意味する ON)
2 ⇒ 1 (cを意味する ON)
3 ⇒ 1 (dを意味する ON)
4 ⇒ 1 (eを意味する ON)
5 ⇒ 1 (fを意味する ON)
6 ⇒ 0 (gを意味する OFF)
C] [B]を0から6まで、LEDを一つづつ点灯させる。  初めは[a]を点灯させる。次は[b]そして[c]…[g]まで順に。
D] スピードはとりあえず  1mSecスパンとした。
E] 変更  Dataが変更されるまで[C]を実行してループを回り続ける。
 これで人の目には、数字が見える。
 サンプルは0-9までをぐるぐる回る様にしたもの。

製作 2015/1/26


 COM[] と 回路図 の関係

 COM[]はプログラムにある通りで、そちらをご覧ください。  前半の4bitはDDRBを変更して、端子の入出力をコントロールしています。
 後半の4bitはPORTBにLEDのDATAを送って、電圧を加えている。

 回路図の a.b.c.d.e.f.g はLEDの端子です。

 Soft

 サンプルの[プログラム]はコピーして、拡張子の[.txt]を[.c]に代えるとコンパイル出来ます。[2015/1/26 現]

 プログラム的には簡単ですが、動作まで少し時間が掛かりました。当初[&]コマンドを勘違いしていた為です。
 動作は0.5秒後に数字を+1しています、9まで行ったら0に戻しています。
 今後は、更に使い易いように変更したいと思っています。

製作 2015/1/29


 [MAIN MENU へ戻る]

 

inserted by FC2 system