AK4137ゲットしました(PART2)
(以前のページはこちら)。
DAC179X-2.1を接続してDSDを動かしてみましょう。 2015.11.5
DAC179X-2.1を引っ張りだして、DSD動作を確認してみました。
DAC179X-2.1と接続です。DSD入力にしています。
問題なく動きました。波形も綺麗です。
かなりの高いクロックでも動くようです。
通常のDSDのBCK周波数は2.82MHz(64DSD)ですが、今回は24.576MHzクロックから
生成してAK4137の設定をMODE2(CM3-0=LLHL)で動かすとBCKは6.14MHzになります。
でも、これでも問題なく動くようです。
BCK=6.14MHzでも動いています。
さてどんな構成で基板をつくろうかな?
動作の確認もできたので、基板を描いてみようと思いますが、
どんな構成にするのがいいかな〜と悩みます。
1.シンプルな変換基板
小型に作ってPCMとDSDのシンプルな変換基板にすると、いろいろとDSD用のDACとしての
プリプロセッサとしてして使えそうです。
2.いっそのことDAIセンターに。
いまとなってはディジタルオーディオ機器はCDやPCやRasPiなど色々あるので、それらの
切り替え機能も備えたDAIセンター構想も面白そうです。
たとえば入力は
(1)PCM入力・・・3つ程度
(2)DSD入力・・・2つ程度
(3)SPDIF入力・・4つ程度
出力は
(1)PCM・・・1ポート
(2)DSD・・・1ポート
機能は
入出力の切り替え、周波数の切り替え等をスイッチとLCDパネルをつかって制御です。
さてさてどうしましょうね。
DAIセンタを考えると結構大きな基板が必要です。
DAC9018Dなどと同じサイズが必要です。部品の面積だけならもっと小さくなりますが、
基板の端にコネクターを実装するとなると最低限このサイズかもです。
またICが沢山ありますが、出力周波数の切り替えだけなく、入力周波数の計測などを含めると
このくらいの数が必要になりそうです。
必要になりそうな部品を配置して密度感を確認です。
どんどん描いていきましょう!
入出力のバッファー周辺のパターンを描いています。
こんなご意見も
そうですね〜。ただDIX9211であればかなり部品点数がへりそうです。
ただDIX9211はまだつかった実績がないので、使いなれたCS8416を使ったという背景もあります。
と、パターンを描いているうちにDIX9211を使った基板は途中で放置していることに気づきました(笑)。
これ、放置プレイになっていました・・・ほかにも放置しているもたくさん・・・
さてさて 2015.12.1
DAI9211のソフト開発もほぼ終了なので、再度AK4137の基板設計を再開です。
CS8416やPCMの切り替えに必要なロジックをDIX9211に変更することで部品点数がだいぶ減りそうです。
搭載部品を変更してみました。
I2Cのアドレス整理
No | PARTS | ADRS |
IC1 | DIX9211 DIR | 0x10000000 80h |
IC2 | AK4137 SRC | 0x00100000 20H |
IC3 | PCA9539 (UP) | 0x11101110 EEH |
IC4 | PCA9539 (DOWN) | 0x11101000 E8H |
パターン完成 コードネーム SRC4137
こんな感じで完成です。あとはベタを塗ります。
d4317c-top.pdf 部品面パターン
d4317c-bot.pdf 半田面パターン
基板ができました。 2015.12.19
基板できました。
年末はここまで
基板がきたので一気にくみ上げようかと思っていましたが、年末のドタバタと水晶発信器の部品不足もあり、
とりあえず表面実装ICのみ半田づけです。
年末はここまで組み立てました。
さて再開だ〜。 2015.1.6
あけましておめでとうございます。2016年も始動です。
さて残りの部品を一気にとりつけましょう。
色々と修正点発見です。
1.シルク間違い
裏面のRaとあるシルク部のチップ抵抗はプルアップ用(47kΩ)なので、Rbにしなくちゃだめだったけど、
うっかりRaとしてしまいました。部品面のRaは51Ωで、半田面のRaは47kΩの実装です。
裏面nシルクを間違えてしまいました。Raじゃなくて、本来はRbです。
2.配線忘れ?
あれ、一本配線を忘れていたようです。半田面で一本抜けていました。
というわけでジャンパー線をランド間で接続して修正です。
修正前 修正後(間違い探しです)
とりあえず全部の部品が取り付きました。
まずはお出かけ用の写真をパチリ。
完成写真です(LCD無しの状態)
完成写真です(LCD取り付けた状態)
さて、ひとつひとつ動作確認をしていきましょう!
その前にPICおよびIOエクスパンダのIO定義を書き出しましょう。
(今日はここまでかな・・・)
作業再開です。 2016.1.16
ソフト作成のためのIO定義をまとめておきましょう。
No | PARTS | ADRS |
IC1 | DIX9211 DIR | 0x10000000 80h |
IC2 | AK4137 SRC | 0x00100000 20H |
IC3 | PCA9539 (UP SIDE) | 0x11101110 EEH |
IC4 | PCA9539 (DOWN SIDE) | 0x11101100 ECH |
PICの定義
PIN | NAME | CONTENT | ||
2 | A0 | LCD_E | LCD DISPLAY SC1602 | |
3 | A1 | LCD_DB4 | LCD DISPLAY SC1602 | |
4 | A2 | LCD_DB5 | LCD DISPLAY SC1602 | |
5 | A3 | LCD_DB6 | LCD DISPLAY SC1602 | |
6 | A4 | LCD_DB7 | LCD DISPLAY SC1602 | |
7 | A5 | PDN | AK4137 | |
9 | A7 | OSC1 | XTAL 10MHz | EXT |
10 | A6 | OSC2 | XTAL 10MHz | EXT |
11 | C0 | CLK | CLOCK COUNTER | INPUT |
12 | C1 | SDA | I2C CONTROL | |
13 | C2 | SCL | I2C CONTROL | |
14 | C3 | RST | DIX9211 | |
15 | C4 | TERM- | SETTING SW | |
16 | C5 | TERM+ | SETTING SW | |
17 | C6 | DEC | SETTING SW | |
18 | C7 | INC | SETTING SW | |
21 | B0 | CLKDIV1 | MASTER CLOCK DIVIDE 1 | ACTIVE LOW |
22 | B1 | CLKDIV16 | MASTER CLOCK DIVIDE 16 | ACTIVE LOW |
23 | B2 | CLKDIV8 | MASTER CLOCK DIVIDE 8 | ACTIVE LOW |
24 | B3 | CLKDIV2 | MASTER CLOCK DIVIDE 2 | ACTIVE LOW |
25 | B4 | CLKDIV4 | MASTER CLOCK DIVIDE 4 | ACTIVE LOW |
26 | B5 | XT4 | XT4 ACTIVE(49.152MHz) | ACTIVE HIGH |
27 | B6 | XT3 | XT3 ACTIVE(45.1584MHz) | ACTIVE HIGH |
28 | B7 | LCD_RS | LCD DISPLAY SC1602 |
IO EXTENDER (UP SIDE IC3)
IO1 | IO0 | |||||||
IO1-7 | NC | IO0-7 | ODIF1 | OUTPUT | AK4137 | |||
IO1-6 | NC | IO0-6 | ODIF0 | OUTPUT | AK4137 | |||
IO1-5 | NC | IO0-5 | OBIT0 | OUTPUT | AK4137 | |||
IO1-4 | NC | IO0-4 | OBIT1 | OUTPUT | AK4137 | |||
IO1-3 | SRCEN | INPUT | AK4137 | IO0-3 | CM0 | OUTPUT | AK4137 | |
IO1-2 | CDTO | INPUT(NOT USE) | AK4137 | IO0-2 | CM1 | OUTPUT | AK4137 | |
IO1-1 | DSD1 | OUTPUT ACTIVE LOW | LVC245 | IO0-1 | CM2 | OUTPUT | AK4137 | |
IO1-0 | DSD0 | OUTPUT ACIVE LOW | LVC245 | IO0-0 | CM3 | OUTPUT | AK4137 |
IO EXTENDER (DOWN SIDE IC4)
IO1 | IO0 | |||||||
IO1-7 | P28 | OUTPUT | STATUS 3 | IO0-7 | P17 | INPUT | DSD0 SELECT | |
IO1-6 | P27 | OUTPUT | STATUS 2 | IO0-6 | P16 | INPUT | PCM2 SELECT | |
IO1-5 | P26 | OUTPUT | STATUS 1 | IO0-5 | P15 | INPUT | PCM1 SELECT | |
IO1-4 | P25 | OUTPUT | STATUS 0 | IO0-4 | P14 | INPUT | PCM0 SELECT | |
IO1-3 | P22 | INPUT | DSD OUT ACTIVE LOW | IO0-3 | P13 | INPUT | RX3 SPDIF3 SELECT | |
IO1-2 | P21 | INPUT | PCM OUT ACTIVE LOW | IO0-2 | P12 | INPUT | RX2 SPDIF2 SELECT | |
IO1-1 | P19 | INPUT | Reserved | IO0-1 | P11 | INPUT | RX1 SPDIF1 (CO-AXIS) SELECT | |
IO1-0 | P18 | INPUT | DSD1 SELECT | IO0-0 | P10 | INPUT | RX0 SPDIF0 (CO-AXIS) SELECT |
IO エクステンダーのレジスタセッテイング
ありゃ?
作業すすめていくと色々とバグがみつかります。
IC4のI2Cアドレス設定がなぜかIC3と同じになっていました。というわけで一部修正。
修正前 修正後
シルクもずれずれだな〜。RX3はP30〜P32、RX2はP33〜P35、RX1はP36〜37、RX0はP38〜P39
なのですが、見事にずれています。
シルクもずれずれだな〜。
まだまだみつかるかな〜。電源入れるの怖くなってきました(笑)。
まずは簡単のテストプログラムを組んで!
まずはLCDと、DIX9211、IOエクスパンダである2つのPC9539の初期化と、
DIX9211はSPDIF(同軸)入力を受けてI2Cで出力するだけのプログラムを組んで少しづつ動作確認を行います。
全然動かない(笑)
まずはPICにプログラムを書き込んで電源ON!
LCDくらいはまず動くだろうと思っていましたが、なんと何も動きません。
まず電源を調べてみると3.3Vラインがゼロのままです。基板のどこかでショートしているようです。
部品の取り付けによるショートか、それともパターン自体によるショートを確認するために、
予備基板で試したみたところ、見事にショートしていました。
ということで、どこでショートしているかの捜索作業です。
予備基板を眺めているだけでは、時間がかかるので、パターンをいたるところで切断して、ショートしているエリアを探していきます。
するとAK4137周辺でショートしていることを発見。あとはCAD図面を見ながら、探すと、
またまた不要は配線がありました。
ということで、部品面の電源ラインと半田面のGNDを接続しているスルーホールをドリルの刃で削って、導通を遮断します。
導通部分を発見!ドリルの刃で削ってスルーホール部分を削除です。
気をとりなおして再度電源ON!
こんどはI2Cエラーがでています。表示の様子から場所はすぐに、特定できました。
なんど修正したIOエクスパンダー(IC4)でした。じつは修正そのものが間違っていて、
修正する必要がなく、単にI2Cアドレスの間違いだけでした。
ということで、修正したところ再度修正して、もとに戻します。
あとはソフトのアドレス定義を修正です。IOエクスパンダ(IC4)のアドレスをEEからECに変更で完了。
まだI2Cエラーが発生しています。
修正したところを再度修正(元にもどっただけです)。
まずは部分的に動作確認!
再度電源を投入して、予定の動作をしていることを確認しました。
そしてSPDIFに信号をいれてDIX9211が無事動作していることも確認しました。
PCMラインに所定の信号がでていることを確認しました。
まずは部分的なテストプログラムは動作しました。
LR信号(48kHz)
まずはDIX部分は動いているようです。
つぎは一気にAK4137の動作確認です。
PCM入力(I2Sフォーマット)でDSD出力をする場合の設定についてすこし整理してみましょう。
以前にどうやったのか完全に忘れてしまったので、思い出しながらの作業です。
まずはレジスターの設定
R adrs | デフォルト | 設定値 | ||
00H | Reset&Mute | 01H | 01H | とくにこれはPCMでも変更することはないでしょう。 |
01H | PCMCONT0 | 12H | 13H | 入力をI2Sに変更。 |
02H | PCMCON1 | 00H | 00H | いづれも触る必要はないでしょう。 |
03H | DSDICONT | 10H | 10H | PCM入力なので変更なし。 |
04H | DSDOCONT | 50H | 51H | DSDの出力イネーブル |
05H | DSDGAIN | 02H | 02H | これも変更なし。 |
06H | DSDOSTATUS | RD | RD | RD ONLY |
外部入力の設定
ODIF1 | − | PCMでないのでとりあえず無視 |
ODIF0 | − | |
OBIT0 | − | PCMでないのでとりあえず無視 |
OBIT1 | − | |
CM0 | L | MASTER MCLK 256FSO |
CM1 | L | |
CM2 | L | |
CM3 | L |
プログラムを書いて動かしましょう!
DSD出力ポートから所定の周波数がでていることを確認しました。
まずは2.822MHzに設定です。いわゆる64fsモードです。
BCLK信号です(f=2.822MHz) データはみただけではわかりません(笑)。
DSD信号を確認するためにDACに接続します。まずはDAC179X-2.1に接続です。
問題なく出力を確認しました。
テストの様子です。DAC179X-2.1に接続してます。
無事出力がでました。
さて、基本的な動作は確認できたので、ソフトを組んでいきましょう!
ようやく着手 2016.1.30
ここ数ヶ月は平日は仕事で、週末は帰省や移動日の関係でなかなか趣味にかかることもできませんでしたが、
ようやく時間がとれそうなのでソフト作成に着手です。
でも、しばらく離れるとすっかり忘れちゃいますね。やっぱり、やるときは集中的にやらないとだめですね。
まずフロントパネルは
入力と出力の情報と、外部設定の状態を示しています。
MC24.58はマスタークロックが24.58MHzであることを示しています。
64は64FSモードであることを示しています。
フロントパネル案です。
一気にソフトを組みました。
現時点ではこんな感じの構成です。
Menu # | 表示 | 内容 |
Front Page |
入出力状態を表示。 (1)入力表示 RX0,RX1,RX2,RX3, PCM0,PCM1,PCM2 DSD0,DSD1 (2)入力周波数表示 (3)出力表示 PCM,DSD (4)動作モード(3#で設定) (5)マスタークロック表示 (2#で設定) |
|
1 | AK4137へ供給するマスタークロック周波数を設定します。 | |
2 | AK4137へ供給するマスタークロック周波数を設定します。 MC0:49.15 (MHz) MC1:45.16 MC2:24.58 MC3:22.58 MC4:12.29 MC5:11.29 (default) MC6:6.144 MC7:5.645 MC8:3.072 MC9:2.822 |
|
3 | AK4137の動作モード(OMCLK input)を設定します。 fs=64 fs=128 fs=256(default) fs=384 fs=512 fs=768 PCMの出力周波数は2#のマスタークロック周波数と、3#の動作モードの組み合わせで決まります。 |
|
4 | PCM出力のフォーマットを設定します。 LSB-Justified I2S Philips FMT (default) MSB-Justified |
|
5 | PCM出力ビット数を設定します。 32Bits(default) 24Bits 20Bits 16Bits |
|
6 | AK4137のFIR1のディジタルフィルタの特性(1)を設定します。 Sharp roll-off Slow roll-off |
|
7 | AK4137のFIR1のディジタルフィルタの特性(1)を設定します。 Normal Delay Short Delay |
|
8 | PCM出力のサンプリング周波数を設定します。カットオフ周波数で表しています。 Cutoff 20kHz Cutoff 40kHz Cutoff 80kHz Cutoff 100kHz |
|
9 | AK4137 DSD INPUT FS SELECT 64fs 128fs(default) 256fs |
|
10 | AK4137 DSD OUTPUT FS SELECT 64fs 128fs(default) 256fs |
|
11 | DSD Clipping process No Clipping Clipping -6dB(default) Clipping -9dB |
|
12 | DSD OUT block in data Gain -6dB -6dB ON(default) -6dB OFF |
|
13 | DSD IN Gain 6dB 6dB ON 6dB OFF(default) |
|
14 | PCM0入力のフォーマットを設定します。 32Bit LSB-Just 24Bit LSB-Just 32Bit MSB-Just I2S Philips FMT (default) |
|
15 | PCM1入力のフォーマットを設定します。 32Bit LSB-Just 24Bit LSB-Just 32Bit MSB-Just I2S Philips FMT (default) |
|
16 | PCM2入力のフォーマットを設定します。 32Bit LSB-Just 24Bit LSB-Just 32Bit MSB-Just I2S Philips FMT (default) |
特性をみてみよう!
1.まずはPCM出力
このSRC4137の特徴はマスタークロック(MC)周波数とFSの組み合わせで多彩な周波数出力に対応しています。
データシートでも768kHzまでが動作しますが、本基板でもマスタークロックを49.152MHzに、FSを64に設定すれば768kHzに
対応可能です。
下表に、マスタークロックとFSの設定による周波数の一覧を整理してみました。
動作はR-2Rで確認
1。PCM→PCM
768kHzで動作確認しようとすればR-2Rが唯一の候補としてあがってきますので、これで特性をみてみましょう!
こんな感じでR-2Rと接続しています。
入力に44.1kHzサンプリングで20kHzのサイン波をいれて出力を確認してみましょう。
流石にfsが高くなると、20kHzの高い周波数でもうまく波形が補完されています。
マスタークロック 2# |
fs値 3# |
出力fs (kHz) |
出力波形(R-2R) |
49.152MHz | 768 | 64 | |
512 | 96 | ||
384 | 128 | ||
256 | 192 | ||
128 | 384 | ||
64 | 764 |
2.PCM→DSD
DSD出力時時の周波数は下表のようになります。一応、黄色がカタログスペックでの動作範囲ですが、
それ以外でも動きそうです。といっても24MHz以上の出力になった場合に、受付可能なDACがあるかどうかが疑問ですが。
さて、この表から出力5.6448MHzで出そうとした場合の組み合わせで、どのような出力になるか見ていきましょう。
入力はPCMで1kHzのサイン波を入力しています。
DSD入力のDACにはDAC179X-2.1を使用しています。
設定の違いで、波形の違いがでるかとおもいましたが、ほとんど違いはないようです。
MC 2# |
FS SEL 3# |
DSD OUT 10# |
波形 | |
45.1584 | 512 | 64 | ||
22.5792 | 256 | 64 | ||
11.2896 | 512 | 256 | ||
11.2896 | 256 | 128 | ||
11.2896 | 128 | 64 | ||
5.644 | 256 | 256 | ||
5.644 | 128 | 128 |
すこし機能を追加しました。 2016.2.3
ここまで追加するとプログラム占有率は96%になりました。
あれ?19#の綴りが間違っていますね。修正しなくっちゃ!
Menu # | 表示 | 内容 |
17 | De-emphasisを設定します。 OFF(default) 48.0kHz 32.0kHz 44.1kHz |
|
18 | AUTO INPUT SOURCE CHANGE MODE MODE OFF(def) MODE ON |
|
19 | SOFT MUTE FUNCION クロックの切り替えや入力の切り替え時のポップノイズを極力防ぐために、MUTEをかけます。ONで機能します。 FUNCIOTN ON FUNCIONT OFF |
ついでに、基板バグのデータを修正して再製作にかかりました。
来週あたりにはリリースできるかな?
マニュアルも完成(かな?)
一応できました。こんなかんじです。→ SRC4137Manual.pdf
マニュアルに記載はありますが、ざっと機能をおさらいです。
回路構成です。
・入力部(DIX9211およびロジック)
4系統のSPDIF入力ならびに2系統のPCM入力はDIX9211により信号処理されAK4137(SRC)に送信されます。
2系統のDSD入力についてはロジック回路にて選択され、AK4137に送信されます。なおDSD信号のBCK信号
はPICマイコンに接続され、周波数の判定をおこなっています。
・SRC部(AK4137)
SRCは入力信号を受けて、サンプリングレートならびにフォーマット(PCM/DSD)を変換して出力します。
出力信号はドライバを介して外部に出力されます。このとき、出力端子はPCMとDSDに分離して出力しています。
・クロックジェネレータ
SRC(AK4137)の動作に必要なクロックを供給します。クロックは44.1kHz系としての45.1584MHzと48kHz系の
49.152MHzの2系統をもち、それぞれを1/1〜1/16分周したクロック出力をSRCに供給することができます。
すなわちSRCは49.152〜2.8824MHzのマスタークロックで動作することが可能で、これが多彩なサンプリング
レートへの変換を可能にしています。
・制御部
PICマイコンで全体の機能を制御しています。DIX9211ならびにAK4137へのパラメータは基板上のパラメータ
設定用スイッチ(SW1〜4)を用いて設定します。なお設定内容の確認にはLCDが必要になります。設定内容に
ついてはPIC内のEEPROMに記録していますので、電源の再投入時の再設定は不要です。
リリースは?
V2基板が出来上がるのが2月13日の予定なので、動作確認後でリリースは2月14日(月)を予定しています。
需要あるかどうかわかりませんが、部品の手持ちも少ないので、準備期間を考えて受付け開始させていただこうかと
思います。
基板が予定通り出荷されるといいのだけど・・・・。
リリース基板到着 2016.2.15
パターンとシルクを修正したV2基板ができました。
V2基板ができました。
念のため、部品を実装して動作確認です。今回の実装では電解コンデンサはすべて大容量のセラミックコンデンサ(10uF/25V)に
してみました。これで、寿命はぐんと延びるはずです。
動作確認のため、部品を実装しました。
電源を投入しましたが、問題なく動きました。パターン修正は問題ないようです。
修正基板は問題なく動作しました。
ようやくリリースしましょう。
リリース用のPICです。さかさまについています。
(PART3へつづく)