アップサイジングの巻き? DAC4497-2.1編 2017.2.6
DAC4479-2をつくりましたが、やっぱりDAI(Digital Audio Interface)も同居しているほうが使いやすいというメールを頂き、
週末で描いてみました。
DAIにはDIX9211を用いています。これはSPDIFデコーダを内蔵していて、さらにPCM/DSD入力も可能なのが便利です。
といってもPCM/DSD入力については、単なるスイッチみたいな機能しかありません。それでも、PCMやDSDをロジックで
切り替えようとすると、それだけで数個ICが増えるので、DIX9211だとそれ1個で済むが便利です。
コードネームはDAC4497-2.1
特徴としては、
最近の流れとしてLCDには20列×4桁のLCDが使えるようにジャンパーピンを配置している点と、
アナログ部のディジタルにはADM7154の超低ノイズレギュレータをつかってみました。
あと、外部IVとの接続時にVcc/2出力があると便利なので、その端子も設けました。
DAC4497-2.1を描いてみました。
さてさて、これって実現するのかな?
こちらも基板ができあがりました。
いっぱい作成中の基板が溜まっているので、これに実装ができるようになるのはいつになるだろう〜って感じです。
まずは基板ができあがりましょうた。いつ着手できるだろう・・・・
ほんとに思い出したように 2017.9.2
製作を開始しましょう!
まずは主要なICからとりつけます。ここが一番神経をつかうところです。
あとはどんどん表面実装部品をとりつけていきましょう!
ほとんどとりつきました。あとは、CRなど合致する値のものを部品箱を探さないといけません。
完成させましょう! 2017.9.3
残りの部品をとりつけて一気に完成させましょう。
完成しました。まずはお出かけ用の写真です。
裏面(半田面)側です。
部分アップ(DAI部)
中央の電源レギュレータ部分
DAC周辺
ソフトを書いていきましょう!
これが結構時間がかかります。その前に、ハードウエアの定義をそろえなくっちゃ。
ピン定義 2017.9.4
以下はどちらかといえば備忘録です。
PIC-PIN CONFIG.
PIC | PCB | CONTENT | FULL-FUNC MODE | |
A0 | P19 | Electrical Volume | Analog-IN | |
A1 | LCD-P4(RS) | D-OUT | ||
A2 | LCD-P6(E) | D-OUT | ||
A3 | LCD-P11(DB4) | D-OUT | ||
A4 | LCD-P12(DB5) | D-OUT | ||
A5 | AUX P25 | D-IN/OUT | ||
A6 | XTAL1 | - | ||
A7 | XTAL2 | - | ||
B0 | P13 (RX2-SEL) | RX2 | CONSOLE SW3 | |
B1 | P14 (RX3-SEL) | RX3 | CONSOLE SW4 | |
B2 | P15 (P1-SEL) | CN1 INPUT | ||
B3 | P16 (P2-SEL) | CN2 INPUT | ||
B4 | LCD-P14(DB7) | D-OUT | ||
B5 | LCD-P13(DB6) | D-OUT | ||
B6 | ICSP-CLK | - | ||
B7 | ICSP-DAT | - | ||
C0 | CLOCK-INPUT | D-IN | ||
C1 | AUX P26 | D-IN/OUT | ||
C2 | PDN(AK4497) | D-OUT | ||
C3 | SCL | D-OUT | ||
C4 | SDA | D-IN/OUT | ||
C5 | RST(DIX9211) | D-OUT | ||
C6 | P11 (RX0-SEL) | RX0 | CONSOLE SW1 | |
C7 | P12 (RX1-SEL) | RX1 | CONSOLE SW2 |
IO-EXP PIN-CONFIG
PORT0 | PORT1 | |||||
IO0-0 | CN1-LRCK SEL | OUTPUT | IO1-0 | JP6-8 | INPUT | |
IO0-1 | CN1-BCK SEL | OUTPUT | IO1-1 | JP6-7 | INPUT | |
IO0-2 | CN2-LRCK SEL | OUTPUT | IO1-2 | JP6-6 | INPUT | |
IO0-3 | CN2-BCK SEL | OUTPUT | IO1-3 | JP6-5 | INPUT | |
IO0-4 | JP5-1 | INPUT | IO1-4 | JP6-4 | INPUT | |
IO0-5 | JP5-2 | INPUT | IO1-5 | JP6-3 | INPUT | |
IO0-6 | JP5-3 | INPUT | IO1-6 | JP6-2 | INPUT | |
IO0-7 | JP5-4 | INPUT | IO1-7 | JP6-1 | INPUT |
I2C ADDRESS DEFINITION
DIX9211(IC4) | 0x80 |
PCA9539(IC3) | 0xee |
AK4497(IC5) OUT1 | 0x20 |
AK4497(IC6) OUT2 | 0x24 |
ソフトを作成する上で必要な情報は上記の通りです。
シンプルファンクションモードの定義
フルファンクションモードのように、コンソールスイッチとLCDをつかってパラメータを設定する場合は、
自在にAK4497の設定ができますが、シンプルファンクションモードの場合は基板上のジャンパーポスト
のみでの設定になりますので、どのように割り当てるかはちょっと、悩んでしまいます。
基本的には音質に関連するパラメータを優先的に割り当てるわけですが、考えたらどのパラメータも
音質に影響を与えるのですよね〜。というわけで、思い切りが必要です。
結局は下記のようにまずは仮設定です。
JP5 / INPUT FORMAT
H(OPEN) | L(SHORT) | |||
JP5-1 | CN1 INPUT FORMAT | HH: PCM I2S (Philips format) HL: PCM RJ16 (Right Justified 16Bit) LH: PCM RJ24(Right Justified 24Bit) LL: DSD |
nn:=(JP5-2)(JP5-1) | |
JP5-2 | ||||
JP5-3 | CN2 INPUT FORMAT | HH: PCM I2S (Philips format) HL: PCM RJ16 (Right Justified 16Bit) LH: PCM RJ24(Right Justified 24Bit) LL: DSD |
nn:=(JP5-4)(JP5-3) | |
JP5-4 |
あれ、CN1,CN2のどちらもDSDに割り当てできたかな?まあ、確認していましょう。
LJ(LEFT JUSTIFIED)はあまり使う場合もないので、省略しましょう。
JP6 / MODE & Sound Quality Setting
H(OPEN) | L(SHORT) | |||
JP6-8 | MODE | FULL FUNCTION | SIMPLE FUNCTION | Run mode |
JP6-7 | SUPER SLOW | Disable | Enable | Digital filter setting |
JP6-6 | SHORT DELAY | Disable | Enable | |
JP6-5 | SLOW | Disable | Enable | |
JP6-4 | SC0 | HH:Setting1 (Current Maximum) HL:Setting 2(Current minimum) LH:Setting 3(Current Medium) LL:Setting 2(Current minimum) |
Sound Quality Select nn:=(JP6-6)(JP6-5) |
|
JP6-3 | SC1 | |||
JP6-2 | SC2 | Setting 4 | Setting 5 | |
JP6-1 | HLOAD | Disable | Enable | Heavy Load Mode |
こんな感じでしょうか。
ポート定義
PORT | PCB | CONTENT | |
AUX | P25 | LED Serial | Serial Output for 7SEG LED |
P26 | Relay output | L to H after power on. |
ソフト製作にかかりましょう! 20179.5
まずは個々のパーツの動作テストからはじめしょう。
最初はLCDからです。ここに変数を含めたデバッグに必要な情報をいろいろと表示させますので
LCDの動作テストはまず最初です。
いつもは、問題なくさっと動くのですが・・・
動かない?
なんとあろうことかうまく動きません。まず最初に疑うのがピンアサインが間違っていないか、ということですが問題ないようです。
で、PICそのものが動いているか調べてみようと、LCDの表示ルーチンのあとに、単純にPINをHIGH,LOWを繰り返すルーチンを入れて
オシロで確認してみましたが、ピクリとも動きません。
あれ?プログラムが書けることからPICは動いているはずだけど・・・・、発振していない?
ここで外部水晶モードから内部発振モードに変更すると、すんなり動き出しました。
どうも外部発振がおかしい模様。パターンに間違いがないか確認してみましたが問題ないようです。
いろいろと電源を入れなおしたりしていると、どうやら数秒たってからLCDが動作することが確認できました。
そして、その後にHIGH,LOWの繰り返し周波数を確認してみると数10kHzと極めて低速!発振周波数は数100kHzって感じです。
あそうか!
どうやら水晶とGND間にとりつけるコンデンサの容量を間違えたようです。本来は15〜22pFをとりつける必要がありますが、
どうやら2200pFあたりを間違えてとりつけた様子。チップコンデンサは外見から容量がわからないので、間違い確認はできませんが、
コンデンサをリードタイプの22pF(これは「22」と書いてあるのでわかる)に変更したところすんなり動きだしました。
やれやれ、こんなこともあるもんです。
まずは個々のパーツの動作テストということで、LCDの表示テスト。これが、結構悩みました(笑)。
それぞれのICを順に確認です。
まずがI/Oエキスパンダーからです。このICにはシンプルファンクション時のモード設定のジャンパーが
ありますので、それらがマイコンに正常に読み込めているかを確認します。
I/Oエキスパンダーは問題なく動作してました。
次はDIX9211(レシーバ)の動作確認です。SPDIF入力に設定して、確認します。問題なく
PCM信号がでていることが確認。さて、最後はAK4497が動いているかどうかですが、
DIX9211とAK4497を両方ともI2Sフォーマットに設定して確認です。
オシロにつないで波形を確認しますが、問題なく動作することが確認できました。
最終的にはこんな感じで動作確認です。
無事うごきました!
さて、ハードが問題ないようなのでどんどんソフトを書いていきましょう!
準備をしましょう!
外付けスイッチが必要なので、簡単にタクトスイッチを基板にのせてつなげました。
外付けのスイッチを取り付けました。
基本ルーチンは 2017.9.6
ソフトウエアの基本ルーチン、というかその骨格はDAC9038Dをベースにしました。
それでも、DAC自体のコマンドがほとんど違うので、大半は書き換える必要がありますが、
基本部分だけでも活用できるとソフト開発の立ち上げが早くなります。
ソフトの基本部分と、よくつかうルーチンはDAC9038Dからひっぱってきましょう。
動作時電流は
0.337Aを示しています。
結構電流ながれますね。
消費電流は結構多いです。電源はしっかりしたものが必要です。
DSD/PCM自動切換え?
DIX9211のPCM入力はDSD入力とすることもできます。というよりDIX9211は単なるスイッチとしての
役割なので、入力信号がスルーで出力にだされます。そのため、PCMとDSDの切り替えはDAC側で
行うのですが、PCMあるいはDSD入力なのかは外部から指定してあげる必要があります。
今回のDAC4497-2.1ではPCMあるいはDSD入力信号においてそれぞれLRCKとBCK、DATA-R、BCKの
周波数を計測する機能をつけたのでDSDとPCMの入力の自動切換えをチャレンジしたいと思っています。
どうやって判別するの?
これは簡単(なはず)です。というのもPCM信号の場合はBCKに対してLRCKは標準で1/64、
長くても1/32の周波数になりますが、DSDにおいてはBCKに対してLRCKはほぼ半分程度となる
ことが予想されるからです。というわけで確認してみましょう。
DSD64の場合で調べてみました。
PCMの場合はBCK/LRCK=64ですが、DSDの場合BCK/DATA-Rはおよそ1/3程度であることがわかりました。
したがって、両者の周波数の比を比較してたとえば1/10以下であればPCM、それ以外ならDSDと判別してもよいでしょう。
さて、うまくいくかな?
DSD | PCM | ||
MCK | - | MCK | -(DSDと同じ) |
BCK | 2.822MHz |
BCK | 2.822MHz |
DATA-R | 1.05MHz(DATA=0時) 約900kHz(DATA=1kH正弦波) |
LRCK | 44.1kHz |
DATA-L | − | DATA | − |
ソフトはほぼ完成? 2017.9.14
すこし出張が続きましたが、帰省先などで空いた時間でソフトを組み上げました。といっても帰省先だと
ソフトは組めても動作確認まではできないので、最終的なバグとりはこれからです。
DSD/PCM自動切換えは大丈夫?
SRC4137と接続して、DSDとPCMを切り替えたときに自動的に追従するかのテストです。
送り出しをDSDにした場合は受け側もDSD判定していますね。
送り出しをPCMにした場合は受け側もPCM判定していますね。
周波数の判定も大丈夫そうです。といっても、まだ一つの周波数なので、他の周波数も確認が必要です。
帰省先でソフト開発 2017.9.19
帰省先でもソフト開発できるようにSRC4137とDAC2704を持ち込んで環境を整えました。
DAC2704はSPDIF出力が欲しかったので、ADUM1100をとりつけず、パルストランスを適当に取り付けました。
DAC2704は基板と主要パーツだけ帰省先に持ち込んで、組み立てたのですが、抵抗はなんとか揃うと
たかをくくっていましたが、水晶発振に必要な22pのセラミックコンデンサがないことに気づきました。
しかたないので、すでに完成しているFFASRC基板があったので、そこから拝借しました。
DAC2704にパルストランスを取り付けてSPDIF(同軸)出力となるように改造です。
開発環境がほぼ整いました。机の上をすこし片付けて、必要な基板類を接続して準備です。
ソースはDAC2704をつかってPCから信号を送り込みます。DAC2704の出力をSRC4137で受けて、
192kHzまでのSPDIF出力とPCM、DSD信号をDAC4497-2.1に送り込みます。
帰省先での開発環境が整いました。オシロもあるので、すべての動作確認ができます。
あれ?
ソフトの開発はほぼ完了しましたが、ちょうどそのころLCDのが不調に。
まったく反応しなくなりました。最初はPICが動いていないのかと思いましたが、
スイッチの操作は受けつける(DACから出力がでる)ようなので、LCDの問題のようです。
さすがに帰省先にはLCDの予備はないので、仕方なしにSRC4137のLCDを拝借して、
デバッグを継続することになってしまいました。
帰ったらLCDを取り替えて本当にLCDが壊れているか確認しなくっちゃ。
しかし、こんな部品が壊れることは想定外ですが、なんでだろう?心あたりがあるとすれば
秋月の福袋に入っていたものだということなんだけど・・・。まあ、形あるものは壊れる運命・・・ということでしょうか。
不調になったLCD。
新しいものに取り替えたら問題なく動きだしました。
ソフトの構成は
フルファンクションモードでのメニューはほぼ下記のようになりそうです。
FRONT PAGE |
起動時の画面 入力信号、入力周波数、クロック状態などを表示します。 詳細については下記。 変更パラメータ:入力切替 ・SPDIF0、SPDIF1,SPDIF2,SPDIF3 ・CN1(n),CN2(n) nはCN1,2の入力モードを示します。 n=P:PCM入力、n=D:DSD n=A:PCM/DSD自動判定 CN1:CH2:のあとは入力状態(入力有りの場合は入力種類(PCM/DSD)と周波数)を表示。 シンプルな表示にも変更可 |
|
M01 | キー操作での電子ボリュームの設定を行います。 この値を有効にするには#6でのEVOL selectで設定します。 変更パラメータ:減衰値 ・(キー操作で0.5dB毎に調整) |
|
M02 | ディジタルフィルターの設定を行います。 変更パラメータ:フィルター特性 #0 Sharp Roll-Off Filter #1 Slow Roll-Off Filter #2 Short Delat Sharp Roll-Off Filter #3 Short Delat Slow Roll-Off Filter #4 Super Slow Roll-Off filter #5 Super Slow Roll-Off filter #6 Low Disperison Short delay filter #7 Reserved |
|
M03 | DSDフィルターのバンド幅を設定します。 変更パラメータ:フィルター特性 Low High |
|
M04 | 音質を変更します。 変更パラメータ:有効/無効 #1 Analog Internal, maximum #2 Analog Internal,minimum #3 Analog Internal, medium #4 Analog Internal, minimum. #5 Analog Internal, maximum. High Sound Quality #6 Analog Internal, minimum. High Sound Quality #7 Analog Internal, medium. High Sound Quality #8 Analog Internal, minimum. High Sound Quality |
|
M05 | OUTPUTのHeavy Loadを設定します。 変更パラメータ:Disable,Enable |
|
M06 | 電子ボリュームの操作切り替えを行います。 変更パラメータ: ・外部接続のVR(可変抵抗)を使用 ・キーSWを使用(#1での設定値) |
|
M07 | 出力レベルを設定します。 変更パラメータ: #0 PCM=2.8 DSD(N)=2.8 DSD(V)=2.5 #1 PCM2=2.8 DSD(N)=2.5 DSD(V)=2.5 #2 PCM=2.5 DSD(N)=2.5 DSD(V)=2.5 #3 PCM=2.5 DSD(N)=2.5 DSD(V)=2.5 #4 PCM=3.75 DSD(N)=3.75 DSD(V)=2.5 #5 PCM=3.75 DSD(N)=2.5 DSD(V)=2.5 #6 PCM=2.5 DSD(N)=2.5 DSD(V)=2.5 #7 PCM=2.5 DSD(N)=2.5 DSD(V)=2.5 DSD(N)=Normal mode DSD(V)=DSD Volume Bypath mode |
|
M08 | CN1のPCM入力時のフォーマットを設定します。 #0 Right-Justifgied 16Bit #1 Right-Justifgied 20Bit #2 Left-Justifgied 24Bit #3 I2S 24Bit #4 Right-Justifgied 24Bit #5 Right-Justifgied 32Bit #6 Left-Justifgied 32Bit #7 I2S 24Bit |
|
M09 | CN2のPCM入力時のフォーマットを設定します。 #0 Right-Justifgied 16Bit #1 Right-Justifgied 20Bit #2 Left-Justifgied 24Bit #3 I2S 24Bit #4 Right-Justifgied 24Bit #5 Right-Justifgied 32Bit #6 Left-Justifgied 32Bit #7 I2S 24Bit |
|
M10 | CN1の入力を指定します。 設定パラメータ #0 PCM INPUT(PCMに設定) #1 DSD INPUT(DSDに設定) #2 PCM/DSD Auto detect(自動検知) #3 Not USE(使用せず) |
|
M11 | CN2の入力を指定します。 設定パラメータ #0 PCM INPUT(PCMに設定) #1 DSD INPUT(DSDに設定) #2 PCM/DSD Auto detect(自動検知) #3 Not USE(使用せず) |
|
M12 | フロントページへの自動復帰時間を設定します。 変更パラメータ:復帰時間 OFF,FAST,MID、SLOW ※フロントページ以外のページ表示中にキー操作を一定時間しない場合は、 自動的にフロントページに表示を変更します。 |
|
M13 | システムリセット(初期化)を行います。 この画面表示のときにPARA+スイッチを押すとシステムを初期化します。 ※以前はキーを押しながら電源を入れる方法としていましたが、DAC4497-2.1では電源を落とさずにシステム初期化をできるように変更しています。 |
|
M14 | LCDタイプの設定。 変更パラメータ:LCDタイプの設定 SC1602(16列×2行モード)のLCDを使用 SC2004(20列×4行モード)のLCDを使用 |
|
M15 | Front Page の表示設定 設定パラメータ @ CN1,CN2の入力状態を表示 A Simple Display Aはよりシンプルな表示になります。 |
|
M16 | フトウエアのバージョン表示 ※予告なくバージョンは変更される場合があります。 |
マニュアルも完成しました。 2017.9.21
誤植はまだまだ残っていそうですが、ここにアップです。
DAC4497-21Manual.pdf
音だしです。
接続は
SRC4137→DAC4497-2.1→A13アンプ→Precision HPA
です。
いつものお気に入りの今井美樹さんのアルバムから聴いてみました。
ノイズもなくクリアな感じで、音の厚みもあります。
PCMからDSD再生に変更した場合でもスムースに自動で切り替わりました。
でも、心地よい音楽を夜更けに聴いていると眠たくなってしまいます(笑)。
時間があるときにゆっくり鳴らしたいものです。
こんな感じで音だしです。
消費電流を測定してみました。
消費電流が大きそうな設定ということで、PCMの352.8kHz再生です。このときのマスタークロックは45MHzです。
(1)PCM 352.8kHz/MC=45MHz
消費電流は0.39Aです。
消費電流0.39Aですね。まあ、こんなもんでしょう。DAC9038Dに比べたらかわいい消費電流です。
次はDSDです。
(2)DSD 11.29MHz/MC=22MHz
消費電流は0.229Aです。
こちらではすこし電流が少なく0.229Aです。これは単純にマスタークロックが半分になっているという理由ですね。
ということで、マスタークロックが50MHzの場合で45MHzの10%増しで約0.43Aでしょうか。
電源容量としては最低でも500mAは準備すればいいでしょう。
さて、そろそろリリースです。
【重要】基板にミスがありました。 2017.11.12
連休中にご指摘をいただきました。
連休明けにすぐ現物を確認できるかと思っていましたが、直後にドタバタがありようやく復帰できたのは週後半になってからでした。
結論からいえばTVDDとDVDDが入れ替わっていることが判明しました。
いまさらながら修正を試みたいと思います。
まずは最初に従来どおりで動作環境を構築
まずは、現状のミスがあるままで動作を確認しておきます。このときDVDDの電圧を測定したら1.8Vであるはずが2.69Vになっていました。
これでDVDDとTVDDが入れ替わっていることを確認しました。
まずはミスのある状態で動作する環境を確認しておきました。
修正部分はカットが3箇所、ジャンパーが3箇所です。
まずは基板パターンのカット
パターンカットは3箇所あります。まず裏面側では下図の黄色の部分になります。
裏面側ではパターンのカットが2箇所。
拡大部分は下記の通りです。
カッターを入れたあとが見えますがこの部分をカットします(裏面側は2箇所)
部品面(表面)についてはIC10の下のCa下側をカットします。
黄色→の右側の黄線部分をカット
ジャンパーは3箇所
下図は修正した最終の状態です。
修正後の状態です。
ジャンパーその1
IC5(AK4497)の上側にあるCaの+側とその右側にあるMCKシルクの左側にあるパターンとを接続します。
ジャンパーその1での接続です。
ジャンパーその2
IC10下側のCaの+側からジャンパー線を飛ばします。
ジャンパーその2での接続です。
IC10下側のCaの+側からジャンパー線を飛ばします。
ジャンパーその3での接続です。
DVDDの電圧が正規の電圧になりました。
修正後に電圧を測定しましが、正規の電圧1.8Vになっていることを確認できました。
正常な電圧になりました。
動作したことで安心していましたが、チェック不足がありました。大きな反省材料です・・・。
さっそく 2017.11.11
こんな修正方法もご提案いただきました。ラインの引き回しが少ない方法です。
修正方法について 基板の裏側は指定の箇所を、2か所パターンをカットしましたが、表側の1・8VReg2次側 出力付近のパターンをカットしようにも、サイスの大きいPML−CAPを付けてしまっており、 コテ2本使えばキャパシターを剥すのは簡単ですが、熱で電極が熱で剥離して容量が減少したり、 変形して使えなくなる懸念があったので、1・8V出力付近はパターンをカットするのはやめて、 AK4497チップの近くで、1.8Vのパターンの両端をカットし、パターンをコーティングして いる層をペーパーで剥離し、ジャンパー線を各々DVDDとTVDDに最短距離で、なるべく 目立たないように配置しハンダ付けしました。 難易度が多少上がってしまいますが、折角の基板に、長いジャンパー線を引っ張り回すのは 避けたかったことと、TVDD側のパターンの左右チャネルの距離、配置された平滑コンの位置 関係も標準的な配置に収まったようい思います。 |
(つづく)