NeoPixel系のRGBフルカラーLEDテープは高速なパルスが出力できるとコントロール線1本で動かす事ができます。
ATtiny85ではインラインアセンブラ のポートコントロールで,またSeeeduino-XIAOではポートコントロールで動かせましたので,micro:bitでも自作プログラムを試してみました。
1.ポートコントロールでのパルス作成
micro:bitはArduino IDEを使ってプログラミングし,Pad 0からパルスを出してみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/18/31/j/o0905070014849090159.jpg?caw=800)
パルスを出すテストのプログラミングです。Webで見つけた2種類の書き方に差があるのかどうかをみてみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/c2/4e/j/o0764078214849090157.jpg?caw=800)
上図のプログラムでの出力パルスです。2つの記載法でのパルス の違いは特に無く,125nsぐらいのパルスが作れていました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/c5/cb/j/o0929027014849090153.jpg?caw=800)
2.LEDテープへのデータ送信
ここまでくればしめたもので,後はSeeeduino-XIAOの時に作ったLEDのコントロールプログラムを参照しながら,1/0のパルス幅を調整して動かしてみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/a3/80/j/o0538040614849090145.jpg?caw=800)
送信しているbitの1/0のパルス波形です。
![](https://stat.ameba.jp/user_images/20201111/20/pta55/68/57/j/o0964025514849592279.jpg?caw=800)
Highのパルス幅は計算通り出ますが,Lowのパルス幅はfor-nextループや条件分岐などの影響を受けてぎりぎりの値になっています(^^;;;;;;;;
実際にLEDの個数分のデータを送っているプログラム例です。
(注意)
下図のポートコントロール形式はArduinoのPin指定ではA0しか成り立っていませんでした。
他のPinを使用する時は”NRF_GPIO->OUTSET=1 << 3”の形式にする必要があります。
![](https://stat.ameba.jp/user_images/20201111/20/pta55/ff/0d/j/o0797083314849599515.jpg?caw=800)
3.micro:bitのピンとポートコントロール
micro:bitのPinとポートとの関係については以下のWebページの内容を参照しました。
・Arduino のPin定義表
→ Didel Micro:Bit – C programming under Arduino IDE
![](https://stat.ameba.jp/user_images/20201110/20/pta55/79/d8/j/o1102114714849090357.jpg?caw=800)
・micro:bit のハードウェアの各種詳細情報
→ micro:bit org Hardware Details of the latest micro:bit hardware revision
下図のようなPinMapやMCUポートとの関連表などもたくさんあります。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/8b/9b/j/o0400077714849090358.jpg?caw=800)
なお,この本家のサイトの情報ではmicro:bitはバージョンがVer2に上がり,MCUの変更で速くなりメモリも増えるようです。
しかし,Ver2の対照表を見るとMCUのポートとpin番号との関係などはほとんど全て変わってしまいそうです。注意が必要ですね(^^;;;;;;;
ま,micro:bitをArduino IDEでプログラミングするのはネイティブの方式ではないので,micro:bit側からの直接のサポートは無く,Arduino側でのボードマネージャの更新があるのでしょうね。
そのためにもプログラムではMCUのポートのPin番号を直接数値で指定するのは避けて,Arduino IDE側で定義しているmicro:bitのPin番号を使用する方法にしておいた方が良いかもしれませんね。
ATtiny85ではインラインアセンブラ のポートコントロールで,またSeeeduino-XIAOではポートコントロールで動かせましたので,micro:bitでも自作プログラムを試してみました。
1.ポートコントロールでのパルス作成
micro:bitはArduino IDEを使ってプログラミングし,Pad 0からパルスを出してみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/18/31/j/o0905070014849090159.jpg?caw=800)
パルスを出すテストのプログラミングです。Webで見つけた2種類の書き方に差があるのかどうかをみてみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/c2/4e/j/o0764078214849090157.jpg?caw=800)
上図のプログラムでの出力パルスです。2つの記載法でのパルス の違いは特に無く,125nsぐらいのパルスが作れていました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/c5/cb/j/o0929027014849090153.jpg?caw=800)
2.LEDテープへのデータ送信
ここまでくればしめたもので,後はSeeeduino-XIAOの時に作ったLEDのコントロールプログラムを参照しながら,1/0のパルス幅を調整して動かしてみました。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/a3/80/j/o0538040614849090145.jpg?caw=800)
送信しているbitの1/0のパルス波形です。
![](https://stat.ameba.jp/user_images/20201111/20/pta55/68/57/j/o0964025514849592279.jpg?caw=800)
Highのパルス幅は計算通り出ますが,Lowのパルス幅はfor-nextループや条件分岐などの影響を受けてぎりぎりの値になっています(^^;;;;;;;;
実際にLEDの個数分のデータを送っているプログラム例です。
(注意)
下図のポートコントロール形式はArduinoのPin指定ではA0しか成り立っていませんでした。
他のPinを使用する時は”NRF_GPIO->OUTSET=1 << 3”の形式にする必要があります。
![](https://stat.ameba.jp/user_images/20201111/20/pta55/ff/0d/j/o0797083314849599515.jpg?caw=800)
3.micro:bitのピンとポートコントロール
micro:bitのPinとポートとの関係については以下のWebページの内容を参照しました。
・Arduino のPin定義表
→ Didel Micro:Bit – C programming under Arduino IDE
![](https://stat.ameba.jp/user_images/20201110/20/pta55/79/d8/j/o1102114714849090357.jpg?caw=800)
・micro:bit のハードウェアの各種詳細情報
→ micro:bit org Hardware Details of the latest micro:bit hardware revision
下図のようなPinMapやMCUポートとの関連表などもたくさんあります。
![](https://stat.ameba.jp/user_images/20201110/20/pta55/8b/9b/j/o0400077714849090358.jpg?caw=800)
なお,この本家のサイトの情報ではmicro:bitはバージョンがVer2に上がり,MCUの変更で速くなりメモリも増えるようです。
しかし,Ver2の対照表を見るとMCUのポートとpin番号との関係などはほとんど全て変わってしまいそうです。注意が必要ですね(^^;;;;;;;
ま,micro:bitをArduino IDEでプログラミングするのはネイティブの方式ではないので,micro:bit側からの直接のサポートは無く,Arduino側でのボードマネージャの更新があるのでしょうね。
そのためにもプログラムではMCUのポートのPin番号を直接数値で指定するのは避けて,Arduino IDE側で定義しているmicro:bitのPin番号を使用する方法にしておいた方が良いかもしれませんね。