yk-hiro’s handicrafts / ひろ’s ジャンク箱

電子回路やマイコンプログラムについて チラシの裏に書いていく感じのブログ

ラズパイ Picoで 自作のUART MIDI I/Fをテストする

こんばんは!!

蒲郡ラグーナテンボスに行きました
いよいよ梅雨明けですね!!

それでは本題です

今回の目的

自作 1MIDIインターフェース 23 の動作確認をする

バラックつくりの自作MIDI I/F

はじめに

以降のチェックでハードウェアに不具合が見付かれば 物を確認・修正して ステップ1に戻って確認を進める

チェックの過程で Pico を壊すこともあるかもしれない
それも疑いながら進める

ステップ1:ハードウェアのチェック

Picoにつなげる前に はずしやすい部品 4 を はずしておく 5

  1. 目視 6 で配線ミス・ハンダ付け不良(オープン、ショート)のチェック
  2. テスターで配線ミス・ハンダ付け不良(オープン、ショート)のチェック
  3. 5V電源ライン、3.3V電源ラインとGND間のショートなきことをチェック

を実施する

1,2は 全部のチェックはやりきれないので 目視で見える範囲、テスタープローブで触れる範囲をチェックする
3はPicoを壊してしまうかもしれないので念入りに

ステップ2:テストプログラムの準備

テストプログラム 7 を書いて ノーエラーでビルドできるまでコードのデバッグを実施する

ステップ3:UART TX-RX ループバックテストでプログラムのデバッグ

MIDI I/F基板は接続せず 8 に UART1 の TXピン(GPIO4)とRXピン(GPIO5)をジャンパーワイヤで接続してテストプログラムを実行する

テストプログラムのキャラクターコンソール 9 表示

MIDIデータ表示行 先頭の8桁の数字は RP2040の64bitフリーランカウンター 10 の下位32bitを読み出して 100us 11 の桁に切り上げて表示している

プログラムの動作が止まっていないか 時間表示の更新の有無で判断する

上は 音名C(ノート番号 0x30) D(0x32) E(0x34) F(0x35) G(0x37) のノートオン・ノートオフを受信して表示している例である

疑似的なMIDIデータの送信は 音名を割り付けたキーボードのキー(z x d c f v b h n j m , )を押すとノートオンが送出される
スペースキー を押すと 最後の音のノートオフが送出される

この UART TX-RX ループバックテストで プログラムのデバッグを十分にしておく

ステップ4:MIDI I/Fを Pico に接続する

3.3V電源ラインの電圧 12 をテスターで測定しながら I/F基板を接続・組み立てをする

一回一回 Picoの電源を切って(USBケーブルを抜いて)基板・フォトカプラ・MIDIコネクタを各々に取り付けながら 電源電圧チェック 13、テストプログラム起動チェック 14 を繰り返す

I/F基板上で UART TX-RX を接続してループバックテストもしておく

最後に ジャンパプラグ 15 を取り付ける

ステップ5:MIDI出力で音源モジュールを鳴らす

DIN 5pinのMIDIケーブルで I/FのMIDI OUTから音源モジュールに接続する

結果
音名を割り付けたキーボードのキーを押すと 送信データの通りに音源モジュールが発音した
MIDI送信回路は動作しているようである

ステップ5:MIDI DIN 5pinケーブルでループバックテスト

I/FのMIDI OUTからMIDI INにループバック接続する

結果
送信データの通りにキャラクターコンソールに受信データが表示された
MIDI受信回路は動作しているようである

参考:MIDI受信回路の出力波形

ちゃんとしたオシロではない 16 ので 参考程度に見てください 17

UART信号からの受信データのデコードをハンドでざっくり実施

MIDI受信回路の出力波形

結果のまとめ

今回制作した自作のMIDI I/F は 送信回路・受信回路ともに動作している 18

次回は テストプログラムの説明

ソースコードおよび関連ファイルを示す


  1. パーツ箱の手持ちの部品を使って組み立てたもの(フォトカプラと変換基板は新規に調達)
  2. MIDI I/Fのハードウェアは別記事で説明する
  3. MIDI I/F用に UART1 を使用(UART0 は 標準入出力に割り当て)
  4. フォトカプラ、DIN5pinコネクタとジャンパープラグ2個
  5. 不具合時に切り分けがし易いようにする またテスターの抵抗値測定でフォトカプラに電圧がかかるのを避けたい
  6. 視力の低下で細かいところが見えづらいので 拡大鏡を使用
  7. ソースコードや関連ファイルは別記事で投稿する
  8. 自作ハードウェアはきちんと動くかはまだわからないので プログラムデバッグ時の問題切り分けのため
  9. VS Codeのシリアル モニター または Tera Term が使える
  10. RP2040 Datasheet (p.537) 4.6. Timer
  11. MIDIデータ(31250 kbps, データ長=8 bit, Startビット=1 bit, Stopビット=1 bit, non-parity)は 320usで1byte送出なので 100us単位くらいで表示すれば MIDIデータの受信時間の目処が付くはず
  12. ここで使っている Pico の 3.3V電源電圧は テスター読みで 3.25V だった
  13. 電源電圧値が異常であったら すぐにPicoの電源を切る(USBケーブルを抜く)
  14. テストプログラムの初期画面が表示されなかったり 時間表示の更新が止まっていたら すぐにPicoの電源を切る(USBケーブルを抜く)
  15. ジャンパプラグは UARTのTXピン(GPIO4 or GPIO8)、RXピン(GPIO5 or GPIO9)の接続を選択するスイッチにしてある
  16. 新しいオシロスコープも欲しいが これで十分なのかもしれない
  17. 水色の線が見たい信号 (ピンク色の線は表示が消せなくて困っている)
  18. 今回のテスト条件下での動作確認であって 他のMIDIバイスとの互換性は追加確認要