ロームの「MUS-IC」シリーズDACチップであるBD34301EKVを搭載したDAC-BD34301基板が頒布されました.
この基板を動かすにはマイコン等でBD34301EKVのレジスタを設定する必要があります.ここではその1例としてマイコンボードのArduino Unoを使ってCombo384と接続して高音質のUSB DACにします.
準備するものは
- DAC-BD34301基板
- Arduino Uno
- Amanero Combo384(またはその互換基板)
- ミニブレッドボード
- ジャンパーワイヤー(メス- メス:5本,オス-オス:3本,オス-メス:10本)
- 抵抗3.9kΩ x 2
- ±12V/5V電源
となります.また,サンプルレート等の表示のために,Grove – I2C OLEDディスプレイ128×64があると良いです.
±12V/5V電源はDC-DC電源基板±12V/5Vを使いましたので,このほかにDC15V電源アダプターを使っています.
基板間の接続
画像をクリックすると大きく表示されるので,画像からも接続方法が確認できます.Combo384基板には20ピンのピンヘッダーを部品面にはんだ付けしています.
ArduinoとCombo384間の接続
オス-メスのジャンパーワイヤー7本で以下のように接続します(ArduinoのIO番号 – Combo384のピン番号の順で記載).
IO7 – 20ピン(FS3)
IO6 – 19ピン(FS2)
IO5 – 18ピン(FS1)
IO4 – 17ピン(FS0)
IO3 – 16ピン(DSD64_128)
IO2 – 7ピン(DSD_ON)
GND – 8ピン(GND)
Combo384とDAC-BD34301間の接続
Combo384基板とDAC-BD34301基板間の接続にはメス-メスのジャンパーワイヤー5本を使います(Combo384のピン番号 – DAC-BD34301 CN7のピン番号の順で記載).
3ピン – 5ピン(DATA)
4ピン – 4ピン(BCLK)
5ピン – 6ピン(LRCK)
6ピン – 3ピン(MCLK)
7ピン – 2ピン(GND)
尚,DAC-BD34301基板のシルク印刷,LRCK/DSD2とDIN/DSD1は逆になっていますので注意が必要です.
Arduino UnoとDAC-BD34301間の接続
Arduino UnoとDAC-BD34301基板間の接続にはオス-メスのジャンパーワイヤー1本を使います.Arduino UnoのIO番号 – DAC-BD34301 CN7のピン番号の順で記載.
IO9 – 6ピン(VDD)
Arduino UnoとミニブレッドボードそしてDAC-BD34301基板間の接続
Arduino UnoとミニブレッドボードそしてDAC-BD34301基板の接続にはオス – オスジャンパーワイヤー3本とオス – メスのジャンパーワイヤー2本使います.またミニブレッドボード上にI2Cバスのプルアップ用として3.9kΩの抵抗を挿入します.Arduino UnoのIO番号 – ミニブレッドボード – DAC -BD34301 CN6のピン番号の順で記載.
A5 – 3.9kΩ – 2ピン(SCL0)
A4 – 3.9kΩ – 3ピン(SDA0)
5V – 3.9k Ω
Arduino IDEのサンプルコード
Arduinoのサンプルコードはここからダウンロードできます.
ダウンロードしたDAC_BD34301_sample.inoは新たに作成したDAC_BD34301_sampleフォルダの下に置いて,Arduino IDEで開きます.
Grove – I2C OLEDディスプレイ128×64を使うためにU8g2ライブラリをインストールしてください.インストールはArduino IDEの「ツール」>「ライブラリを管理」でライブラリマネージャを起動し,u8g2と検索して出てくるU8g2ライブラリのインストールボタンをクリックします.
Arduino UnoにUSBケーブルを接続して,Arduino IDEのシリアルポートを正く選択して,「スケッチ」>「マイコンボードに書き込む」で書き込みます.
なお,このサンプルコードではVolumeは0dB固定,デジタルフィルターはシャープロールオフ固定としています.また,DSDはDSD64/128/256/512の再生が可能ですが,表示はDSD256/512とも2.8MHzの表示となります.
DAC-BD34301基板の電源のタイミング
DAC-BD34301に実装されているBD34301EKVのレジスタの初期設定等はArduino Unoが行っています.なのでDAC-BD34301基板の電源を入れてからArduino Unoを立ち上げるか同時に電源を入れることが望まれます.
ただ,ArduinoのファームでDAC-BD34301が立ち上がったのを確認してレジスタの設定を行うようになっているのでArduinoの電源を立ち上げる場合にはDAC-BD34301の電源が後になっても問題になりません.
システムとして立ち上がっていて一度DAC-BD34301の電源を落として,再度立ち上げた場合にはレジスタの設定は行われないので問題になります.この場合はArduino Unoのリセットボタンを押してください.
Arduino Unoの電源をUSBから供給せずに,(±12V/5V電源の)+12VをArduino UnoのソケットのVINから供給している場合には問題になりません.
すこし考慮すべきところ
今回の例ではマイコンボードのArduino Unoを使いました.
Arduino Unoに搭載されているマイコンATmeg328P-PUは5Vで動作します.一方,Combo384基板に載っていてArduino Unoと直接接続されるマイコンATSAM3UICA-AUのIO電圧は3.3Vです.IO電圧の異なるデバイス間のインターフェースは注意が必要です.
というのは,Combo384の出力(ATSAM3UICA-AUの出力)をATmega328P-PUに入力することになりますが,ATSAM3UICA-AUのIOポートのVOH(Hレベルの出力電圧)の最小電圧の規格はVDD-0.4VとなっていてVDDは3.3Vなので2.9Vとなります.ATmega328P-PUのIOポートのVIH(入力電圧がHレベルと認識する電圧)の最小電圧の規格はVDD*0.6VとなってVDDは5Vなので3.0Vとなります.これはATmega328P-PUの規格を満足できないことになります.
本来であればArduino Unoを3.3Vで動かすか,Combo384とArduino Uno間にレベル変換回路を挿入すべきです.まぁ,実機での測定では,ATSAM3UICA-AUの出力電圧はほぼIO電源電圧の3.3Vとなっていますのでほとんどの場合,問題にならないこと思いますが.
コメント
はじめまして。本基板に興味を持っているので、検討材料としてお教えいただけますでしょうか。
本基板の動作確認はLOBDASで行われていましたが(http://0918.jp/wp/post-1569/)、この記事ではArduino Unoを使用した制御方法を説明されています。今後、LOBDASでの制御に対応されるご予定はありますか。よろしくお願いいたします。
Kaunasさん、コメントありがとうございます。
LOBDASのBD34301EKVバージョンとして対応する予定です。近いうちにリリースできるのではと思っています。
LOBDASが高機能で、本DAC基板とセットで利用できるとよいなと思っています。定期的にHPを覗きにきてみます。コメントへのご返信、ありがとうございました。
DAC-BD34301に対応したLOBDASボード発表ありがとうございました。
Raspberry PiからI2Sで接続が可能となり、大変うれしく思います。
ところで、I2S接続の場合どのようなドライバーになりますか。
sugujiiさん、コメントありがとうございます。
DAC-BD34301との組み合わせではRBD-P5122+ zero WMOを介してI2S接続することになりますが、その場合のドライバーはhifiberry dac+になります。
ryusai さんご返答ありがとうございました。
I2Sの場合piに重ねたDACのドライバーと理解出来ました、またそのDACにはMCLKは必ず必要となるんですね。
それから、LOBDAS DAC-BD34301セット基板は今後変更される可能性はありますか。
sugujiiさん、コメントありがとうございます。
今のところLOBDAS、DAC-BD34301基板とも変更の予定はありませんが、LOBDASに載せるオプション基板の追加を考えています。