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

f:id:torusanada98:20200829185008j:plain

製作編36

前回の記事の紹介に従って、ΔΣ変換オーバーサンプリング倍率設定変更ソフトを作成して動作確認を行います。

OS設定変更ソフト

C++言語で実用ソフトを組むのは12chアッテネータ作成時以来です。BASICは血肉となっているのでリファレンスは必要ありませんが、C++はそうではないのでarduinoの日本語リファレンスを見ながらのコーディングです。C++はBASICやアセンブラと比べてだらだらとコードを書けるので着手のハードルは低いと思います。改めて今回作成するコードのフローチャートを掲載します。

f:id:torusanada98:20200826073018p:plain

一通り組み上げてコンパイルを行い、エラー部分を修正して再コンパイルを繰り返しました。arduinoコンパイラは、間違い部分を的確に指摘してくれるので助かります。主なミスは、変数の大文字小文字の間違い、switch分のcaseの後をセミコロンとしてしまう、作成した関数実行時にvoidを付けてしまう等でした。それでも比較的短時間でコンパイルを通す事ができました。下記がコンパイル完了時のIDEの画面です。

f:id:torusanada98:20200826073037p:plain

メモリの使用量はコード用82256byte中の16%をRAM2048byte中の23%使用なので、今後の機能拡張には全く問題ありません。

動作確認

初めにキー検出を確認します。まずは想定どおりの動作はしているようです。キーを押す間隔を短くするとキー受付しなくなりました。試しにチャタリング除去用のタイマーkdelayを50msから30msに変更したところ、問題なくなりました。次は音を聴いてみます。どんな事が起こるかわからないので、真空管ヘッドホンアンプを接続してヘッドホンで音を聴きます。変な音です。モノラルモード設定がされていないようです。イニシャル処理に移したモノラルモード設定処理に間違いがあり、修正したところ正しくステレオ再生できました。今確認に使っているソフトは、OS設定変更用の関数のコールをスキップさせていますが、再生中にキーを押してOS設定変更の表示が正しく切り替わる事を確認しました。

f:id:torusanada98:20200826073042j:plain

f:id:torusanada98:20200826073047j:plain

いよいよスキップさせていたOS設定変更用の関数をコールしてみます。ソフトを再ダウンロードして、ヘッドホンの音量を絞って恐る恐るキーを押してみました。ノイズ発生もなく、全く変化が感じられません。本当に設定変更されているか確認するために、無音時の波形をオシロスコープで観測してみました。上が64倍時、下が128倍時のディザ信号波形です。

f:id:torusanada98:20200826073029j:plain

f:id:torusanada98:20200826073032j:plain

両者観測時にオシロスコープの感度は変えていません。128倍時の方がレベルが下がっていますが、ディザ周波数があがった事でアンチエイリアスフィルタの減衰量が高くなった為と考えられます。ヘッドホンで聴いている限りでは違いが聴きとれませんでしたが、上記観測結果から128倍の方が良さそうなので、デフォルト設定を128倍とする事にしました。この違いに関しては特性の測定と、1000Mマルチアンプシステムで音の違いを次週に確認してみたいとおもいます。

ソフト追加実装

今回実装したソフトはキー入力を1つに絞っていましたが、3つに拡張します。拡張の方法は、KSTSの上位4ビットにデジタル入力ポート番号を保存して3つのキーの処理に対応させる事にしました。タイムチャートは以下のとおりです。

f:id:torusanada98:20200826073025p:plain

キー確定時のKSTSを0x10としていましたが、0xP4(Pはポート番号)に変更しました。キー処理後は従来どおりKSTS=0x00に戻します。キーのオン検出は各ポートを順番に行い、最初にオン検出したポートのキーに関して一連の処理を行ってキーのオン確定をさせます。下記が修正したキー検出処理部のソースコードです。修正のボリュームは大きくありませんでした。

f:id:torusanada98:20200826073021p:plain

次回は、各OS設定時の特性確認と修正版ソースの動作確認を行います。

 

つづく(製作編37)