TI中文支持网
TI专业的中文技术问题搜集分享网站

有关DAC8568数模转换器初始化

搞了好长时间,端口一直没有电压输出,不知是不是其配置有关,我选的DAC_A通道输出,寄存器是这样写的:

write_32bits(0x0800,0xFFFF,0x1000); //打开内部参考,设置静态模式
write_32bits(0x0400,0x0000,0x1000); //给DAC_A端口上电
write_32bits(0x0000,0xFFFF,0x0000); //写入数据给DAC_A寄存器 write_32bits(0x0300,0xFFFF,0x0000); //写入数据给通道A寄存器并更新A

写32位数据我是分四次写的,先写前面12位,再写中间16位,最后写最后四位。

#include <MSP430G2553.h>

#define CPU_F ((double)1000000)#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

#define uchar unsigned char
#define uint unsigned int

#define write_pca write_prefix_control_address //写前缀位、控制位、地址位
#define pca prefix_control_address
#define write_fea write_feature //写功能位
#define fea feature

#define SCLK BIT0
#define DO BIT1
//#define DI BIT2
#define SYNC BIT3
//#define LDAC BIT4

#define SCLK_0 P2OUT&=~SCLK#define SCLK_1 P2OUT|=SCLK

//#define DI_0 P2OUT&=~DI
//#define DI_1 P2OUT|=DI

#define DO_0 P2OUT&=~DO
#define DO_1 P2OUT|=DO

#define SYNC_0 P2OUT&=~SYNC
#define SYNC_1 P2OUT|=SYNC

#define LDAC_0 P2OUT&=~LDAC
#define LDAC_1 P2OUT|=LDAC

//写前缀位、控制位、地址位函数
void write_pca(uint pca)
{
uint temp; //,num_in=0
for(uint i=0;i<12;i++)
{
temp=(pca&0x8000);
if(temp==0x8000)
DO_1;
else
DO_0;
delay_us(1); SCLK_1;
pca<<=1;
delay_us(1);
SCLK_0;
delay_us(1); }
}

//写数据函数
void write_data(uint data)
{
uint temp1; //,num_in1=0
SCLK_0;
for(uint i=0;i<16;i++)
{
temp1=(data&0x8000);
if(temp1==0x8000)
DO_1;
else
DO_0;
delay_us(1); SCLK_1;
data<<=1;
delay_us(1);
SCLK_0;
delay_us(1); }}

//写功能函数
void write_fea(uint fea)
{
uint temp2; //,num_in2=0
SCLK_0;
for(uint i=0;i<4;i++)
{
temp2=(fea&0x8000);
if(temp2==0x8000)
DO_1;
else
DO_0;
delay_us(1); SCLK_1;
fea<<=1;
delay_us(1);
SCLK_0;
delay_us(1);
}
}

//写32位数据
void write_32bits(uint pca,uint data,uint fea)
{ //LDAC_1;
SCLK_1;
SYNC_1;
delay_us(1);
SCLK_0;
delay_us(1);
SYNC_0;
write_pca(pca);
write_data(data);
write_fea(fea);
SYNC_1;
//LDAC_0;
delay_ms(1);
//LDAC_1;
}

void init_dac8568(void)
{
write_32bits(0x0800,0xFFFF,0x1000); //打开内部参考,设置静态模式
write_32bits(0x0400,0x0000,0x1000); //给DAC_A端口上电
write_32bits(0x0000,0xFFFF,0x0000); //写入数据给DAC_A寄存器 write_32bits(0x0300,0xFFFF,0x0000); //写入数据给通道A寄存器并更新A

}

void main()
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
P2SEL|=BIT0+BIT1+BIT2+BIT3;
P2DIR|=BIT0+BIT1+BIT3;
P2DIR&=~BIT2;
P2OUT&=~(BIT0+BIT1+BIT3);
init_dac8568();
while(1);}

大致的电路图如下:

Wanda WANG:

1. 确定内部参考电压配置输出正确吗?可以量下pin 8看有没有参考输出;

2. 最好是能把配置的波形抓出来,对比下,看时序对不对。

chuangchuang Sugong:

回复 Wanda WANG:

谢谢你的回答!我还有几个问题,如下:

1.没有参考电压输出

2.配置的波形该怎么样观察?该用什么软件呢?

Decapton Wang:

回复 chuangchuang Sugong:

LDAC不能直接接地吧,这个信号应该是用来把处理器发来的配置装载到DAC内部的。按照手册SPI时序图,LDAC也不是恒低。

这个芯片不支持寄存器回读,不太好观察实际写入值。

chuangchuang Sugong:

回复 Decapton Wang:

谢谢你热心的解答

我一直接地是因为在DAC8568手册第41耶叶有这么一句话,如下:

我再看看手册吧。

tom wang2:

回复 chuangchuang Sugong:

请问楼主,/LDAC能一直接地吗?同步更新(synchronous updates)是默认的工作方式吗?寄存器配置里面没有关于/LDAC是同步更新或者是异步更新的。想用同步更新怎么办?多谢多谢。。。

赞(0)
未经允许不得转载:TI中文支持网 » 有关DAC8568数模转换器初始化
分享到: 更多 (0)