花生漫画

DDS初始化及AD9833写程序

0
阅读(3579)

 


AD9833是一款低功耗、可编程波形发生器,能够产生正弦波、三角波和方波输出。各种类型的检测、致动和时域反射(TDR) 应用都需要波形发生器。输出频率和相位可通过软件进行编程,调整简单。无需外部元件。频率寄存器为28位;时钟速率为 25 MHz,可以实现0.1 Hz的分辨率。同样,时钟速率为1 MHz时,AD9833可以实现0.004 Hz的分辨率。AD9833通过一个三 线式串行接口写入数据。该串行接口能够以最高40 MHz时钟速率工作,并且与DSP和微控制器标准兼容。该器件采用2.3 V至 5.5 V电源供电.

#include
typedef unsigned long ulong;
sbit DDSCLK = P2^4; // P2_4,DDS 时钟信号
sbit DDSEN = P2^5; // P2_5,DDS 片选或者写数据有效信号
sbit DDSData =P2^5; // P2_6,DDS 数据信号
extern void DDSIni();
extern void LDelay(unsigned char DelayNum);
extern void Fre_To_DDSData(unsigned char Fre);
extern void SDelay(unsigned char DelayNum);
extern void AD9833_reset();
extern void AD9833_writedata(unsigned int DDSdata);
extern void Load_wave(unsigned int Contr_Reg_data,unsigned int Fre_MSBdata,unsigned int
Fre_LSBdata,unsigned int Phs_data);
//C Files
#include "config.h"
/////////////////////////////////////
/*函数描述:DDS 初始化
/*写入参数:无
/*返回参数:无
/* 根据硬件连接选通MCU 与AD9833 的数据线路;将AD9833 的内部数据进行清零
操作
*////////////////////////////////////
void DDSIni()
{
DDSEN=1; //DDSEN disable
DDSCLK=1; //Clock high
DDSData=0;
AD9833_reset();
}
/////////////////////////////////////
/*函数描述:长延迟
/*写入参数:Delaynum,延迟时间:Delaynum*1.6mS
/*返回参数:无
*////////////////////////////////////
void LDelay(unsigned char DelayNum)
{
unsigned char Delay1p6mS=0XFF;
while(DelayNum--)
{
while(Delay1p6mS--);
}
}
/////////////////////////////////////
/*函数描述:短延迟
/*写入参数:Delaynum,延迟时间:不详
/*返回参数:无
*////////////////////////////////////
void SDelay(unsigned char DelayNum)
{
while(DelayNum--);
}
/////////////////////////////////////
/*函数描述:AD9833 写数据操作
/*写入参数:AD9833 控制字,16bit
/*返回参数:无
标准时序
*////////////////////////////////////
void AD9833_writedata(unsigned int DDSdata)
{
unsigned char data_num=0;
unsigned int DDSdata_temp;
DDSdata_temp=DDSdata;
DDSCLK=1;
SDelay(4);
DDSEN=0; //DDS able
SDelay(4);
for(data_num=0;data_num<16;data_num++)
{
if(DDSdata_temp & 0X8000 )
{
DDSData=1;
}
else{
DDSData=0;
}
SDelay(5);
DDSCLK=0;
SDelay(5);
DDSData=0;
SDelay(5);
DDSCLK=1;
DDSdata_temp=DDSdata_temp<<1;
if(data_num < 15)
{
SDelay(50);
}
}
DDSEN=1;
}