« DDSチップでいろいろ遊んでみる   --第7回-- | メイン | DDSチップでいろいろ遊んでみる   --第9回-- »

DDSチップでいろいろ遊んでみる
   --第8回--

SPIデータの出力をLEDで確認しているところ。左からD0,D1.....D7。
8bit.JPG
プログラムの実際
 最初にFTDI社のホームページからドライバをダウンロードして、インストールしておきます。VB.NETからFTDI社のドライバを呼び出すのはとても簡単で、用意されているコードをコピーしてくるだけです。1バイトずつ出力する場合は、サンプル・コードそのままでも良いのですが、SPIデータを文字列に構成してから出力する場合は、ByRefをByValに書き換えてください。
 Public Declare Function FT_Write Lib "FTD2XX.DLL" (ByVal lngHandle As Integer, ByVal lpszBuffer As String, ByVal lngBufferSize As Integer, ByRef lngBytesWritten As Integer) As Integer

 AD9834の制御データは次のような構成になっています。

初期化コマンド + 周波数データ + フェーズデータ + 初期化コマンド

 最初の初期化コマンドは、読み込むデータの指定を行います。周波数データ、フェーズデータを読み込んだあとで、内部レジスタをリセットすると読み込んだデータが有効になります。最初に周波数データをプログラムしてみます。
 周波数データは次の式で求めることができます。

dstatus = (f0 * 10 ^ 6) / MCLK * (2 ^ 28)

 dstatusはAD9834に渡すためのデータです。MCLKは外部クロック周波数です。今回は50MHzを使っています。文字列に並べるために求められたdstatusをいったん配列に直します。d0に周波数データを0と1のByte表現に直して配列として保存します。

n = Len(Convert.ToString(dstatus, 2))

  For i = 0 To 27
    If n >= i Then
      d0(i) = Convert.ToString(dstatus And 1)
      dstatus = dstatus >> 1
     Else
      d0(i) = 0
     End If
  Next

 d0をさらに1バイトずつに分解し、出力するための文字列を生成しますが、この辺は実際のコードを見てください。プログラムのソースは用意ができ次第、公開する予定です。VB.NETでは、バイトを操作するコマンドがCなどのように用意されていないので、このような手間をかけて処理しています。
 次回はコントロール・プログラムで試作基板を操作しながら、修正点、改良したい機能などを考えてみます。

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/1341

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメ ントは表示されません。そのときはしばらく待ってください。)