Raspberry Pi Picoでアケコンのボタンを光らせる②

Kaimana Mini LED Driverっぽいものを作ってアケコンのボタンを光らせる②

 

 

はじめに

前回の記事からかなり時間がたってしまいました。すみません…。
というのも、前回作成したPCBに「Fighting-Light-Pico」のファームウェアを導入して「Brook Universal Fighting Board」に取り付けた場合にUFBがコントローラーとして認識されなくなるという致命的な問題が発生したため、原因調査と対策方法を検討に時間を取られてました。

今回はその問題の原因と対策方法について記載しようと思います。技術的なお話になってしまうので、興味のない方は読み飛ばしちゃっても問題ないと思います。
ちなみに「Fighting-Light-Pico」の導入ドキュメントにも回避策が最近追記されていました。

 

問題の原因

ラズパイPicoは起動時にGPIOのピンの初期状態が「LOW」になっており、「Fighting-Light-Pico」のプログラムで各ピンの状態を「HIGH」(プルアップ)に変更しています。一方、UFBは各ボタンのピンの状態が「LOW」になっているとボタンが押されたと認識します。

それで今回の問題なのですが、UFBとPIcoを同時に起動した場合、ソフトウェアでピンの状態をプルアップ状態に変更するのがUFBの起動完了よりも遅く、UFBですべてのボタンが押された状態で起動されたと認識されてしまうのが問題の原因となります。

UFBはUSBの接続時に特定のボタンを押しておくことで対応機種を切り替えることができるのですが、Picoのピンの状態変更が遅くて接続しているすべてのボタンが押された状態でUFBが起動されてしまうので正しい対応機種として起動できないのです。

Picoのソフトウェアでのピン状態の変更は高速ではないため、ハードウェアによる対策が必要になります。

 

対策方法

「Fighting-Light-Pico」の導入ドキュメントではManualMode設定に使用されるボタンのGPIOと3v3(out)に抵抗を入れてつなげることで起動時のGPIOの状態を無理矢理に「HIGH」にしていますが、自分はラズパイPicoの起動タイミングを遅らせる方式で問題を回避しました。

 

PCB再設計

UFBの5V出力とラズパイPicoの5V入力の間にパワーオンディレイ回路を追加してみました。この回路でラズパイPicoの起動を3秒程度遅らせています。

パワーオンディレイ回路図は以下のような感じです。

 

プロトタイプ版のPCBを作成して動作チェックをしてみましたが、問題は回避できたようなので作業を進めていきます。