田舎おやじの言動log

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

Pico+YM2413シールドもどき失敗

せっかく作ったYM2413シールドもどきをPicoで制御したくて、MCP23017とArduino基板で変換基板を作ってみた。

が、結論これはうまくいかなかった。ROMライター同様i2cエキスパンダが速度的に厳しすぎるのか。先日参考にしたサンプルコードは基本的にレジスタアドレス書き込み12uS、データ書き込み84uSになっており、1MHzのi2c制御だと8ビット出力でも実測で70uSはかかるので、データセット、制御ビットセットを2回繰り返すとこれがもう全然間に合っていない。そのためか音量が安定せずやがて発音しなくなってしまう。というかチップ自体のデータセット時間はnSオーダーだし、ウェイトがなぜuSなのかもよく理解できていない。

実はVGMファイルを再生できるように途中までコードを書いていたが、基本44.1kHz=22uS単位の制御らしくもうこの時点でうまくやれる気がしなかった。参考にしたArduinoVGMプレーヤーのコードはPORT単位の出力かつNOPを使ったウェイト処理をしており、速度にかなり配慮した作りになっていた。まぁそれはそうだよねって感じ。となるとSPI版のエキスパンダでもちょっと厳しいか。

そんなわけで、久々に取った明日の有給休暇はまずこの変換基板を作り直すことからしようと思う。少々勿体ない気もするが、無理にシールドもどきを流用した拡張より、先にVGM形式で5V制御できるPicoを用意してからFMチップの対応数を増やしていった方がよさそう。うーん…しかしまた肩が凝る作業は厳しいな。