DACユニットの検討(製作編38)

f:id:torusanada98:20200901074322j:plain

製作編38

位相切り替え機能とアッテネータ機能の実装を行い、動作確認を行います。

位相切り替え機能

位相切り替え機能はレジスタ19のbit7(REV)に配置されています。

f:id:torusanada98:20200901074349p:plain

REVビットの仕様は以下のとおりです。

f:id:torusanada98:20200901074353p:plain

レジスタ19はINZD(Infinity Zero Detect)機能実装時にソース上に仮設定していましたが各DACの各チャンネル共通の変数となっています。この変数のビット7を操作して位相切り替えコマンドを発行します。位相設定処理およびレジスタ19の設定関数は以下のとおりです。

f:id:torusanada98:20200901074356p:plain

f:id:torusanada98:20200901074346p:plain

デバッグ用にキーを追加接続しました。

f:id:torusanada98:20200901074322j:plain

タクトSWはブレッドボード上に実装していて、配線はジャンパピンで自由に変更できるので楽です。最初はレジスタ19設定関数のコールをマスクして、表示の切り替え確認を行いました。前回の記事に掲載した表示画面のPHの後ろがセミコロンになっていた点もデバッグ途中で合わせて修正しています。

f:id:torusanada98:20200901074316j:plain

f:id:torusanada98:20200901074327j:plain

正しく表示が切り替わる事が確認できたので、マスクしていたレジスタ19設定関数のコールを行います。テストディスクを再生して波形を観測しました。位相切り替えを行っても信号は出力されています。正しく機能しているかを確認する為に、1kHz 0dBトラックの再生開始タイミングの波形を観測しました。

f:id:torusanada98:20200901074422j:plain

f:id:torusanada98:20200901074425j:plain

上の波形が位相=Positiveで下が位相=Negativeです。信号立ち上がり時の微妙な違いがわかるでしょうか?この波形から位相切り替えは正しく機能している事が確認できました。次はヘッドホンアンプに接続して実際に音を聴いてみます。音楽を再生スタートさせて位相切り替えを行ってみました。位相切り替え時にボツ音が発生します。DAC側で気を利かせて、切り替え時にMUTEをかけていないか期待していましたが、そんな事はないようです。ボツ音対策と正式な音聴きは後に回して残りの機能実装を進めます。

アッテネータ機能実装

初めにDAC ICの仕様の確認を行います。

f:id:torusanada98:20200901074307p:plain

レジスタ16とレジスタ17でチャンネル毎のアッテネーション設定ができます。モノラルバランスモードの場合は、両レジスタに同じ値を設定します。今回は左右の音のバランスは操作するつもりはないので、2つのDACで共通の値を使用します。設定する減衰量は0dB/-1dB/-2dB/-3dBの4とおりです。レジスタに設定する値を決めます。下記はDACの仕様書の抜粋で、レジスタの設定の参考になりました。

f:id:torusanada98:20200901074451p:plain

設定値はそれぞれ0xFF/0xFD/0xFB/0xF9となります。処理用のソースとATT設定用の関数のソースは以下のとおりです。

f:id:torusanada98:20200901080542p:plain

f:id:torusanada98:20200901074455p:plain

デバッグ用にさらにキー配線を追加しました。

f:id:torusanada98:20200901074333j:plain

位相切り替え機能確認時と同様に、最初は表示切り替えの確認を行いました。最初は表示が崩れてしまいましたが、デバッグにより正しく表示できました。

f:id:torusanada98:20200901074409j:plain

f:id:torusanada98:20200901074415j:plain

f:id:torusanada98:20200901074404j:plain

続いてマスクしていたATT設定用関数コールを行います。1kHz 0dBの正弦波を再生し、出力波形をオシロスコープでモニタしています。キーを押して-1dBに設定変更したところ、出力が出なくなりました。ここまで順調に確認ができていたのに、やれやれ。最初に仕様書を確認しました。その結果アッテネータ機能をつかう為に必要な処理が漏れている事がわかりました。下記がその仕様、レジスタ19のATLDです。

f:id:torusanada98:20200901074304p:plain

アッテネータ機能を使う場合、このビットを1にしておく必要がありそうです。仕様を読む限り、ATTレジスタを設定しただけで、無音になる症状とはなりません。他に原因があると考えて、ソースを改めて眺めてみました。その結果レジスタアクセスの関数に怪しい点が見つかり合わせて修正しました。

f:id:torusanada98:20200901074400p:plain

変更はレジスタ16と17の設定ごとに、I2Cのコマンド処理を終了させるように修正しました。早速動作確認です。1KHz 0dBの正弦波を再生して、出力波形をモニタします。結果は以下のとおりです。

f:id:torusanada98:20200901074429j:plain

f:id:torusanada98:20200901074434j:plain

f:id:torusanada98:20200901074438j:plain

f:id:torusanada98:20200901074441j:plain

上から0dB,-1dB,-2dB,-3dB設定時の再生波形です。波高値の値から正しく動作している事が確認できました。次回は位相切り替え時のボツ音対策の検討を行います。

 

つづく(製作編39)