人気ブログランキング |

ジッタクリーナの実験①ソフト編

多くの方が挑戦しているSi5317じゃなくて、CS2000-CPです。



【本題に入る前の話】
今回のジッタクリーナはマイコンが必要です。ここからは2択になりますな。
当方のDAC作成記事で満足するか、マイコンを使うかです。

まあジッタクリーナを追加した所で音質は大きく変わる訳では無いと思います。
アナログ回路とか使用するコンデンサを変更する方がよっぽど影響は大きいです。
よってジッタクリーナが無くても大丈夫ですよ。
(駄目回路や駄目コンデンサを完全撤廃して記事に書いた物を使ってみれば?)
どマニアの方は下記をご参考にどうぞ。(爆)

ところでDAI-ICのWM8805はサンプリング周波数192kHz対応でしたが、
実はマイコンから設定を変更してやらないと192kHz対応できません。(爆)
な、なぬ〜? 聞いてないよ〜!
これに関してはデータシートに何となく記載がありご承知と思います。(爆)
ここで192kHz対応の話に触れる理由は、同じ様にマイコンが必要と言う事と、
当方は192kHz対応機器を持っていないので開発出来ないんですな。(爆)
当方は音質的にもサンプリング周波数192kHzに惹かれる物はありません。
必要な方が挑戦されては如何でしょうか?
当方からはジッタクリーナの情報をプレゼント。これでおあいこです。(爆)


【CS2000-CPを選択した理由】
CS2000-CPは外部入力で高安定の基準クロックが使用できます。
CS2000-CPはPLLのカットオフ周波数を1Hzまで低く出来るとあります。
使い易そうというのも選択の理由です。

Si5317の効果はどうなんでしょう? ジッタ減衰量じゃなくて帯域は?
データシートを見るとグラフが載ってますが、1kHz以下は良くありませんな。
遅いサイクルの揺れに対しては得意としないICなのでしょうか?
まあ他の方が挑戦されているので当方は遠慮しようと思います。

他の選択肢として、CS2300はIC内部のLCO発振が基準です。CR発振器?
水晶発振の安定度までは期待できない様です。CS2300は駄目ですな。


【回路構成について】
CS2000-CPで何をどうするか? DAIとDACの間に入れてやる訳です。
現状の接続がこうなります。
e0298562_1939408.png

それに対して、通常の考えでは下図の様に挿入しようとするでしょう。
e0298562_19395562.png

実際には74VHC574は不要です。リクロックは逆に問題が生じます。
なぜならばSCKの揺れをクリーニングすると数クロック分くらいズレます。
もう位相とかのレベル以上にズレまくります。リクロックが不成立です。
実際に74VHC574を挿入した状態でDACの出力を見てみますと、
下図の様にプチ音が出ます。データ欠落ですな。
e0298562_1943471.png

このプチ音はFN1242Aでは観測されますがPCM1792の方はちょっと判らず。
いずれのデータシートを見るとSCKとLRCKの位相関係は同期する必要が無い。
と書いてあります。
その様な記載が無いDAC-ICを御使用の場合は諦めて下さい。(爆)
また音質的にはSCKだけが重要です。
データシートにもSCKには高安定のクロックが必要という記載があります。
よってリクロックは不要という訳です。


【回路図】
図をクリックで拡大できます。
e0298562_20295948.png

(音質の絡みで回路図にちょっと追記しました。2013.11.14)

*I2C送信だけじゃなくて、オマケも付けました。
 マイコンの余ったピンを利用して、数種の設定を外部からできる様にしました。
*SW1は電源ON時に読みこむ様にソフトを作りました。
 SW1を動作中に切り替えしても無意味という事です。
*SW2によってクリーニングとスルーを切り替え可能です。
*スイッチを使わずプルアップだけならR8〜R10はゼロオームでOKです。
 R4〜R7はマイコンポートの保護用なので無くせません。
*AUX_OUT端子はデフォルト(未設定)では基準クロックが出ます。
 そこを見ればI2C設定や送信内容がうまく動作してるか判りますな。
 また設定がNGならばPLLロックせず、CLK_OUTにも何も出てきません。


【設定のキモ】
色々と試行錯誤しますが「動かん!」とか叫んだりするのが常々ですな。
苦労の末に判った所を書いておきます。
CS2000-CPデータシート上の注意点です。
27ページ 6.3.1 Map Auto Increment
 INCRのビットを1にしないとI2Cアドレスを自動インクリメントできないっぽい。
 書き込み開始アドレスは01hからとします。
28ページ 8. REGISTER DESCRIPTIONS
 EnDevCfg1とEnDevCfg2のビットを必ず1にしないと駄目っぽいですな。
30ページ 8.4.2 Fractional-N Source for Frequency Synthesizer
 (FracNSrc)
 ハイブリッドPLLモードに設定。入力周波数に自動的に追従する様にします。
32ページ 8.8.2 Low-Frequency Ratio Configuration
 (LFRatioCfg)
 44.1kHzを元にして27MHzを作るといった使用法がHigh Multiplierの様です。
 今回みたいに入力と出力が1対1の場合はHigh Accuracy (High Resolution)の方。
31ページ8.6 Ratio 0 - 3 (Address 06h - 15h)
 ここの設定は34ページを見る必要あり。High Resolutionの数値を設定します。
 (出力周波数/入力周波数)×2^20 との記載。出力入力比は1倍なので、
 2^20=1048576  まあ16進で00 10 00 00 この数値を設定します。




【制御ソフト】
ソースリストを掲載します。CCS Cを使っています。
I2Cを送信する+αくらいの初心者レベルのソフトです。
当方はこのくらいの簡単なソフトしか書けません。エラい事も言えませんな。
マイコン変更とか好きに実験して下さい。

送信データは16進の(0x10)とかじゃなくて2進に書き直した方が
(0b00010000)とかデータシートと見比べながらチェックし易いですよ。
ブログ掲載にあたり変な表示になる所があり手を入れています。
修正ミスがあるかも?


// pic12f509 i2c CS2000-CP設定
// ①ピン=VDD、⑧ピン=GND

#include <12f509.h>
#fuses INTRC,NOWDT,NOPROTECT,NOMCLR
#use delay(clock=4000000)
#use i2c(MASTER,SDA=PIN_B5,SCL=PIN_B4,SLOW)

int i,j,k;
short m,n,p;  //1bit値

void main()
{
 set_tris_B(0x0f); //ポートB0~3を入力に設定④~⑦
 output_float(PIN_B5); // I2Cオープンドレイン
 output_float(PIN_B4); // I2Cオープンドレイン

 if(input(PIN_B0)) //⑦=HIなら
  i=(0x10);    //Reference Clockは8~14MHz
 else       //⑦=LOなら
  i=(0x08);    //Reference Clockは16~28MHz

 delay_ms(200);

 while(1)
  {
   m=input(PIN_B1); //⑥ピンをmに代入
   n=input(PIN_B2); //⑤=n
   p=input(PIN_B3); //④=p

   if(m)     //⑥=HIなら AUX出力はジッタクリーン出力
    j=(0x05); //RSel=00、AuxOutSrc=10、EnDevCfg1=1
   else     //⑥=LOなら AUX出力は入力をスルーして出力
    j=(0x03); //RSel=00、AuxOutSrc=01、EnDevCfg1=1

   if((n)&&(p))  //⑤=HI,④=HIなら
    k=(0x00);  //PLLバンド幅は1Hz
   if((n)&&(!p))  //⑤=HI,④=LOなら
    k=(0x20);  // 4Hz
   if((!n)&&(p)) //⑤=LO,④=HIなら
    k=(0x40);  // 16Hz
   if((!n)&&(!p))  //⑤=LO,④=LOなら
    k=(0x70);  // 128Hz

   delay_ms(50);

   i2c_start();   // スタートコンディション
   i2c_write(0x9C); // チップアドレス、AD0ポート=0
   i2c_write(0x81); // MAPバイト=1、書き込み開始アドレス01h~
   i2c_write(0x00); // 01hのデータから送信
   i2c_write(0x00); // 02h AuxOutDis=0、ClkOutDis=0
   i2c_write(j);   // 03h ⑥ピン設値定=jの値を送信
   i2c_write(0x01); // 04h LockClk=00、FracNSrc=1
   i2c_write(0x01); // 05h EnDevCfg2=1
   i2c_write(0x00); // 06h 32bitレシオ0  →1倍
   i2c_write(0x10); // 07h 〃
   i2c_write(0x00); // 08h 〃
   i2c_write(0x00); // 09h 〃
   i2c_write(0x00); // 0Ah 32bitレシオ1
   i2c_write(0x10); // 0Bh
   i2c_write(0x00); // 0Ch
   i2c_write(0x00); // 0Dh
   i2c_write(0x00); // 0Eh 32bitレシオ2
   i2c_write(0x10); // 0Fh
   i2c_write(0x00); // 10h
   i2c_write(0x00); // 11h
   i2c_write(0x00); // 12h 32bitレシオ3
   i2c_write(0x10); // 13h
   i2c_write(0x00); // 14h
   i2c_write(0x00); // 15h
   i2c_write(i);   // 16h ⑦ピン設値定
   i2c_write(0x08); // 17h hi-accuracy
   i2c_write(k);   // 1Eh ④⑤ピン設値定
   i2c_stop();    // ストップコンディション

   while(1)
    {
    if((m!=(input(PIN_B1)))||(n!=(input(PIN_B2)))||(p!=(input(PIN_B3))))
         // m,n,pの値に変化があれば
    break; // ループから抜ける
    }

  }
}


ソースは以上です。


【HEXファイル】
このブログは基本的にファイルの添付が出来ません。(爆)
こちらのリンク先→HEXファイル←を右クリックで保存して、
保存したファイルの拡張子をjpgからzipに変更し、zipファイルを解凍してください。

ご利用は自由と致します。ただし配布は不可と致します。商用使用も不可です。
何らかのトラブルが発生しても当方は責任を持ちません。


【ちょっとだけよ】
あんたも好きね〜
e0298562_19414350.png

e0298562_19423639.png



【次回の話】
これを組み込んだ写真とか測定結果を掲載しようと思います。


【注意事項】
実験は自由ですが、当方の検討結果とか考案の回路を勝手に採用しないで下さい。
ブログ等で利用掲載する場合はこのページにリンクを貼って
hexファイル等を入手して下さい。
記事を鵜呑みにせずご自身で実験評価して下さい。当方は一切サポート致しません。

e0298562_19335172.jpg

以上です。
by ca3080 | 2013-11-09 19:26 | オーディオ&電子工作
<< ジッタクリーナの実験②実践編 ひんバーガー >>