微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 这是我DAC8760的程序和原理图,能否帮我检查下哪里有问题

这是我DAC8760的程序和原理图,能否帮我检查下哪里有问题

时间:10-02 整理:3721RD 点击:

#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也不行,所以得删除

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top