秋月でWS2812B買ってしまったので動かないかも知れないけれど作ってみた
TOPページへ

 秋月でコントローラー付フルカラーLEDを買って見ました。(安価に釣られて)
 ディジーチェーン接続で配線が簡単なのでLED 10個とPIC12F1822で作ってみました。




色々と調べて実験してみた

 秋月のページからダウンロード出来るPDFファイルと本家中国語のページからダウンロード出来るファイルとで送信するパルス幅のスペックが異なっていました。


 何ともザックリ感が満載ですが、PICを32MHzで動作させた場合に出力出来るパルス幅は、125nS単位(8MHz)になってしまうのでビットデータ0の時に375nS、1の時に875nSで行く事にしましょう。

 出力パルスLOW時の時間は、それ程守らなくても良いように思います。(希望的観測…)

 取り敢えずソフトウェアーをでっち上げて動作させてみると無事に点灯したようです。ビットデータ0の時の375nSを+125nSしてみると全てのLEDが白色になったのでビットデータを"1"として認識するようです。ギリですやん


 LED10個分の240ビットを送信した時のオシロ波形です。
 黄色は、1個目のDIN。水色は、1個目のDOUTです。

 送信開始の部分を拡大しています。

 自身のデータ24ビットを抜き取った残りのデータをスルーしているのが解ります。


 バイト-バイト間の継ぎ目は、仕様を大きくオーバーしてしまいました。



 LED自身が出力しているパルス波形(水色)です。

 ロジック0時は、約300nSを出力しているのが観測できます。



 ロジック1時に約600nSを出力している(上との2種類だけなので)ので0,1の切り分けは、立上がりから450nSの論理で決定しているように見えます。
 200nS遅れて出力しているのでスルーのロジックは、中華風の単純アルゴリズムだと思います。

 マイコンから出力するHパルス幅は、LED自身が出力しているパルス幅を目標にするのが良いようです。

 dsPIC30Fの80MHz、dsPIC33Fの40MHzだったら楽勝かな?1ポート(8bit)を無駄にして良ければ20MHzのPIC16Fでも何とか… ←勘違いだな。16MHz動作のPICで250nSと750nS(1uS?)出力辺りが限界か?


 送信データ0、1に対応したパルスのHighパルス幅は、
 400nS 800nS 秋月や本家の英語版HPからダウンロードできる仕様書
 250nS 1uS  本家の中国語版HPからダウンロードできる仕様書
 300nS 600nS LED自身が下流のLEDの為に出力するパルス幅実測値
 となります。笑



プログラム

 取りあえず転送部分だけ。MPLAB-XとXC8 1.31を使用しました。XC8 V1.32Free版でも確認しました。
 その内、時間が出来たら整理します。
 MPLAB-X V2.15とXC8 V1.32(Free)です。
FullColor.X
main.c ソースファイル単独です。

 LEDを50個使った版も作る予定でソフトだけPIC16F1827で作って見ました。(動くかな?)
 LED22個で作って見ました。2015-1
led22.c

2014 9 13

TOPへ戻る