もっと今更、SC-88ProにS/PDIFを付けよう
You are viewing an older revision! See the latest version
Homepage
さらに今更、SC-88ProにS/PDIFを付けよう¶
ある日倉庫を掃除していると、古い5インチフロッピが出てきた。NIFTY serveからダウンロードしたものを保管していたものだった。聴き専であったが、FMIDIからダウンロードした、とても懐かしいデータであった。ところがSC-88とSC-55は最近処分したばかり。インターフェースもない。何とかして再び聴いてみたいものである。DOOM musicもmp3じゃなくて実音源で聴いてみたくて仕方がなくなった。
ヤフオクで探すと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で取り扱いがあることが分かった。電子部品を扱っているなんて全く知らなかった。個人向け扱いはないようだが、本業にOpen Source Software事業部をでっち上げてオーダーしてみた(ごめんなさい)。驚いたことに1漱石以下なのに送料無料で届いてしまったのである。(ASKULに対するLOHACOみたいなのがあればなぁ)
さて届いたAK4103 Synchronousモード(ハードウェアコントロール)で秋月の変換基板上に組んでみたのだが、音が出ないことがある。しかも5回に4回ぐらい orz 素人なりに色々試したが、88proとの相性の問題と判断し使用を断念した。
次はDIT4192である。これはRS componentsに我らがOSS事業部経由で発注した。Amazonにオーダーした中華Arduino Nanoが届くまでに回路とソフトをくみ上げ、これもまた秋月の変換基板を利用して組み上げた。DIT4192は安定して動作した。予備のDIT4192が一つ余ったので、みなさまと同じく、やっぱり+VとGNDをショートさせて壊してしまったのでそれからはがしたATmega328P 32-pin TQFPを再利用、ChaNさんのUEWを使った表面実装を試してみた。老眼にはきつかったが、これもうまく動いた。
SC-88proのデジタル出力改造については「今更SC-88ProにS/PDIFを付けよう」 http://www7a.biglobe.ne.jp/~naopy/av.html を大変参考にさせていただいた。タイトルもここからパクら流用させていただいた。文章もとっても好みw 復習のつもりでよーく読んでいたら、「出来る人は全てワンチップのマイコンでSPDIFに変換したり」と書いてある。できるかな?
ググると、シンセアンプラグド http://d.hatena.ne.jp/pcm1723 という(stm32で何かしようと調べるといつも引っかかる、とても参考になる)サイトで、PSoC5LPやSTM32F4で作成されているようだ。頑張って読むのだが、高度すぎて、なるほど、わからん。
やるのは、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漱石位のボードが売っていて、中国から送料無料で届くと。そしてNucleo F103RBとしてコンパイルできるらしい。
さらにボンビーぽくていいじゃないか。 やってみるべ。
中華bule pillだし全然MBEDじゃないけど、開発はNucleo F411REで行いました。STMさん、MBEDさん、ありがとう。
2017/09/01
Nucleoは開発、blue pillのプログラマーとして活躍しました
SPIDIF出力
上から 配線引き回しに無駄が多いが、いろいろあれこれ作って取り付けて外して繰り返した後なので…
光コネクタへの配線はここから通した
リアパネルにタカチ電機工業 SW型 プラスチックケース 黒, 40 x 30 x 20mm を筐体のビス2本で固定。光コネクタは横向きに
STMF32F103 割り込み処理部分の負荷率(割り込みのlatency除く) 20.8%。F411REだと半分。その差はメモリアクセス?
信号引き出しはここから。コネクタからとってもいいが。カスタムICの出力が直接つながっているビア。一応抵抗かませておいた。
祭りの後… 左上:DIT4192 + 中華Nano 左下:DIT4192 + 328P QFP 右上:AK4103Aハードウェアモード 右下:ソフトSPIDF blue pill
※仕組み上、LRCKと読み込みタイミングを常時シンクロさせることができません。数時間聴いていても大丈夫そうですが、ヘッドホンからばりばりぴーぎゃー聴こえてきてもご勘弁。