滴の様に流れるLED フラッシュの製作
お久しぶりです。久々にPICをいじることになりました・・・と言っても・・・
丁度11か月前、つまり去年のクリスマス頃、よく通う大きなホームセンターに行った時のことです。2階にあったクリスマス特設コーナーに、いつものようにクリスマス用のイルミネーションが販売されていました。
そこで見つけたのが雨の滴が落ちるような棒状のLEDで、結構綺麗な動作をしていて、眺めているだけで少し癒される気分になりました。良く見るとそれは、4本で構成されていたのもので、1本には裏と表にそれぞれ?20個
?近い白のLEDが並べられていました。そこでお値段を見ると何と、\39.800円ととんでもなく高価なものでビックリしました。
そこで、これなら俺にも出来るのでは!?と、結構いい加減な気分で、ずーーーっとほっておいて間もなく1年がたとうとしていました。周りからのプレッシャーもあり、ついこの数日前に同じホームセンターに行ったところ、やはりクリスマス特設コーナー
があり、去年と同じように流れるLEDが飾られており、価格も高いままでした。また去年には確認できなかった商品として、4本1組で1本に11個のLEDが搭載された製品もありました。この品物は9,800円でした。
よく考えてみると原価として、1本1万円と見た場合、40個のLEDだからLED1個が250円と言うことになります。これを高いとみるかですが、40個のLEDは1チップのマイコンらしきもので制御されていたり、作り良く見えました。
動きを見ていると、上から下まで流れ落ちるのに約2秒弱ほどで、初めに1回目が落ち、その約0.5秒後にもう1回、あとを追いかけるかのように落ち、5秒ほどの休止時間をした後、同じ動作を繰り返していました。
さらに1個のLEDをよく観察すると、最初にパッと光り、徐々薄暗くなり、約2秒ほどで消えていることが分かりました。全体的には、尾を引くような光り方をしています。
このことを頭に入れるのに、ぼけ始めた自分の頭で、かなりの苦労をしました。・・・・・それでは早速作ることにします。
今回は初めての体験がいくつかあります。その一つが、PIC10F222を使ったことです。もう一つは、HI-TECH C を初めて使いました。さらにもう一つは、PICkit2
と言うツールも初めて使いました。どれも初めてですが、苦労したのは、PIC10F222とHI-TECH Cの組み合わせです。実は最初に、CCS C で組んでいました。明るさを変えるための「Dutyデータ」を配列
を使って組んでいました。問題なくコンパイルが通り、PICに転送しますが思うように動いてくれません。シミュレートをしてみたところ、おかしな動きをしています。
そうです、PIC10F222は512ワードのメモリーしかなく、大きなプログラムは組めません。また一番厄介なのは、ハードウェアスタックが2レベルしかないことです。サブルーチンを多用することが出来ない状態です。恐らくこのことが、
うまく動かない原因だと思っています。このPICはC言語より、アセンブラで作成するのに向いているようです。そのせいか、WebでC言語での作品を探すと意外に少なく疑問に思いました。今回、思うように動かなかった内容を下記に示します。
1) OSCCALの初期化を #asm と #endasm で挟み、main() の冒頭に記述したら、OSCCAL が未定義と言うエラーになる。
2) __delay_us(LABEL); を実効すると、「float.c:86・・・」 と言うエラーになり、コンパイルが正常に通らない。
3) GP2のピンを入力に設定し、スリープからのウェイクアップ機能がうまく働かない。
以上の様なエラーに見舞われ、すんなりとは完成しなかった。
10個PIC-ICとLEDを連結して構成しています。1個の構成は、PIC10F222とLEDと電流制限抵抗1本(初めのICだけは
2本)とパスコンだけです。左の写真のICパッケージはDIPですが、量産時は6PinのSOT-23と米粒のようなICを使い、
他の部品は全て面実装を使う予定です。使う信号は電源2本を除き、3つです。GP0はLED出力、GP3は点灯トリガー入力、GP1は
トリガー出力です。最初のICだけは、GP3をプルアップ抵抗が1個必要で、この端子をショートし続けると、0.5秒間隔で2回点灯が流れ、5秒休止し、
再び2回流れ、以降同じ動作をします。 それぞれのICはトリガー入力が5秒以上、ない場合は自動でスリープ状態になります。 |
|
↑ PICkit2とプログラムアダプタAC163020 → 右写真の左側はコインとDIPパッケージの比較でDIPパッケージの右にある小さなICが量産時に使用する予定のSOT-23パッケージです。 その拡大が右写真です。 |
プログラムを見てお分かりになる方は、かなり雑に組んであることと思われます。初めて触るものなので。ご容赦願います。結構しっかり動いております。先程述べたエラーについて、アドバイス(ご指導)頂けると助かります。
さて、今回はLEDフラッシュと言う題材で製作しましたが、注意点を強いてあげますと、LEDの数によっては、流れるスピードや点灯時間を微妙に変えないと、自然に滴が落ちるような雰囲気が出せないので、そこは微調整して下さい。
私は9段階の調整箇所を設定してあります。(プログラムの SWITCH文のところです) cnt_ONTとcnt_OFFTの値が点灯ディーティになります。ちなみに10個接続した状態
でのスリープ時の電流は、5Vで約35.4μAでした。
10個連結してみました。一番上のICには、最初にトリガーするプログラムが入っています。それ以外のPICの全てのICには、同じプログラムが組み込まれていますので、どれでもトリガー用として使えます。DIPパッケージを使っていますが、SOT-23パッケージを使い、他の部品も面実装を使えば、
かなり小さく構成できます。これの特徴の一つは、いくつも連結できることです。LEDはOptoSupply Limited社のOSPW5161Pで
15000mcdと言うかなりまぶしいものを使っています。こんなに要らないかもしれませんが、遠くから見ると結構目立ちます。
機会があれば基板化して小さく作ったものをアップしたいと思っています。 おしまい!