DAC+ADC Shield for PICrouter

ようやく火入れが終わりました。
 
DAC+ADC Shield for PICrouter
 
PrMプロジェクトの各モジュールはスイッチや可変抵抗で制御可能な機能は
全て外部から制御するようになってます。
 
PrMプロジェクトがミキサーの全ての機能をOSCから制御することをベース
に考えているからです。もちろん、そのOSC制御を引き受けるのがPICrouter
になるのですが、音量調整などは0~3.3Vの範囲の電圧でVCA制御となります。
PICrouterのPWMは4個しかないので全く足りません。
 
さらに、フェーダーやボリュームの入力も直接モジュールに接続せず、一旦、
PICrouterで受けてからモジュールに渡したいので、アナログ入力もデフォの
14ポートだと足りなくなる恐れがあります。
 
と言うわけで、SPI経由で制御できるAnalog DevicesのDAC「AD5328」を
3個とADC「AD7490」を1個搭載したPICrouter用のシールド基板を作成
しました。DACは12bit 8ポートx3で24ポート、ADCは12bit、16ポートで
全て共通のSPI2で制御する構成です。
 
今まで、ディジーチェーンで連結したICの制御は経験があったのですが、
別々のICをCSピンで分けて同一のSPIから制御したことがなかったので、
その辺が上手く行くかドキドキでした。
結果的には上手く動作させることが出来たのですが、ハマった点をメモと
して書いておきます。
 
まず、AD5328です。こちらは割とすんなりと動いてくれました。初期設定
がちゃんとICに届けば問題なし。LDACピンを3個で共通にして、SYNCピン
を別々のポートにしたら、3台とも素直に動いてくれました。オシロで電圧
の変化を確認して、AD7490に取りかかって、SPIの設定を書き換えて、
ふとAD5328を動くか確認したところ・・・動かない。なんで?とSPIの
設定を元に戻しても動かない・・・。なんで??とSPI設定を見直したり、
コードを見直しても分からず。で、ひょっとしてと思って電源をオフ→オン
してみたら動きました。PICrouterへはMPLAB ICD3で書き込みを行っている
のですが、このとき、書き込み後に起きるリセットだとAD5328はオンオフ
されていないのが原因みたいです。オシロを見てみると、ファームの書き換え
前に出力した電圧値が書き換え後にもそのまま出力されてました。そりゃそう
ですよね、ファームからAD5328のリセット処理を行っていないんだから(汗
 
次に、AD7490の制御。これが大変でした。AD7490から正しい値を取得できる
ようになるまで、1週間くらいかかってしまいました。AD5328を動かした
SPIの設定で、クロックだけ1MHzに変更して動かしてみたところ、1回目は
値が返ってくるのに、2回目は返ってこず。受信待ちから抜けられなくなって
おり、受信オーバーフローのビットが立っているので、手動でビットをクリア
してあげると2回目以降も値を受信するように。でも、おかしい・・・。
テスト用につないだ可変抵抗を回していくと0から順調婦負値が大きくなって
いってちょうど中間にさしかかったところで値が4096を超え、値が入ってくる
12bitのレンジをはみ出て、上位4bitのポート番号が切り替わる・・・。Saleae
のLogicで見るとこっちでも同じ値。SPIクロックの値を調整してみたり、
コードをあれこれいじっても上手く行かず。まーハマりました。
 
原因は何のことはないSPIの設定で、AD5328は「動いていた」のではなく、
「動いちゃってた」のでした。この設定が正解だろうと思い込んでしまって、
立てる必要の無いビットを立てたままにして、ハマりました。今日になって
ようやく思い込みと先入観を排除して、フラットに状況を確認出来るようになり、
AD5328が「動いちゃってた」設定を見直して、最低限必要な設定のビットだけ
立てるようにしたところ、動きました。このあと、AD5328用の記述も復活させ
どちらも問題無く動くことを確認しました(ここで上に書いた電源オフオンに
出くわして、またハマりましたが)。
 
AD5328やMAX6969のようにデータをセットするだけで、ICから何も返事がない
ものは、案外、テキトーにSPI設定をしても動いちゃうんだなというのが分かり
ましたw 送受信どちらも行うICは、そこらへんちゃんとしないと受信で色々起き
ることが分かったので、良い勉強になりました。

コメントをどうぞ

Your email address will not be published. Required fields are marked *

*