きょぼ太郎
きょぼ太郎
往年の機器に自作HTPCと自作のUSB-DACとを組合せ、音楽、映画を楽しんでます。 スピーカー:Infinity Kappa 6.2i CDプレーヤ:SONY CDP-XA7ES

日記

最新のレス

お気に入り製品

お気に入り製品はありません

お気に入りユーザー

お気に入りユーザーはありません

お気にいられユーザー

最新の日記

USBオーディオ(9) LRCK(WordClock)からPLL-VCXOで低Jitter-MCLK生成、Arduinoで制御(その1)

前回試作した自作VCXOは再生ソースのFSによりMCLKの設定を手動切替をしなければならなかったので、かなり面倒でした。
今回は自動切替できる様、マイコン制御に挑戦してみました。
マイコンも敷居が高めなので、最も敷居が低そうなArduino UNOクローン約\2,200を購入して、イチから勉強です。


Arduinoは日頃お世話になっているMi-Take基板でも使われているマイコン、AVRの兄弟版でATmega328P(Atmel社製)をコアとし、ソフト開発環境も含め、敷居を相当下げたものの様です・・・・
指定のWebからArduino IDEという統合開発プログラム・ソフトをダウンロードするだけでマイコンの統合開発環境が無償で揃い、AVRは無理でもArduinoなら何とかなるかも?と期待を持たせてくれるので非常に有難いものです。
またC言語ライクでプログラム・ソフト開発できるらしいのですが、

「実際、C言語って何?」っていうほぼゼロスタート・・・(笑)

またこの世界では、プログラムは『スケッチ』で、プログラマーは『アーティスト』と呼ぶそうです。思わず笑ってしまいますが、笑ってはいけません。

■Arduino独学初日、自宅でArduino IDE をノートPCにインストールと下記URLにて自習です。 
https://deviceplus.jp/hobby/arduino-listicle-01/ より
Webでスケッチをいろいろ見てみると、EXCELのVBAの記述にちょっと似てるかも?って感じです。

1)自習その1 LED点滅(所謂Lチカ) deleay(1000); //1秒待つ
2)自習その2 マイコンのADC入力ポートに入力したアナログ入力電圧値(5V、  3.3V、GND)を1秒間隔でシリアルモニタに表示させる練習 分解能が1,023段階なのでADCは10bitの様です。
3)自習その3 いきなり”周波数カウンタ”に挑戦!(Webから検索したスケッチ丸写し)にて USB-DDCのI2S LRCK出力をArduino UNOのDigital-in pin#5)に入力、その周波数をPC側のArduino IDEシリアルモニタに表示数値は結構目まぐるしくLRCKの値が吐き出されてきます。

良く判らないけど、わずか数行のプログラム(スケッチ)で電圧や周波数がArduinoで測定でき、PCにシリアルで転送できる様子は非常に感動しました。
やっているうちに頭が痛くなってきたので初日はここ迄で終わり。

■Arduino独学2日目、ぶっつけの試作プログラム
初日に自習した その3)の周波数カウンタを応用し、実際の回路を制御する為、お手本のスケッチ(https://deviceplus.jp/hobby/entry_005/)を元に適当に
自分なりに制御を考えてみました。コピペのソースコードにてLRCKを自動判定し、FSの周波数によりマイコンの出力側の特定PortのレベルをHigh/LOWレベル、
それにより外部回路をコントロールさせるだけの非常に単純なスケッチです。
ハードウエアとの接続は次の通りです。


今回使用したPLL-ICの分周比設定はパラレル、シリアルともに制御可能です。
パラレル制御の方がスケッチは遥かに簡単ですが、1/256,1/512しか設定ができず、FS176.4KHz,192KHzが再生できません。シリアル制御は次回の挑戦ということで・・・

参考までにパラレル制御時のスケッチ概要を載せておきます。
/---------<スケッチ概要例>---------/
#include <FreqCounter.h>
long int frq;

void setup() {
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
pinMode(7, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(5, INPUT);
Serial.begin(9600); //serial portに接続
}

void loop()
{
//FreqCounter部のスケッチは省略 (興味ある人は FreqCounter Arduino でググって下さい。)

 if (frq < 4454) //周波数が43.66KHz-44.54KHzの時は
{
digitalWrite(13, LOW); // PLL分周 512FS設定用(1)
digitalWrite(11, HIGH); //PLL分周 512FS設定用(2)
digitalWrite(7, LOW); // PLL分周 512FS設定用(3)
digitalWrite(9, LOW); // VCXO 24.576MHz OFF
digitalWrite(8, HIGH); // VCXO 22.5792MHz ON
}

//周波数が44.55KHz-48.48KHzの時の処理
else if (frq < 4848)
{
  //上記制御に準じ、直接ICのPINを制御(省略)
}

//周波数が48.49KHz-89.08KHz以下の時の処理
else if (frq < 8908)
{
  //上記制御に準じ、直接ICのPINを制御(省略)
}

//周波数が89.09KHz-96.96KHz以下の時の処理
else
{
  //上記制御に準じ、直接ICのPINを制御(省略)
}

 delay(80);
}
/---------<スケッチ概要終わり>---------/

やっているうちにまた頭が痛くなって来たので、気分転換に近所の温泉にリフレッシュしてきました。適当でお恥ずかしいスケッチですが、工夫すれば再生中のFSをLEDで表示させることも可能だと思います。
早速自作DACに組み込み、分周比とVCXOの自動切替をさせてみました。やはり自動切替は楽です。これではハードロジック回路 がすたれるのもなんとなく判ります。

自分で難しいコードを書く必要が無く、どこかからソースコードを引っ張って来て、コピペしてくれば、それでも何とか動いてしまう・・・
マイコン組込は結構難しいという印象でしたが、Arduino であればかなり敷居が下がるかも?・・・というDIYオーディオ日記でした。

最新のレビュー/コメント

レビューはありません

マイルーム

マイルームは公開されていません

所有製品

  • その他ビデオプレーヤー PRINCETON PAV-MP1
  • Blu-ray Discレコーダー TOSHIBA DBR-Z150
  • 液晶テレビ/ディスプレイ TOSHIBA 42Z9000
  • ヘッドホン SONY MDR-1A
  • プリメインアンプ SANSUI AU-α907XR