Raspberry Pi Pico バーサライタで PIO を考えるーRaspberry Pi Picoへの道8ー

Home > Raspberry Pi > Raspberry Pi Pico バーサライタで PIO を考えるーRaspberry Pi Picoへの道8ー
すき 0
うんこ 0

前回は狭ピッチLEDバーを用いてバーサライタを製作しました。

Raspberry Pi Pico バーサライタ解像度向上 (C/マルチコア) ーRaspberry Pi Picoへの道7ー

 

LEDを2本 Raspberry Pi Pico の2つのSPI出力でそれぞれ制御しました。
その際にシングルコアでの制御とデュアルコア制御で性能が変わらないという不可解な結果を得ました。

ここではこの件について深堀りします。

 

 

仮説

前回は2本のSPI入力LEDバーをPIOを用いて制御しました。
その際にPIOブロックの2つのステートマシン(sm)を用いました。
具体的にはpio0のsm0で64セル、sm1で63セルのLEDを制御しました。

この時シングルコアでLEDを制御した場合とデュアルコアにしてcore0で64セル、core1で63セル駆動した場合で バーサライタの表示分解能に差は生じませんでした。
デュアルコアによる並列処理で分解能が2倍近く向上すると予想していたのですが、全く改善はなかったのです。

そこでステートマシンを分けた時点で並列処理がなされているのではないかという仮説を思い立ちました。
シングルコアでも2本のLEDをPIOで異なるステートマシンで制御していたので既に並列処理されているためデュアルコアにしても性能向上がなかったのではないかと考えたのです。

 

仮説の確認

ステートマシンが並列処理されていることを立証するため、以前製作したバーサライタで動作確認します。

このバーサライタは5mm角LEDテープ24セルを1本用いております。
この時 1周 1000分割を達成し非常に驚きました。

このバーサライタに更にLED 24セルを追加しても別のステートマシンで制御すれば分解能は変わらないはずです。

バーサライタ製作

LEDテープを追加します。
 

 

LEDの台の両サイドに割りばしを接着して幅を拡張します。

 

 

完成!
2本のLEDはそれぞれ異なるSPI端子(SPI0, SPI1)で制御します。

動作

仮説通りLED追加しても1000分割達成できました。

追加したLEDはPIOの別ステートマシンで並列処理されていると言えます。

 

おわりに

前回と今回の実験でPIOのステートマシンによる処理が並列に実行されていることがわかりました。

Raspberry Pi Pico にステートマシンは8個搭載されているのでPIO機能によってGPIOを8並列処理できることになります。

これは凄いですね。
PIOの応用によってさまざまな高速処理が実行できそうです。
夢が広がります!

それでは次の道でお会いしましょう!

 

追記

Adafruit 公式ブログ (2021/2/26)

Adafruit公式ブログにて紹介していただきました!

 

ラズパイ 公式マガジン (2021/3/25)

Raspberry Pi 公式マガジン The MagPi に掲載していただきました!

以下で無料でダウンロードできます。

次の記事

Raspberry Pi Pico W を Arduino IDE で味見

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください