AD9850的问题 15
我在淘宝买了块ad9850的模块,用at89s52控制该模块,程序也是用的例程,为什么模块输出的方波频率跟程序中设定的频率一样,也很稳定,但是正弦波频率一直不稳定啊(输出...
我在淘宝买了块ad9850的模块,用at89s52控制该模块,程序也是用的例程,为什么模块输出的方波频率跟程序中设定的频率一样,也很稳定,但是正弦波频率一直不稳定啊(输出频率越高,波动范围越大)。
#include<reg52.h>
#include<intrins.h>
sbit ad9850_fq_up =P2^3; //P3.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest =P2^4; //P3.0口接ad9850的rest脚/PIN12
sbit ad9850_w_clk =P2^5; //P3.2口接ad9850的w_clk脚/PIN7
sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25
//***************************************************//
// ad9850复位程序(并口) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
//***************************************************//
// 向ad9850中写命令与数据(并口) //
//---------------------------------------------------//
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w0数据
w=w0;
P3=w; //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w1数据
w=(y>>24);
P3=w; //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w2数据
w=(y>>16);
P3=w; //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w3数据
w=(y>>8);
P3=w; //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w4数据
w=(y>>=0);
P3=w; //w4
ad9850_w_clk=1;
ad9850_w_clk=0;
//移入始能
ad9850_fq_up=1;
ad9850_fq_up=0;
}
void main()
{
ad9850_reset();
ad9850_wr_parrel(0x00,10000);
while(1)
{
}
} 展开
#include<reg52.h>
#include<intrins.h>
sbit ad9850_fq_up =P2^3; //P3.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest =P2^4; //P3.0口接ad9850的rest脚/PIN12
sbit ad9850_w_clk =P2^5; //P3.2口接ad9850的w_clk脚/PIN7
sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25
//***************************************************//
// ad9850复位程序(并口) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
//***************************************************//
// 向ad9850中写命令与数据(并口) //
//---------------------------------------------------//
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为125MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w0数据
w=w0;
P3=w; //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w1数据
w=(y>>24);
P3=w; //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w2数据
w=(y>>16);
P3=w; //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w3数据
w=(y>>8);
P3=w; //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w4数据
w=(y>>=0);
P3=w; //w4
ad9850_w_clk=1;
ad9850_w_clk=0;
//移入始能
ad9850_fq_up=1;
ad9850_fq_up=0;
}
void main()
{
ad9850_reset();
ad9850_wr_parrel(0x00,10000);
while(1)
{
}
} 展开
2个回答
展开全部
AD9850的datasheet里有说明,AD9850可以输出的最大频率应该是你的板子上晶振频率的一半(原理是采样定理),并且在这个范围内,频率越大谐波越多,也就越不稳定的,你输出频率是多少啊,不要太大。AD9850方波的产生是通过比较器产生,将产生的正弦波幅值进行比较输出,产生的原理比较而言要简单,不出大问题,都是比较稳定的。
再者,晶振可能的干扰也会比较大的,你的晶振是125MHz的,频率比较大了,如果板子不是很好,隔离做的不好,干扰还是很大的
我之前用串口的方式也写过控制字,串口方式得到的结果比较好,你可以试试
再者,晶振可能的干扰也会比较大的,你的晶振是125MHz的,频率比较大了,如果板子不是很好,隔离做的不好,干扰还是很大的
我之前用串口的方式也写过控制字,串口方式得到的结果比较好,你可以试试
微测检测5.10
2023-07-11 广告
2023-07-11 广告
IEC62133与en62133的区别如下:1. 认证机构不同:IEC62133是国际的标准,它以国际通用的标准进行生产;而en62133采用的是欧盟的标准,它使用欧盟的生产需求进行生产。2. 宗旨不同:IEC62133的宗旨是促进电气、电...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询