完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人用ATmega16 和 ad9851制作一个信号发生器,采用串行的方式输入40位控制字,但是就是没有波形输出,也不知道是不是电路不对,所以也附上本人的电路图,麻烦有知道的高手帮忙看一下,附件是本人的ad9851的接口电路,麻烦看看有没有错:
下面是我参考网上写的串行输出驱动: #define AD9851_SCLK_PORT PORTA //PORTA W_CLK #define AD9851_LOAD_PORT PORTA //PORTA FQUD #define AD9851_DATA_PORT PORTA //PORTA DATA #define AD9851_SCLK_H 0x01 //PORTA0 out 程序中置位的方法,详细见本程序 #define AD9851_LOAD_H 0x02 //PORTA1 out 同上 #define AD9851_DATA_H 0x04 //PORTA2 out 同上 #define AD9851_LOW 0x00 /*************** AD9851驱动程序 ************/ void ad9851(float freq) { float fw; unsigned char i,j,temp; unsigned char s,6REF_ON; unsigned char d[5]; 6REF_ON=1; fw="freq"*35.79139413; //d[4]中存放控制字最高位,即相位控制字 //Freq=MCLK*FW/2^32 d[4]=(unsigned long)6REF_ON; d[0]=(unsigned long)fw; d[1]=(unsigned long)fw>>8; d[2]=(unsigned long)fw>>16; d[3]=(unsigned long)fw>>24; AD9851_LOAD_PORT =AD9851_LOW; //load=0; AD9851_SCLK_PORT =AD9851_LOW; //sclk=0; AD9851_SCLK_PORT|=AD9851_SCLK_H; //sclk=1; AD9851_SCLK_PORT =AD9851_LOW; //sclk=0; AD9851_LOAD_PORT|=AD9851_LOAD_H; //load=1; AD9851_LOAD_PORT =AD9851_LOW; //load=0; for(i=0;i<5;i++) { temp="d"; for(j=0;j<8;j++) { AD9851_SCLK_PORT =AD9851_LOW; //sclk=0; if(temp 1) AD9851_DATA_PORT|=AD9851_DATA_H; //sdata=1; else AD9851_DATA_PORT =AD9851_LOW; //sdata=0; AD9851_SCLK_PORT|=AD9851_SCLK_H; //sclk=1; temp=temp>>1; } } AD9851_LOAD_PORT|=AD9851_LOAD_H; //load=1; AD9851_LOAD_PORT =AD9851_LOW; //load=0; } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
97 浏览 0 评论
734 浏览 1 评论
715 浏览 1 评论
电路小知识 | 交流电路复数的基础知识以及相位差和电抗的计算
571 浏览 0 评论
1766 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:58 , Processed in 0.461611 second(s), Total 43, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号