フルファンクショナルPCM1795は実現するか?  2011.3.6

前編

PICマイコンの使い方として主要なところはわかってきたので、ここらでPCM1795をつかったDACを作ってみたくなりました。
折角なので、PCM1795の機能をフルにつかう構成にしたいな〜っと思っています。

どんな構成?

 作成するためのコンセプトを挙げてみましょう。

1.PCM1795をモノラルモードで使用(パラ構成)
  PCM1795を2個使います。値段的にはPCM1794の1個分なのでお財布にも優しいです(笑)。

2.電子ボリューム機能
  32BitDACですから、電子ボリュームで音量をしぼっても音痩せはすくないでしょう。
  可変抵抗だけでなく、ロータリーエンコーダも使えるようにするかな?

3.フィルタ切り替え機能
  SLow/Sharp roll offの切り替えができるように。

4.オンボードで電源も内蔵
  一枚のプリント基板ですべて完結すると作りやすいです。

5.MUTE機能は強化
  電源ON/OFF時のポップノイズは絶対に出さないようにしよう!

6.IV変換&フィルター部はオペアンプ使用
  最近、オーディオ用のDUALオペアンプで気になるものもあるので、
 それらを使えるようにあえてオペアンプ仕様に。

7.多彩な表示
 LCDもつかえるように。ボリュームについてはLEDもつかえるように考えましょう。

こんな感じでしょうか。また設計しながら考えて行きましょう。
しかし、色々と考えていくと18PINのPIC16F819では間に合わないかもしれないな〜。
28ピンのPICを使おうかな?


PIC16F886 これだけ足があると色々と出来そう。

CS8416もソフト制御に!
ついでなので、CS8416もソフト制御にしてみましょう。
CS8416はハードモードだとプルアップやプルダウンなんかで8本の47kΩの抵抗が
必要になりますが、ソフトモードなら1本で済みます。それに入力が8chまで拡張できる
メリットがあります。でも、そんなに沢山入力あっても仕方ないか〜。
でもエンファシスの要否の判定も簡単にできます。でも、エンファシスが必要なソースって
もってないから確認のしようがないな〜。

まずは簡単なプログラムを書いて動作させてみましょう。

ソフトモードで動かせるかな?

ソフトモードでの動作確認!2011.3.12

ソフトモードといっても難しいものではなく、マニュアル通りにシーケンスを組めば
自然と動き出します。ついでなので、CS8416の内部レジスターの表示をして、
信号のUNLOCKなどの状態が本当に機能するかも調べてみました。

LCDをつけてCS8416内部のレジスターも調べてみました。

最後はPCM1795を接続して、信号線のフォーマット等が正しいかを確認です。

PCM1795との接続も問題なく確認できました。

ここまで来たら・・・・・・

あとは基板のパターンを考えていきましょう。
基本は1枚で完結するようにしたいことと、配線長をできるだけ短くしたいので
基板の両端に配線を集中させるようにしましょう。
ケース内のレイアウトはこんな感じかな?


                ケース内のレイアウトを考えてみました。

必要になりそうな素子を基板に配置してみました。
基板サイズは188×188mmとすこし大きめにしたので、余裕があります。
CPUは40PのPIC16F887がいいかな?いろいろと考えてくると、IOピンが沢山必要になりそうです。


基板のレイアウトを考え中。

だいぶ煮詰まってきました。 2011.3.19
PIC周辺以外はだいたいパターンが見えてきました。

あとはPIC周辺を残すのみかな。

一通り配線完了です。 2011.3.22
あとはパート別にGNDを配線して完了です。


なんとか完成間近です。

まずは完成?2011.3.24

ベタアースを塗り塗りしました。

完成!!・・・・かな?

基板到着! 2011.4.2

朝一番にピンポーンとドアチャイムが鳴りました。宅配便です。
どうやら基板が到着したようです。
開封した中身を確認。今回作成した基板はやや大きめです。
さっそく半田付けしたいとことですが、今日は準仕事がありお出掛けです。
帰ってから作業しましょう!

到着した基板はやや大きめです。

さて仕事から帰ってきました。おもむろに半田ゴテに通電しましょう。
基板の組み立ては小さい部品から取り付けるのが王道ですが、今回はまだ試作版ということもあり
まずは電源部分から組み立てます。電源部分でトラブルと、下流の回路をすべてをお釈迦にしかねませんからね。

まずは定電圧部分から組み立てました。

アナログ電源のツェナーには16Vのものをつかいました。ダーリントン接続した電圧降下が1.2Vありますので
ちょうど15V程度になるはずです。
LM317の回路では5Vを生成しますので、抵抗の組み合わせは120Ωと360Ωにしました。ちょうど3倍の組み合わせになります。

電解コンデンサは悩みます。

整流回路につかう平滑コンデンサは何をつかうか悩みます。
秋月で買った3300uF/50Vを使おうかとおもって取り付けてみました。これだと容量を稼ぐことができます。
でも、すこし部品の高さが高くなるようなので、今回はブロック型のコンデンサをとりつけることにしました。

秋月で買ったコンデンサを取り付けようかとおもいましたが、背が高くなってしまいそうです。

ブロック型のコンデンサも秋月で買ったものです。こちらは4700uF/50Vのものです。
容量的にはこれでも十分です。

ブロック型のコンデンサを取り付けることにしました。

電源部の動作確認!
RA40トランスをとりつけて、動作確認です。
電源部だけでも結構ドキドキします。
電源ONして無事に正常電圧がでることを確認できました。
アナログ電圧は14.9V程度だったのでちょうど狙い通りです。

電源部の確認完了!

さっそく残りの部品もとりつけたいところだけど、今日も遅いので明日にしましょう。
とりあえずPICマイコンをとりつけて液晶表示が問題ないことだけは確認しました。
これで、あとはDAIやDACをとりつけて製作を進めることにしましょう!

まずはLCD表示が大丈夫なことを確認しました。

半分完成!
ハードウエアは完成しました。でも、これから楽しいソフトの作成が待っています。
今回のハードは部品点数も少なく、意外と短い時間でつくれました。
やはりオペアンプを使う効果は大きいです。

ハードウエアは完成。これで約50%の進捗かな。

まずはシンプルに 
2011.4.5

基板の配線が正しいかどうかを確認するのが先決なので、まずはシンプルなソフトを組みました。
入力チャンネルおよびフィルタはそれぞれロータリースイッチとトグルスイッチで選択します。
LCDは必須ではありませんが、表示があると便利なのでLCD表示ソフトも組み込みました。
これで、基板の配線は問題ないことを確認しました。

シンプルモードでの表示の様子。

さて、いよいよフルファンクショナルモードのソフトの製作にかかりましょう!

動作モードは2種類

1つはシンプルファンクションモード、そしてもう一つがフルファンクションモードです。

1.シンプルファンクションモード
 接続はいつものDACのように外部スイッチで入力チャンネル選択とフィルターの切り換えをおこないます。
LCDがあれば、動作状態が確認できるようになります。
電子ボリュームの機能と入力およびフィルターの切り換えだけのシンプルな機能なので、このようなネーミングにしています。

シンプルファンクションモードでのスイッチ類の接続

2.フルファンクションモード
 接続で必須なのが入力切換えとフィルタ切換え2つのプッシュスイッチです。そして補助に表示の切換えスイッチを使います。
フルファンクションモードで動作させるにはJP1を接続して、シンプルモードとの切り換えができるようにしました。
なぜプッシュスイッチにしたかといえば、選択する項目が多いため、プッシュスイッチが切り換えに適しています。
プッシュスイッチをつかうため、動作状態の確認のためにLCDが必須になります。

フルファンクションモードでのスイッチ類の接続


動作を確認するために3つのプッシュスイッチを接続しました。

表示器はどちらにするかな?

秋月電子からは色々な16×2行表示のLCDが売られています。安いものはバックライトの無いものですが、
今回は白抜きのバックライト付きをつかってみることにしました。ちょっとハデかな?これは好みに合わせて
使い分ければいいでしょう。

基本的な表示はシンプルファンクションモードもフルファンクションモードも同じです。
表示内容は入力チャンネル、入力信号の周波数、フィルタの種類、そしてボリューム値(減衰量)
を表示するようにしています。

バックライト無しのLCD。オーソドックスな表示です。


白抜きバックライトのLCD。結構ハデです。

入力信号がないと・・・

たとえば接続されていないチャンネルを選択すると、CS8416がUNLOCK状態になります。
今回はこの表示器にその状態を表示することにしました。またこのときに不要なノイズがでないように
MUTEリレーをONさせています。

入力信号が無いとUNLOCK表示するようにしました。

フィルター切り換え
フィルターの切り換えはSharpSlowがありますが、それぞれ下図のようなインパルス応答になります。
この違いが音で聞き分けられるかな〜?
 
ディジタルフィルター:SHARPのときの応答   ディジタルフィルター:SLOWのときの応答

  
ディジタルフィルター:SHARPのときの応答   ディジタルフィルター:SLOWのときの応答

フルファンクションモードのモード設定

色々な設定ができるようにしています。その設定モードにするにはフィルターの切り換えスイッチを長押しすると
メニューモードになるようにしています。設定モードに入れば、次への項目の切り換えはフィルタスイッチで、
そして内容の切り換えは入力チャンネルスイッチで行います。メニューは現在は全部で10項目あります。
(今後増えるのかな?)

1.<MENU 1/10> 入力チャンネル数設定 
CS8416をソフトウエアモードで使用すると入力は8チャンネルになります。しかし、それだけあっても使うことはないでしょう。
4チャンネルしか使用しないのに、入力スイッチを押して1→2→3・・・・→8と切り換えるのも面倒です。
ということで、何チャンネル分の入力があるかを設定できるようにしました。設定値は1〜8の範囲で可変できます。
たとえば4に設定すれば入力スイッチを押せば
1→2→3→4→1→2
と切り替わります。

入力チャンネル数の設定

2.<MENU 2/10> ボリュームカーブ設定(減衰曲線) 

電子ボリュームの操作感覚を自然なものとするためには、どのような減衰曲線をもたせるかが重要です。
でも、これって個人差もあればシステムの違いもあるので難しいものです。というのもボリュームツマミを少し回しただけで
大きな音がでれば、なんとなくシステムとしての力強さを感じる場合もあるのですが、音量調整がしづらいといデメリットもあります。
ということで、このソフトではボリュームカーブを8種類用意して、その中から選べるようにしました。
 
ボリュームカーブの設定(8種類から選択ができます)

3.<MENU 3/10> 出力位相設定
オーディオでは位相の反転/非反転は区別がつくか?これは難しい問題ですが、PCM1795にはその機能が
あるので組み込んでみました。NOR/REVの選択で出力位相を設定することができます。
 
    
出力位相の設定(NOR:ノーマル時)          出力位相の設定(REV:反転時)

4.<MENU 4/10> 出力の左右反転
この機能はお遊びです(笑)。いや、実際に必要な場合もできてます。適当にケーブルをつないでしまったら
左右逆だったことも多々あります。そしてステレオラックの裏側のアクセスがしづらい場合は大変です。
ということで、出力の左右を入れ替える機能も追加しています。
 
オーディオ出力の左右はそのまま            左右を入れ替え

5.<MENU 5/10> オーバサンプルレート設定
これは、PCM1795内部でのオーバサンプル周波数の設定です。
32、64,128fsから選択することができます。通常は64fsで使用していますが、
入力周波数にあわせて変更することでアナログ部のポストローパスフィルターのカットオフ周波数を
一定にすることができます。と、ややこしいことを書きましたが、この値の設定でどのように音が変わるか楽しみです。
ちなみにマニュアルでは192kHzなどの高い入力信号周波数では128fsでは動かないようです。

  
オーバサンプルレート64fs(既定値)       オーバサンプルレート 128fs(高周波数では動作しないらいしい)

6.<MENU 6/10> De-Emphasis周波数設定
De-Emphasis時の周波数設定になります。OFF、48kHz、44.1kHz、32kHzのいずれかが設定できます。
 
ディエンファシスはOFFの場合            ディエンファシス周波数を44.1kHzに設定する場合

7.<MENU 7/10> De-Emphasisフラグ設定
こちらは実際にDeEmphasisを動作させる設定になります。
OFFは常にOFFです。そしてONは常にONです。AUTOはCS8416のEMPの状態を監視して、入力信号にDeEmphasisが必要な場合は
自動的にONにするようにしています。そして、不要時はOFFになるようにしています。
  
 ディエンファシスをOFF                      ディエンファシスを強制的にON             自動で切り換え

8.<MENU 8/10> 受信エラー時設定
これはCS8416が受信エラー時をおこした場合にどのように処理をするかを設定します。
受信エラーをおこした場合の処置は3方法あり、MUTE状態にする、変化させない(No chg)、そしてエラーの起こる前の値を保持する(HOLD)
から選択します。
 
受信エラー時にはMUTEにする。               受信エラー時にも変更しない。  


受信エラー時には前回の値を保持する。


9.<MENU 9/10> マスタークロック周波数設定
これはあまり関係ないのですが、PCM1795のシステムクロックを変更することができます。
256fsあるいは128fsから選択します。
   

      
 マスタークロックに256fsを選択             マスタークロックに128fsを選択


10.<MENU 10/10> PLL位相検出器動作モード設定
最後はCS8416のPLL位相検出器の動作モードです。
通常はノーマルで使用します。ノーマルだと〜192KHzまで動作可能です。
これをHighにするとジッタ特性が変わるのですが、約100KHzまでしか安定した動作が保証されないようです。
でも通常の44.1kHzでつかう場合にHIGHに設定するとどのように音が変わるか楽しみです。
      
 CS8416位相検出器をノーマルに設定      HIGHに設定すると高性能になりそうだが、100kHzまでの対応に。

とまあ、こんな感じで機能設定ができるようにします。

これだけの機能がありますが、電源OFF時にも設定値が保持されるように変化があればEEPROMに書き込むようにしていますので
次ぎに立ち上げた場合にも、前回の値を保持しています。でないと、何を変更したかがわからなくなってしまいます。

表示機能は
表示スイッチを押すことで表示モードを変更することができます。表示スイッチ自体は必須ではないのですが、
機器の動作状況を調べる点ではあると便利かもしれません。

基本の表示はこれです。入力チャンネル、入力周波数、フィルター、そしてボリューム値が表示されます。

動作時の標準表示画面

表示ボタンを1回押すと、電源電圧を表示します。ディジタル部、DAC部、そしてアナログ部の電圧です。
これらの電圧値は定電圧後ではなく、定電圧前の値を示しています。というのも定電圧後では値が
かわらないですから。
このソフトでは定電圧前の電圧を常に監視していて、どれかのラインの電圧が90%以下に低下した場合は
即座にMUTEリレーを動作させると同時にシャットダウンモードに入るようにしています。
なお、PICのAD変換分解能から値は目安と思ってください。

定電圧前の電源電圧の表示(電源監視に便利です)

つぎに表示ボタンを押すとCS8416の内部情報を表示します。
StatusはCS8416の0AHのレジターの内容です。一番右のビットがEMPHになっていて、0であればエンファシスになります。
FomatはCS8416の0BHのレジターの内容です。左から2番目のビットがPCM信号かどうかを示しています。
詳しくはCS8416のマニュアルをみてください。

CS8416の状態監視(その1)

つぎに表示ボタンを押すとCS8416の受信エラー情報になります。
エラーがなければすべてゼロになりますが、たとえば入力未接続などにすると
エラーが起こります。右の図だとUNLOCKでバイフェース信号エラー等の状態を知ることができます。
ちなみに、その下のはソフトウエアのバージョン番号です。
  
   CS8416の状態監視(正常時)        CS8416の状態監視(未入力時)

これだけの機能をいれたらソースコードも1000行を遙かに越えてしまって、プログラムメモリーも7kワードと
PIC16F887(最大8kワード)の限界に近づいてきました。

これだけ色々とあると遊べるかな〜っと。


いよいよケースに収めましょう!

あ?プッシュボタンの適当なものがありません。
来週は秋葉原に行くのでそのときにでも物色してきましょう。

まずはお出掛け用の写真を1枚パチリです。

お出掛け用の写真です。

バラックで試聴してみましょう!
ノイズの確認も含めてヘッドホンアンプにつないで試聴です。ノイズもブレッドボードで組んだときも
なかったのですが、基板にすることでさらに静寂さが増した気もします。
色々と遊んでみて電子ボリュームの操作感もグッドです。またエンファシスを効かせるこもった音になります。
そりゃ高域を減衰させますからね。
はやくケースに入れたくなりました。

適当なプッシュスイッチを発見!

部品箱をごそごそしていると適当なプッシュスイッチがみつかりました。これがあれば休みの日にケースに収めることができそうです。

いつ買ったのか忘れましたが、ありました!

今回のケースの加工では四角い穴が2つのあるので少し時間がかかりました。アルミだからいいものの
これが鉄なら大変です(笑)。さらにステンレスなら諦めるでしょうね。

ケースの加工も完了しました。

部品のとりつけですが、液晶やプッシュスイッチを登載した基板はケースに瞬間接着材で固定しました。
接着できるように基板の端部がフレーム板に一致するように穴の位置を調整しています。
接着剤を流す前には部品やパネルはアルコールで念入りに脱脂をしておきます。
でないと、ポロッととれかねませんからね。

液晶などは瞬間接着剤で取り付けました。

今回のDACでは久し振りに光コネクタを取り付ける予定です。TORX177が手元にあったのでこれをつかおうと思っています。
光コネクター用の基板はRnew DAI for DF1706の端についている基板を切り離してつかいました。

 
光コネクター用の基板はRenew DAIより調達しました。

パネルに取り付けた様子です。今回のDACでは入力は4チャンエネルあります。同軸×2、光×2です。

入力は4chと充実させました。

いよいよ全体の組み上げです。
まずはケース自体を組み上げていきます。そしてトランスを登載しました。


あとは一気に配線です。今回改めて感じましたが電源一体型の基板だと配線が少なくて短時間で済みます。

組上がりました!

フロントパネルにはプッシュスイッチが真ん中に並んでいます。四角窓はヤスリがけのあとが
見えてしまいますね。


入力端子部の様子です。配線長を短く済ますことができました。


フロント部の様子です。意外とスッキリしています。


バックパネルの様子です。


最終調整にはいりましょう!!

といってもソフトのバグだしみたいなものです。
LCD表示の不具合(ちらつき)の修正とか、EEPROM書き出し中に万が一電源が落ちた場合の対処方法などについて修正していきました。
ソフト制御になると色々と気を付けることが多いです。

完成!

ようやくラックに収まりました。これでお気に入りのDACが一つ増えました。
あ、レタリングしなくっちゃ!


完成してラックの中に鎮座しています。


(つづく)