(その3はこちら)
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その4) 2025.1.23
2WAY版も追加!
4WAY版はほぼ煮詰まってきたので、つぎは2WAY版です。
基本的には画面回りは4WAY版をそのまま使って、不要なところは操作できない、
あるいはスキップするようにする予定です。
考えている構成は下記の2つです。どちらもPrecision DELAYはオプションで取り付け
られるようにしておきます。
2WAY版はこの2つの構成を考えています。
下側のDELAYを組み込んだ場合では、最大遅延距離は192kHz再生時で0.43mになります。おそらくロングホーンなんかでは
これでは足りない場合がでてくるかもしれませんが、その場合は別の遅延基板のD26902を間に挿入すればいいでしょう。
あるいは再生周波数を96kHzに落とせば0.86mまで対応可能です。48kHzだと1.72mですね。
ちょっと、話は逸れて
現在の構成では、基本的には入力はPCM(I2S)です。たとえばcombo384などのDDC(DAI)基板などとの組み合わせになります。
SPDIFでの入力を考えると、それのための復調基板(Renew DAI921など)が必要になりますが、いっそのこと今回考えているコントローラに
フロントエンド基板の制御もできるようにしておけば、スイッチ類も増えなくて済みますから、便利に使えそうです。
そこで候補となるフロントエンド基板はRenew SRC4137です。これをつかえば、SPDIFを含む多彩な入力に対応可能なのと、
各種の周波数の入力があっても、出力は192kHzとか96kHzに固定しておくことができます。
それになんといっても、RenewSRC4137はI2C端子があるので、これをつかえば外部からのフルコントロールが可能になります。
Renew SRC4137は外部からI2C通信で制御可能な端子があります。
Renew SRC4137にはPICが搭載されていますが、ほぼなにもしないので取り外しておけばいいでしょう。
一部の端子はプルダウンあるいはプルアップが必要なので、PICを使わないのならすこし手を加える必要があります。
それが面倒なら、最初のリセット処理だけしてしまえば、あとで寝てしまうようなPICを挿すということでも良さそうです。
一応確認しておかないといけないのがI2Cアドレスの重複の有無です。
Renew SRC4137で使用しているI2Cアドレスは下記の通りです。
PCM9211-- 0x80
PCA9539-- 0xee
AK4137 -- 0x20
それに対して、DSPとしてつかっているPCM5142のアドレスは0x98,x9A,0x9c,0x9eですから重複しません。
ちょっと考えるのが面白くなってきました。
まずは、2WAY版を完成してから考えていきましょう。
2WAY版作成! 2025.1.24
まずはDELAYを含まない-288dB/oct(@192kHz)を作成です。
こちょこちょ、そして完成。
次はDELAYを含まない-72dB/oct(@<192kHz)、-144dB/oct(@<96kHz)、を作成です。
こちょこちょ、そして完成。
割と簡単な修正で完成です。というのも、表示周りをほぼ共通にした点が大きいです。
あと、メインのプログラムソースは1本にしている点もおおきいかな〜。
どのタイプの構成になるかを、プログラムの最初で宣言しておいて、
あとはプログラムの中で#if - #endif で必要に応じて分けています。
#define RD5142_4W_1B (0) // 4way with 1 board of RenewDIV5142 & precision delay #define RD5142_4W_4B (0) // 1-4 way with 1-4 board(s) of RenewDIV5142 & precision delay #define RD5142_4W_4B_DELAY (0) // 1-4 way with 1-4 RD5142 board(s) with delay&precision delay #define RD5142_2W_1B (0) // 2 way with 1 RD5142 board with precision delay #define RD5142_2W_1B_DELAY (1) // 2 way with 1 RD5142 board with dsp delay & precision delay |
でも、こうするくらいなら外部変数で定義してやって、プログラムの初期化時に
構成を選択できるようにしてもいいかな?そうすれば、いちいちPCに接続して
プログラムをダウンロードしなくてもいいからなあ〜。
まあ,それはおいおい考えて行きましょう。
動作確認!
まずはRenewDIV5142のジャンパー変更です。いままでは、CH1〜CH4をすべて
カスケード接続していましたが、2WAYなのでCH1,CH2をカスケード、CH3,CH4をカスケード
のみにします。
2WAY用にジャンパーを切替です。
表示で大きくかわるのは、遮断周波数の設定画面です。
CH1がLPFで、CH2がHPFです。CH3,CH4は設定なしです(変えようとしても変わりません)。
2WAY版でのフィルターの設定画面です。
とくに波形をオシロでみていますが、とくに問題なさそうです。
そろそろ
ほぼ煮詰まってきたので、リリースの準備にかかりましょう。
ソフトウエアは徐々にUPDATEや拡張していきましょう(と思う?)。
基板の製作マニュアル類も準備する必要がありますが、具体的な接続方法についても、
検討記という形でなくて、簡潔にまとめたものが必要になりそうです(でないと、自分でも忘れそうです)。
マニュアル作成完了 2025.1.26
ようやく関連するマニュアルの作成が完了です。
ふう〜。こういった作業が一番疲れますが、これをやっておかないと、
あとあと苦労するのは自分ですからね〜。
DAIも入れちゃえ! 2025.1.28
どうもキーボードばっかり打っていると、正確には文書ばかっかり書いているとちょっと飽きてきます。
やっぱり手をうごかしたくなります。ということで、DAI(Digital Audio Interface)も入れ込みましょう。
最初はRenew SRC4137を使うつもりでしたが、これを使うには結構な部品が必要です。
基本的に必要なのはDAIだけだし、SRCまで不要だなあ〜。まあ、あれば嬉しいかもしれないけど、
ちょっと勿体ない。ということで、Renew DAI9211を使うことにしました。
必要なのはPCM9211のみですから、それだけに特化した部品で実装します。
なお、I2Cで動くDAIとしてはCS8416もあるのですが、こちらはすっかり高くなってしまいました。
なんと2000円ほどします。それに対してPCM9211って700円くらいと1/3です。PCM9211はADCも
ついていて、SPDIFだけでなくPCM(I2S)入力もあり、お得感が高いです。
ということで、まずはRenew DIA9211を組み立てです。
Renew DAI9211は半田レベラーの基板に組んでいきましょう!
Renew DAI9211には基板端子にI2Cの信号がでています。
実装する部品はこれだけです。 SPDIF入力とPCM入力(AUX1,2)を使います。
半田面も部品が少ないです。
接続のための端子基板も組み立てです。
PCM9211の憂鬱
基板が出来あがったので動かしてみましょう。プログラムの中にはPCM9211が
インストールされたかどうかを調べるルーチンをいれておき、まずはデバイスの有無を調べる
ことにしています。こうすることで、PCM9211の有無に応じた処理になるようにプログラムを
組んでいます。
で、さっそくプログラムをコンパイルし、PICOにDLしてGO!
動かない。PCM9211がインストールされていないとメッセージが返ってきます。
あ忘れていた!PCM9211にはリセット端子があるので、それをオープンにしていたままでした.
ということで、47kΩの抵抗をプルアップとして実装して、再度電源ON!
まだ動かない。
おかしいなあ〜。とりあえず半田付けをすべてチェックしますが、問題になるようなところはありません。
次は電圧を測定してみますが、なんとリセット端子の電圧が1.3Vしかありません。電源電圧が3.3Vなので
この電圧だとLOWレベルのままです。
原因はプルアップの抵抗値が大きすぎたことのようです。そのため抵抗を1.2kΩ程度に
入れ替えたら無事動き出しました。
プルアップ抵抗って47kΩくらいでいいものだと思っていましたが、PCM9211のRESET入力の
インピーダンスはかなり低いようです。そういえば、以前にDAC34301(ROHMのBD34301を
つかったDAC)でも同じようなことがあったなあ〜。そのときはI2Cのアドレス選択端子だったと記憶
していますが、プルアップ抵抗を1kΩにしないといけませんでした。
しかし、AK4493のリセット端子のインピーダンスってマニュアルに書いてあったかな?
PCM9211のRESETに47kΩのプルアップを入れましたが、動きません。
抵抗値が大きすぎて、HIGHレベルになりませんでした。
プルアップ抵抗を1.5kΩに交換したら動き出しました。
あとで調べたらRESET端子は他の端子よりかなり電流が流れるようです.これは気付かなかったなあ〜。
16階だあ〜
さて製作したRenew DAI9211の基板を一番下層にとりつけです。
RenewSRC4137が不要になったので、床面積がコンパクトになりました。
しかし、基板間を接続する15mmの金属スペーサをだいぶ使ったので、部品箱の中は
すっからかんです。
そろそろ10芯のフラットケーブルの長さが足りなくなりそうです.
まあ、これが最後の基板だとおもうのだけど〜。
ソフトを修正
現状のトップページにはボリューム調整がありますが、入力切替もやはりトップページに
いれたほうがいいでしょう。オーディオ機器でもっとも頻度の大きい操作はその2つですからね。
それに対して、DACのフォーマット設定や調整方法(VRかエンコーダかの選択)なんかは、一度設定
したらあとはほったらかしになるはずです。こんなものは、後ろにまとめておいて置くことにします。
ということで、すこしソフトの修正です。
現状のフロントページですが、ほとんど使わないものがあるので、どこかに追いやります。
フロントページはすっきりと
最初に表示されるページはスッキリとボリューム表示と入力、そして入力のサンプリング周波数のみと
して、DACに関連するページは別に設けました。おかげでDACの調整については、すこし説明文を
長くすることができました。
フロントページはスッキリしました。
DAC関連の調整ページです。説明がある程度できるようになりました。
PCM1795の憂鬱その3
ソフトの修正はすこし面倒でしたが、まあ想定の範囲内の作業量でした。
で、操作をしていて問題があることがわかりました。
先のページでPCM1795に関する憂鬱その1,その2を書きました。すなわち
PCM1795を使う点で注意点があります。
1.クロックが入力されないとI2C通信ができない。
2.ハードリセットをかけると、レジスターが初期化される。
2については、リセット前の状態を記録してリセット後に戻すということで
対応しました。1についてはクロックは入るまで立ち上がりを待つということで
対処しました。
問題は1で、動作中にクロックがなくなったらどうなるか?ということです。
クロックがなくなるとボリューム調整しようとしてPCM1795にアクセスした瞬間に
プログラムがフリーズです(I2C通信でアクノリッジが返ってこない)。
そのため、たとえばSPDIF入力で聞いていたとして、そのプラグを抜いている間は
ボリューム操作などができません。でも、日常の操作として違うSPDIF入力を試すために、
プラグを抜いたあと、一旦音量を下げておいてから、違うプラグをさすといった
ことは常にあるでしょう。
さてさて、どうする?
手っ取り早いのがPCM1795を使わないという選択肢ですが、PCM1704をはじめとして
旧BB社のPCMシリーズの音って好みではあるので、それは避けたいところです。
そこで、下記のような対策を考えます。
1..SPDIFやPCM入力から音楽信号が途絶えたら、ハードMUTEをかける。
※音楽信号(クロック)がない時点でPCM1795はソフトミュートがかけられない。
2.強制的にPCM9211のADC入力モードに切り替える。そうすれば、クロックは出つづけます。
3.入力に再度、音楽信号が戻ったらADCモードから移行して、ハードMUTEを解除
ということにしてみようかと思います。これなら、通常操作においてフリーズすることはないでしょう。
ただ、例えばボリューム調整中、それもI2C通信中にいきなりSPDIFやPCM入力が切れると、その
瞬間にフリーズですが、まあそういったケースはかなりレアでしょう。そうなったら諦めてリセットです。
しかし、最初からRenewSRC4137をつかっていたら、こういった問題に気付かなかったでしょう。
というのもRenewSRC4137は一度立ち上がると、入力の有無に関係なくクロックを出してくれますからね。
さて、ソフト変更はちょっと面倒になるかもです?
対策はもっとシンプルに 2025.1.29
ソフト修正は明日(1/29)にすることして、修正方法を寝ながら考えていましたが、色々と問題があることに
気付きました。そもそも、取りつけるDACがDAC1795-I2CやDAC4493-I2Cでない場合も多いわけで、
それらには当然のことながらMUTEリレーはない場合が多いでしょう。それよりか、そのMUTEリレー
が制御できるわけでもありません。事の問題が、DAC1795-I2Cを用いた場合の対処だけでもあるので、
対応方法はもっとシンプルに行った方が良いような気がしてきました。そこで、下記の対応を検討です。
DAC1795-I2CのPCM1795にI2Cの信号を送る前に、デバイスが通信可能かどうかをチェックして
可能ならコマンドを送出し、通信不可ならスルーする。
という対策です。チェックの分、通信量は増えてしまいますがDACへの通信量なんて知れています。
考えられる問題点は2つあり、1つはDAC4493-I2Cと同居させていた場合は、設定値がそれらと
ずれる場合がありますが、これらI2Cが動作可となったときに、再設定するようにすれば済みます。
最大の問題は、PCM1795とI2C通信をチェックして可となった直後に、クロックが切れてしまって
I2Cが不可になってフリーズするパタンです。しかし、これはレア中のレアだとおもわれます。
ということで、これは無視することにします。
ということで、この対策の方針のもとでソフト修正です。
まあ、いずれ近いうちにRenewSRC4137や旧版のSRC4137との接続も考えていきましょう。
(つづく)
<関連資料>
具体的使用方法
Renew DIV5142をつかった各種接続方法(工事中)
※CONTROLLER UNIT for RP2040とRenew DIV5142をベースとした
使用方法を詳述しています。
関連記事(検討記)一覧
DIV5142の統合コントローラ(PICO)を検討する!の巻き
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その2)
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その3)
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その4)
外部I2C制御のシンプルなDACを検討してみる!の巻き
デジタルデレイ(NJU26902)を試してみる?の巻き
ちょっとTea Time!? 分解能を上げたタイムアライメントを考える!の巻き