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

f:id:torusanada98:20200825081102p:plain

製作編35

DACユニットブレッドボードの音出しまで終わったので、ブレッドボードのユニット化に向けてソフト設計をします。

実装する機能

実装する機能は今まであまりちゃんと考えていませんでした。ユーザーインターフェース用の部品は、漠然とモーメンタリーのプッシュスイッチ3個と16桁2列表示可能なLCDパネルを準備しています。改めてDACの仕様書を眺めてみます。この仕様の中から実装する機能の候補を選んでみました。

1)アッテネーター

2)ΔΣ変換オーバーサンプリング倍率

3)位相反転

1)アッテネーター

デジタルアッテネータは、再生時の分解能を下げるため使いたくはないですが、以下の理由により軽い範囲でアッテネーションがかけられる仕様を検討します。私の12chアッテネータは実用上の音量を考慮して下記の減衰量の9ステップとしています。 Mute, -36dB, -29dB, -25dB, -21dB, -16dB, -11dB, -9dB, -6dB 上記を決めたときに使ったディスクは80年代にリリースされたCDでした。実用時のアッテネーションレベルは-11dB or -9dBとなるように設定しました。しかし最近のCDは平均録音レベルが当時のディスクと比較して6dB以上高く、実用時のアッテネーションレベルが-21dBや-25dBとなってしまうディスクもあり、ステップが荒く使いづらい仕様となっていました。この荒いステップを補完するために、-1dB, -2dB, -3dB程度の軽いアッテネーションがかけられるようにしたいとおもいます。

2)ΔΣ変換オーバーサンプリング倍率

この効果はよくわかりませんが、デフォルトが64倍設定で、最大で128倍の設定が可能です。64倍時と128倍時の比較をしてみたいとおもいます。

3)位相反転

たいした機能ではありませんが、システムの位相を簡単に反転できるので、実装しておきたいとおもいます。

オーバーサンプリング倍率設定

ソフトのベースを作りながら、各機能の確認を進めていきます。最初は効果が不明なΔΣオーバーサンプリング倍率変更機能を実装します。効果以外に、再生中に切り替えた場合にノイズの発生等、問題がないか確認をします。最初にソフトのジェネラルフローを作成しました。

f:id:torusanada98:20200825081132p:plain

メインループは、キー検出とキー処理のみです。DACのモノラル設定はイニシャル処理で行います。

f:id:torusanada98:20200825081110p:plain

イニシャル処理では、他にライブラリの登録、マイコンのポート設定や、DACのデフォルト設定も行います。それでは、オーバーサンプリング倍率選択仕様を確認します。

f:id:torusanada98:20200825081053p:plain

オーバーサンプリング倍率は32倍の選択も可能ですが、今回は64倍と128倍の選択とします。このOSビットはレジスタ20にマッピングされています。

f:id:torusanada98:20200825081135p:plain

レジスタ20には、モノラルモード設定とチャンネル選択設定ビットもあるので、各DAC毎にレジスタ20の設定値の保持が必要となります。レジスタ20の変数設定は下記のように修正しました。

f:id:torusanada98:20200825081106p:plain

これに伴って、各DACのモノラルL/R設定関数も下記のとおり変更しました。

f:id:torusanada98:20200825081050p:plain

OS設定確定後のキー処理のフローと該当処理のソースは以下のとおりです。

f:id:torusanada98:20200825081128p:plain

f:id:torusanada98:20200825081058p:plain

キー処理の中では、DAC ICへのコマンド発行以外に、LCDパネルの表示処理も行います。これでOSビットの設定処理は完了です。

キー検出処理

12chアッテネータで実装したキー検出はごてごてしてしまったので、今回はシンプルに実装します。下記はキーステータス(KSTS)のタイムチャートです。

f:id:torusanada98:20200825081125p:plain

kdelayはチャタリング吸収用に設定したタイミングで、この時間経過後1度キー検出を行い確定判定してKSTSをインクリメントします。

f:id:torusanada98:20200825081115p:plain

まずは1つのキーのみ実装しますが、ポート7を使用しました。ポート設定はプルアップ抵抗付きの入力設定なので、単純にタクトスイッチを接続するだけです。処理は各KSTSごとにチェックを行い、不一致の場合所定のKSTSに変更してループを出る処理としています。

f:id:torusanada98:20200825081045j:plain

f:id:torusanada98:20200825081120p:plain

次回はコーディングしたソフトを使って動作確認を行います。

 

つづく(製作編36)