AD9851调试问题及程序

来源:本站
导读:目前正在解读《AD9851调试问题及程序》的相关信息,《AD9851调试问题及程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《AD9851调试问题及程序》的详细说明。
简介:我在做AD9851的过程中,总的说来遇到的问题不多,一切相当顺利,我遇到的问题主要有以下几点。

1.关于有源晶振,开始的时候,搭硬件电路的时候,晶振的问题是最困扰我的,众多网友对一个问题争执不休,就是有源晶振出来的到底是个什么样的波形,有的网友说是方波,有的说的三角波,有的说是正弦波,根据我实测的结果,3.3V供电时,出来的波形是不规则的正弦波,峰峰值大约是6.8V,我起初对这个峰峰值感到不可思议,后来的实际效果告诉我没什么影响,开始还有就是波形的问题,我曾想过用斯密特触发器把正弦波整成方波,但后来实际效果告诉我,也没必要,根据实际的效果,我在晶振和AD9851中间加了一个50欧姆的电阻,有网友建议最好是加33欧姆的!我觉得这点还是靠示波器说话的好!呵呵

2.这个就是关于程序的问题了,我信奉一句话,凡是程序能解决的问题都不是问题,呵呵,DDS程序中有个问题肯定对刚开始做的人是个很大的困扰,就是如何让需要输出的频率变成控制字呢,起初我翻阅了很多资料,其实最后还是返璞归真了,还是从官方AD9851PDF上看出来的,比如说你要输出1M波形的话,这样计算,系统时钟是120M的话,就用系统时钟120M除以2^32,然后乘以1M,得出的数就是控制字,AD9851接受的控制字的二进制的,计算机内部表示的数也是二进制的,所以你只要将你的得到的这个数进行4次移位就得到了频率控制字,相位控制字原理相同!

3.整个过程中,我的问题主要是以上两点,最后要注意的就是多文件编译了,多文件编译时,一定要注意文件的隐蔽性以及衔接性,否则造成了错误找都找不到,特别整个系统的中断,定时器,何时进入低功耗模式等固定资源,要分配好,安排好!就像键盘是中断唤醒的,定时器延时的,唤醒后到了哪里再进中断,合着DDS,液晶等的一起就有些复杂了,要画个大致的图!

程序就直接上在这里了!

#include#include"keyscan.h"#include"12864.h"#include"math.h"#define uchar unsigned char//硬件相关性#define dds_dir_out P2DIR=0xff#define dds_out P2OUT#define dds_kz_dir_out P3DIR|=BIT1+BIT2+BIT3#define bujin//时钟脉冲#define dds_wc_high P3OUT|=BIT1#define dds_wc_low P3OUT&=~BIT1//频率更新控制字#define dds_fq_high P3OUT|=BIT2#define dds_fq_low P3OUT&=~BIT2//复位#define reset_high P3OUT|=BIT3#define reset_low P3OUT&=~BIT3//定义5个字节的频率控制字和相位控制字uchar DDS_KZZ[5]={0X09,0X00,0X00,0X00,0X00};//定义0-9数值const uchar num[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x20};//0x20是空格,就是数组中的第10个unsigned long table[8]={0,0,0,0,0,0,0,0};//unsigned long int out_freq=10000,shuzi=;uchar temp;//延时函数void delay_ms(unsigned int a){unsigned int b;while(a--)for(b=800;b>0;b--);}void delay_us(unsigned int a){while(a--)_NOP();}//复位操作void dds_reset(){reset_low;reset_high;delay_ms(5);reset_low;}//并行方式写入5个字节的数据void write_5_byte(){uchar i;dds_fq_low;for(i=0;i0;i--){DDS_KZZ[i]=temp|b;temp>>=8;}}//集成化dds处理void dds(){out_freq=shuzi;freq_solution();dds_reset();delay_ms(3);write_5_byte();}//任意数字液晶显示,将8位数值显示在液晶上void xianshi(unsigned long xs){con_disp(0xff,0xff,0x90,0x90,2,16);unsigned long tem;uchar a,b,c,d,e,f,g,h;uchar x="3",y=2;tem="xs";a="tem/";//10M位b="tem"%/;//M位c="tem"%/;//100K位d="tem"%/10000;//10K位e="tem"%10000/1000;//K位f="tem"%1000/100;//100位g="tem"%100/10;//10位h="tem"%10;//个位if(a==0){a="10";if(b==0){b="10";if(c==0){c="10";if(d==0){d="10";if(e==0){e="10";if(f==0){f="10";if(g==0){g="10";if(h==0){h="0";}}}}}}}}one_char(x,y,num[a],num[b]);x++;one_char(x,y,num[c],num[d]);x++;one_char(x,y,num[e],num[f]);x++;one_char(x,y,num[g],num[h]);}//步进算法void bj_1(){shuzi+=bujin;xianshi(shuzi);dds();LPM1;}void bj_2(){shuzi-=bujin;xianshi(shuzi);dds();LPM1;}void bj_process(){while(!KEYZHI);while(1){if(KEYZHI==0x18){KEYZHI="0";delay_us(10);bj_2();}else if(KEYZHI==0x48){KEYZHI="0";delay_us(10);bj_1();}elsebreak;}}

提醒:《AD9851调试问题及程序》最后刷新时间 2024-03-14 01:08:34,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《AD9851调试问题及程序》该内容的真实性请自行鉴别。