dds.c

来自「采用Atmega16的变频式超声波发生器的源代码」· C语言 代码 · 共 89 行

C
89
字号
#include"main.h"

//AD9835
void ad9835_spi(uint data)
{
cbi(portb,4);
uchar temp;
temp=(uchar) (data>>8);
spi(temp);

temp=(uchar) (data);
spi(temp);
sbi(portb,4);

}

void ad9835(ulong f)
{
ulong data;
uchar temp;

data=ad9835_f_to_data(f);

temp=(uchar) (data);
ad9835_spi((0x3000+temp));

temp=(uchar) (data>>8);
ad9835_spi((0x2100+temp));

temp=(uchar) (data>>16);
ad9835_spi((0x3200+temp));

temp=(uchar) (data>>24);
ad9835_spi((0x2300+temp));

//ad9835_spi(0x6000); //fre register0,phase register0
ad9835_spi(0xc000);//sleep,reset,clr=0
}

void ad9835_init(void)
{
ulong data;
uchar temp;
ad9835_spi(0xf800); //sleep,reset,clr=1
ad9835_spi(0xa000);  //sync=1;selsrc=0;
//fre0=62000hz
data=ad9835_f_to_data(62000);

temp=(uchar) (data);
ad9835_spi((0x3000+temp));

temp=(uchar) (data>>8);
ad9835_spi((0x2100+temp));

temp=(uchar) (data>>16);
ad9835_spi((0x3200+temp));

temp=(uchar) (data>>24);
ad9835_spi((0x2300+temp));

//fre1=138000hz  
data=ad9835_f_to_data(138000);

temp=(uchar) (data);
ad9835_spi((0x3400+temp));

temp=(uchar) (data>>8);
ad9835_spi((0x2500+temp));

temp=(uchar) (data>>16);
ad9835_spi((0x3600+temp));

temp=(uchar) (data>>24);
ad9835_spi((0x2700+temp));

//ad9835_spi(0x6000); //fre register0,phase register0
ad9835_spi(0xc000);//sleep,reset,clr=0
}

ulong ad9835_f_to_data(ulong f)
{
ulong data;
data=268.435436*f; //16M crystal oscillator
return data;
}



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?