大家好,我在使用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,调试程序如下所示,请大家帮忙看看问题出在哪里?为什么控制字写不进去?
谢谢!
void main()
{
delay10ms();
AD9958_init();
write_FR1(0x20,0x00,0x00); // 8*25
run();
while(1);
}
void delay10ms()
unsigned char i,j;
for(i=230;i>0;i--)
for(j=20;j>0;j--);
void AD9959_init(void)
unsigned int i;
MASTER_RESET=0;
for(i=0;i<10000;i++); //50ms
CS=1;
SCLK=0;
SDIO_3=1;
MASTER_RESET=1;
for(i=0;i<10000;i++);
for(i=0;i<100;i++);
void run(void)
IO_UPDATA=0;
IO_UPDATA=1;
void write_a_byte(unsigned char w_data)
unsigned char i;
for(i=0;i<8;i++)
SDIO_0=(w_data & 0x80);
w_data<<=1;
SCLK="0";
SCLK="1";
void write_FR1(unsigned char w_data1,unsigned char w_data2,unsigned char w_data3)
SDIO_3=0;
CS=0;
write_a_byte(0x01); //write address 1. FR1's address is 0x01
write_a_byte(w_data1);
write_a_byte(w_data2);
write_a_byte(w_data3);