NeoPixel(WS2812B)の制御 その2
前回行った、ArduinoによるNeoPixel(WS2812B)の制御の続きです。
前回の処理の一部をSPIを利用する方式に書き換えました。
SPIを使っているため、出力ピンはMOSIピン(D11)固定となりますが、
前回よりも安定したクロックでの出力となりました。
前回の信号生成の条件を考慮し、
SPIのクロックを8MHzとした場合、1クロック幅は0.125μ秒となります。
このクロック幅を元に利用して、
として利用します。値としては、「Data transfer time」の表の有効範囲から
少々ずれていますが、問題無いようです。
ちょうど0、1の送信とも8クロック分になりSPIの送信単位の8ビットにマッチします。
NeoPixelに1ビット送信するのに、SPIを利用して1バイト送れば良いことになります。
0 : 0b11100000
1 : 0b11111000
修正したスケッチ(2020/01/15 修正)
前回のスケッチでNeoPixelの初期化とデータ送信を行っている NeoInit() 、NeoUpdate()をSPIを利用する方式に修正しました。
SPIによるデータ送信は、関数呼び出しだと処理が間に合わないと判断し、
データレジスタSPDRに送信データをセットし、ステータスレジスタSPSRを参照して
送信完了待ちを行っています。
次回は8x8ドットマトリックスタイプのNeopixelを使ってもう少し複雑なことをやろうかと思います。
関連記事
NeoPixel(WS2812B)の制御 その4(2020.01.09) ・・・ 16x16マトリックスの制御
NeoPixel(WS2812B)の制御 その3(2018.05.30) ・・・ 8x8マトリックスの制御
NeoPixel(WS2812B)の制御 その2(2018.05.22) ・・・ SPIを使った制御(この記事です)
NeoPixel(WS2812B)の制御(2018.05.20) ・・・ GPIOを使った制御
参考にしたサイト
・Todotaniのはやり物Log - SPIの基本動作とArduinoでの使い方
・しなぷすのハード製作記 - 「SPI」の解説
・garretlab - Arduinoで遊ぶページ - SPI関連レジスタ
・Stupiddog - ArduinoでSPI通信を行う方法
・株式会社インデペンデンスシステムズ横浜 - Arduino UnoでSPI通信(その1)Arduino Uno2台で通信
・QEEWiki - SPI (Serial Peripheral Interface)
« NeoPixel(WS2812B)の制御 | トップページ | 梅澤無線電機さんの「電子倶楽部60」を購入してみました »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
« NeoPixel(WS2812B)の制御 | トップページ | 梅澤無線電機さんの「電子倶楽部60」を購入してみました »
コメント