月別アーカイブ: 2016年9月

USB-to-PSG インタフェース基板 rev.2

前回は AVR の VUSB で USB-PSG インタフェースを製作しましたが、速度的に問題がありました。
VUSB は USB Low Speed のみ対応していますが、規格上 LS のビットレートは最大 1.5Mbps なので、MIDI (31.25 kbps)程度の速度なら十分のように思っていました。
しかしながら、USB LS は バルク転送やアイソクロナス転送に対応しておらず、インタラプト転送で信号を送らなければいけません。
私の使用している Windows だとインタラプト転送のインターバルは最短 8ms、転送は最大 8 バイト(VUSB の仕様)なので、6バイト (2 MIDI メッセージ) / 8ms と考えると、実効ビットレートはわずか 6kbps しかありません。

Dscf0832

そういうわけで、USB2.0 に対応した PIC18F14K50 を使って、USB-PSG インタフェースを作り直しました。
(秋月ではいつの間にか 170 円から 210 円に値上がりしていますね…)
外観は前回とほとんど変わりませんが、ピン数の関係で SIPO SREG の 74HC164 を追加しています。

usb-to-psg_schematics_2
USB-PSG rev.2 回路図

ファームウェア

PIC の場合、Microchip Library for Applications (MLA) に含まれる USB サンプルをもとに USB デバイスを実装するのが便利です。
今回は「audio_midi」サンプルをベースに 仮想 USB デバイスを実装しています。
VID/PID とかデバイスディスクリプタは適宜書き換える必要があります。
今回はあくまで TTL-PSG のテスト用ということで、サンプルのままにしています。

USB2.0 のバルク転送だけあって、転送は USB LS のものよりはるかに高速になります。
これで、PC から PSG 音源のまともな演奏ができるようになりました。

USB-to-PSG インタフェース基板

Dscf0808

写真は TTL-PSG のテスト用に製作したインタフェース基板です。
AVR マイコンを USB デバイスとして動かす V-USB をベースにして、USB オーディオクラス(MIDI Out のみ)を実装しています。
Martin さんの V-USB-MIDI プロジェクトを実装のベースにしています。

usb-to-psg_schematics
回路図

ファームウェア(ベータ版)

TTL-PSG のために作ったものですが、もちろん本物の AY-3-8910 に繋いでも動くはずです。一応両方の接続図を回路図に入れています。
回路図左下はディジタルディレイで、本基板とは直接関係ありません。

実装している機能は以下の通り:
・矩形波 3ch: MIDI Port 0-2 に対応
・ノイズ ch: MIDI Port 9 (矩形波 C に mix)
・音量: 矩形波 ch はエクスプレッション、ノイズ ch はベロシティ
・ピッチベンド (±24 半音)
・エンベロープ: プログラムチェンジ、モジュレーション、リバーブで設定

sequenser

上図のように、Class-complient なので一般的な MIDI シーケンサを使って PSG 音源を動かすことができます。
一通り実装したのですが、今のところエクスプレッション変化などデータ量が多いと破綻してしまいます。
すこし改良が必要です。