もっと今更、SC-88ProにS/PDIFを付けよう
You are viewing an older revision! See the latest version
説明
もっと今更、SC-88ProにS/PDIFを付けよう¶
ある日倉庫を掃除していると、古い5インチフロッピィが出てきた。NIFTY serveからダウンロードしたファイルを保存したものだった。その中に10個ほど、FMIDIからダウンロードしたとても懐かしいデータがあった。ところが、MIDIインターフェースもないし、SC-88とSC-55は処分したばかり。もともと聴き専であったが、何とかして再び演奏させてみたいものである。
ヤフオクで探すとSC-88proは5漱石くらいから落札できるようだ。ぉッチしながら88proのことを調べていると、デジタル出力改造している方がいらっしゃる。それも前世期から、というか、自分が周回遅れなだけか。古くはToshiba TC9231、近年はTI DIT4192を使用するようだが、いずれも88proネイティブの18bitデータの扱いは工夫が必要らしい。おもしろそうだ。データシート集めたり、部品探したり、イメージが膨らむ膨らむ。もはやMIDIデータを懐かしむよりもデジタル出力改造に目的が転換してしまった。
今からやるなら、
- TI DIT4192をハードウェアモード、シフトレジスタで24ビットに
- Asahi KASEI EMD AK4103Aはハードウェアモードで18bitをサポートしている
- DIT4192をソフトウェアモード、マイコンで動作モード設定
1に関しては2個ほどロジックICが必要であるし、先達と同じことをするのは面白くないので後回し。まずは2をチャレンジすることにした。AK4103Aは秋月や共立などでは販売していない。Digikeyにはもちろんあるのだが送料がネック。ところが、MISUMI-VONAで取り扱いがあることが分かった。電子部品を扱っているなんて全く知らなかった。
さて届いたAK4103をSynchronousモード(ハードウェアコントロール)で秋月の変換基板上に組んでみたのだが、音が出ないことがある。しかも5回に4回ぐらい orz 素人なりに色々試したが、88proとの相性の問題と判断し使用を断念した。
次はDIT4192である。これはRS componentsから入手した。Amazonにオーダーした中華Arduino Nanoが届くまでに回路とソフトをくみ上げ、これもまた秋月の変換基板を利用して組み上げた。DIT4192は安定して動作した。予備のDIT4192が一つ余った。中華Nanoひとつは、実験中にみなさまと同じくやっぱりV+とGNDをショートさせて壊してしまったので、それからはがしたATmega328P 32-pin TQFPを再利用、ChaNさんのUEWを使った表面実装を初めてやってみた。老眼には厳しい作業だったが、これもうまく動いた。
今回SC-88proのデジタル出力改造するに至ったきっかけは、「今更SC-88ProにS/PDIFを付けよう」 http://www7a.biglobe.ne.jp/~naopy/av.html を拝見したことである。タイトルもここからパクら流用させていただいた。文体もとっても好みw 復習のつもりであらためてよーく読んでいたら、「出来る人は全てワンチップのマイコンでSPDIFに変換したり」と書いてある。できるかな?
やらないといけないことは、256fsのクロックで32kHz周期でシリアル送信されてくるデータを受信して、SPDIFのデータに変換して、出力する、を途切れなく繰り返すこと。シリアルデータはマイコンのSPIで送受信できそうな気がするが、正確さを必要とするSPDIFのクロックはどうしたらよいのか… DIT4192の場合、88proから引き出したBCLKをSCLKとMCLKに繋いだが…
エウレーカ!
- 88proに光出力を付ける場合も、88proから引き出したBCLKをSPDIFのクロックに利用すればいい。
- SPIはslave full-duplexモードにする。CPUクロックと関係なく、BLCKに同期して、MOSIから取り込みMISOから垂れ流す
- SPIの入力側は、1/2フレーム間に128 clkで送信されてくる。(18bit, right justified, MSB first)
- SPIの出力側は、1/2フレーム間に32bit送信すればいい。Biphase Mark Codeで必要ビットは2倍になり64bit。128clkで64bitを送信するためには、ソフトでデータを2倍に引き延ばせばいい
- SPIは受信・送信ともにDMAを利用する
- 受信側DMA転送(半)完了割り込みで、受信DMAバッファーを読む→SPDIFデータを構築→送信DMAバッファーにセットする
- SPIは 5Vトレラントピンを使えそう
- HALはなんかややこしくて敬遠していたが、最近、かつてのStandard Peripheral Libraryのような、Low Layer dirverというマイコンらしいAPIが出てた!
マイコン工作、mbedから長らく遠ざかっていたのだが(知らないうちにMBEDに変わってるし)、LPCが買えなかったプアマンズmbed、 Nucleoを引っ張り出してきた。白いから目立たないがほこりをかぶってるw ところがだ、Nucleoはデカい、88proに入らん。小さいNucleoを買おうかと思ったけれども、AmazonでSTM32F103の0.35漱石位のボードが売っていて、中国から送料無料で届くと。そしてFlash ROMは半量だがNucleo F103RBとしてコンパイルできるらしい。
さらにボンビーらしくていいじゃないか。やってみるべ。
中華bule pillだし全然MBEDじゃないけど、開発はNucleo F411REで行った。STMさん、MBEDさん、乙。
peu605, 2017/09/01
Nucleoはプロトタイピング、blue pillのプログラマーとして活躍。リセット信号もつなげるとほぼNucleoと同じ感覚で開発できる。
SPDIF出力
筐体に収めるためBlue pillのジャンパは外した。青ワイヤばっかりなのは赤ワイヤが無くなったから。
光コネクタへの配線はここから通した
リアパネルにタカチ電機工業 SW型 プラスチックケース 黒, 40 x 30 x 20mm を筐体のビス2本で固定。光コネクタは横向きに
STMF32F103 割り込み処理部分の負荷率(割り込みのlatency除く) 18.4% at 72MHz。これくらいなら大丈夫かな。
信号引き出しはここから。カスタムICの出力が直接つながっているビアに。一応100 ohmかませている。当初はCN5からとっていた。CN5から取ったほうが安全である。この秋月のガラエポ基板は切りやすくていいわー
祭りの後… 左上:DIT4192 + 中華Nano 左下:DIT4192 + 328P QFP 右上:AK4103Aハードウェアモード 右下:ソフトSPIDF blue pill
wrote:
※ SPIとLRCKとの同期はリセット後最初に1回合わせるだけです。その後SPIは動きっぱなしで、128clk毎にデータを取り込んでいます。汎用SPIを利用する都合上、LRCKと取り込みタイミングをシンクロさせることができません。数時間聴いていても大丈夫そうですが、ヘッドホンからばりばりぴーぎゃー聴こえてきてもご勘弁。
※うちのSC-88pro (DTM-88PW)は、実験して分かったことですが、実データは18bitですが右詰めで20bit分送信しているようです。LRCK切り替わりから降順に127、126、… LSBを0番目ビットとすると、bit[127:20]→前フレームのLSB 0/1状態を維持、bit[19:0]→20bitの2's complementのデータのようでした。 nクロックLRCK遅延で出力ビット合わせした場合、
- LSBが0の場合、M===========L000000
- LSBが1の場合、M===========L111111
のように、追加されるビットがn個の0の場合とn個の1の場合がありそうです。
LRCK H->L、Left Ch取り込みのタイミング。20 bit分出力がある
LSBが0の場合、LRCK切り替わり後も次のデータまで0のまま
LSBが1の場合、同じく1のまま