ADS1115的四通道使用

本人也是stm32的初学者,以下代码也是由csdn的其它码友改编过来,认为自己学到的想要分享给大家,既要学会接受,也要学会给予,一下代码的引脚等使用的是野火stm32f103rc_mini版的板子与ADS1115模块进行结合。

若有疑问,欢迎大家一起讨论。

(由于挺久了,找不到原作者了,若有码友发现类似,请告知我,谢谢)

主函数:这里的第二个头文件里其实就是包含stm32的i2c和串口等的头文件(因为为了方便自己写程序,将很多文件的头文件都放在这里面了,码友们可以自己根据需求将自己的头文件加上去)

#include "stm32f10x.h"
#include "stm32f10x_gcy.h"    

float ads1115_buffer[4];
 
int main(void)
{    
  i2c_CfgGpio();
  USART_Config();
  while (1)
    {
        
         for (int i=0;i<4;i++)
         {
             ads1115_buffer[i] = ADS1115_Read_average_ADC(i,ADS1115_PGA_4096);//,ADS1115_PGA_4096
                printf("\r\n AIN%d=%f\r\n",i,ads1115_buffer[i]);
         } 
        printf("\r\n 666\r\n");
         Delay_ms(1000);//   延时100毫秒  
        
    }
}


ADS1115的.h文件

#ifndef _ADS1115_H
#define _ADS1115_H

#define ADS1115_DEV_ADDR_GND            0x90//ADDR接GND,ADS1115地址
#define ADS1115_DEV_ADDR_VDD            0x92//ADDR接VDD,ADS1115地址
#define ADS1115_DEV_ADDR_SDA            0x94//ADDR接SDA,ADS1115地址
#define ADS1115_DEV_ADDR_SCL            0x96//ADDR接SCL,ADS1115地址

#define ADS1115_DEV_ADDR_Write_GND            0x90//ADDR接GND,ADS1115地址
#define ADS1115_DEV_ADDR_Read_GND            0x91//ADDR接GND,ADS1115地址

  
#define ADS1115_PGA_0256            0x0a        //110//111
#define ADS1115_PGA_0512            0x08
#define ADS1115_PGA_1024            0x06
#define ADS1115_PGA_2048            0x04
#define ADS1115_PGA_4096            0x02
#define ADS1115_PGA_6144            0x00


#define ADS1115_Conversion        0x00  //转换寄存器地址
#define ADS1115_Config               0x01  //配置寄存器地址
#define ADS1115_Hi_thresh        0x02  //高位预值寄存器地址
#define ADS1115_Lo_thresh        0x03  //低位预值寄存器地址
  
//#define ADS1115_Config_H_function  0x82 //配置寄存器的功能设置(高8位)(+-4.096V,断电单击模式)
//#define ADS1115_Config_L_function  0x83 //配置寄存器的功能设置(低8位) (每秒采样128次,禁用比较器功能,并将警报/RDY针处于高状态。) 

#define ADS1115_I2C_WR    0        /* 写控制bit */

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用STM32配置ADS1115通道采集电压的步骤: 1. 确保ADS1115已正确连接到STM32的I2C总线上,并且STM32的I2C总线已正确配置。 2. 配置ADS1115的寄存器,使其工作在所需的采样率和增益下,以及配置通道选择。例如,要选择通道0和1进行单次连续采样,您可以将以下代码添加到初始化函数中: ``` // 设置采样率为860SPS,增益为2.048V,选择通道0和1 uint16_t config = ADS1115_REG_CONFIG_CQUE_NONE | ADS1115_REG_CONFIG_CLAT_NONLAT | ADS1115_REG_CONFIG_CPOL_ACTVLOW | ADS1115_REG_CONFIG_CMODE_SINGLE | ADS1115_REG_CONFIG_DR_860SPS | ADS1115_REG_CONFIG_MODE_SINGLE | ADS1115_REG_CONFIG_PGA_2_048V | ADS1115_REG_CONFIG_MUX_DIFF_0_1; // 将配置写入ADS1115的配置寄存器 HAL_I2C_Mem_Write(&hi2c1, ADS1115_ADDRESS, ADS1115_REG_POINTER_CONFIG, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&config, 2, 100); ``` 3. 启动一次单次连续采样,等待采样完成,并从ADS1115的数据寄存器读取采样结果。例如,您可以将以下代码添加到主循环中: ``` // 启动一次单次连续采样 uint16_t config = ADS1115_REG_CONFIG_CQUE_NONE | ADS1115_REG_CONFIG_CLAT_NONLAT | ADS1115_REG_CONFIG_CPOL_ACTVLOW | ADS1115_REG_CONFIG_CMODE_SINGLE | ADS1115_REG_CONFIG_DR_860SPS | ADS1115_REG_CONFIG_MODE_SINGLE | ADS1115_REG_CONFIG_PGA_2_048V | ADS1115_REG_CONFIG_MUX_DIFF_0_1; HAL_I2C_Mem_Write(&hi2c1, ADS1115_ADDRESS, ADS1115_REG_POINTER_CONFIG, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&config, 2, 100); // 等待采样完成 while(!(HAL_I2C_IsDeviceReady(&hi2c1, ADS1115_ADDRESS, 1, 100))); // 从ADS1115的数据寄存器读取采样结果 uint8_t data[2]; HAL_I2C_Mem_Read(&hi2c1, ADS1115_ADDRESS, ADS1115_REG_POINTER_CONVERT, I2C_MEMADD_SIZE_8BIT, data, 2, 100); // 将数据转换为电压值 int16_t result = (int16_t)((data[0] << 8) | data[1]); float voltage = (float)result * 2.048 / 32767.0; ``` 4. 如有需要,您可以重复步骤3以获取另一个通道的采样结果。例如,要选择通道2和3进行单次连续采样,您可以将以下代码添加到主循环中: ``` // 启动一次单次连续采样 uint16_t config = ADS1115_REG_CONFIG_CQUE_NONE | ADS1115_REG_CONFIG_CLAT_NONLAT | ADS1115_REG_CONFIG_CPOL_ACTVLOW | ADS1115_REG_CONFIG_CMODE_SINGLE | ADS1115_REG_CONFIG_DR_860SPS | ADS1115_REG_CONFIG_MODE_SINGLE | ADS1115_REG_CONFIG_PGA_2_048V | ADS1115_REG_CONFIG_MUX_DIFF_2_3; HAL_I2C_Mem_Write(&hi2c1, ADS1115_ADDRESS, ADS1115_REG_POINTER_CONFIG, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&config, 2, 100); // 等待采样完成 while(!(HAL_I2C_IsDeviceReady(&hi2c1, ADS1115_ADDRESS, 1, 100))); // 从ADS1115的数据寄存器读取采样结果 uint8_t data[2]; HAL_I2C_Mem_Read(&hi2c1, ADS1115_ADDRESS, ADS1115_REG_POINTER_CONVERT, I2C_MEMADD_SIZE_8BIT, data, 2, 100); // 将数据转换为电压值 int16_t result = (int16_t)((data[0] << 8) | data[1]); float voltage = (float)result * 2.048 / 32767.0; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值