mbed の NeoPixel ライブラリがおかしい件、
やはり波形を細かく見てみないとダメだと言うことで、
ズームアップしてみました。
特におかしなところは無さそうに見えます。
こちらがArduino UNO の波形です。
比較しても、違いが有るようには見えません。
しょうがないので、表示がおかしくなっているところの波形を見てみます。
このLEDは自分の分(24ビット)を取り込むと、それ以降を後段にスルーします。
だから、後ろの方になるとデータが少なくなります。
なんじゃこら!
明らかにLの時間が長いところがあります。
元は有ったパルスが消えているようです。
だから表示がおかしくなったと言うわけです。
改めてmbed直後の信号波形を見てみると、
長いパルスが連続するとLの時間がだんだん短くなっているみたいです。
測ってみると
330nsしかありません。
その直前のLの時間は
440nsあります。
WS2812のスペックでは
T1L = 600 ± 150 ns なので、アウトですが、
WS2812Bのスペックでは
T1L = 450 ± 150 ns なので、OKなはずです。
実際、私の基板はWS2812Bです。
いやいや、そもそもデータシートの書き方が違うだけで
デバイスの正味の
スレッショルドは600nsあたりにあることが分かっています。
では、なぜビットが抜ける現象が起こったのでしょうか。
改めて、ビット周期を測ってみます。
ビットが抜けたところは2.4μsになっています。
これは2ビット分なので、ビット周期は1.2μsです。
800kbpsだと1.25μsなので、少し短いのです。
そこで、改めてArduinoの波形と比べてみると、
mbedの方が、見て分かるくらいジッタが大きいです。
どうもジッタのせいで周期が短くなった時にビット抜けが
発生したようです。
やはり、このライブラリは素性が良くありません。
波形発生の処理方法に問題がありそうです。