TI论坛
直播中

王磊

8年用户 1637经验值
私信 关注
[问答]

帮我看看DAC8760的程序和原理图哪里有问题

  这是我DAC8760的程序和原理图,能否帮我检查下哪里有问题
  
  haojia chen [url=https://bbs.elecfans.com/“]Prodigy[/url]245 points
  Other Parts Discussed in Thread: 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,不知道是哪里有问题,检查了很久没结果,求各位大神帮帮忙
  Other Parts Discussed in Thread: 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,不知道是哪里有问题,检查了很久没结果,求各位大神帮帮忙
  over 10 years ago
  Cancel

回帖(4)

莫钻红

2025-1-20 14:34:33
建议借助软件调试工具和示波器等工具来调试。 查问题比较靠谱。
举报

陈墨

2025-1-20 14:34:43
楼主有没有使用软件或者JTAG仿真调试过呢?建议先借助软件调试工具调试。 出了问题或者达不到预期结果再过来说明问题,这样我们才好帮助您哦。。
举报

邢党铿

2025-1-20 14:34:55
 硬件电路基本没有问题,和datasheet上面的基本一致,DAC8760的最高SCLK频率可达30MHz,基本也可以排除速度过快的问题,时序我看了下好像也没有问题。
  建议你参见第13页的读取时序图,再写一个DAC8760_read_byte函数,进行寄存器的读取。在你写入一个寄存器之后,再独取出来,看看读取出来的数值和你写入进去的一样不一样。如果不一样,那就说明是DAC8760_write_byte这个函数有问题了。如果读取出来的和写入的一样,那建议把IOUT管脚对地短路再测量VOUT。
举报

贾飞小

2025-1-20 18:13:37
您好,由于您提供的代码和原理图不完整,我无法直接检查代码和原理图的问题。但是,我可以为您提供一些建议和检查方法,以帮助您自己检查DAC8760的程序和原理图。

1. 检查I2C通信协议:确保您的程序遵循I2C通信协议,包括起始条件、地址字节、数据字节和停止条件。

2. 检查地址和寄存器定义:确保您在代码中定义的DAC8760的地址和寄存器与实际硬件相匹配。您可以查阅DAC8760的数据手册,以获取正确的地址和寄存器定义。

3. 检查初始化代码:确保您的程序在开始之前正确初始化DAC8760。这包括设置正确的控制寄存器、配置寄存器和增益寄存器等。

4. 检查数据写入代码:确保您的程序正确地将数据写入DAC8760的数据寄存器。这包括发送正确的地址字节和数据字节。

5. 检查原理图:确保您的原理图正确地连接了DAC8760的所有引脚,包括电源、地、I2C总线和输出引脚。此外,还需要检查是否有任何短路或断路。

6. 检查电源和地:确保DAC8760的电源和地连接正确,且电源电压和地电压符合数据手册中的要求。

7. 检查I2C总线:确保I2C总线的上拉电阻和下拉电阻正确连接,以确保总线稳定。

8. 检查输出引脚:确保DAC8760的输出引脚正确连接到所需的负载。

9. 使用示波器或逻辑分析仪:您可以使用示波器或逻辑分析仪检查I2C总线上的信号,以确保通信正常。

10. 检查代码逻辑:确保您的程序逻辑正确,包括数据写入、读取和错误处理等。

希望这些建议能帮助您检查DAC8760的程序和原理图。如果您需要进一步的帮助,请提供完整的代码和原理图,以便我为您提供更详细的建议。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分