製作編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)位相反転
たいした機能ではありませんが、システムの位相を簡単に反転できるので、実装しておきたいとおもいます。
オーバーサンプリング倍率設定
ソフトのベースを作りながら、各機能の確認を進めていきます。最初は効果が不明なΔΣオーバーサンプリング倍率変更機能を実装します。効果以外に、再生中に切り替えた場合にノイズの発生等、問題がないか確認をします。最初にソフトのジェネラルフローを作成しました。
メインループは、キー検出とキー処理のみです。DACのモノラル設定はイニシャル処理で行います。
イニシャル処理では、他にライブラリの登録、マイコンのポート設定や、DACのデフォルト設定も行います。それでは、オーバーサンプリング倍率選択仕様を確認します。
オーバーサンプリング倍率は32倍の選択も可能ですが、今回は64倍と128倍の選択とします。このOSビットはレジスタ20にマッピングされています。
レジスタ20には、モノラルモード設定とチャンネル選択設定ビットもあるので、各DAC毎にレジスタ20の設定値の保持が必要となります。レジスタ20の変数設定は下記のように修正しました。
これに伴って、各DACのモノラルL/R設定関数も下記のとおり変更しました。
OS設定確定後のキー処理のフローと該当処理のソースは以下のとおりです。
キー処理の中では、DAC ICへのコマンド発行以外に、LCDパネルの表示処理も行います。これでOSビットの設定処理は完了です。
キー検出処理
12chアッテネータで実装したキー検出はごてごてしてしまったので、今回はシンプルに実装します。下記はキーステータス(KSTS)のタイムチャートです。
kdelayはチャタリング吸収用に設定したタイミングで、この時間経過後1度キー検出を行い確定判定してKSTSをインクリメントします。
まずは1つのキーのみ実装しますが、ポート7を使用しました。ポート設定はプルアップ抵抗付きの入力設定なので、単純にタクトスイッチを接続するだけです。処理は各KSTSごとにチェックを行い、不一致の場合所定のKSTSに変更してループを出る処理としています。
次回はコーディングしたソフトを使って動作確認を行います。
つづく(製作編36)