历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | AD9850与单片机波形生成程序及设计

2019-11-28 来源:51hei

 

概述=================================================
AD9850/AD9851模块是采用ADI应用最广泛的DDS(AD9850和AD9851)制作的模块。ADI的性能就不用多说了。模块主要参考AD9850和AD9851的资料做的。
  主要功能特点:
  *  模块能够输出正弦波和方波,2个正弦波和2个方波输出。

AD9850: 0-40MHz

AD9851: 0-70MHz

频率在20-30MHz后谐波越来越大,波形会越来越不干净。
方波:     0-1MHz
  *  采用70MHz的低通滤波器,使波形的SN比更好
  *  比较器的基准输入端电压由可变电阻产生,调节该电阻可以得到不同的占空比方波
    注:在输出正弦波的情况下,接线到方波输出的IO口,直接调节蓝色的电位器可输出方波。
  * AD9850模块采用125MHz的有源晶振,AD9851模块采用30MHZ的有源晶振
AD9850和AD9851主要区别
  *  AD9850的时钟频率最高125MHz,AD9851的时钟频率最高180MHz。输出最高频率AD9851要比AD9850高。
  * AD9850没有6倍频,AD9851有


功能框图============================================================

1:下载对应的HEX程序

   见AD9850_1_V4_C程序文件夹

   OUT1和OUT2端能测试到对应输出1KHz信号。如需测试方波,调节可变电位器,可在方波1和方波2端测试到方波。


单片机源程序如下:

//***************************************************//

//函数1:           ad9851_reset()                    //

//函数2:           ad9851_reset_serial()             //

//函数3:           ad9851_wr_parrel(unsigned char w0,double frequence)//

//函数4:           ad9851_wr_serial(unsigned char w0,double frequence)//

//版本:              V1.1                            //

//***************************************************//

//                  子程序说明                       //

//***************************************************//

//函数1:  ad9851_reset()

//        复位ad9851,之后为并口写入模式        

//函数2:  ad9851_reset_serial()

//        复位ad9851,之后为串口写入模式

//函数3:  ad9851_wr_parrel(unsigned char w0,double frequence)

//        并口写ad9851数据,w0为ad9851中w0的数据,frequence

//        为写入的频率        

//函数4:  ad9851_wr_serial(unsigned char w0,double frequence)

//        串口写ad9851数据,w0为ad9851中w0的数据,frequence

//        为写入的频率        

//需定义的位:

         //ad9851_w_clk    ;

         //ad9851_fq_up    ;

         //ad9851_rest     ;

         //ad9851_bit_data ;

//例:

         //sbit ad9851_w_clk    =P2^2;

         //sbit ad9851_fq_up    =P2^1;

         //sbit ad9851_rest     =P2^0;

         //sbit ad9851_bit_data =P1^7;

//***************************************************//

//                 写数据说明                        //

//***************************************************//

//写数据例:

//       ad9851_reset()

//       wr_lcd02_data(unsigned char x)

//       ad9851_wr_parrel(0x01,1000)

//       ad9851_wr_serial(0x01,1000)

//***************************************************//

//---------------------------------------------------//

//                   程序                            //

//---------------------------------------------------//

# include

# include

# include

sbit ad9851_w_clk    =P2^2;  //P2.2口接AD9851的w_clk脚/PIN7

sbit ad9851_fq_up    =P2^1;  //P2.1口接AD9851的fq_up脚/PIN8

sbit ad9851_rest     =P2^0;  //P2.0口接AD9851的rest脚/PIN12

sbit ad9851_bit_data =P1^7;  //P1.7口接AD9851的D7脚/PIN25

//P1为8位数据口

//***************************************************//

//              ad9851复位(并口模式)                 //

//---------------------------------------------------//

void ad9851_reset()

{

ad9851_w_clk=0;

ad9851_fq_up=0;

//rest信号

ad9851_rest=0;

ad9851_rest=1;

ad9851_rest=0;

}

//***************************************************//

//              ad9851复位(并口模式)                 //

//---------------------------------------------------//

void ad9851_reset_serial()

{

ad9851_w_clk=0;

ad9851_fq_up=0;

//rest信号

ad9851_rest=0;

ad9851_rest=1;

ad9851_rest=0;

//w_clk信号

ad9851_w_clk=0;

ad9851_w_clk=1;

ad9851_w_clk=0;

//fq_up信号

ad9851_fq_up=0;

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

//          向ad9851中写命令与数据(并口)             //

//---------------------------------------------------//

void ad9851_wr_parrel(unsigned char w0,double frequence)

{

unsigned char w;

long int y;

double x;

//计算频率的HEX值

x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)

//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!

frequence=frequence/1000000;

frequence=frequence*x;

y=frequence;

//写w0数据

w=w0;   

P1=w;      //w0

ad9851_w_clk=1;

ad9851_w_clk=0;

//写w1数据

w=(y>>24);

P1=w;      //w1

ad9851_w_clk=1;

ad9851_w_clk=0;

//写w2数据

w=(y>>16);

P1=w;      //w2

ad9851_w_clk=1;

ad9851_w_clk=0;

//写w3数据

w=(y>>8);

P1=w;      //w3

ad9851_w_clk=1;

ad9851_w_clk=0;

//写w4数据

w=(y>>=0);

P1=w;      //w4

ad9851_w_clk=1;

ad9851_w_clk=0;

//移入始能

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

//          向ad9851中写命令与数据(串口)             //

//---------------------------------------------------//

void ad9851_wr_serial(unsigned char w0,double frequence)

{

unsigned char i,w;

long int y;

double x;

//计算频率的HEX值

x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)

//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz  !!!

frequence=frequence/1000000;

frequence=frequence*x;

y=frequence;

//写w4数据

w=(y>>=0);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//写w3数据

w=(y>>8);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//写w2数据

w=(y>>16);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//写w1数据

w=(y>>24);

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//写w0数据

w=w0;   

for(i=0;i<8;i++)

{

ad9851_bit_data=(w>>i)&0x01;

ad9851_w_clk=1;

ad9851_w_clk=0;

}

//移入始能

ad9851_fq_up=1;

ad9851_fq_up=0;

}

//***************************************************//

//                   测试程序1000Hz                  //

//---------------------------------------------------//

main()

{

P0=0x00;

P1=0x00;

P2=0x00;

P3=0x00;

//---------------------------------------------------//

……………………



推荐阅读

史海拾趣

宜源科技(ETERNAL)公司的发展小趣事

面对日益严峻的环境问题,宜源科技公司积极响应国家环保政策,致力于绿色环保和可持续发展。公司采用先进的生产工艺和设备,减少生产过程中的污染排放。同时,宜源科技还积极推动绿色产品的研发和推广,为客户提供更加环保、节能的电子产品解决方案。这些努力不仅有助于保护环境,也为公司的可持续发展奠定了基础。

Advantech公司的发展小趣事

宜源科技公司深知品质对于企业长远发展的重要性。因此,公司从原材料采购到生产流程控制,再到产品出厂检验,都严格遵循国际标准和行业规范。通过不断提升产品品质,宜源科技赢得了客户的信赖和市场的认可,逐渐树立起自己的品牌形象。

Captive Fastener公司的发展小趣事

Captive Fastener公司在电子紧固件领域一直致力于技术创新。某年,公司研发团队成功开发出一种新型的自锁紧固件,这种紧固件能够在高振动环境下保持稳定的连接性能,极大地提高了电子设备的可靠性和耐久性。这一创新产品迅速获得了市场的认可,Captive Fastener公司因此获得了大量订单,实现了业务的快速增长。

Bridgelux公司的发展小趣事

XXXX年,中国电子信息产业集团公司(CEC)和重庆临空开发投资公司牵头收购了Bridgelux。这次收购为Bridgelux带来了强大的资本支持和市场资源,使其得以进一步扩大生产规模,提升研发能力。在CEC和重庆临空的支持下,Bridgelux在全球范围内的市场份额逐步提升,品牌影响力不断增强。

华润华晶公司的发展小趣事

Bridgelux公司成立于XXXX年,由一群富有远见和创新精神的工程师创立。他们看到了LED照明技术的巨大潜力,并致力于将其商业化。公司初期面临资金和技术双重挑战,但他们凭借坚定的信念和不懈的努力,成功开发出了一系列高质量的LED照明产品,并逐渐获得了市场的认可。

DBM REFLEX公司的发展小趣事

在光学器件领域,技术创新是企业发展的关键。DBM REFLEX深知这一点,因此不断投入研发资源,致力于技术创新和产品创新。公司成功研发出了一系列具有高性能、高可靠性和高稳定性的光学器件,这些产品不仅满足了市场的需求,还为公司赢得了良好的口碑。

问答坊 | AI 解惑

嵌入式系统的基本知识

入门知识,为深入学习打下扎实的基础!…

查看全部问答>

《数字信号处理(全美经典学习指导系列)》

简介: 内容简介:   本书主要介绍数字信号处理的基础理论,并给出300多道解答步骤完整的习题。因而,本书是相关教材的有益补充,是自学有效问题求解方法的理想读物。   全书共9章,涵盖了数字信号处理导论教程的核心内容,包括数字信号处 ...…

查看全部问答>

急求μCOS-Ⅱ开发的软硬件开发环境

    小弟初学嵌入式,最近想在一个RTOS上开发一个小的系统,初步考虑是最简单的μCOS-Ⅱ,但是由于苦于无人指导,甚至都不知道其模拟软件开发环境及其对硬件环境的要求,在网上查了一下,好像说用Borland C 4.5可以,但是好像那是一个C语言的编 ...…

查看全部问答>

我的情况离找工作还多远?并且需要从哪方面努力?

         我是嵌入式系统专业的大学生,大学混了2年半,时间很快,今年6月份就要毕业了,我的大学生活每天基本都在寝室渡过的,因为有宽带,网速也过得去,玩魔兽世界,梦幻,玩dota,cs,war3,劲舞团,一个星期也 ...…

查看全部问答>

请教串口程序问题

请教串口程序问题 代码如下: #include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar flag,i;uchar a[4];uchar code table[]=\"I get \" ;void main(){ TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; ...…

查看全部问答>

依旧是I2C的问题

上次烧了块EK的板子.这次换了块新的,该慎重了. 在这里向大虾们确认个问题.我的从设备,在没有跟我主机连接前,上电后,SDA和SCL的电压全是3.0V左右.我查遍了从设备的datasheet,没有找到对高低电平的值的定义,只是有一个关于I2C的通信中高低 ...…

查看全部问答>

【原创】这个错误怎么解决了?

调试出现:chosen derivative (msp430f133) and actual hardware(device unknown) do not match. 大致的意思是说:选择的器件型号和实际硬件不匹配。 可是在IAR的环境里我选择的是MSP430F133,本人目标系统用的片子也是msp430f133。 用的仿真器 ...…

查看全部问答>

LM3S6911-IQC50-A2最新到货了

LM3S6911最近一直很缺货的 因为原厂晶圆供应不足 从而导致的缺货 我们公司同样用LM3S6911做了一个uart转以太网接口的产品 当时也是急疯了 因为我们一直有做TI的电子元器件贸易 跟原厂有联系 所以方案就一直没有更换 现在好了, 货终于到了 ...…

查看全部问答>

[嵌入式求职]成都参加嵌入式培训后的求收购

如题,本人参加了成都的某机构嵌入式培训,现在就业困难啊。请大家支招。 本人在学校期间在电子实验室呆了3年,做过大量的单片机项目,会上位机开发。linux相关知识在培训期间习得。…

查看全部问答>