本帖最后由 shexujia 于 2011-8-9 15:51 编辑
本来应该挺简单的。
但是写进去的频率和出来的波形相差十万八千里了。经常出来杂波或者没现象。
PDF上面说过有2个工作方式控制位。若不输入00的话,可能导致不可预测的问题。调试的时候有动过相位的那8位数据。莫非这样就挂了芯片??:'(
还是我硬件软件自己的问题呢??其他闲置的7个数据口有接地了
帮帮忙呀。
程序如下:
/****************************************************************
函数名称: ad9850_reset_serial()
功 能: ad9850复位(串口模式)
入口参数: 无
返回值 : 无
修 改: 2011-5-26
说 明: 参考芯片手册Figure 22.Serial-Load Enable Sequence
****************************************************************/
void ad9850_reset_serial(void)
{
ad9850_w_clk_clr;
ad9850_fq_up_clr;
//reset信号
ad9850_rest_clr;
ad9850_rest_set;
ad9850_rest_clr;
//w_clk信号
ad9850_w_clk_clr;
ad9850_w_clk_set;
ad9850_w_clk_clr;
//fq_up信号
ad9850_fq_up_clr;
ad9850_fq_up_set;
ad9850_fq_up_clr;
}
/****************************************************************
函数名称: ad9850_wr_serial()
功 能: 向ad9850中写命令与数据(串口)
入口参数: w0:为ad9850中w0的数据; frequence:为写入的频率
返回值 : 无
修 改: 2011-5-26
说 明:
****************************************************************/
void ad9850_wr_parrel(unsigned char w0,long frequence)
{
unsigned char i,w;
long y;
y = frequence * 34.359738;
//计算频率的HEX值
//写w4数据
ad9850_w_clk_clr;
ad9850_fq_up_clr;
for(i=0;i<32;i++)
{
w =y&0x00000001;
if(w)
ad9850_bit_data_set;
else
ad9850_bit_data_clr;
y=y>>1;
ad9850_w_clk_set;
delay(1);
ad9850_w_clk_clr;
}
//写w0数据
w = w0;
for(i=0;i<8;i++)
{
if(w&0x01) ad9850_bit_data_set;
else ad9850_bit_data_clr;
w=w>>1;
ad9850_w_clk_set;
delay(1);
ad9850_w_clk_clr;
}
//移入始能
ad9850_fq_up_set;
delay(1);
ad9850_fq_up_clr;
} |