AD9833程序汇总.doc_第1页
AD9833程序汇总.doc_第2页
AD9833程序汇总.doc_第3页
AD9833程序汇总.doc_第4页
AD9833程序汇总.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Main.C/* AVR SPI接口控制AD9833 *功能:M8 SPI 接口控制 AD9833AD9833为DDS(Direct Digital Frequency Synthesis)直接数字频率合成器可产生0-12.5MHz的正弦波、三角波、方波作者:hb8421 编译器:WINAVR20050214开始时间:2007年7月3日10:33:26结束时间:*/#include #include #include #include /时钟定为内部晶振 8MHz,F_CPU=8000000#include AD9833.h#include main.h#include control.hint main(void)/上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻/不用的管脚使能内部上拉电阻。 PORTB=0xFF;PORTC=0xFF; PORTD=0xFF;/设定SPI接口PORTB=(1AD9833_CE)|(1AD9833_SDATA)|(1AD9833_SCLK); DDRB =(1AD9833_CE)|(1AD9833_SDATA)|(1AD9833_SCLK);init_ad9833();while(1) ctr8421();switch (ctr_v)case 6 :output(6);break;case 7 :output(7);break;case 8 :output(10);break;case 9 :output(50);break;default :output(0);break;Main.h#ifndef _main_H_#define _main_H_ 1/控制位#define ctr8 0/PD0 #define ctr4 1/PD1 #define ctr2 2/PD2 #define ctr1 3/PD3 #define pn 7/PD7#define T1_OUT 0/PC0 脉冲输出/全局变量声明volatile unsigned char ctr_v;/拨码开关8421的输出volatile unsigned char ctr_pn;/正负脉冲按钮开关的输出volatile unsigned int T1_TOP;/设置T1的时间值#endif /* _main_H_ */Control.c/*控制文件对控制端口拨码开关8421判断和对正负脉冲按钮开关的判断*/#include #include #include #include #include main.h#include control.h/-/ctr8421:对控制端口拨码开关8421判断/输入:无/输出:ctr_vunsigned char/-unsigned char ctr8421(void)/ctr=0if(PIND&(1ctr8)&(PIND&(1ctr4)&(PIND&(1ctr2)&(PIND&(1ctr1)ctr_v=0;/ctr=1else if(PIND&(1ctr8)&(PIND&(1ctr4)&(PIND&(1ctr2)&(!(PIND&(1ctr1)ctr_v=1;/ctr=2else if(PIND&(1ctr8)&(PIND&(1ctr4)&(!(PIND&(1ctr2)&(PIND&(1ctr1)ctr_v=2;/ctr=3else if(PIND&(1ctr8)&(PIND&(1ctr4)&(!(PIND&(1ctr2)&(!(PIND&(1ctr1)ctr_v=3;/ctr=4else if(PIND&(1ctr8)&(!(PIND&(1ctr4)&(PIND&(1ctr2)&(PIND&(1ctr1)ctr_v=4;/ctr=5else if(PIND&(1ctr8)&(!(PIND&(1ctr4)&(PIND&(1ctr2)&(!(PIND&(1ctr1)ctr_v=5;/ctr=6else if(PIND&(1ctr8)&(!(PIND&(1ctr4)&(!(PIND&(1ctr2)&(PIND&(1ctr1)ctr_v=6;/ctr=7else if(PIND&(1ctr8)&(!(PIND&(1ctr4)&(!(PIND&(1ctr2)&(!(PIND&(1ctr1)ctr_v=7;/ctr=8else if(!(PIND&(1ctr8)&(PIND&(1ctr4)&(PIND&(1ctr2)&(PIND&(1ctr1)ctr_v=8;/ctr=9else if(!(PIND&(1ctr8)&(PIND&(1ctr4)&(PIND&(1ctr2)&(!(PIND&(1ctr1)ctr_v=9;return ctr_v;/-/ctrpn:对正负脉冲按钮开关的判断/输入:无/输出:ctr_punsigned char/-unsigned char ctrpn(void)if(!(PIND&(1pn)ctr_pn=0;elsectr_pn=1;return ctr_pn;#ifndef _control_H_#define _control_H_ 1unsigned char ctr8421(void);unsigned char ctrpn(void);#endif /* _control_H_ */AD9833.C/*AD9833功能:可编程波形发生器,能够产生正弦波、三角波、方波输出。特点:主频时钟为25MHz时,精度为0.1Hz,主频时钟为1MHz时,精度可以达到0.004Hz。输出正弦波频率 fOUTM(fMCLK/228)M为频率控制字,由外部编程给定,其范围为0M2281。 fMCLK为外部输入晶振。FSYNC引脚是使能引脚,电平触发方式,低电平有效。进行串行数据传输时,FSYNC引脚必须置低,要注意FSYNC有效到SCLK下降沿的建立时间t7的最小值。FSYNC置低后,在16个SCLK的下降沿数据被送到AD9833的输入移位寄存器,在第16个SCLK的下降沿FSYNC可以被置高,但要注意在SCLK下降沿到FSYNC上升沿的数据保持时间ts的最小和最大值。当然,也可以在FSYNC为低电平的时候,连续加载多个16位数据,仅在最后一个数据的第16个SCLK的下降沿的时将FSYNC置高,最后需要注意的是,写数据时SCLK时钟为高低电平脉冲信号,但是,在FSYNC刚开始变为低时(即将开始写数据时),SCLK必须为高电平(注意t11这个参数)。 当AD9833初始化时,为了避免DAC产生虚假输出,RESET必须置为1(RESET不会复位频率、相位和控制寄存器),直到配置完毕,需要输出时才将RESET置为0;RESET为0后的89个MCLK时钟周期可在DAC的输出端观察到波形。AD9833数据传输格式:对于单个16位数据来说,高位在前,低位在后。对于频率寄存器和相位寄存器来说,先是控制字,再是数据低字节,最后是数据高字节。*/#include #include #include #include #include AD9833.h#include main.h/*-delay_nus:长延时函数(GCC内部延时函数的延时过短) 输入参数: t :延时时间 us-*/void delay_nus(unsigned int t) while (t-) _delay_us(1);/*-delay_nms:长延时函数(GCC内部延时函数的延时过短) 输入参数: t :延时时间 ms-*/void delay_nms(unsigned int t) while (t-) _delay_ms(1);/-/Write_word : 写16位数据到SPI接口,软件SPI方式/输入参数:data:数据(16位)/-void Write_word(unsigned int data)unsigned char i;SCL_H;SDA_H;FSYNC_H;delay_nus(200);FSYNC_L;for(i=0;i16;i+)if(data&0x8000) SDA_H;else SDA_L;SCL_L;delay_nus(5);SCL_H;data=data1;delay_nus(2);FSYNC_H;SCL_L;delay_nus(200);void init_ad9833(void)Write_word(0x2100);/28位连续,选择频率0,相位0,RESET=1Write_word(0x4000);/写频率0寄存器的低字节LSBWrite_word(0x4000);/写频率0寄存器的高字节MSBWrite_word(0x2900);/28位连续,选择频率0,相位0,RESET=1Write_word(0x8000);/写频率0寄存器的低字节LSBWrite_word(0x8000);/写频率0寄存器的高字节MSBWrite_word(0xC000);/写频率0寄存器的低字节LSBWrite_word(0xF000);/写频率0寄存器的高字节MSBWrite_word(0x2000);/28位连续,选择频率0,相位0,RESET=0/-/output:AD9833输出指定频率的正弦波/输入参数:freq_value类型:unsigned long/输出参数:无/-void output(unsigned long freq_value)unsigned long dds;unsigned int dds_l,dds_h;dds= freq_value *268.435456; /268435456/ FMCLKdds=dds16;/高字节dds_l=dds_l2;dds_l=dds_l & 0x7FFF;dds_l=dds_l | 0x4000;dds_h=dds_h & 0x7FFF;dds_h=dds_h | 0x4000;Write_word(0x2000);/28位连续,选择频率0,相位0,RESET=0Write_word(dds_l);Write_word(dds_h);AD9833.H/AD9833头文件#ifndef _AD9833_H_#define _AD9833_H_ 1/定义AD9833的时钟#define FMCLK 1000000/AD9833的主晶振为1MHz /M8管脚定义#define AD9833_CE2/PB2 SS #define AD9833_SDATA3/PB3 MOSI#define AD9833_SCLK5/PB5 SCK/宏定义#define FSYNC_L PORTB&=(1AD9833_CE) /置CE为低电平,使能SPI接口,使能AD9833 SPI通讯#define FSYNC_H PORTB|= (1AD9833_CE)/置CE为高电平,关闭SPI接口,关断AD9833 SPI通讯#define SCL_L PORTB&=(1AD9833_SCLK)/SPI总线时钟线#define SCL_H PORTB|=(1AD9833_SCLK)#define SDA_L PORTB&=(1AD9833_SDATA)/SPI总线数据线#define SDA_H PORTB|=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论