まず、入手した部品の紹介から。
今回はこの部品。
この中にフルカラーLEDとドライバICのP9813が樹脂封入されてる。
制御自体はクロック(CI)とデータ(DI)の2線にクロックの立ち上がりで逐一ビットデータを送信するだけ。
このLEDドライバのすごいところはLEDモジュールをデイジーチェーンで配線できるところ。
つまり、LEDモジュールを数珠つなぎに伸ばして、しかもそれをたったの2線で制御できる。
「フルカラーLEDをたくさん光らせたいけど手持ちのマイコンのピン数たりねー」とかおもっていたので、衝動買いしてしまった。
さて、このドライバICの制御を解説をしていくとしましょう。
まず、このドライバICのシリアル通信の仕様について
このICはCIピンの立ち上がりエッジでDIピンの値を読み取る。
立ち上がりエッジってのは電気信号がLからHに変わる時の事。図にするとこんな感じ
ビットのデータをDIピンにセットして、再度CIピンをHighにするとドライバICがビットのデータを読み取るわけだ。
次にデータの送信手順について、
このICではデータのスタートフレームをLの32bitと定義している。
つまり、Lowの信号を32回送ればいい。
次に、1番目のLED(直接マイコンに繋がれてるLED)についてデータ
その次に2番目のLEDのデータ、3番目のLEDのデータ・・・n番目のLED・・・とデータを送信していく。
最後にデータの送信が終了したらストップフレームを送信する。
このストップフレームはスタートフレームと同じ信号Lの32bitを送信する。
で、肝心のLEDの制御データの中身はと言うとこんな感じ。
写真はデジットで貰った取説を携帯のカメラで撮ったものです。
(デジットさん勝手に使ってごめんなさい。m(_ _)m)
データフレームの長さは32bitで
中身はこんな感じ。
- フラグビット(H_H) 2bit
- 青色用チェック(B7,B6のぞれぞれ反転) 2bit
- 緑色用チェック(G7,G6のぞれぞれ反転) 2bit
- 赤色用チェック(R7,R6のぞれぞれ反転) 2bit
- 青色データ(B7~B0) 8bit
- 緑色データ(G7~G0) 8bit
- 赤色データ(R7~R0) 8bit
後は、これに合わせてRGBそれぞれのデータを8bitで送信してあげれば上手くいくと思ってた。
が、落とし穴が一個。
取説には制御データのコードは「グレイコード」と書いてある。
正直、「グレースケール」のタイポだと思ってたら違った。
Wikipedia:グレイコード
調べて驚いたのが、アブソリュートエンコーダの信号なんかがこれで構成されているらしい事。
詳しい話はWikipediaの「利点」のところを参照して欲しい。
符号化の仕方は簡単。
「変換したい2進数」と
「変換したい2進数を1ビット右にシフトし、先頭に0をつけたもの」
とのXORをとるだけ。
これらをmbedで実装してみた。
mbedのサイトで公開したので興味ある方は参照して。
http://mbed.org/users/MrBearing/code/FullColorLEDControl/
(回路図作ってアップしたいけど作るのめんどくさい。。。。)
モジュールのDIをp10、CIをp11に繋げば動きます。
動作動画
取説だと12Vいることになってますが、5Vの電源でもとりあえず駆動するのでmbedのVoutとGNDをそれぞれ対応する線につないで電源入れれば駆動します。
今後の課題としては
- LEDを一つしか点灯させていないので複数制御を達成する
- Colorクラスの実装(特にHSVtoRGBみたいなのとかの実装)
- ドライバコントローラーのクラス化・スレッド動作化
- 送信クラスのstream化
- 表示までの遅延時間の計測
0 件のコメント:
コメントを投稿