トラ技付録のDDSはPIC制御で、開発環境が整っていないので、Arduinoで制御しようと思いaitendo DDSモジュール[AD9850-M]をテストしてみました。
DDSチップはアナログデバイス社のAD9850を搭載していて125MHzの基準クロック入力で60MHzくらいまで出そうです。
お値段も¥3500とお手頃です。
DDSモジュールを載せた基板です。
Arduinoに線が伸びていますが、スタンドアローン動作用にスペースを残してあります。
Arduinoに接続してテストしてみました。
回路図です。
波形です。
AD9850用のライブラリが用意されていますので、サンプル通りで簡単に周波数の設定ができます。
テスト用スケッチでは、7MHzから5秒おきに10KHzずつUPしていきます。
テスト用スケッチです。
------------------------------------------------------------
// ad9850 dds test
#include <EF_AD9850.h>
#include <LiquidCrystal.h>
// LCD D4 D5 D6 D7 En Rw Rs
// D 03 04 06 07 10 11 12
// DDS Wclk Fqup Rset D7
// D 08 02 05 09
// Port Map
// D00 Rx reserved
// D01 Tx reserved
// D02 DDS
// D03 LCD
// D04 LCD
// D05 DDS
// D06 LCD
// D07 LCD
// D08 DDS
// D09 DDS
// D10 LCD
// D11 LCD
// D12 LCD
// D13
// D14 A00
// D15 A01
// D16 A02
// D17 A03
// D18 A04
// D19 A05
const byte PinLcdD4 = 3; // LCD Data 4
const byte PinLcdD5 = 4; // LCD Data 5
const byte PinLcdD6 = 6; // LCD Data 6
const byte PinLcdD7 = 7; // LCD Data 7
const byte PinLcdEN = 10; // LCD Enable
const byte PinLcdRW = 11; // LCD Read Write
const byte PinLcdRS = 12; // LCD RS
LiquidCrystal lcd(PinLcdRS, PinLcdRW, PinLcdEN, PinLcdD4, PinLcdD5, PinLcdD6, PinLcdD7);
// LiquidCrystal lcd(rs,rw,enable,d4,d5,d6,d7);
const byte PinWclk = 8; // DDS wclk
const byte PinFqup = 2; // DDS fqup
const byte PinRset = 5; // DDS rset
const byte PinD7 = 9; // DDS D7(data)
EF_AD9850 AD9850(PinWclk, PinFqup, PinRset, PinD7);
// EF_AD9850 AD9850(8, 2, 5, 9);
long freq = 7000000; // 7MHz
void setup()
{
lcd.begin(8,2); // 8char 2line
lcd.print("Tanukino");
lcd.setCursor(0,1); // col=0+1 line=1+1
lcd.print("aDDS 02");
delay(2000);
AD9850.init();
AD9850.reset();
AD9850.wr_serial(0x00, freq);
}
void loop(){
freq += 10000; // up 10kHz
lcd.clear();
lcd.print(freq / 1000); // in kHz
AD9850.wr_serial(0x00, freq); // set frequency
delay(5000); // wait 5sec
}
------------------------------------------------------------
DDSチップはアナログデバイス社のAD9850を搭載していて125MHzの基準クロック入力で60MHzくらいまで出そうです。
お値段も¥3500とお手頃です。
DDSモジュールを載せた基板です。
Arduinoに線が伸びていますが、スタンドアローン動作用にスペースを残してあります。
Arduinoに接続してテストしてみました。
回路図です。
波形です。
AD9850用のライブラリが用意されていますので、サンプル通りで簡単に周波数の設定ができます。
テスト用スケッチでは、7MHzから5秒おきに10KHzずつUPしていきます。
テスト用スケッチです。
------------------------------------------------------------
// ad9850 dds test
#include <EF_AD9850.h>
#include <LiquidCrystal.h>
// LCD D4 D5 D6 D7 En Rw Rs
// D 03 04 06 07 10 11 12
// DDS Wclk Fqup Rset D7
// D 08 02 05 09
// Port Map
// D00 Rx reserved
// D01 Tx reserved
// D02 DDS
// D03 LCD
// D04 LCD
// D05 DDS
// D06 LCD
// D07 LCD
// D08 DDS
// D09 DDS
// D10 LCD
// D11 LCD
// D12 LCD
// D13
// D14 A00
// D15 A01
// D16 A02
// D17 A03
// D18 A04
// D19 A05
const byte PinLcdD4 = 3; // LCD Data 4
const byte PinLcdD5 = 4; // LCD Data 5
const byte PinLcdD6 = 6; // LCD Data 6
const byte PinLcdD7 = 7; // LCD Data 7
const byte PinLcdEN = 10; // LCD Enable
const byte PinLcdRW = 11; // LCD Read Write
const byte PinLcdRS = 12; // LCD RS
LiquidCrystal lcd(PinLcdRS, PinLcdRW, PinLcdEN, PinLcdD4, PinLcdD5, PinLcdD6, PinLcdD7);
// LiquidCrystal lcd(rs,rw,enable,d4,d5,d6,d7);
const byte PinWclk = 8; // DDS wclk
const byte PinFqup = 2; // DDS fqup
const byte PinRset = 5; // DDS rset
const byte PinD7 = 9; // DDS D7(data)
EF_AD9850 AD9850(PinWclk, PinFqup, PinRset, PinD7);
// EF_AD9850 AD9850(8, 2, 5, 9);
long freq = 7000000; // 7MHz
void setup()
{
lcd.begin(8,2); // 8char 2line
lcd.print("Tanukino");
lcd.setCursor(0,1); // col=0+1 line=1+1
lcd.print("aDDS 02");
delay(2000);
AD9850.init();
AD9850.reset();
AD9850.wr_serial(0x00, freq);
}
void loop(){
freq += 10000; // up 10kHz
lcd.clear();
lcd.print(freq / 1000); // in kHz
AD9850.wr_serial(0x00, freq); // set frequency
delay(5000); // wait 5sec
}
------------------------------------------------------------