« DDSであそびましょ! その2 | トップページ | DDSであそびましょ! その4 »

2013年6月 7日 (金)

DDSであそびましょ! その3

5d3_0642s
あっさりとプログラムも動きました。
これにはカラクリがあって、ほとんど自分では作っていない。
前回作った周波数カウンターとほぼ同じ構成、
「PICで楽しむUSB機器・自作のすすめ」にあった、
「USB接続低周波発振器の作成」がベース、
AD9834の代わりにAD9850になっただけ、なので、
プログラムもDDSの出力ルーチンを変更しただけなのです。
でも、ソース付で、ここまで動けば、
あとはもう、自由自在ですよね! ?

変更したのがSetupDDS()とそのサブルーチンSIrialOut()
これだけ直せばとりあえず動きます。

//// DDSシリアル出力関数
void SetupDDS(unsigned long freqdata, char flag) {
 float SetFreq;
 unsigned long temp;
 unsigned char w[5];
 char i;
 ///設定周波数から設定パラメータ計算
 ///クロック 128MHzで計算
 SetFreq = 34.359738 * (unsigned long)freqdata; // 設定値
 temp = (unsigned long)SetFreq; // 整数に変換
 w[0] = 0x00; // COMMAND
 w[1] = (temp >> 24) & 0xff; // Freq data 31-24bit
 w[2] = (temp >> 16) & 0xff; // Freq data 23-16bit
 w[3] = (temp >> 8)  & 0xff; // Freq data 15-8bit
 w[4] =  temp  & 0xff; // Freq data 7-0bit
 /// DDSへ下位から送信 ///
 for(i=4; i>=0; i--)  {
 SerialOut(w[i]); //  1 char out
 }
 dds_fsync = 1; // FSYNC High
    dds_fsync = 0; // FSYNC low
}

void SerialOut(unsigned char data) {
 unsigned char i;
 unsigned char mask;
 mask = 0x01;

 for(i=0; i<8; i++) { // 1charを下位bitから送信
   if(data & mask) 
     dds_sdat = 1; 
 else
     dds_sdat = 0;
 dds_sclk = 1; // SCK High
 dds_sclk = 0; // SCK low
 mask = mask << 1; // next bit
 }
}

|

« DDSであそびましょ! その2 | トップページ | DDSであそびましょ! その4 »

電子工作」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: DDSであそびましょ! その3:

« DDSであそびましょ! その2 | トップページ | DDSであそびましょ! その4 »