Raspberry Pi Pico はPython系の話が多いのですが,Arduino IDEもサポートされています。
Arduino IDEで動かした時のRaspberry Pi Pico のデジタル出力の速さを知りたくて試してみました。
なおRP2040(Pico)の売りの一つと言われるprogrammable I/O (PIO)はまだ一切さわれていません(^^;;;;;
今回はPicoの普通のデジタル出力をロジアナで計測しています。

・Arduino IDEのライブラリ(ボードマネージャ)
earlephilhower/arduino-picoからいただきました。
ボードマネージャのURL:https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
・ソフトの参考先
1) imo Lab.:Raspberry Pi
ここはとても分かりやすく解説してくれていて助かります。
2) Raspberry Pi Pico C/C++ SDK
なにやらややこしい事も書かれていますが,P. 70からの参考例がためになります。
他にもPICOのGPIO関連について書かれたWebは多くあります。
1.digitalWrite 出力
Arduino標準のデジタル出力です。
しっかり動いてくれますが,1パルスが600nsぐらいで,やはりあまり速くはないですね。

プログラムはスケッチ例で入っている"Blink"(Lチカ)の流用です。
標準のpinMode()で1本ずつ出力ピンを設定します。

2.gpio_put 出力
かなり直接的な出力方法で,1本のピンを指定して出力します。
速く短いパルスが出せます。私のロジアナで見えるように出力を5回連続しています(^^;;;。
5個連続のパルスで50ns未満なので10nsぐらいのパルスは出るようです。

gpio_put(ピン,値)で簡単に使えます。
出力するピンの設定は普通にpinMode()の方がすっきりしていて良いですね。

3.gpio_put _masked 出力
複数ピンからパラレル出力できる方法です。
Pin0〜2を指定し,0から7の値を順に3bitでパラレル出力してみました。
今回はforループの処理時間も加算されていますが,60nsぐらいで次々と出力できるようです。

PicoのGPIOピンの状態(HIGHかLOW)は32bit整数の各bitに対応しています。
pin0はLSBであるbit0,pin1はbit1,pin2はbit2です。今回はPin0〜2を指定してパラレルに出力するので”マスク(mask)"としてbit0〜2をON(1)にしてます。
下図のプログラム中 mb=B111 がマスク(mb)を2進法(B)の111として定義しているところです。本当はmb=B00000000000000000000000000000111なんですかね(^^;;;;;;
各ピンは出力に設定しておく必要もあります。私はpinMode()で設定しています(^^)。

ちなみにマスクされたbitを一斉に変化させる
gpio_set_mask(uint32_t mask)
gpio_clr_mask(uint32_t mask)
gpio_xor_mask(uint32_t mask)
というのもありますし,
入力には単入力の
gpio_get(uint gpio)
パラレル入力のための
gpio_get_all()
もあります。
うむ,思ったよりシンプルにパラレル出力ができました。なかなか速いですねV(^^)。
これなら,128x64RGBパネルのドライブに使えそうですね。コスパも良いですから,,。
Arduino IDEで動かした時のRaspberry Pi Pico のデジタル出力の速さを知りたくて試してみました。
なおRP2040(Pico)の売りの一つと言われるprogrammable I/O (PIO)はまだ一切さわれていません(^^;;;;;
今回はPicoの普通のデジタル出力をロジアナで計測しています。
・Arduino IDEのライブラリ(ボードマネージャ)
earlephilhower/arduino-picoからいただきました。
ボードマネージャのURL:https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
・ソフトの参考先
1) imo Lab.:Raspberry Pi
ここはとても分かりやすく解説してくれていて助かります。
2) Raspberry Pi Pico C/C++ SDK
なにやらややこしい事も書かれていますが,P. 70からの参考例がためになります。
他にもPICOのGPIO関連について書かれたWebは多くあります。
1.digitalWrite 出力
Arduino標準のデジタル出力です。
しっかり動いてくれますが,1パルスが600nsぐらいで,やはりあまり速くはないですね。
プログラムはスケッチ例で入っている"Blink"(Lチカ)の流用です。
標準のpinMode()で1本ずつ出力ピンを設定します。
2.gpio_put 出力
かなり直接的な出力方法で,1本のピンを指定して出力します。
速く短いパルスが出せます。私のロジアナで見えるように出力を5回連続しています(^^;;;。
5個連続のパルスで50ns未満なので10nsぐらいのパルスは出るようです。
gpio_put(ピン,値)で簡単に使えます。
出力するピンの設定は普通にpinMode()の方がすっきりしていて良いですね。
3.gpio_put _masked 出力
複数ピンからパラレル出力できる方法です。
Pin0〜2を指定し,0から7の値を順に3bitでパラレル出力してみました。
今回はforループの処理時間も加算されていますが,60nsぐらいで次々と出力できるようです。
PicoのGPIOピンの状態(HIGHかLOW)は32bit整数の各bitに対応しています。
pin0はLSBであるbit0,pin1はbit1,pin2はbit2です。今回はPin0〜2を指定してパラレルに出力するので”マスク(mask)"としてbit0〜2をON(1)にしてます。
下図のプログラム中 mb=B111 がマスク(mb)を2進法(B)の111として定義しているところです。本当はmb=B00000000000000000000000000000111なんですかね(^^;;;;;;
各ピンは出力に設定しておく必要もあります。私はpinMode()で設定しています(^^)。
ちなみにマスクされたbitを一斉に変化させる
gpio_set_mask(uint32_t mask)
gpio_clr_mask(uint32_t mask)
gpio_xor_mask(uint32_t mask)
というのもありますし,
入力には単入力の
gpio_get(uint gpio)
パラレル入力のための
gpio_get_all()
もあります。
うむ,思ったよりシンプルにパラレル出力ができました。なかなか速いですねV(^^)。
これなら,128x64RGBパネルのドライブに使えそうですね。コスパも良いですから,,。
AD