基于stm32使用ads1115idgs C代码
时间: 2023-08-15 10:08:21 浏览: 68
下面是使用ADS1115进行模数转换的STM32代码示例:
```c
#include "stm32f10x.h"
#include "i2c.h"
#define ADS1115_ADDR 0x48
// ADS1115寄存器定义
#define ADS1115_REG_CONVERSION 0x00
#define ADS1115_REG_CONFIG 0x01
#define ADS1115_REG_LO_THRESH 0x02
#define ADS1115_REG_HI_THRESH 0x03
// ADS1115配置寄存器定义
#define ADS1115_CFG_OS_SINGLE 0x8000
#define ADS1115_CFG_MUX_AIN0_AIN1 0x0000
#define ADS1115_CFG_MUX_AIN0_AIN3 0x1000
#define ADS1115_CFG_MUX_AIN1_AIN3 0x2000
#define ADS1115_CFG_MUX_AIN2_AIN3 0x3000
#define ADS1115_CFG_PGA_6_144V 0x0000
#define ADS1115_CFG_PGA_4_096V 0x0200
#define ADS1115_CFG_PGA_2_048V 0x0400
#define ADS1115_CFG_PGA_1_024V 0x0600
#define ADS1115_CFG_PGA_0_512V 0x0800
#define ADS1115_CFG_PGA_0_256V 0x0A00
#define ADS1115_CFG_MODE_SINGLE 0x0100
#define ADS1115_CFG_DR_8SPS 0x0000
#define ADS1115_CFG_DR_16SPS 0x0020
#define ADS1115_CFG_DR_32SPS 0x0040
#define ADS1115_CFG_DR_64SPS 0x0060
#define ADS1115_CFG_DR_128SPS 0x0080
#define ADS1115_CFG_DR_250SPS 0x00A0
#define ADS1115_CFG_DR_475SPS 0x00C0
#define ADS1115_CFG_DR_860SPS 0x00E0
// 初始化ADS1115
void ADS1115_Init(void)
{
// 设置ADS1115配置寄存器
uint16_t config = ADS1115_CFG_OS_SINGLE | ADS1115_CFG_MUX_AIN0_AIN1 | ADS1115_CFG_PGA_6_144V | ADS1115_CFG_MODE_SINGLE | ADS1115_CFG_DR_128SPS;
I2C_WriteReg16(ADS1115_ADDR, ADS1115_REG_CONFIG, config);
}
// 读取ADS1115转换结果
int16_t ADS1115_ReadConversion(void)
{
// 启动单次转换
uint16_t config = ADS1115_CFG_OS_SINGLE | ADS1115_CFG_MUX_AIN0_AIN1 | ADS1115_CFG_PGA_6_144V | ADS1115_CFG_MODE_SINGLE | ADS1115_CFG_DR_128SPS;
I2C_WriteReg16(ADS1115_ADDR, ADS1115_REG_CONFIG, config);
// 等待转换完成
while(!(I2C_ReadReg16(ADS1115_ADDR, ADS1115_REG_CONFIG) & 0x8000));
// 读取转换结果
return (int16_t)I2C_ReadReg16(ADS1115_ADDR, ADS1115_REG_CONVERSION);
}
int main(void)
{
// 初始化I2C接口
I2C_Init();
// 初始化ADS1115
ADS1115_Init();
// 读取转换结果
int16_t result = ADS1115_ReadConversion();
// 将转换结果转换为电压
float voltage = (float)result * 6.144 / 32767.0;
while(1);
}
```
在上述代码中,使用了一个名为I2C_WriteReg16和I2C_ReadReg16的函数,这两个函数分别用于向ADS1115写入16位寄存器值和从ADS1115读取16位寄存器值。这些函数的实现可以参考I2C驱动库的相关文档。在实际应用中,还需要根据具体需求选择合适的采样率、增益和工作模式,以保证转换结果的准确性和精度。