2016年4月2日土曜日

AD9850 DUAL DDS Shields

AD9850 DDS VFOにキャリア発振器を含めた物を作る目的で、DUAL DDS Shieldsを作った。これは、AD9850 Module用で、DDSを1枚若しくは2枚登載したアプリケーションが可能。殆ど余分な回路が無い為、DDSベースボードとして使える。
AD9850 Moduleを1枚実装した例。上下どちら側で使うかは、アプリケーション次第である。従来の1DDS VFOを移植も良い。 
AD9850 Moduleを2枚実装した例。DUAL DDS システム(マルチオシレータ、変調器付きSG、VFOなど)が可能。 

回路図。 

PCBサイズ 69 x 54















Program(スケッチ)

DUAL DDSのサンプル。


//////////////////////////////////////////////////////////////////////
//  AD9850 DUAL DDS VFO test program ver.1.0
//
//    Copyright(C)2016.JA2GQP.All rights reserved.
//     Crystal replacement
//                                                  2016/4/2
//                                                  JA2GQP
//////////////////////////////////////////////////////////////////////

//----------  Define Constant Value   ----------
                                               
const byte  C_DATA = 7;                            // DIO7
const byte  C_UD = 8;                                // DIO8
const byte  C_CLK = 9;                              // DIO9

const byte  V_DATA = 10;                          // DIO10
const byte  V_UD = 11;                              // DIO11
const byte  V_CLK = 12;                            // DIO12

const long  VFO_FRQ = 7000000L;              // VFO=7.000Mhz
const long  CAL_FRQ = 7100000L;              // CAL=7.100Mhz

const unsigned long  DDS_CLK = 125000000L;   // AD9850 Clock
const unsigned long  TWO_E32 = 4294967295L;  // 2^32
const byte  DDS_CMD = B00000000;             // AD9850 Command

//----------  Memory Assign  -------------------

long Dds_Dat = 0;                                     // DDS Data

//----------  Initialization  Program  ---------------

void setup(){
  pinMode(C_UD,OUTPUT);
  pinMode(C_CLK,OUTPUT);
  pinMode(C_DATA,OUTPUT);

  pinMode(V_UD,OUTPUT);
  pinMode(V_CLK,OUTPUT);
  pinMode(V_DATA,OUTPUT);
}

//----------  Main program  ---------------

void loop() {
  Dds_Dat = VFO_FRQ;
  Fnc_Dds(Dds_Dat,V_DATA,V_CLK,V_UD);

  Dds_Dat = CAL_FRQ;
  Fnc_Dds(Dds_Dat,C_DATA,C_CLK,C_UD);
  delay(100);
}


//----------  Function DDS PROC  ---------------

void Fnc_Dds(double frquency,byte dat,byte clk,byte ud){
  unsigned long wrk = frquency * TWO_E32 / DDS_CLK;
 
  digitalWrite(ud,LOW);

  shiftOut(dat,clk,LSBFIRST,wrk);
  shiftOut(dat,clk,LSBFIRST,(wrk >> 8));
  shiftOut(dat,clk,LSBFIRST,(wrk >> 16));
  shiftOut(dat,clk,LSBFIRST,(wrk >> 24));
  shiftOut(dat,clk,LSBFIRST,DDS_CMD);   // AD9850 command

  digitalWrite(ud,HIGH);
}
            

0 件のコメント: