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」カテゴリの記事
- 豊四季Tiny Basic for micro:bit のマニュアルを更新しました(2020.11.21)
- 豊四季タイニーBASIC for Arduino 機能拡張版 V0.08の更新(2020.07.27)
- Arduino IDE 1.8.13が公開されています(2020.07.24)
- SPI接続フラッシュメモリモジュールを入手しました(2020.05.13)
- 豊四季タイニーBASIC for Arduino 機能拡張版 フルスクリーンエディタ対応(2020.02.20)
「表示器制御関連」カテゴリの記事
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
- M5Stackで日本語表示(2)(2020.02.04)
- M5stackで日本語表示(2020.01.18)
- NeoPixel(WS2812B)の制御 その4(2020.01.09)
« NeoPixel(WS2812B)の制御 | トップページ | 梅澤無線電機さんの「電子倶楽部60」を購入してみました »
コメント