TI论坛
直播中

孙成红

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

ADS1118无法读数是为什么


    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)

王幼萍

2025-1-20 15:27:54
手册23页和24页有32bit数据传输图和16bit数据传输图,你用的是哪一种传输方式?另外,输入是多少,预期的读出值是多少,实际的读出值是多少?
举报

王兰英

2025-1-20 15:28:08
 0x7FFF?呃,如果你的电路是按照手册上做的的话,那这个信号代表输入0或者信号断线。你要查一下输入了。..。..而且,有了0x7FFF基本上可以认定你的ADS1118是没有问题的。
举报

宋玉红

2025-1-20 15:28:16
 上传一下你的硬件电路图,会不会是硬件出错了。
举报

丁冬芹

2025-1-20 18:09:51
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无法读数的原因,并采取相应的解决措施。
举报

更多回帖

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