NeoPixel系のRGBフルカラーLEDテープは高速なパルスが出力できるとコントロール線1本で動かす事ができます。

ATtiny85ではインラインアセンブラ のポートコントロールで,またSeeeduino-XIAOではポートコントロールで動かせましたので,micro:bitでも自作プログラムを試してみました。


1.ポートコントロールでのパルス作成

micro:bitはArduino IDEを使ってプログラミングし,Pad 0からパルスを出してみました。





パルスを出すテストのプログラミングです。Webで見つけた2種類の書き方に差があるのかどうかをみてみました。





上図のプログラムでの出力パルスです。2つの記載法でのパルス の違いは特に無く,125nsぐらいのパルスが作れていました。





2.LEDテープへのデータ送信

ここまでくればしめたもので,後はSeeeduino-XIAOの時に作ったLEDのコントロールプログラムを参照しながら,1/0のパルス幅を調整して動かしてみました。




送信しているbitの1/0のパルス波形です。



Highのパルス幅は計算通り出ますが,Lowのパルス幅はfor-nextループや条件分岐などの影響を受けてぎりぎりの値になっています(^^;;;;;;;;


実際にLEDの個数分のデータを送っているプログラム例です。

(注意)
下図のポートコントロール形式はArduinoのPin指定ではA0しか成り立っていませんでした。
他のPinを使用する時は”NRF_GPIO->OUTSET=1 << 3”の形式にする必要があります。





3.micro:bitのピンとポートコントロール

micro:bitのPinとポートとの関係については以下のWebページの内容を参照しました。

・Arduino のPin定義表
 → Didel  Micro:Bit – C programming under Arduino IDE



・micro:bit のハードウェアの各種詳細情報
 → micro:bit org Hardware Details of the latest micro:bit hardware revision

下図のようなPinMapやMCUポートとの関連表などもたくさんあります。




なお,この本家のサイトの情報ではmicro:bitはバージョンがVer2に上がり,MCUの変更で速くなりメモリも増えるようです。

しかし,Ver2の対照表を見るとMCUのポートとpin番号との関係などはほとんど全て変わってしまいそうです。注意が必要ですね(^^;;;;;;;

ま,micro:bitをArduino IDEでプログラミングするのはネイティブの方式ではないので,micro:bit側からの直接のサポートは無く,Arduino側でのボードマネージャの更新があるのでしょうね。

そのためにもプログラムではMCUのポートのPin番号を直接数値で指定するのは避けて,Arduino IDE側で定義しているmicro:bitのPin番号を使用する方法にしておいた方が良いかもしれませんね。