74AC574 4パラDACと組み合わせるためのDAI基板です。 汎用性を持たせられる作りにしており、いろいろなDACに接続できます。 デフォルトでは24bit後詰めで、74AC574 4パラDACにそのまま使用できます。
電源は外部から+5Vを給電して、CS8416のマイコンインタフェース電源(VL)、ATtiny26L、74HC245、LCDパネルに供給します。 また、5V→3.3Vの三端子レギュレータ TA48M033F で3.3Vを作成して、CS8416のVA、VDに供給します。
CS8416で受信しているシグナルの周波数を表示するためには、比較用に10〜20MHz程度のクロックが必要です。 今回は、秋月で安く入手できる11.776MHzの水晶発振器を使用しました。
CS8416の8入力のセレクタ機能を使用するために、マイコンからどのチャネルを使用するかレジスタで設定します。 つまり、ユーザーからのチャネル指定をマイコンで受けることになりますが、ぼんやり作るとピンを8個消費してしまいます。 今回は、ATtiny26LにあるA/D入力ポートを使用して、8入力セレクタと10kΩの抵抗で以下のセレクタを外部に作ることでピンの使用数を1本で済ませています。
100mm×40mmの2層基板です。 今回はPCBCARTに製造してもらいました。 なお、CADはEAGLEを使用しました。
[REG] [BIT] [CHANGE]の3個のボタンを搭載しています。このボタンの操作を操作して、CS8416の動作を変更します。
電源投入後は通常モードで起動しますが、REGボタンを押すとEDITモードへ移行します。
左上に入力チャネル、右下にそのチャネルの周波数を表示します。
入力チャネルは、入力セレクタの操作によって選択できます。
右上に、エンファシスされた入力の場合は「EMPH」と表示します。 また、デフォルト設定では自動的にディエンファシスを行います。
再生周波数は、32 / 44.1 / 48 / 88.2 / 96 /176.4 / 192 kHzに対応します。入力が無い場合は 「No signal」を表示します。 ただし、176.4kHzと192kHzは、手持ちで送り出せる機器が無いため動作確認が出来ていません。
CS8416で設定可能なレジスタは0x00〜0x09の10個あり、それぞれ8bitのレジスタです。
[REG]を押すと、設定中のレジスタ(左上にREG:XXとして表示)を次のレジスタに移動します。0x00→0x01→・・・→0x09→0x00とループします。
[BIT]を押すと、設定中のビット(左下にBIT:XXとして表示)を次のBITに移動します。7→6→・・・→0→7とループします。また、BIT位置に「↑」を表示します。
[CHANGE]を押すと、[REG][BIT]で選択したビットの設定値を変更します。「値を1にセット」→「値を0にセット」→「何もしない」の3種類をループします。 なお、白地に黒文字(非反転表示)の1または0は「何もしない」設定で、現在CS8416に設定されている値を示します。 黒地に白文字(反転表示)の1または0は、上書き設定を意味します。
下の例では、レジスタ0x04、ビット2を選択しています。 また、ビット7は1、ビット6は0で固定的に上書きされます。 ビット5〜0は特に何も操作しません。
レジスタ4のビット5〜3はRXSEL2〜0、ビット2〜0はTXSEL2〜0で、それぞれには入力チャネルセレクタで選択したチャネルが設定されます。 なお、1または0を上書き設定している場合は、入力チャネルセレクタの値が設定された上から1または0が上書き設定されます。 また、EDITモードで入力チャネルセレクタを操作しても、これらのビットへの反映は行いません。
EDITモードからの復帰はボタン操作では行えません。電源を一旦切って、再度電源投入をしてください。
以下に、デフォルト設定を示します。
アドレス | 機能 | CS8416の デフォルト値 | 本プログラムの デフォルト値 |
00 | Control 0 | 0000_0000 | 0000_0000 |
01 | Control 1 | 0000_0000 | 0000_0000 |
02 | Control 2 | 0000_0000 | 0100_0000 |
03 | Control 3 | 0000_0000 | 0000_0000 |
04 | Control 4 | 0000_0000 | 1000_0000 |
05 | Serial Audio Data Format | 0000_0000 | 1000_1000 |
06 | Receive Error Mask | 0000_0000 | 0000_0000 |
07 | Interrupt Mask/td> | 0000_0000 | 0000_0000 |
08 | Interrupt Mode MSB | 0000_0000 | 0000_0000 |
09 | interrupt Mode LSB | 0000_0000 | 0000_0000 |
レジスタ0x02:ビット6,5,4は「EMPH_CNTL2」「EMPH_CNTL1」「EMPH_CNTL0」で、エンファシスされた入力の場合に自動的にディエンファシスを行うよう100を設定します。
レジスタ0x04:ビット7は「RUN」で、通常運用のために1を設定します。
レジスタ0x04:ビット6は「RXD」で、RMCKを出力にするために0を設定します。
レジスタ0x05:ビット7は「SOMS」で、マスターモードにしてOSCLKとOLRCKを出力にするために1を設定します。
レジスタ0x05:ビット6は「SOSF」で、OSCLKの出力周波数を64*Fsにするために0を設定します。。
レジスタ0x05:ビット5,4は「SORES」で、24bitモードにするために00を設定します。
レジスタ0x05:ビット3は「SOJUST」で、右詰め出力にするために1を設定します。
レジスタ0x05:ビット2は「SODEL」で、SDOUTデータのMSBをOLRCKのエッジの後の最初のOSCLKとするために0を設定します。
レジスタ0x05:ビット1は「SOSPOL」で、SDOUTデータのサンプルをOSCLKの立ち上がりエッジとするために0を設定します。
レジスタ0x05:ビット0は「SOLRPOL」で、OLRCKがhighの時に左チャネルデータとするために0を設定します。
上記で0を設定している部分は、デフォルト値と同じですので設定する必要はありませんが、動作を明確にするために敢えて設定してみました。
設定値を初期化して本プログラムのデフォルト値に戻したい場合は、通常モードで[CHANGE],[BIT],[REG]の順で3個のボタンをすべて押すことで実施できます。
古いの(1.0)も置いておきます。 プログラム 書き込みデータ
ソフトウエアモードのCS8416をプログラムの知識無しに簡単にレジスタ変更できるので、なかなか便利ではないでしょうか。 ノイズを気にする場合はハードウエアモードにしてマイコンやLCDパネルを使用しないのも有りだと思いますが、こんなDAIがあっても良いと思ってます。
2007/6/6 上野