完善资料让更多小伙伴认识你,还能领取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; } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
为什么在频率为10^3 Hz处,产生的相移就可以确定约为-90度
1009 浏览 1 评论
【高手问答】电路的功能是为了0.6v到40v之间调压,运放发热严重
3251 浏览 8 评论
USB3.0 工业相机的传输速率是否受到电脑主板某些硬件的限制?
1188 浏览 0 评论
2381 浏览 1 评论
1321 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:15 , Processed in 0.486752 second(s), Total 44, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号