完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
ADS1118无法读数,无法确定是芯片坏了还是模拟的SPI程序有问题,求高招?模拟SPI程序如下。 char i; unsigned int temp; CS_H; SCLK_L; CS_L; _NOP(); for(i = 0;i <16;i++) { temp = config&0x8000; if(temp) DIN_H; else DIN_L; SCLK_L; _NOP(); config <<= 1; SCLK_H; } SCLK_L; CS_H; } void Config_ADS1118(uchar channel,uchar mode) { unsigned int config; if(mode) { switch (channel) { case 0: config = 0xC5EB; break; //FS = 2.048V,SingleShot,860SPS 上拉电阻 case 1: config = 0xD5EB; break; case 2: config = 0xE5EB; break; case 3: config = 0xF5EB; break; } } else { switch (channel) { case 0: config = 0x44EB; break; //FS = 2.048V,Continue,860SPS 上拉电阻 case 1: config = 0x54EB; break; case 2: config = 0x64EB; break; case 3: config = 0x74EB; break; } } WriteSPI(config); WriteSPI(config); delay_SPI(); delay_SPI(); } void Read_ADS1118(void) { char i; CS_H; SCLK_H; CS_L; for(i = 0;i<16;i++) { SCLK_H; _NOP(); if(DOUT_val) value |= 1; value <<= 1; SCLK_L; _NOP(); } SCLK_L; CS_H; } 程序读出来的只有一个不正确的值,不管改变哪个通道采样或改变输入电压值采样值都一样,那位朋友遇到类似的问题? Other Parts Discussed in Thread: ADS1118, MSP430F149void WriteSPI(uint config) { char i; unsigned int temp; CS_H; SCLK_L; CS_L; _NOP(); for(i = 0;i <16;i++) { temp = config&0x8000; if(temp) DIN_H; else DIN_L; SCLK_L; _NOP(); config <<= 1; SCLK_H; } SCLK_L; CS_H; } void Config_ADS1118(uchar channel,uchar mode) { unsigned int config; if(mode) { switch (channel) { case 0: config = 0xC5EB; break; //FS = 2.048V,SingleShot,860SPS 上拉电阻 case 1: config = 0xD5EB; break; case 2: config = 0xE5EB; break; case 3: config = 0xF5EB; break; } } else { switch (channel) { case 0: config = 0x44EB; break; //FS = 2.048V,Continue,860SPS 上拉电阻 case 1: config = 0x54EB; break; case 2: config = 0x64EB; break; case 3: config = 0x74EB; break; } } WriteSPI(config); WriteSPI(config); delay_SPI(); delay_SPI(); } void Read_ADS1118(void) { char i; CS_H; SCLK_H; CS_L; for(i = 0;i<16;i++) { SCLK_H; _NOP(); if(DOUT_val) value |= 1; value <<= 1; SCLK_L; _NOP(); } SCLK_L; CS_H; } 程序读出来的只有一个不正确的值,不管改变哪个通道采样或改变输入电压值采样值都一样,那位朋友遇到类似的问题? 我用的是16位的连续采样方式,FS为2.048V,后面16位没读,不管是输入0V还是输入2V,输出的数值都是32768 原理图应该没错,可能是焊接时导致电路出问题,我再仔细检测下。 |
|
相关推荐
4个回答
|
|
|
手册23页和24页有32bit数据传输图和16bit数据传输图,你用的是哪一种传输方式?另外,输入是多少,预期的读出值是多少,实际的读出值是多少?
|
|
|
|
|
|
0x7FFF?呃,如果你的电路是按照手册上做的的话,那这个信号代表输入0或者信号断线。你要查一下输入了。..。..而且,有了0x7FFF基本上可以认定你的ADS1118是没有问题的。
|
|
|
|
|
|
上传一下你的硬件电路图,会不会是硬件出错了。
|
|
|
|
|
|
ADS1118无法读数可能是由多种原因导致的,包括硬件问题、SPI通信问题、配置错误等。为了确定问题所在,我们可以按照以下步骤进行排查:
1. 检查硬件连接:确保ADS1118的所有引脚都正确连接,包括VDD、GND、CS、DIN、DOUT、SCLK等。检查是否有短路或断路的情况。 2. 检查SPI通信:确保SPI通信的时序和信号正确。你提供的SPI程序看起来是正确的,但可以尝试使用示波器检查SPI信号的波形,确保时序和信号没有问题。 3. 检查ADS1118配置:确保ADS1118的配置寄存器设置正确。你提供的代码中,配置寄存器的值是硬编码的,可以根据实际需求进行调整。例如,你可以根据需要设置采样率、增益等参数。 4. 检查模拟输入信号:确保ADS1118的模拟输入信号在有效范围内。如果输入信号超出范围,可能会导致无法读数。 5. 检查代码逻辑:检查代码中是否有逻辑错误,例如错误的位操作、错误的寄存器地址等。 6. 尝试使用其他SPI设备:如果可能,可以尝试使用其他SPI设备(如SPI Flash)来测试SPI通信是否正常。 7. 检查ADS1118芯片:如果以上步骤都无法解决问题,可以尝试更换一个新的ADS1118芯片,以排除芯片损坏的可能性。 通过以上步骤,你应该能够找到导致ADS1118无法读数的原因,并采取相应的解决措施。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
584 浏览 0 评论
1641 浏览 0 评论
2080 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1533 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1372 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1782浏览 29评论
2810浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1742浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1653浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1668浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 16:59 , Processed in 0.703110 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1246