打印
[ZLG-ARM]

请教各位大虾 :DDS 输出方波的问题

[复制链接]
1606|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ekaifa|  楼主 | 2008-8-15 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位大虾 :DDS 输出方波的问题 

用AD9834输出方波时候遇到一个问题 :能按照我些的 频率出来相应频率的方波.现在有个问题是,我始终让AD9834输出,但是在示波器上观察: 方波 周期性的 出现大概3ms ,然后为低电平持续48ms,然后再出现方波,各位大虾帮忙分析下原因

   代码如下

        IOSET0|=(7<<4);  //RESET=1,FSYNC=1,SCK=1;
    
        for(k=0;k<100;k++)
        {} //说明:延迟一会
            
        
        write_ad9834_16(0X2228);//初始化 AD9834

        //说明:B28=1;表示连续写2个16位;
        //说明:PIN/SW=1,使用外部引脚控制
        //说明:OPBITEN=1,表示使能方波输出
        //说明:SIGN/PIB=0;DAC的the MSB  数据直接连接到        SIGN BIT OUT (方波输出)管脚.
                
        //说明:在写子程序中.连续写16位,这是初始化代码,

        
        mid_data_low=fre_data&0x3fff;//取低14位
        mid_data_high=(fre_data&0xffffc000)>>14;//取高14位
    
        //说明:fre_data是根据  fMCLK/228 × FREQREG=实际需要输出频率  ; 折算出来的 FREQREG 频率寄存器值

        mid_data_low|=0x4000;
        mid_data_high|=0x4000;
    

        write_ad9834_16(mid_data_low);
        write_ad9834_16(mid_data_high);
    
        IOSET0|=1<<4;//FSYNC=1;
        IOCLR0|=1<<5;//RESET=0;//说明:正式输出方波
        delay_time_accuracy(d2);//延迟 设置好的  "输出时间"

         
//说明:写寄存器子程序

 void    write_ad9834_16(INT32U    in_data)
{
    static    INT8U i;
    static    INT8U j;
    static    INT32U k;
    static    INT32U m;
    
    IOCLR0|=1<<4;  
     
         //说明:FSYNC=0

    for(i=16;i>0;i--)
    {
        j=i-1;
        
        k=IOPIN0;
        IOPIN0=((k&(~(1<<7)))|(((in_data>>j)&0X01)<<7));
                  //说明:用ARM7芯片LPC2368 的P0.7连接AD9834 的 SDATA
                  
        IOCLR0|=1<<6;  
                   //说明:SCLK=0

        for (m=0; m<20; m++)
        {};//大概延时60us
        IOSET0|=1<<6;
        //说明:SCLK=1

    
        
    }
    IOSET0|=1<<4;
         //说明:FSYNC=1 表示写完本次16位数据

}

相关帖子

沙发
httpx| | 2008-8-17 14:24 | 只看该作者

 不用管脚,用寄存器控制字试试。

使用特权

评论回复
板凳
ekaifa|  楼主 | 2008-8-18 09:41 | 只看该作者

试过用寄存器控制,也出现同样的现象

是不是接的有源晶振的问题,我拿示波器观测50M的有源晶振,它输出的是50M的 正旋波,而不是方波

使用特权

评论回复
地板
httpx| | 2008-8-18 14:43 | 只看该作者

你参考一下


void SqareWaveOut(unsigned long value)
{

    uint   PhaseH, PhaseL;
    float  Phasevalue;
        unsigned long temp;

    Phasevalue = (float)value * divf;
    temp =(unsigned long)Phasevalue;
    PhaseL =temp & 0x00003FFF;  // 分离出低14位
    temp >>= 14;
    PhaseH =temp & 0x00003FFF;  // 分离出高14位
    Set9834(0x2128);  //控制寄存器
    PhaseL |= 0x4000;
        Set9834(PhaseL);     // 将频率值的低14位写入频率寄存器0
    PhaseH |= 0x4000;
    Set9834(PhaseH);     // 将频率值的高14位写入频率寄存器0
    Set9834(0x2028);    

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

133

帖子

0

粉丝