since 2007.8 by K-ichi

 

並んだLEDを見たら、ある年代の男であれば、これを為ざるを得ない。

いまさらLEDチカチカをする」を流用して、いまさらナイトライダーをしてみた。
よく見るタイプは、ひとつのLEDが左右に動くもの。ただ、本物と見比べると雰囲気が違う。ここでは、「よく見るタイプ」と「ちょっと雰囲気をつけたタイプ」を作ってみる。
従来のLEDチカチカにこの2タイプを追加して、12F675の1Kワードのメモリは、ほぼいっぱいになった。

ソースファイル、およびHEXファイル:
LEDLEDLEDLEDADCKNIGHT.zip (4,952bytes)

回路は、切り替えのためのプッシュボタンを追加しただけ(印)。なお、前回の製作物と回路図とで違いがあったため、その訂正もしてある(×印)。×印のダイオードはひとつ余分だった。


動かしてみた様子。照明を落として撮影している。

電源を入れると、従来と同じモードで立ち上がる。VRで動かすことができる。
ボタンスイッチを押すと、「よく見るタイプ」のナイトライダーが始まる。なんとなくデジタルっぽく起動し、スキャンを開始。ボタンを押し続けていると、すっとスキャンが続く。離すと、適当なタイミングでシャットダウンし、従来のモードに戻る。
再びボタンを押すと、「ちょっと雰囲気をつけたタイプ」が始まる。表示以外は前者と同様。離せば同様に戻る。

右端3つのLED、D10~D12が、不要なときにわずかに点灯しているのが判る。これは、PICの'L'ドライブ能力が'H'よりはるかに強く、ダイオード直列の電圧制限が間に合ってないため。
さらにダイオードを追加して制限すれば抑えることはできるが、点灯時の明るさがかなり落ちてしまう。いくつかの組み合わせを試したが、結局この方法ではこの程度が妥当なセン、ということで結論付けた。


気になったので、ドライブ能力の違いについて調べてみる。
PICのドライブ能力は、従来とさほど変わってないと思われる。画像は、標準的なデバイスのはしりの、中でも最も古い、16C84のデータシートからの抜粋。ちなみに12F675のデータシートには、I-V特性グラフがない。
現在の品種のものと違って、実際に計測してグラフ化したような滑らかでない線で、保証域外まで描かれている。

'L'は'H'に対して、2~3倍の能力があるよう。
前回は、'L'が弱い、と書いたが、回路図と製作物が違っていたことからくる勘違い。D18を回路図どおり付ければ、明らかに'H'が弱いことが判る。


ついでにいくつか測ってみた。

ダイオードのVF@20mA:
ダイオードの種類VF (V)
秋月100個入りφ3mm赤1.9
同・黄2.0
同・緑2.3
1N41480.76

D13~D15を変えてみる:
LED(個)D(個)点灯時他点灯時参考VF(V)備考
22点灯せず点灯せず5.3 
21とても暗い点灯せず4.5 
13暗いごくわずかに点灯4.2 
12点灯わずかに点灯3.4(現状)

 

2009.6.28 いくつかの訂正あり → 「いまさらLEDでナイトライダーする


電子工作の初めの一歩の定番であるLEDチカチカ。PICを使って「たくさんのLEDチカチカ」をやってみた。


LEDを点灯させるには、一般的にはLED1個あたりポート1本、抵抗1個を使う。ただし、マイコンを使うなどしてダイナミック点灯すれば、少ないポートでたくさんのLEDをドライブすることができる。
すでに時計を作っているサイトがある。また、MicrochipTechnologyTechnicalBriefTB029(英語版PDF)にも、この手法が紹介されている。


ポートのビット数をnとすると、手堅くいけば、n*(n-1)個、欲張ればn*(n+1)個までのLEDを扱える。

たとえば、GP0=L、GP1=Hとすると、D1のLEDが点く。逆にGP0=H、GP1=LとすればD2が点く。その際、余計な影響が出ないようにGP2=Hi-Z(=入力)としておく。これをピン数分総当たりに接続する。この手法は手堅い版であり、TB029などはこれになる。
さらにGP0=H、GP1=GP2=Hi-Zとしたとき、D7、D18、D17、D16と電流が流れ、D7のLEDが点灯する。同様にGP0=LとすればD10が点灯する。これが欲張り版の拡張部分で、時計を作っているサイトはこれになる。

欲張り版で電源付近にダイオードを連ねているのは、ドライブ電圧を適当な電圧まで下げるため。たとえば、GP0=L、GP1=Hのとき、D1が導通点灯し、D1の両端は1.5Vと3.5Vほどになっている。D8がGNDへ直結だと、こちらも点灯(しかも明るい)してしまう。そこで、D8+(D18+D17+D16)が3.5Vでは導通せず、5V(GP0=GP2=Hi-Z、GP1=H)なら導通するように、ダイオードの数を適当に調整しておく。
ただし実際には、たとえばD1点灯時にD10あたりが、ごくごくわずかに光って見えてしまう。シビアな用途では、何らかの対応が必要になるかもしれない。

手堅い版の点灯では、75Ω2本分の150Ωが制限抵抗になる。LEDのVFを2Vと見積もれば、(5-2)/150=0.02、つまり20mAと計算できる。欲張り版の拡張部分は、合成されたVFがあり容易には見積もれない。ダイオードを0.65V、LEDを2Vとすれば、ドライブ電圧は5-0.65-2-0.65-2=-0.3Vとなってしまう。実際には、ダイオードのV-I特性グラフの折れ曲がった部分あたりが使われていると思われる。

一連のLEDは、VRによってコントロールする。
電源電圧を10kΩBタイプのVRで分圧し、AN3へ入力、A/D変換をして結果をLEDに反映させている。

実際に動かしてみる。
LEDは秋月100個入り赤色φ3mmを使った。

コンデジCaplioR2による動画なので汚いのは仕方がない。320*240、30fpsで撮影。AviUtlでガンマ補正と切り貼りを施す。


映像ではわずかにチラつきが見える。肉眼でこれは判らないが、1サイクルを倍の24msほどにすると、明らかにチラついて見えた。現在は12msとしている。

複数同時に点灯しているように見えるが、ダイレクトドライブをしており、実際には一瞬間には1つしか点灯していない。LEDの数を増やす際にはチラつき防止のため、1サイクルの時間を20ms程度に抑えられるように、1個あたりのドライブ時間を調整する必要がある。

手堅い仕様部と欲張り仕様部とでは、やはり明るさが違った。これはソフト側で調整する。
LEDの明るさは、電流量、または点灯時間におおむね比例する。人の目は、明るさが4倍になって初めて2倍明るくなったように見える。そのあたりを考慮しながら、実際に動作させて調整した。
このPICはH出力よりL出力がやや弱いようで、D1~D6の点灯時間を0.5msとすると、D7~D9が1ms、D10~D12が2ms程度で釣り合いがとれて見えた。


ちなみにこれは昨年のゴールデンウィークごろに作ったもの。
MPLABでアセンブルしてHEXファイルを生成、シリアル接続のRCDライタで書き込んだ。

LEDLEDLEDLEDADC.zip (2,013bytes MPLAB用ASMファイルおよびHEXファイル)

関連記事


この記事へのリンク by 関連記事、被リンク記事をリストアップする」記事

ブログ アーカイブ