先日、NeoPixelの先にPICを繋ぐ実験 について書きましたが、一応動くようになりました。リング状のNeoPixcel(RGB LED16個)の先、17個目にPICを繋いでシリアルで送られてくるRGBのカラーデータを受信します。
PIC側はRGB 24ビットのうち、先頭の8ビット(RGBのGreenに相当)を受信して青色LED 8個にそのビット列を表示しています。NeoPxel側はRGB LEDなので色を変えられますが、今回はPIC側LEDに合わせて青色に点灯させています。
PICに繋いだ青色LEDが流れているのは、1,2,4,8,...,128の値をdelayをかけて順次送り込んでいるため。PICのアドレスが8個あるわけではありません。PICは17番目に1個だけ。
前にも書きましたが、PICにとっては結構高速1.25μs/bit(800kbps)のシリアルデータをソフトで読み込むのはタイミング調整が難しいです。さらに仕様では1.25μs±600nS とタイミングのズレの許容範囲も大きいので、今回はうまく行きましたが、他の個体ではタイミングが合わないかもしれません。
各ビットの信号の立ち上がり/下がりを検出している余裕がなく(検出処理でタイミングがズレる)、殆ど決め打ちで読んでいます(一部若干の工夫はしましたが)。
今回はPIC16F1938(28ピン)を32MHzで動かしましたが、こんなにピン数はいらないのでピン数の少ない安価なPICに載せ替えてみようかと思います。