电路设计论坛
直播中

李娟

7年用户 1375经验值
私信 关注
[问答]

使用DDS芯片AD9959做波形发生器遇到的问题求解

大家好,我在使用DDS芯片AD9959做波形发生器遇到问题。
现在板子上25MHz的晶振工作正常,AD9959四分频输出6.25MHz方波信号也正常,但在运行程序调试中有问题,单片机不能将控制字写入寄存器,例如用下面的程序设定系统时钟倍频,25*8=200,四分频输出应该变为50MHz,但示波器检测仍是6.25MHz,显然控制字没有写进寄存器。
所用单片机为AT89S52,P2口控制DDS,输出电平经电阻分压后在AD9959输入端口电平为3.5V,AD9959外围电路见附件,AVDD、DVDD、DVDD_I/O分别为1.8V、1.8V、3.3V,调试程序如下所示,请大家帮忙看看问题出在哪里?为什么控制字写不进去?
谢谢!
无效主()
{
延迟 10 ms () ;
ad9958_init ();
写_ FFR1( 0x20, 0x00, 0x00, 0x00; / 8*25)
运行(; )
(一) 时间(1);
}
无效的延迟 10 ms ()
{
未经签字的chari,j;
for(i=230;i》0;i--)
for(j=20;j》0;j--);
}
无效的 AD9959_init( 撤销)
{
未签名的一。 i.
元件_ reset=0;
for(i=0;i《10000;i++); //50ms
cs=1;
Sklk=0;
SDio_3=1;
主元件_ reset=1;
for(i=0;i《10000;i++);
主元件_ reset=0;
for(i=0;i《100;i++);
}
无效运行( 撤销)
{
i_updata=0;
i_updata=0;
i_updata=0;
i_updata=0;
i_updata=1;
i_updata=1;
i_updata=1;
i_updata=1;
}
无效写入_a_byte( 未签名字符 w_ data)
{
未签名字符i;
for(i=0;i《8;i++)
{
SDIO_0=(w_data 0x80);
w_data《《=1;
SCLK=“0”;
SCLK=“0”;
SCLK=“1”;
SCLK=“1”;
}
}
无效写入_ FR1( 未签名的char w_ data1, 未签名的char w_ data2, 未签名的char w_ data3)
{
SDio_3=0;
SDio_3=0;
cs=0;
cs=0;
write_a_byte(0x01); //write address 1. FR1‘s address is 0x01
书写_a_byte(w_data1);
书写_a_byte(w_data2);
书写_a_byte(w_data3);
cs=1;
cs=1;
SDio_3=1;
SDio_3=1;
}

更多回帖

发帖
×
20
完善资料,
赚取积分