ikkei blog

電子工作やパズルのブログです。主にLEDを使った電子工作をやっています。

mbed の NeoPixel ライブラリ、不具合の正体見えた!

2014年04月29日 02時09分01秒 | mbed
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の方が、見て分かるくらいジッタが大きいです。
どうもジッタのせいで周期が短くなった時にビット抜けが
発生したようです。

やはり、このライブラリは素性が良くありません。
波形発生の処理方法に問題がありそうです。

最新の画像もっと見る

コメントを投稿