完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
这是我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个回答
|
|
|
建议借助软件调试工具和示波器等工具来调试。 查问题比较靠谱。
|
|
|
|
|
|
楼主有没有使用软件或者JTAG仿真调试过呢?建议先借助软件调试工具调试。 出了问题或者达不到预期结果再过来说明问题,这样我们才好帮助您哦。。
|
|
|
|
|
|
硬件电路基本没有问题,和datasheet上面的基本一致,DAC8760的最高SCLK频率可达30MHz,基本也可以排除速度过快的问题,时序我看了下好像也没有问题。
建议你参见第13页的读取时序图,再写一个DAC8760_read_byte函数,进行寄存器的读取。在你写入一个寄存器之后,再独取出来,看看读取出来的数值和你写入进去的一样不一样。如果不一样,那就说明是DAC8760_write_byte这个函数有问题了。如果读取出来的和写入的一样,那建议把IOUT管脚对地短路再测量VOUT。 |
|
|
|
|
|
您好,由于您提供的代码和原理图不完整,我无法直接检查代码和原理图的问题。但是,我可以为您提供一些建议和检查方法,以帮助您自己检查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的程序和原理图。如果您需要进一步的帮助,请提供完整的代码和原理图,以便我为您提供更详细的建议。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
550 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1514 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1338 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1758浏览 29评论
2785浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1725浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1635浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1646浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 18:14 , Processed in 1.290387 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2337