LPC810でWS2811を動かす

マイコン内蔵フルカラーLED、たとえば秋月で売ってるPL9823-F5、どうせすぐ廃番になるイロモノだろうと思って無視していたら意外な人気。動かすのが凄く難しいのだが、あちこちで「オレは動かした」みたいな話が盛り上がっている。案外それが人気の秘密か。

PL9823-F5

こういう話には乗るタチなので只今研究中のLPC810で参戦。とりあえず秋月のホームページで信号のタイミングを調べたらPL9823-F5のデータシートと内蔵ICのWS2811のデータシートでぜんぜん違う。取っ掛かりから難問。いちかばちかWS2811のデータシートにあわせる。それにしてもタイミングが厳しすぎ。たとえば0を表す信号はパルス幅0.25μ秒、LPC810を24MHzで動かして6クロックしかなく、タイマにしろPWMにしろ割り込みは割り込むだけで精一杯。こんなのが本当に動くのかと思い念のためArduinoとAdafruitのライブラリで試したら、あらら動いたよ。

RGB_Arduino

32ビットのLPC810で思い悩んでいるものを8ビットのArduinoが動かしたことは凄いショック。敗北感を抱きながらスケッチを覗き見たら肝腎なところがアセンブリ言語で書いてある。ああそういうことね。で、生まれて初めてCortex-m0+のアセンブリ言語を書く。できあがったのがこちら。C言語から使うときはws2811Write(const uint8_t *data, uint8_t count)と書くことになる。前後に50μ秒以上の0(リセット)が必要。実行中に割り込みが掛かってはいけない。そういう配慮はC言語のほうでやる。これで動いた様子を下に示す。

RGB_LPC810

プログラムを全部C言語で書くとCortex-m0+もPICもArduinoもだいたい同じ。だからといって、Cortex-m0+を味わうためにアセンブリ言語が面白いとまでいう力量はない。たまにしかたなくアセンブリ言語が必要、くらいの感じがちょうどいい。

PL9823-F5のデータシートの回路例は1本ずつ抵抗をつないでいるが、これは普通のLEDの電流調整用の抵抗ではなく、電源のダンピング抵抗。電流調整用の抵抗だったら必須だが、ダンピング抵抗ならなくても大丈夫だろう。ついでに電源のパスコンと信号のダンピング抵抗も省略し、ただ4本をつないだだけ。プログラムがとびきり難しくても組み立てはとびきり簡単。

広告
カテゴリー: LPC810 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中