ADS1115--已调通(附源码)

2024-04-20 17:48
文章标签 源码 调通 ads1115

本文主要是介绍ADS1115--已调通(附源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ADS1115模块--文尾附STM32工程

  • 前言
    • 简介
    • 工作流程
    • 寄存器讲解
    • 源码
    • 源码讲解
    • 资源链接

前言

最近做项目用到了ADS1115,一款常用的16位ADC,下面说说本人的理解

简介


对于用户来说我们能从上面这张框图GET到以下几点:

  1. adc类型为16位∑-Δ型,意味着精度还是比较高了

  2. MUX为输入多路复用器,作用可以理解为对输入方式进行选择,比如是用差分还是单端输入

  3. PGA为可编程增益放大器,根据需要负责把模拟量进行放大

  4. 此款adc采用了IIC通信,与IIC相关的引脚为SCL,SDA,ADDR,其中ADDR为从机地址选择引脚
    在这里插入图片描述
    本文ADDR直接接地,所以从机地址为0x90

  5. Comparator为可编程比较器,作用是在配置好相应的寄存机阈值后进行报警输出(本文未涉及)

工作流程

在这里插入图片描述
上图是ADS1115读的时序逻辑:主机发送开始信号->主机发送从机地址->等待从机应答->主机发送需要操作的寄存器(这里是 Conversion register 里面装着转换好的数字量)->等待从机应答->主机发送停止信号->主机发送开始信号->主机发送从机地址->等待从机应答->主机读取高八位数字量->等待从机应答->主机读取低八位数字量->等待从机应答->主机发送停止信号

在这里插入图片描述
上图是ADS1115写的时序逻辑:主机发送开始信号->主机发送从机地址->等待从机应答->主机发送需要操作的寄存器(这里是 Config register 配置ADS1115的一些参数,后面会分析)->等待从机应答->主机发送配置数据的高八位->等待从机应答->主机发送配置数据的低八位->等待从机应答->主机发送停止信号

寄存器讲解

在这里插入图片描述

ADS1115有4个寄存器,分别是前面提到的Conversion register(16位)、Config register(16位)与两个设置阈值的寄存器(使能比较模式时用)

宏定义四个寄存器的地址

#define REG_Conversion   0x00
#define REG_config		 0x01
#define REG_L_thresh 	 0x02
#define REG_H_thresh 	 0x03

下面详细说说Config register
在这里插入图片描述
在这里插入图片描述

/*****************Config Register**********/
#define OS 		1 		//Operational status or single-shot conversion start
#define MUX 	0x04 	//[2:0]Input multiplexer configuration
#define PGA 	0x01	//Programmable gain amplifier configuration
#define MODE  0x00	//Device operating mode#define DR				0x04//Data rate
#define	COMP_MODE	0 	// Comparator mode
#define COMP_POL 	0		//Comparator polarity
#define COMP_LAT	0 	//Latching comparator
#define COMP_QUE	0x3	//Comparator queue and disable#define config_MSB (OS << 7)|(MUX << 4)|(PGA << 1)|(MODE)//0xC2
#define config_LSB (DR << 5)|(COMP_MODE << 4)|(COMP_POL << 3)|(COMP_LAT << 2)|(COMP_QUE)//

第15位:OS读操作可以知道当前设备的工作状态,写操作可以设置单次转换(必须为断电模式下,当对OS写1时,设备会进入上电模式并完成一次数据转换,然后会自动将OS置0)下面是数据手册的解释
在这里插入图片描述
第14-12位:MUX2为输入多路复用器,对输入模式进行选择,如上图有八种输入模式,分别是四种差分与四种单端输入,本文配置为A0单端输入(0x04)
第11-9位:PGA为可编程增益放大器,设置FSR(满刻度的范围),本文配置为-4.096V-4.096V(0x01)后面电压计算公式与这个有关
第8位:MODE选择持续转换模式与单拍模式(单排模式需要OS位触发),本文配置为连续转换模式(0x00)
第7-5位:DR配置data rate数据传输速率,本文配置为128SPS(0x04)
第4-2位:对比较器的配置(由于本文未涉及,在这就不多说了)
第1-0位:本位配置为关闭比较器并将ALERT/RDY引脚设置为高阻抗模式(0x3)

源码

//ads1115.h
#ifndef ADS1115_H
#define ADS1115_H
#include "i2c.h"
/*******************************************************************************
ADDR--GND
SLAVE ADDRESS 0X90
*******************************************************************************/  /*****************Pointer Register*************/
#define REG_Conversion   0x00
#define REG_config		 0x01
#define REG_L_thresh 	 0x02
#define REG_H_thresh 	 0x03/*****************Conversion Register**********/
//存放着16位结果/*****************Config Register**********/
#define OS 		1 		//Operational status or single-shot conversion start
#define MUX 	0x04 	//[2:0]Input multiplexer configuration
#define PGA 	0x01	//Programmable gain amplifier configuration
#define MODE  0x00	//Device operating mode#define DR				0x04//Data rate
#define	COMP_MODE	0 	// Comparator mode
#define COMP_POL 	0		//Comparator polarity
#define COMP_LAT	0 	//Latching comparator
#define COMP_QUE	0x3	//Comparator queue and disable#define config_MSB (OS << 7)|(MUX << 4)|(PGA << 1)|(MODE)//0xC2
#define config_LSB (DR << 5)|(COMP_MODE << 4)|(COMP_POL << 3)|(COMP_LAT << 2)|(COMP_QUE)//0x83/*****************Lo_thresh Register**********/
#define Lo_thresh	0x8000	// Low threshold value
#define Hi_thresh 0x7FFF	// High threshold valuevoid ADS1115_Write(u8 Reg , u8 reg_MSB , u8 reg_LSB);
float ADS1115_ReadAD(void);
void ADS115_config(void);
#endif//ads1115.c
#include "ads1115.h"
#include "SysTick.h"void ADS1115_Write(u8 Reg , u8 reg_MSB , u8 reg_LSB)
{	I2C_Start();I2C_SendByte(0x90+0);//0x90地址+0写位while(I2C_WaitAck());I2C_SendByte(Reg);while(I2C_WaitAck());I2C_SendByte(reg_MSB);while(I2C_WaitAck());I2C_SendByte(reg_LSB);while(I2C_WaitAck());I2C_Stop();
}
float ADS1115_ReadAD()
{float ret;uint16_t data;I2C_Start();I2C_SendByte(0x90+0);//0x90地址+0写位while(I2C_WaitAck());I2C_SendByte(REG_Conversion);while(I2C_WaitAck());I2C_Stop();delay_us(5);I2C_Start();I2C_SendByte(0x90+1);//0x90地址+1读位while(I2C_WaitAck());data = I2C_ReadByte(1);data = (data <<	8)&0xff00;//前8位data+=	I2C_ReadByte(1);//后8位I2C_Stop();//数值计算取决于PGA配置if(data>0x8000)ret=((float)(0xffff-data)/32768.0)*4.096;elseret=((float)data/32768.0)*4.096;return ret;}void ADS115_config()
{ADS1115_Write(REG_config, config_MSB ,config_LSB);
}

源码讲解

代码中主要有void ADS115_config()与float ADS1115_ReadAD()两个函数
其中ADS115_config()配置函数的功能是对Config register寄存器进行配置,写入的值为0xC2(config_MSB )0x83(config_LSB)
ADS1115_ReadAD()函数返回的值为转换好的电压值
这两个函数的逻辑完全是按照上方的工作流程来写

资源链接

链接:https://pan.baidu.com/s/1OzdbtXzelk2rutXFWvmooA
提取码:5iqt

这篇关于ADS1115--已调通(附源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920927

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

red5-server源码

red5-server源码:https://github.com/Red5/red5-server

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码