田舎おやじの言動log

田舎で暮らすおっさんの言動を適当にロギング。

PicoとM5Core2とArduino

仕事の試作と趣味の電子工作でRaspberry Pi PicoとW、M5Core2、Arduino NANO/UNO/MEGAを一通り触ったので、なんとなくで感想を書いてみる。

Raspberry Pi Pico

Pico-SDKVSCodeの組み合わせが大変心地よく、個人的に一番のお気に入り。SRAMFlashのスペックも仕事で使うSTM32系に近く、似たような感覚でコードが書けるからだろうか。
GPIOの数はROMライターのようなパラレルのバス通信にはやや不足するが、シフトレジスタとの組み合わせで数自体は稼げるし、USBホスト、I2C、SPI、UART、A/DCが必要十分な感じで割り付けされている。出力クロックも普通にコードを書いて2MHz程度は出るので、1usオーダー3.3V系のシステムで性能的に困ることはない。

悩みのタネは趣味で弄っている5V系ICと直結できないことだろうか。レベル変換ICはDIPにすると場所を食うし、I2Cのエキスパンダでは15kHzがせいぜいといったところ。

もっともZ80をリアルタイムでモニタリングしたいとか特殊な用途でなければ、5V系はそれで十分賄えるし、入手しづらいがSPIのエキスパンダなら理論上150kHz、後述のArduinoくらいのクロックは稼げる。入手性も良く価格もたった¥700とか、正直もう量産すらこれを使いたくなる。足が多いパッケージがあればなぁ。

M5Core2

試作器の測定値をUARTで受け取り、それをSDカードに記録しつつクラウドに送信する。しかもプレゼン中はバッテリー駆動でスマートに…というピンポイントの需要に恐ろしいほどマッチした。世に溢れているサンプルコードを継ぎ接ぎするだけでいっぱしのIoT機器っぽいものがでっち上げられる。
他にこれに注目した理由としては、MSX0が採用していることだろうか。夏には実機が触れるのが楽しみ。言われてみればスプライトとフォントデータも持っており、ちょっとしたゲームもどきも簡単に作れた。ぶっちゃけSRAMもフラッシュも組込系とは桁違いに潤沢だし。
そんな万能なこいつの弱点はIOの拡張に苦労しすぎること。I2CとUARTはGROVE端子から1つだけ引き出せるものの、それ以上だとスタックモジュールか専用ブレッドボードでないとまともに配線もできない。下の画面のようにI2Cのエキスパンダでは速度が5.5kHzと微妙なので、パラレルバスとなるとZ80はおろかFM音源ICの制御もちょっと心配に見える。一応ROMの一方的な吸い出しくらいは動作実績があるが、Device ID読み取りなどそれなりにタイミングが要求される制御はうまくいかないことが多かった。メーカーの目論見通りGROVE前提でセンサーコントローラとして利用するのが妥当なのかもしれない。

あと開発環境はVSCode(PlatformIO)+ArduinoライブラリでArduino系と全く同じ。なのだが、画面表示とかIOの割付とか独自部分では案外情報が少なくて結構な勢いでハマることがあるし、同じ理由でArduinoのサンプルライブラリ流用は逆に苦労してしまう。後発なので仕方が無いのかもしれないが、もう少しドキュメントが充実していたらと思う。

Arduino

最近世の中の電子工作といえばこれな感じなものの、Arduino IDEが苦手で今まで中々積極的に手を出さなかった。最近はPlatformIOを利用してVSCode上で触れるのでありがたい。
これらの強みはなんと言っても豊富な周辺キットとサンプルコード、ライブラリだが、個人的には5VIOというのが一番大きい。MEGAならZIFソケットと直結して5V系EEPROMライターがあっと言う間に作れるし、8ビット時代のCPUや周辺ICの制御も世界の誰かが必ず実現しているので、それを見て簡単に再現できる。価格もNANOならPicoとさほど変わらないし、MEGAでも互換品は¥2,500程度。素晴らしい。
弱点は強みの裏返しで、低価格ゆえの少メモリ量とコーディングの簡単さ優先による速度面のハンデか。特にNANO、UNOのSRAM 2KB、フラッシュ32KBは8ビット世代の組込系CPUとさほど変わらない。あまりのお手軽さについ忘れがちになるが、ドットLCDとかで画面バッファを取るとそれだけで詰むし、フォントデータを持とうものなら表示するだけで一杯一杯になる。この部分はMEGAでも同じで、FM音源シールドがPCからの制御前提かつPCM再生機能無しだったりするのは、すべてこのあたりの制約が関係しているように見える。

速度面はGPIO個別に叩かずにポートでまとめてアクセスするとPico並になるが、これに気付かないとシビアな信号制御で思わぬ落とし穴に嵌まる。というか、ポート単位のアクセスとかもうIOレジスタ直叩きなのでArduinoライブラリを使う意味が薄くなる。つまるところPICをお手軽に扱えるようにラッピングしたものなので、最初の取っかかりの早さを活かした試作や学習向けということか。これ以上望むなら同価格帯であるSTM32L4あたりの評価ボードの方が、潤沢なメモリと省電力、高機能なHALで後々の苦労は少ない。

業務の試作と8ビットマイコン工作という極端な使い方での感想なので、この中から1つに絞るというのが難しい。三者三様の使い方をうまく考えないといけないのだろう。

で、目下の悩みはFM音源ICをどれで鳴らそうかということ。まずは参考サイトが圧倒的に多いArduinoでICの使い方を掴み、その後機能拡張しながらPicoに移し替える感じか。ICもMSXに搭載することを考えてYM2608でなくYM2413からにしようかな。うーん、悩む。