TI论坛
直播中

张辉

7年用户 1346经验值
私信 关注
[问答]

使用s32k144读取ads1118时不能读到数据,为什么?如何解决?


  • 序图如下:

回帖(2)

mintsy

前天 11:07

您好,

检测下SCLK 周期、高电平宽度和低电平宽度是否满足规格要求:


CONFIG 值下面位,您写入01,看 是否有输出?


举报

陈燕

前天 17:19
在使用S32K144读取ADS1118时,如果无法读取数据,可能是由以下几个原因导致的:

1. 连接问题:请检查S32K144与ADS1118之间的连接是否正确。确保SDA、SCL、VDD和GND引脚正确连接。

2. 地址问题:请确保ADS1118的I2C地址设置正确。ADS1118的I2C地址可以通过连接SDA和SCL引脚到不同的电平来设置。请检查您的硬件连接是否与代码中的I2C地址相匹配。

3. 时钟频率问题:I2C通信需要在正确的时钟频率下进行。请检查您的I2C时钟频率设置是否正确。通常,ADS1118的I2C时钟频率范围为100kHz至400kHz。

4. 代码问题:请检查您的代码是否正确实现了I2C通信。以下是使用S32K144读取ADS1118的示例代码:

```c
#include "fsl_i2c.h"
#include "fsl_gpio.h"

#define ADS1118_I2C_BASEADDR I2C0_BASE
#define ADS1118_I2C_CLOCK_SOURCE kCLOCK_BusI2C0
#define ADS1118_I2C_MASTER_CLOCK_FREQ 400000U
#define ADS1118_I2C_ADDR 0x90

void ADS1118_Init(I2C_Type *base, uint32_t clkSrc_Hz) {
    i2c_master_config_t i2cConfig = {
        .baudRate_Bps = ADS1118_I2C_MASTER_CLOCK_FREQ,
        .enableStopHold = false,
    };
    I2C_MasterInit(base, &i2cConfig, clkSrc_Hz);
}

uint8_t ADS1118_ReadData(I2C_Type *base, uint8_t regAddr) {
    uint8_t data = 0;
    I2C_MasterStart(base, ADS1118_I2C_ADDR << 1, kI2C_Write);
    I2C_MasterWriteBlocking(base, ®Addr, 1);
    I2C_MasterStart(base, ADS1118_I2C_ADDR << 1, kI2C_Read);
    I2C_MasterReadBlocking(base, &data, 1);
    I2C_MasterStop(base);
    return data;
}

int main(void) {
    ADS1118_Init(I2C0, 400000U);
    uint8_t data = ADS1118_ReadData(I2C0, 0x00);
    // 处理读取到的数据
    return 0;
}
```

请确保您的代码与上述示例代码类似,并且正确实现了I2C通信。

5. 硬件问题:如果以上步骤都无法解决问题,请检查您的硬件设备是否正常工作。您可以尝试使用其他设备或开发板来测试ADS1118是否正常工作。

通过检查和解决以上问题,您应该能够成功使用S32K144读取ADS1118的数据。
举报

更多回帖

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