CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

D/Aコンバータテスト

シリアルD/AコンバータMCP4822の動作確認をしています
 
拡張ボードにはうまい具合にdsPIC30F4013の36,37,38ピンのSPI信号が来ているのでこれにDACを接続しプログラムからはペリフェラルドライバを呼出しSPIポートをオープンしているのですが何故か全くSPI信号が出てくれません。
よくよくマニュアルを見直すと、今接続されているCSCK,CSDI、CSDO(下図赤枠)は音声コーデック専用のシリアルポートでした。
本来のSPIポートは24,25,26ピンのSCK1,SDI1,SDO1(下図青枠)で完全に配線を誤ってしまいました。
良く似た信号名で紛らわしい・・・
 
イメージ 1
 
 
コーデック専用ポートもAC-linkというやはりクロック同期のシリアル転送なので、もしかしたらつなげられそうにも見えたのですが、フレーム開始パルスで変換開始をD/A側に知らせるようなのでちょっと無理そうです。
しかたがないのでこのピンを汎用I/Oとしてプログラムし、ソフトウェアでクロック、データを作ってやることにします。
 
ソフトウェアSPIドライバでMCP4822に0~4095のデータを送りランプ波形を発生しているところです
周期は92.8ms、この間に4096個のデータが出力されているので1回のデータ変換時間は22.6us、逆数のサンプリング周波数で見ると約44.1kHzで、偶然にもCDオーディオ信号と同じです
 
イメージ 2
ソフトウェアSPIなのでもっと遅くなるかと思ったのですが、あらかじめデータが用意されていれば音声出力程度はできるようです
SPIの処理自体は単純なのでアセンブラで書き直してもいいかもしれません
 
次に1データフレームを拡大したところでch1はSCK(転送クロック)、ch2は/CS(フレーム信号)です
転送クロックは約700kHzとなっています。
 
 
イメージ 3
 
もしハードウェアSPIが使えていれば転送クロックは20MHzまで上げられますから転送速度は実に30倍。
もっともD/Aコンバータ自体のセトリング時間制限もありますが、それでも4~5倍のデータレートが望めたところです