AD9851工作前必须对其进行初始化,AD9851上电后默认为并行通信方式,如需采用串行通信方式,上电后应将AD9851的D7~D0置为二进制数XXXXX011,紧接着依次往W_CLK和FQ_UD端输入宽度约1 S的高电平脉冲就可以使AD9851工作在串行模式下。
//AVR并行驱动,数据输出口用PA口,控制线放在PC口
//端口定义
#define clk 0
#define fq_ud 1
#define rst 2
unsigned char phase_word=0x00; //相位控制字,使用低5位
unsigned char power_down=0x00; //低功耗模式
unsigned char mult=0x01; //6倍频是否打开
unsigned char ww[5]={0x09,0x0E,0x38,0xE3,0x8E};
unsigned long freq,set_value;
//往AD9851写数据
void write_dds(unsigned long dds)
{
unsigned char i;
ww[0]=0x01; //开启6倍频功能
ww[0]= (phase_word<<3)|| power_down<<2 || mult;
ww[1]=dds>>24; //频率字最高字节
ww[2]=(dds>>16)&0xFF;
ww[3]=(dds>>8)&0xFF;
ww[4]=dds&0xFF; //频率字最低字节
PORTC&=~(1<<fq_ud); //FQ_UD置低
PORTC&=~(1<<clk); //CLK置低
for(i=0;i<5;i++) //送入5个字节的控制字
{
PORTA=ww[i];
delay_us(2);
PORTC|=(1<<clk);
delay_us(2);
PORTC&=~(1<<clk);
delay_us(2);
}
PORTC|=(1<<fq_ud); //使能信号
delay_us(3);
PORTC&=~(1<<fq_ud);
}
//写入频率
void write_freq(unsigned long freq)
{
unsigned long dds;
dds=23.860929422*freq; //频率字计算,可进行微调
write_dds(dds);
}