文章中心 -> IT传闻

文章正文

AD9851是ADI公司采用先进的DDS技术推出的高集成度DDS频率合成器,它内部包括可编程DDS系统、高性能DAC及高速比较器,能实现全数字编程控制的频率合成和时钟发生。AD9851接口功能控制简单,可以用8位并行口或串行口直接输入频率、相位等控制数据。32位频率控制字,在180MHz时钟下,输出频率分辨率达0.0372Hz。先进的CMOS工艺使AD9851不仅性能指标一流,而且功耗低,在3.3V供电时,功耗仅为155mW。

各引脚介绍:

D0~D7: 8位数据输入口,可给内部寄存器装入40位控制数据。

PGND:6倍参考时钟倍频器的地。

PVCC:6倍参考时钟倍频器电源。

W—CLK:字装入信号,上升沿有效。

FQ—UD:频率更新控制信号,时钟上升沿确认输入数据有效。

REFCLOCK:外部参考时钟输入。

AGND:模拟地。

AVDD:模拟电源(+5V)。

DGND:数字地。

DVDD:数字电源(+5V)。

Rset:通过串联一个电阻到地,设置DAC输出满额时的电流。

VOUTN:内部比较器负向输出端。

VOUTP:内部比较器正向输出端。

VINN:内部比较器负向输入端。

VINP:内部比较器正向输入端。

DACBP:DAC旁路连接端。

IOUTB:”互补“DAC输出。

IOUT:内部DAC输出端。

RESET:复位端。

#include "msp430x22x4.h"
#define SERIAL_SDI   P4OUT|=BIT0   //数据位D7
#define C_SERIAL_SDI P4OUT&=~BIT0
#define CS           P4OUT|=BIT1   //AD8400控制信号
#define C_CS         P4OUT&=~BIT1
#define CLK          P4OUT|=BIT2   //写控制字时钟CLK
#define C_CLK        P4OUT&=~BIT2
//#include "msp430x22x4.h"
#define FQ_UP        P1OUT|=BIT1   //AD9851信号更新位FQ_UP
#define C_FQ_UP      P1OUT&=~BIT1
#define W_CLK        P1OUT|=BIT2   //写控制字时钟WCLK
#define C_W_CLK      P1OUT&=~BIT2
#define SERIAL_DAT   P1OUT|=BIT3   //数据位D7
#define C_SERIAL_DAT P1OUT&=~BIT3
#define reset        P3OUT|=BIT1
#define c_reset      P3OUT&=~BIT1
#define INT_U        unsigned long int
   
void delay(unsigned int ms);// 延时子程序
void SetFreq(INT_U Frequency,INT_U Phase);//设置输出频率
void Reset9851SM(); //初始化设置为串行输入方式
void SetRES(int RES);//设置输出阻抗
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
 
  //P1DIR |= 0x02;
  P4DIR |= 0x07;
  P1DIR |= 0x1e;
  P3DIR |= 0x02;
 
  reset;
  delay(0);
  c_reset;
 
  Reset9851SM();
  //while(1)
  //{
  SetFreq(10000000,0);
  SetRES(40);
  while(1);
}

static void write_RES(int RES)//写控制字
{
    int i;
  
    C_CLK;
    C_CS;
    CLK;
  
 
    for(i=0; i<10; i++)
    {
        if (RES&0x80)//从高位开始串行输入
        {
            SERIAL_SDI;
        }
        else
        {
            C_SERIAL_SDI;
        }
        C_CLK;
        CLK;
        RES <<= 1; 
    }
    C_CLK;
    CS;
    CLK;
}
void SetRES(int RES)//设置输出电阻
{
  RES=RES*2.55;
  write_RES(RES);
}
void delay(unsigned int ms)// 延时子程序

  unsigned int i;
 while(ms--)
            for(i = 0; i< 2000; i++);
}

void Reset9851SM() //初始化设置为串行输入方式
{
    C_W_CLK;
    C_FQ_UP;
  
    W_CLK;
    delay(2);
    C_W_CLK;
  
    FQ_UP;
    delay(2);
    C_FQ_UP;
}

static void write_dds(INT_U Frequency,INT_U Phase)//写频率控制字
{
    //INT_U temp=0x80;
    INT_U i;
    C_FQ_UP;
    C_W_CLK;
    for(i=0; i<33; i++)
    {
        C_W_CLK;
        if( (Frequency&0x00000001) || (i==32)  )  //6倍倍乘器启动
        {
            SERIAL_DAT;
        }
        else
        {
            C_SERIAL_DAT;
        }
        delay(2);// 延时子程序
        W_CLK;
        delay(5);// 延时子程序
        Frequency >>= 1;
    }
  
   // for(i=0;i<2;i++)
   // {
       C_W_CLK;
       delay(2);// 延时子程序
       C_SERIAL_DAT;
       W_CLK;
       delay(5);// 延时子程序
     
       C_W_CLK;
       delay(2);// 延时子程序
       C_SERIAL_DAT;   
       W_CLK;
       delay(5);// 延时子程序
 //   }
  
    for(i=0;i<5;i++)
    {
        C_W_CLK;
        if( Phase&0x01  )  //设置相位
        {
            SERIAL_DAT;
        }
        else
        {
            C_SERIAL_DAT;
        }
        delay(2);// 延时子程序
        W_CLK;
        delay(5);// 延时子程序
        Phase >>= 1;
    }
    FQ_UP;
    C_W_CLK;
    delay(2);// 延时子程序
    C_FQ_UP;

文章来自绿盟(xDowns.com)转载请注明来路。

上一篇文章:VS2008安装失败解决办法 []

相关文章

相关软件