AD9850はDDSとしては古いものです。サイン波と方形波の出力機能を持っています。
先ず動作をさせるプログラムを作る必要があります。おなじみのArduino IDE(Ver. 1.8.19)を使うことにしました。
Arduino uno とか nanoを持っていませんので ATMega168Pを16MHz(Xtal)で動作させることにします。
https://microcontrollerslab.com/interface-ad9850-dds-signal-generator-module-with-arduino-pinout-features/を参考にしました。
プログラムは下記です。このプログラムは100KHzのサイン波と矩形波を出力します。
#include
#include
const int DATA_PIN = 11; //8;
const int W_CLK_PIN = 13; //9;
const int FQ_UD_PIN = 8; //10;
const int RESET_PIN = 9; //11;
double freq = 100000;
double trimFreq = 124999000;
int phase = 50;
void setup(){
DDS.begin( W_CLK_PIN, FQ_UD_PIN, RESET_PIN);
DDS.calibrate(trimFreq);
}
void loop(){
while(1){
DDS.setfreq(freq, phase);
//delay(10000);
//DDS.down();
// delay(3000);
DDS.up();
//delay(2000);
DDS.setfreq(freq + 500, phase);
delay(5000);
DDS.down();
};
}
問題点:
自作のATMega168Pでは動作しないことです。適当なBoardを選んでコンパイルはパスしますが、書き込み後、動作しません。昔のAruduino IDEでは自前のテキスト ファイルを作ると出来たのですが、新しいIDEではできません。
boardはArduino Nano を選択してプロセッサはATMega168を選びました。これだけでは動作しません。
次の問題点は以下の設定です。自前の基板ですので最初は右のコメントアウトしてあるピン番号を指定しました。
でも、動きません。
const int DATA_PIN = 11; //8;
const int W_CLK_PIN = 13; //9;
const int FQ_UD_PIN = 8; //10;
const int RESET_PIN = 9; //11;
https://github.com/F4GOJ/AD9850SPIを確認してみました。下記の文言がありました。
- W_CLK -> D13 arduino UNO/NANO, D52 MEGA
- FQ_UD -> any pin except 10 and 12 UNO/NANO, 50 and 53 MEGA
- DATA/D7 -> D11 arduino UNO/NANO, D51 MEGA
- RESET -> any pin except 10 and 12 UNO/NANO, 50 and 53 MEGA
配線を直して無事動作しました。
ところが矩形波が出ません。ちょっとしたコツ(注意)が有りました。AD9850基板上のVR(duty cycle)をゆっくり回します。クリチカルです。ある点で矩形波が出てきます。矩形波が出たらDuty cycleを50%に合わせればOKです。
矩形波についてはあまり説明が有りません。あるURLにそんなことが書いてありました。
phase = 0, 100,1000と変化させてみましたが、矩形波には変化は出ませんでした。
新しいAD9833なんかを使う方がいいかもですね。