■追記■
たくさんつないでも点灯するライブラリを教えていただきました。
■うまく点灯してくれない■
原因はLEDが増えてshow()での処理に1mSec以上かかってしまうとデータ送出の最中にインタラプトが入ってフォーマットが崩れてしまうこと、とのことです。
ということで、ちょっと煩雑ですが、show()の前後を以下のコードにすることで少し解決します。
portDISABLE_INTERRUPTS(); strip.show(); // Initialize all pixels to 'off' portENABLE_INTERRUPTS();
「少し」というのはときどき1個だけおかしくなったりすることがあるからです。64個使う場合には27番目と56番目です。手元にある他のLEDストライプを使っても同じような感じなので、ソフト側の問題ですねぇ…。
焼け石に水で
delay(1); portDISABLE_INTERRUPTS(); strip.show(); portENABLE_INTERRUPTS();
にすると61番目だけがおかしくなります。さらに、
portDISABLE_INTERRUPTS(); delay(1); strip.show(); portENABLE_INTERRUPTS();
だとまた別のところが時々おかしくなります(笑)。いや笑い事じゃないですが。まぁ、Disable Interruptしないと全然見られないのに比べれば少しはマシということで…なんかwork aroundが出るのを待ちましょう(他力本願)。
SPIをDMAで動かせば何とかなるんじゃないかと思うんですが(思うだけ)。
SPIをDMAで動かせば何とかなるんじゃないかと思うんですが(思うだけ)。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。