AD9851程序,求高人指教

[复制链接]
2716|8
 楼主| wlf464842650 发表于 2012-7-9 19:46 | 显示全部楼层 |阅读模式
#include<reg51.h> //头文件
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long int
#define AD9851_DATA P1
//定义AD9851和51的接口 8
sbit W_CLK=P2^4;
sbit FQ_UD=P2^3;
sbit RESET=P2^2;
double Fm=0;
uchar tab[]={0x01,0x00,0x0,0x00,0x00};
//tab[0]为相位和频率设置单元,此处初始相位设置为零,开倍频30M*6=180M系

void delay(uint i)
{
    while(i--);
}
void delay_long(uint x)
{
    uint y,z;
    for(y=0;y<1000;y++)
    {
        for(z=0;z<x;z++) ;
    }
}
//分32位数据分解为4个字节存于tab[]数组的后四个单元,tab[0]为相位和频率的

void change(double f)
{
    ulong num;
    Fm=1073741824/45.0f*f;      //误差40000000H,整
    num=(ulong)Fm;
    tab[1]=(char)(num>>24);
    tab[2]=(char)(num>>16)&0xff;
    tab[3]=(char)(num>>8)&0xff;
    tab[4]=(char)num&0xff;
}
void init()
{
    FQ_UD=0;
    delay(1);
    W_CLK=0;
    delay(1);
    RESET=1;
    delay(10);
    RESET=0;
    delay(1);
}
void write_data(double frq)
{
    uchar i;
    change(frq);
    for(i=0;i<5;i++)
    {
        W_CLK=0;
        delay(1);  
        P1=tab[i];
        W_CLK=1;
    }
    FQ_UD=1;
    delay(1);
    FQ_UD=0;
    delay(1);
}
void main()
{
    init(); //ad9851初始化
    write_data(0.001);
//此处为频率设置,当前频率为(double类型)10MHz。如有误差,自己加补偿。
     while(1);
}


正弦波小于1MHZ以下时(实则5Mhz就开始有失真现象),输出波形就失真,上半周期还行,下半周期很尖(越小越是尖)。波形是直接从AD9851,21脚测得。不知道什么原因,请高人指教,不甚感激!!!





}
shell.albert 发表于 2012-7-9 21:23 | 显示全部楼层
第一:把你的电路原理图上传上来!
第二:把你的示波器抓图上来!
coody 发表于 2012-7-9 22:36 | 显示全部楼层
失真,如果频率正确,应该是硬件引起
 楼主| wlf464842650 发表于 2012-7-10 14:08 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wlf464842650 发表于 2012-7-10 14:10 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| wlf464842650 发表于 2012-7-10 14:11 | 显示全部楼层
大虾,指点指点
 楼主| wlf464842650 发表于 2012-7-10 17:50 | 显示全部楼层
3# coody 原理图如下,求大虾看看,,指点
 楼主| wlf464842650 发表于 2012-7-10 17:51 | 显示全部楼层
2# shell.albert 原理图如下
 楼主| wlf464842650 发表于 2012-7-11 10:44 | 显示全部楼层
求大仙,求大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部