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パネルのドライブに使えそうですね。コスパも良いですから,,。
AD