【ソフトウェア全体構成】
このイルミネーションのソフトウェア全体はPC側とPIC側に分かれますが、
PIC側のソフトウェアは、マイクロチップ社のUSBフレームワークとCDCクラスを
使いました。USB制御部分はほぼ何も作らなくても構成できてしまいます。
イルミネーションとしての機能はすべてmain関数の中に組み込んでいます。
またタイマ0の20msec周期の割り込みで色を変化させる部分を実行しています。
PC側の方は、Visual Basic.Netで作成し、COMポートの制御をWindowAPIで実現
させています。
【PICメイン部詳細】
USBフレームワークのお陰でUSB制御に関することは、お任せできてしまうので、
main関数部でイルミネーションのアプリのことだけ考えれば良いようになっています。
このmain部の大まかな構成は下図のようになっています。
USBに「関係するところは、メインループの最初にあるUSBイベントチェックの部分のみ
です。あとはバッファに受信データがあれば、その内容に従った処理を実行します。
PICのメインループの主な作業はソフトによるPWM制御です。フルカラーLEDの色の
変化を3色の光強度をPWM制御することで実現しています。
このPWM制御は6系統必要なので、PIC内蔵のCCPではできません。そこでソフトでの
PWM制御となりますが、10ビット分解能程度は欲しいし、100Hz程度のPWM周期で
ないとちらついてしまいますから、これから1分解能の制御に使える時間が、
10msec÷1024となって 約10μsecとなります。
この時間では割り込みを使うとちょっとUSBに関する処理が避けなくなってしまいますので、
結局メインループで回すことにしました。
カウンタを1個用意して、これを1回ループが回るごとに+1していき、1024になったら
また0に戻すようにして10ビット分解能とします。
このカウンタが0になったとき全LEDを点灯とします。そしてカウント中は、各LEDのPWM値
と比較し、もし同じになったらそのLEDを消灯します。
これで各LED毎にPWM値を0〜1023の間の値とすればPWMが実現できることになります。
【PIC側ソフトウェアデータ】
下記は、PIC側のUSBフレームワークを含めた全ソースファイルです。
フォルダごと一括圧縮してあります。
★USBイルミネーション PIC側ソフトウェアソース
【PC側ソフトウェア概要】
Visual Basic.netでイルミネーションの色の変化を制御できるパラメータを
設定できるようにしました。
いろいろな変化を楽しめます。
アプリのダイアログは下図のようになっています。
まずUSB接続はCOMポート番号を指定してから通信開始で行います。
あとは光らせ方の設定だけですが、PWM分解能と変化周期で光の変化の早さが
変わります。PWMは小さくするほど早くなります。
中間照度と最低照度はPWM制御中の光の強さの指定で、中間照度というのは
色相が0のビットの光の最大強度を指定します。
【PC側ソフトウェアデータ】
Visual Basic.Netで作成したPC側のプログラムソースファイルです。
★ イルミネーション制御ソフトウェアソース