这是我DAC8760的程序和原理图,能否帮我检查下哪里有问题
#ifndef _DAC8760_H
#define _DAC8760_H
#define DACDataReg 0x01
#define DACReadReg 0x02
#define DACControlReg 0x55
#define DACResetReg 0x56
#define DACConfigurationReg 0x57
#define DACGainReg 0x58
#define DACZeroReg 0x59
#define DACWatchdogReg 0x95
#define ReaddataReg 0x0001
#define ReadstatusReg 0x0000
#define ReadcontrolReg 0x0002
#define ReadConfigurationReg 0x000B
#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 DAC8760_DIN_1_() P4OUT|=BIT1
#define DAC8760_DIN_0_() P4OUT&=~BIT1
#define DAC8760_SDO_() P4IN&BIT2
#define DAC8760_SCLK_1_() P4OUT|=BIT3
#define DAC8760_SCLK_0_() P4OUT&=~BIT3
#define CLk_set P3OUT|=BIT5
#define CLk_clear P3OUT&=~BIT5
#define DAC8760_LATCH_1_() P3OUT|=BIT6
#define DAC8760_LATCH_0_() P3OUT&=~BIT6
void DA_init();
void DAC8760_write_byte(unsigned char com, unsigned int dat);
#endif
#include<msp430.h>
#include<DAC8760.h>
/***********************************
函数功能:
写数据****
参数:com:前8位命令;
dat:数据
**
***********************************/
void DAC8760_write_byte(unsigned char com, unsigned int dat)
{
unsigned char i=0;
unsigned long data;
data=(((unsigned long)com)<<24)|(dat<<8);
DAC8760_LATCH_0_();
DAC8760_SCLK_0_();
for(i=0;i<24;i++)
{
DAC8760_SCLK_0_();
if(data&0x80000000)
{
DAC8760_DIN_1_();
}
else
{
DAC8760_DIN_0_();
}
delay_us(1);
DAC8760_SCLK_1_();
data<<=1;
delay_us(1);
}
DAC8760_SCLK_0_();
delay_us(1);
DAC8760_LATCH_1_();
DAC8760_DIN_1_();
}
void DA_init()
{
CLk_clear;
DAC8760_write_byte(DACResetReg,0x0001);
delay_us(1);
DAC8760_write_byte(DACConfigurationReg,0x0088);
delay_us(1);
DAC8760_write_byte(DACControlReg,0x1006);
delay_us(1);
DAC8760_write_byte(DACDataReg,0xffff);
delay_us(1);
}
输出端一直为0,不知道是哪里有问题,检查了很久没结果,求各位大神帮帮忙
建议借助软件调试工具和示波器等工具来调试. 查问题比较靠谱.
让网友看你的程序, 只能靠猜哦.
楼主有没有使用软件或者JTAG仿真调试过呢?建议先借助软件调试工具调试. 出了问题或者达不到预期结果再过来说明问题,这样我们才好帮助您哦。。
硬件电路基本没有问题,和datasheet上面的基本一致,DAC8760的最高SCLK频率可达30MHz,基本也可以排除速度过快的问题,时序我看了下好像也没有问题。
建议你参见第13页的读取时序图,再写一个DAC8760_read_byte函数,进行寄存器的读取。在你写入一个寄存器之后,再独取出来,看看读取出来的数值和你写入进去的一样不一样。如果不一样,那就说明是DAC8760_write_byte这个函数有问题了。如果读取出来的和写入的一样,那建议把IOUT管脚对地短路再测量VOUT。
感谢您的提醒,现在可以输出了,不过这误差那是相当大,而且每个值输出都不成比例,请问您知道是哪里影响到吗,最大输出电流也是错了
请问您的问题是软件问题么。我参考了您的程序。。可以告诉我么。谢谢
就是配置寄存器不要配置,我一旦配置就不行了,配置00也不行,所以得删除