chenweihang 发表于 2011-8-16 21:42:51

9850信号发生器出不来波形

我用9850做的信号发生器,但是只输出100MHZ的波形,和晶振的频率一样。这是为什么呢?是硬件问题还是软件的问题。请各位大侠求救!!!!我用128做的,下面是我的程序,和硬件图!!大侠帮帮忙啊!!!

http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_668308C42L3S.jpg
(原文件名:9850.jpg)
#include <iom128v.h>
#include <macros.h>
#include <RD_UseAVRPORTBit.h>
#define uint unsigned int
#define uchar unsigned char

#define data_port PORTD
#define ad9850_fq_up _PB0 //P2.1口接ad9850的fq_up脚/PIN8
#define ad9850_w_clk _PB1 //P2.2口接ad9850的w_clk脚/PIN7
#define ad9850_rest _PB2 //P2.0口接ad9850的rest脚/PIN12
//sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25
//P1为8位数据口
//***************************************************//
//            ad9850复位(并口模式)               //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/100;//适合100M晶振
//如果时钟频率不为40MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w0数据
w=w0;   
data_port=w;      //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w1数据
w=(y>>24);
data_port=w;      //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w2数据
w=(y>>16);
data_port=w;      //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w3数据
w=(y>>8);
data_port=w;      //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w4数据
w=(y>>=0);
data_port=w;      //w4
ad9850_w_clk=1;
ad9850_w_clk=0;
//移入始能
ad9850_fq_up=1;
ad9850_fq_up=0;
}
void main()
{
DDRD=0xff;
DDRB|=0x07;
//---------------------------------------------------//
//并行写1000Hz程序
ad9850_reset();
ad9850_wr_parrel(0x00,1000);
//---------------------------------------------------//
while(1);
}

lanseyuhen 发表于 2011-8-16 22:04:19

我的也是这样,不出波形,求助

lanseyuhen 发表于 2011-8-16 22:16:57

试试这个程序
/************************************************************
串行驱动 AD9850
FRUD -- B0
REST -- B1
WCLK -- B2
d7------B3
数据接口 D7 -- A7(注意:串行方式时D0,D1接高电平,D2接地)
ADout 定义输出频率

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

#include <iom16v.h>
#include <macros.h>
#include <delay.h>
#include <avr_bit.h>

#define uint unsigned int
#define uchar unsigned char

#define SET_1(a,b) a|=(1<<b)
#define CLE_0(a,b) a&=~(1<<b)

#define FRUD_1 PORTB_0=1
#define FRUD_0 PORTB_0=0
#define REST_1 PORTB_1=1
#define REST_0 PORTB_1=0
#define WCLK_1 PORTB_2=1
#define WCLK_0 PORTB_2=0

#define ADout 10000000 // 定义 输出 频率 ADout
#define IO9850 PORTA
#define IO_1 PORTB_3=1
#define IO_0 PORTB_3=0


void initIO(void)
{
DDRA = 0xff;
DDRB = 0xff;
}


void init9850(void)
{
WCLK_0;
FRUD_0;
REST_1;
REST_0;

}

void UPDATE(void)
{
FRUD_1;
FRUD_0;
}

void sentcom(void)
{
sendword(0);
sendword(0);
sendword(1);
sendword(0);
sendword(0);
sendword(0);
sendword(0);
}

void sendword(uchar dat)
{
if(dat)
IO_1;
else
IO_0;

WCLK_1;
WCLK_0;
}



void startAD(void)
{ long unsigned int dat;
unsigned char i = 0;
UPDATE();
dat =(long int) ADout * 42.949672;
dat=dat>>1;
for(;i<32;i++)
{
sendword((uchar) (dat&1));
dat=dat>>1;
}

sentcom();
UPDATE();

}


int main(void)
{ initIO();
init9850();
startAD();
while(1)
{

NOP();
}
}
页: [1]
查看完整版本: 9850信号发生器出不来波形