(その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との接続も考えていきましょう。

ようやくリリースです 2025.2.1

最初の検討から半年かかりましたが、ようやくリリースです。
ソフトウエアですこし気になるのは、小構成にしたときです。現状ではRenewDIV5142が4枚
のフル構成でDACもありゃ、Precision DELAYもついた豪華版(?)です。ボードの有無のチェックは
勿論しているのですが、抜けがないかな〜っといったところが気がかり。
 でも、今回はCPUにPICOをつかっているので、ソフトの修正&再配布のハードルが低いのが
救いです。
 ソフトの容量は150kB程度になっているので、PICだと全然無理でした。DIV5142でつかっていた
PIC18F26K20では64kB、その後に使いだしたPIC18F27Q43ですら128kBです。それにPICOが
32Bit CPUと高速ということもあり、プログラムの作成も幾分楽です(スピードをあまり気にする必要
がなかったため)。これから、複雑になりそうな場合はPICOになりそうかな〜という感じです。
 でも、こんなものは直ぐに新しいものがでるでしょうけどね。

まだまだ弄れそう〜 2025.2.2

やりたいことは色々とありますが、色々な課題とつきまといます。

1.ケースに入れたい! でも、一度ケースにいれてしまうと、構成を変更したりするのが
 難しくなり改造に難が生じます。

2.表示器を変更したい! カラーのグラフィックパネルに変えたら見栄えもよくなりそうだし、
 グライコ機能を追加したり色々と遊べそうです。でも、かなりの改造になりそう。できるかな?


その前に、機能追加!
 この基板類を自分のシステムに適用するときに、大事な機能が抜けていました。
メインスピーカだけにつかうのであればいいのですが、その他にも自作の小型スピーカがいくつかあります。
多くが、マルチシステム用なので個々のスピーカに対応できるようにしておく必要があります。
そうしないと、スピーカを切り替えるたびにフィルターやゲインの設定を変えるのは、非現実的です。
そこで、フィルターの設定データを4つほど切り替えられるようにしました。
 なお、なぜ自作スピーカがマルチ対応になっているかというと、単にクロスオーバネットワークを入れるのが
面倒だったからです。それに、ネットワークって結構高いです。そもそも、メインスピーカをマルチシステムにしたかと
いったら、ネットワークを考えたときに、インダクタやコイル、それに抵抗すべてわたって高価なこと!
コイル一つで数千円です。それならアンプをつくった方が安上りだ!というのが理由です。

それはさておき、早速機能を追加です。
切り替えられる内容はHPF,LPF,GAINそしてDELAYとPRECISION DELAYです。
まあ、それでほぼすべてではあります。

SETの項目を追加です。これでフィルタ設定をDATA0〜DATA3で切替可能です。

この機能をいれたことで、ソフトのバージョンはv1.5となりました。
取説のページを修正したらUPしたいと思います。

Ver1.5リリースです 2025.2.5

フィルター設定のデータ切替機能をいれたソフトをリリースです。下記からDLしてください。
Renew DIV5142をつかった各種接続方法 

あわせて起動時にクロック入力まで待つルーチンを若干修正です。
いままでクロックが入力なけれな、いつまでも待ち続けていましたが、
それはで場合によっては抜けられない場合も考えられるので、
最大の待ち時間を4秒になるようにして、またSW2を押すと強制的に
次のステップに移るようにしました。

イコライザ機能も追加検討中 2025.2.12

グラフィックディスプレーをつかったグライコについても検討中ですが、
操作は視覚に訴えることはできませんが、同様にグライコ機能をLCD版でも
追加を検討です。
 あ、グラフィックはないから単なるイコライザ機能ですね。操作は、各周波数帯の
ゲインを調整するたけです。
 イコライザ機能を実現するにはI2C-5ポートに2個のPCM5142を搭載した
Renew DIV5142を接続します。その基板がなければ、イコライザの機能は
スキップするようにしています。


イコライザ画面のトップ。あ、TOTALの綴いを打ち間違っている!
TOTAL GAINは、最初にゲインを落としておきます。これはイコライザで
ゲインを上げるた場合の演算の飽和を防ぐためです。



あとはページ2/5〜5/5は各周波数帯のゲイン調整です。ゲインは0.1dB刻みです。
周波数は有効数字2桁で表示しています。


3ページ目:


4ページ目:1k3とあれば1300Hzを示しています。


最終ページです。

画面回りはできたので、次は正常に機能しているかどうかのチェックです。

思い込み!忘却はバグの元〜 2025.2.13

しかし、以前にFESP5142でのグライコ版を作ったとはいえ、数年前のことでもあるので
だいぶ、というかほとんど忘れてしまっているので、機能に関してはバグだらけです。

まず、設定したゲインと出力のゲインが全然合わない。ちょうど2倍のずれがあります。
これは、dBかリニアゲインに変更する思い込みが原因です。G=20logAという思い込み
があったのですが、グライコにつかうPeaking EQについてはG=40logAであつかう必要
がありました。あ、そうだった!というより完全に忘れさっていましたし、思い込みもあり
間違えました。これがわかるのに少し時間がかかったなあ〜。


こんな注意は完全に忘れていました。

あと、なぜか設定した周波数の倍の値が変化したりと。まあ、これは周波数が変わったことをチェックする
機能を忘れていただけですが。

さすがにLCDだけではデバッグがやりづらいこともあり、グラフィックパネルに入れ替えて、色々な情報を表示
させるようにしました。これで、かなりバグの原因等がわかりやすくなりました。


デバッグはグラフィックパネルで行いました。大きな文字がLCD表示内容で
小さい字が、各種の変数などを表示しています。

ようやく、イコライザ機能については確認ができました。
スイッチだけで、各周波数帯のゲインを調整するのはちょっと面倒ですが、
一度設定してしまえば、それほど頻繁につかうこともないかもしれないので、
よしとしましょう。

大工事開始! 2025.2.14

イコライザルーチンができたので、いよいよグラフィック版にも搭載しようかと思いましたが、
やはり同じようなプログラムがバラバラにあると、あとあとややこしくなります。とくに、改訂とか
加えたら、他も同様に加える必要がでてきます。この際ですから、プログラムを1本に統一した
ほうが良さそうです。
 LCDとグラフィックTFTを使い分けることになるので、最初の初期化のときに、どちらの表示器を
使うかをを選択できるようにしておけばいいでしょう。
 ついでに、プログラムの構造ももっと綺麗にしたいものです。最初のころから、だいぶ増改築を
しているので統一性がありません(公開するにしても恥ずかしい限り)。ただ、気をつけないといけない
のは、あまり弄りすぎて動かなくなってしまい、なにが原因かわからなくなることだったりします(笑。

難航〜 2025.2.16

今回の大工事はかなり難航しそうかなあ〜。
まず、LCDとTFTの両方のディスプレイに対応にするのは既定路線なのですが、
RenewDIV5142の使い方でソフトを分けていたものを、1本に統合しようかと思っています。
というの、構成がかわる度にソフトをDLするのも面倒です。初期化の中で、表示器ならびに
構成を選択できるように改造です。


センスが問われるう〜 2025.2.18

QVGAをつかうとなる、どのように表示させるのかが難しい。
なんせ、フロントページなんかは常に表示されているので、どうしたらいいものか。
文字表示にあまり頼らないで、視覚的にわかるようにはしたいのはやまやま。

シンプルにこんな感じでもいいかなあ〜。ボリューム(ATT)はバー表示でもいいかな〜。

だいぶ出来てきましたが、バグも多そうです。 2025.2.23

以下が基本的な操作画面になりそうです。その他、オープニングがバージョン情報などの
表示も加えなくっちゃ。


フロントページです。


グライコの調整画面です。


フィルターの調整画面です。これは一番のメインです。


ディレイ関係の画面です。


DACのセッティングの画面。


これは付録みたいなものですが、デバッグには役立ちます。
ハードウエアの接続状況の画面です。

ここまでつくって、バイナリーで350kBになってしまいました。そりゃ、PICじゃ絶対無理な世界だなあ〜。
でも、まだま余裕があります。バグ修正とあわせて見直していきましょう。

それにしても、20x4のLCDとの共存バージョンだけど、そちらも大丈夫かなあ〜。
チェックが大変です。LCDもこのQVGAの表示器も値段は変わらないから、こちらを
メインンにしていくかなあ〜。

そうだ! 2025.2.25

QVGA画面の周りのバグは解消した(つもり?)のだけど、まだまだチェックが残っています。
一つは、実装されていない基板に関する機能のスキップです。たとえば、DACやDAIが実装されて
いない場合は、それらに対する設定はスキップさせるか、あるいは表示項目をすこし暗くして
機能が実装されていないことを示さないと、ちょっとウザイ感じがあります。
 それらの確認には、実際に該当する基板の接続をはずすのが一番確実なのですが、はずしたり
つけたりするのが、とてつもなく面倒です。配線にスイッチをつけようかと思いましたが、それも
かなり面倒。で、色々と簡単な方法を寝ながら考えていていました。
そうだ!ソフトで該当基板からは強制的にI2Cのアクノリッジを返さないようにすればいいんだ!
ハードウエアの有無のチェックはプログラムの起動時にI2Cのアクノリッジが返ってくるかどうかで
調べています。そこで、あらかじめ、該当する素子にI2Cでアクセスされたら、強制的にアクノリッジを
返さないリストを作っておいて、それらを弄ればソフト上で変更できます。
ということで、リスト作成してプログラムのすこし修正です。


たとえば、イコライザとDAI、そしてDACはありませんよ〜という設定
は次のような感じです。

/
// Imaginary NO I2C DEVICE LIST
//
// []={board,device_adrs};
// if Board=0 then end of list

uint8_t no_i2c_list[]=
{
5, 0x98, // BOARD5 PCM5142-0 for EQUALIZER
5, 0x9a, // BOARD5 PCM5142-1 for EQUALIZER
5, 0x80, // BOARD5 PCM9211 Renew DAI9211
6, 0xe8, // BOARD5 PCA9539-0 DAC1795-I2C
6, 0x98, // BOARD5 PCM1795 DAC1795-I2C
6, 0xea, // BOARD5 PCA9539-1 DAC4493-I2C
6, 0x22, // BOARD5 AK4493-1 DAC4493-I2C
6, 0xec, // BOARD5 PCA9539-2 DAC4493-I2C
6, 0x24, // BOARD5 AK4493-2 DAC4493-I2C
6, 0xee, // BOARD5 PCA9539-2 DAC4493-I2C
6, 0x26, // BOARD5 AK4493-2 DAC4493-I2C
0,0};


DAC,DAI,イコライザに関する部分は暗くして、機能がないことがわかるように
してみました。

しかし、細かいところに手をつけだしたら、全然収束しそうにありません(笑。

(つづく)


<関連資料>
具体的使用方法
Renew DIV5142をつかった各種接続方法 
※CONTROLLER UNIT for RP2040とRenew DIV5142をベースとした
  使用方法を詳述しています。

関連記事(検討記)一覧
DIV5142の統合コントローラ(PICO)を検討する!の巻き
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その2)
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その3) 
DIV5142の統合コントローラ(PICO)を検討する!の巻き(その4)
外部I2C制御のシンプルなDACを検討してみる!の巻き
デジタルデレイ(NJU26902)を試してみる?の巻き
ちょっとTea Time!? 分解能を上げたタイムアライメントを考える!の巻き