DDSであそびましょ! その3
あっさりとプログラムも動きました。
これにはカラクリがあって、ほとんど自分では作っていない。
前回作った周波数カウンターとほぼ同じ構成、
「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
}
}
| 固定リンク
「電子工作」カテゴリの記事
- 続Arduino IDEでマルチタスクプログラミング ?(2022.12.23)
- SPRESENSE ILI9341用ライブラリーでハマりました。(2022.11.24)
- Arduino IDEでマルチタスクプログラミング ?(2022.11.19)
- Windows10 ???.tar.gzの解凍(2019.12.19)
- マルチカットSIMって何かと思ったら(2019.10.06)
コメント