求单片机达人看下AD9850驱动程序
ivansdk2012/11/16电子技术 IP:黑龙江
本人打算做一个单片机AT89S52驱动AD9850的DDS信号发生器。
程序写好了,也用面包板搭了相应的电路,无奈信号就是出不来。
在网上查了很多资料,发现科创这里的高人很多,
于是通过了网站那折磨人的注册流程来到这里,请各位达人不吝赐教。

attachment icon AD9850手册.pdf 318.05KB PDF 58次下载 预览


attachment icon datasheet_AT89S52.pdf 231.04KB PDF 29次下载 预览
请先看程序,我去画原理图,随后放上来。
//header files
#include "reg52.h"            //header file of SCM
#include "stdio.h"            //standard buffered input&output
#include "intrins.h"


#define uint unsigned int
#define uchar unsigned char
//program
sbit w_clk    =P2^2;  //P2.2口接ad9850的w_clk脚/PIN7    AD9850与51单片机接口定义
sbit fq_up    =P2^1;  //P2.1口接ad9850的fq_up脚/PIN8
sbit rset     =P2^0;  //P2.0口接ad9850的rset脚/PIN12
sbit bit_data =P1^7;  //P1.7口接ad9850的D7脚/PIN25   P1为8位数据口
//subfunctions
//serial
void resets()
{
w_clk=0;
fq_up=0;
rset=0;      
rset=1;
rset=0;
w_clk=0;      
w_clk=1;
w_clk=0;
fq_up=0;    
fq_up=1;
fq_up=0;
}
void wrs(unsigned char w0,double freq)
{
unsigned char i,w;
long int y;
double x;
x=4294967295/100;
freq=freq/1000000;
freq=freq*x;
y=freq;
w=(y>>=0);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>8);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>16);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>24);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=w0;  
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
fq_up=1;
fq_up=0;
}


main()
{
    P0=0x00;
    DL(20);
    P1=0x00;
    DL(20);
    P2=0x00;
    DL(20);
    P3=0x00;
    DL(20);


    resets();
    DL(20);


    wrs(0x00,100000);
    
    while(1)
{    
    
//    DL(10000);
}
}
来自:电子信息 / 电子技术
13
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
ehco
11年7个月前 IP:未同步
470852
电路也不上一个,不好分析,9850串行使用的时候
D[7..0]要接成固定的电平,记不得是00000111 还是11111000了,电路连接一定要注意这点
而且,串行驱动时候,一定要复位1us以上,才能变为串行模式,你程序中复位置1后立即置0
达不到这个时间要求。

既然用了循环,为啥要搞5个for啊?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
470855
回 1楼(ehco) 的帖子
十分感谢您的回复,我这就去试一下。
另外接成固定的电平就是接到VCC和GND么?还是要用单片机控制?还是要加排阻?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
470857
回 1楼(ehco) 的帖子
用5个for是因为w为unsigned char 如果循环到32位就要用long int了,比较长。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ehco
11年7个月前 IP:未同步
470859
回 2楼(ivansdk) 的帖子
俺的电路是这样的,你看看D0-7
1.jpg
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ehco
11年7个月前 IP:未同步
470860
Re:回 1楼(ehco) 的帖子
引用第3楼ivansdk于2012-11-16 21:07发表的 回 1楼(ehco) 的帖子 :
用5个for是因为w为unsigned char 如果循环到32位就要用long int了,比较长。

您可以定义1个unsigned char{5} 的数组
然后两层for循环
外层5次
内层8次

外层进行指针操作,指向数组即可
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ehco
11年7个月前 IP:未同步
470865
顺便送你个俺以前写的东东 9850和9851基本是一样的 就是主频不一样而已

attachment icon DDS原理及AD9851电路设计、测试.pdf 777.96KB PDF 57次下载 预览

是这样的
AD9851 工作前必须对其进行初始化,AD9851 上电后默认为并行通信方式,如需采用串行通信方式,上
电后应将AD9851的D7~D0置为二进制数XXXXX011,紧接着依次往W_CLK和FQ_UD端输入宽度约1uS的
高电平脉冲就可以使AD9851工作在串行模式下。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
470871
回 6楼(ehco) 的帖子
哥,你真是我亲哥,太感谢了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
11年7个月前 IP:未同步
470888
给LZ一个我买模块时候的资料
attachment icon AD9850模块.zip 3.48MB ZIP 54次下载
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy
11年7个月前 IP:未同步
470889
还有LZ我已经自己用Arduino写了程序成功控制AD9850,懒得看例程,看例程还不如自己读IC手册
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
470903
回 8楼(justinpiggy) 的帖子
这东西下了,不过里面的我差不多全都有的。
我现在怀疑是我的电路没搭好。
愁nee。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
470980
回 6楼(ehco) 的帖子
查了一下9850和9851的datasheet 发现 9851确实需要设置串口,但是9850没有这个的啊。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ivansdk作者
11年7个月前 IP:未同步
471032
原来是程序出的错误。
w=(y>>=0);
改为
w=(y>>0);
就可以了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}