PIC 59:7セグメントLEDをI/O 8bitでドライブ


LEDの実験

 JA0BAS氏のHPに面白い動作の、7セグメントLEDドライブがありました。
 8bitのI/Oポートで8桁のLEDをドライブしてしまう!という物で端子の使用効率がすごく良い物です。普通は8bit+LEDの桁の数だけI/Oを使います。
 どんな風にしているのか回路図も公開されていたので見ると「1bitを共通端子にして各端子をリング状に使う」というものです。

 サンプルは8bitのI/Oポートで8個のLEDを点灯させている周波数カウンターです。
 回路図を見ていて、何とか出来そうと思い動作実験を始めました。
 Softも出ていたのですが勉強の為それを見ず、自分でプログラムを作ることにしました。


[ 回路図がポイント ]

 LEDの結線が複雑です、特別な結線があって配線は結構面倒です。試しの動作なので3桁表示(I/Oピン数的にはあまりメリットが無い!)としました。
 当初「A/D変換」の表示でもと軽く考えて始めました。3桁でも8桁でも原理は同じです、ただ桁数が多くなるとデュウテイ比が下がるので暗くなります。どの程度まで我慢出来るかは作らないと分かりません。使うLEDによって変わります。

 図では結線が分り難いですが、一部が共通端子に接続され、そこが桁ドライブ分になります(文字では説明し難い)。


[ 作ってみる ]

基板

A.ハードを作る。
 ICソケットを利用してLEDが点灯するか予めチエックして置きます。電池(006P)と抵抗(1KΩ)を使いPORTB0を-、PORTB1を+にすればLEDの[b]が点灯します。
 同様B2が+でLEDの[c]が、B3が+で[d]、B4が[e]、B5が[f]、B6が[g]、B7が[a]が点灯します。
 次のLEDを点灯させるにはb1を-に、b0を+で[a]、b2が+で[c]、B3が+で[d]、B4が[e]、B5が[f]、B6が[g]、B7が[b]が点灯します。
 各桁が同じ様に、動作が見えればハード的に完成です。


B.多重点灯
 ICにSoftを入れ動作させると「多重点灯」となり数字が見えませんでした。原因はDATAの中に[0]が入ってこれがアクティブと判断し、LEDを動作させていました。
 例[2_01011011]後ろから3つ目の0がそれです。このDATAでもLEDを動作しないようにすれば良いわけです。そこでこの部分を入力にして、インピーダンスを高くすることにしました。
 これで多重点灯は防げ数字が見えるようになりました。

C.極弱く点灯
 数字を見ていると美味く動作した様ですが、良く見ると、とんでもない所で薄く点灯していました。
 この原因は良くわかりませんでした。約1週間後ようやく対策が判明しました。以前メーカー製の周波数カウンターが桁間の表示で休みがあったことを思い出し、LEDを一瞬消すことにしました。
 これでほぼ希望の動作をさせる事が出来ホッとしています。

D.内部発振の誤差
 ようやく動作させたのですが、当初の予定から目的を単なる「タイマー」に変更しました。
 時間のUPがずれます、当初水晶でもと思いましたが、簡単なこのセットに大げさなのでこのまま何とかと思い、時間会わせをして調整する(1品料理なので)事にしました。
 調べるとオリジナルで「300回に1回のミス」しています。これは1000/1024の976回(x1mSec)で1Secとしていたのを修正し978にして合わせ込むと2500回に1回程度まで改善出来ました。もっと精度を上げられるかも知れませんが、目的は3桁表示なのでおよそ出れば良いのでこれでOKとしました。

E.PIC16F819に移植
 16F88で試していましたが、手持ちにPIC16F819が数個余っているので交換すると、少しの変更で当然動きました。A/D変換を使わないので、他のPICでも良いのですが・・・(2010/2/4)。

F.dpは単にアップはだめ
 dp(デシマルポイント)を点灯させたら、余計な所がまたまた点灯する。やはりここも同期させないとだめなようです。という事で、タイミングを取って表示させました。現在は1秒点灯-1秒消灯を繰り返し、1分で桁上げをさせている。
 実はここで1日ロスをしてしまった。[dpのI/Oポートを5ピンにして実験をしていたら動かない!]というもので、勘違いを又やってしまった、MCLRは入力専用、これをすっかり忘れて動かない!とバカな事をしてしまった(2010/2/7)。

 制作 2010/2/7


[ 使用目的に付いて ]

 パソコンの運用時間を知る為に考えています。あまり長い間使っていると、時間が分らなくなってしまう事があります。熱中するのは良いのですが、気が付くと24時を回り更に「25時・・」なんてこともありました。これを防ぐには時計の表示とか、ブザーを鳴らすなど強制的に知らせる物があると良いなー、と思ったからです。

 電源を入れると「現在の経過時間を知らせる」というものですが、これで充分でしよう。7セグメントLEDで時間・10分・1分表示の3桁です。
 パソコンのUSB端子から電源の5Vを使って利用する物です。まだケースに入れてませんがほぼ出来たようです。
 [プログラム]はこれです(2010/2/13)。


 [MENU] [MAIN MENU]

inserted by FC2 system