51 驱动 ADS1115 AD采集

文章目录

  • 一、ADS1115简介
  • 二、引脚功能
  • 三、功能介绍
    • 1.MULTIPLEXER
    • 2.量程
    • 3.数字比较器
    • 4.寄存器写入或读取时序
    • 5.数据格式
  • 四、寄存器介绍
    • 1.地址指针寄存器
    • 2.转化数据存放寄存器
    • 3.配置寄存器
    • 4.比较器高低阈值寄存器
  • 五、程序
  • 六、实验现象


一、ADS1115简介

ADS1115是高精度模数转换器(adc),具有16位分辨率。数据通过兼容lIC的串行接口传输,可以选择四个IIC从地址,ads1115单电源工作范围为2.0V至5.5V。ADS1115可以以每秒860个采样的速率执行转换。ADS1115上提供板载PGA,提供从电源到低至±256mV的输入范围,允许大小信号都具有输入多路复用器(MUX),提供两个差分或四个单端输入。

在这里插入图片描述

二、引脚功能

在这里插入图片描述

ADDRIIC地址选择
ALERT/RDY比较器输出高低或转换就绪
GND电源地
AIN0-AIN3模拟量输入
VDD电源正
SDAIIC时钟线
SCLIIC数据线

ADS1115引脚ADDR用于设置器件的IIC地址, 该引脚可以连接到GND、VDD、SDA、SCL,从而选择四个不同的IIC地址。本文使用的模块ADDR引脚接在GND上,故从机地址为0x90/0x91。
在这里插入图片描述

三、功能介绍

1.MULTIPLEXER

ADS1115包含一个输入多路复用器,可以测量四个单端或两个差分信号。另外,AIN0和AlN1与AIN3的测量值可能存在差异。多路复用器由配置寄存器中的3位配置。当测量单端信号时,ADC的负输入通过多路复用器内的开关连接到GND。
在这里插入图片描述

2.量程

量程由配置寄存器 PGA[2:0]位控制
在这里插入图片描述

3.数字比较器

ADS1115和ADS1114具有一个可编程的数字比较器,ALERT/RDY引脚可以发出警报。Config寄存器中的COMP_MODE位将比较器配置为传统比较器或窗口比较器。在传统的比较器模式中,当转换数据超过高阈值寄存器(Hi_thresh)中设置的限制时,ALERT/RDY引脚置为有效(默认情况下激活低电平)。然后,只有当转换数据低于低阈值寄存器(Lo_thresh)中设置的限制时,比较器才会解除操作。在窗口比较器模式下,当转换数据超过Hi_thresh寄存器值或低于Lo_thresh寄存器值时,ALERT/RDY引脚会断言。在窗口模式或传统比较器模式中,比较器都可以配置为在Config寄存器中的COMP_LAT位断言之后锁存。这种设置使引脚电平保持不变,即使输入信号没有超出阈值寄存器的界限。这个锁存引脚电平只能通过发出SMBus警报响应或读取转换寄存器来清除。ALERT/RDY引脚可以通过配置寄存器中的COMP_POL位配置为高电平或低电平。比较器还可以配置为仅在一组连续读数超过阈值寄存器(Hi_thresh和Lo_thresh)中设置的阈值后才激活ALERT/RDY引脚。Config寄存器中的COMP_QUE[1:0]位配置比较器在激活ALERT/RDY引脚之前等待超过阈值的一个、两个或四个读数。COMP_QUE[1:0]位也可以禁用比较器功能,并将ALERT/RDY引脚置于高状态

提示:本次实验没有使用比较器,比较器的相关配置参考配置寄存器的低五位

4.寄存器写入或读取时序

为了从ADS111x访问一个特定的寄存器,主机必须首先写一个合适的值到地址指针寄存器中的地址指针位P[1:0]。地址指针寄存器被直接写入到从地址字节、低R / W位和成功的从机确认之后。写入地址指针寄存器后,从机应答,而主机发出STOP或重复的START条件。当从ADS111x读取时,先前写入位P[1:0]的值决定了要读取的寄存器。要改变读哪个寄存器,必须向P[1:0]写入一个新值。为了写一个新值到P[1:0],主机发出一个低R/W位的从地址字节,后面跟着地址指针寄存器字节。不需要传输额外的数据,主机可以发出STOP条件。主服务器现在可以发出START条件,并发送R/W位高的从服务器地址字节开始读取。
在这里插入图片描述
在这里插入图片描述

5.数据格式

ADS111x提供16位二进制补码格式的数据。正满量程(+FS)输入产生7FFFh的输出代码,负满量程(-FS)输入产生8000h的输出代码。对于超过满量程的信号,输出在这些代码处进行处理。下图总结了不同输入信号的理想输出码与显示了代码转换与输入电压的关系。
在这里插入图片描述

四、寄存器介绍

1.地址指针寄存器

ADS1115所有四个寄存器都是通过写入地址指针寄存器来访问的
在这里插入图片描述
在这里插入图片描述

2.转化数据存放寄存器

16位转换寄存器以二进制二进制的补码格式包含最后一次转换的结果。上电后,转换寄存器被清除为0,并保持0,直到第一次转换完成
在这里插入图片描述

3.配置寄存器

16位配置寄存器用于控制操作模式、输入选择、数据速率、满量程范围和比较器模式。
在这里插入图片描述

Bit字段类型复位值描述
15OSR/W1h运行状态或单次转换启动该位决定设备的运行状态。
操作系统只能在下电状态下写入,在转换过程中没有作用。
写入:
0:没有效果
1:启动单次转换(在断电状态下)
读时:
0:设备当前正在执行转换
1:设备当前未执行转换
14:12MUX[2:0]R/W0h输入多路复用配置
000 : AINP = AIN0 and AINN = AIN1 (default)
001 : AINP = AIN0 and AINN = AIN3
010 : AINP = AIN1 and AINN = AIN3
011 : AINP = AIN2 and AINN = AIN3
100 : AINP = AIN0 and AINN = GND
101 : AINP = AIN1 and AINN = GND
110 : AINP = AIN2 and AINN = GND
111 : AINP = AIN3 and AINN = GND
11:9PGA[2:0]R/W2h可编程增益放大器配置
这些位设置可编程增益放大器的FSR
000 : FSR = ±6.144 V
001 : FSR = ±4.096 V
010 : FSR = ±2.048 V (default)
011 : FSR = ±1.024 V
100 : FSR = ±0.512 V
101 : FSR = ±0.256 V
110 : FSR = ±0.256 V
111 : FSR = ±0.256 V
8MODER/W1h设备运行方式
这个位控制操作模式。
0:连续转换模式
1:单次模式或掉电状态(默认)
7:5DR[2:0]R/W4h数据速率
这些位控制数据速率设置。
000 : 8 SPS
001 : 16 SPS
010 : 32 SPS
011 : 64 SPS
100 : 128 SPS (default)
101 : 250 SPS
110 : 475 SPS
111 : 860 SPS
4COMP_MODER/W0h比较器模式
该位控制比较器工作
0:传统比较器(默认)
1:窗口比较器
3COMP_POLR/W0h比较器极性
该位控制ALERT / RDY引脚的极性
0:低电平有效(默认)
1:高电平有效
2COMP_LATR/W0h锁存比较器
该位控制ALERT / RDY引脚在被置为有效后锁存,还是在转换后处于上限和下限阈值范围之内清零。
0:非锁存比较器。 置位后ALERT / RDY引脚不锁存(默认)
1:锁存比较器。 置为有效的ALERT / RDY引脚保持锁存状态,直到转换数据由主服务器或适当的SMBus警报响应读取由主机发送。 设备以其地址响应,它是最低的当前声明ALERT / RDY总线的地址。
1:0COMP_QUE[1:0]R/W3h比较器置位和禁用
这些位执行两个功能。 设置为11时,比较器被禁用,ALERT / RDY引脚被设置为高阻抗状态。 当设置为任何其他值时,将启用ALERT / RDY引脚和比较器功能,并且该设置值确定连续的转换次数超过在声明ALERT / RDY引脚之前所需的上限或下限阈值
00:一次转换后断言
01:两次转换后置位
10:四次转换后置位
11:禁用比较器并将ALERT / RDY引脚设置为高阻抗(默认)

4.比较器高低阈值寄存器

Lo_thresh (P[1:0] = 2h) [reset = 8000h]
Hi_thresh (P[1:0] = 3h) [reset = 7FFFh]
比较器使用的上限和下限阈值以二进制补码格式存储在两个16位寄存器中。所述比较器实现为数字比较器;因此,无论PGA设置何时更改,这些寄存器中的值都必须更新。通过将Hi_thresh寄存器MSB设置为1和Lo_thresh寄存器MSB设置为0,可以启用ALERT/RDY引脚的转换准备功能。要使用ALERT/RDY引脚的比较器函数,Hi_thresh寄存器值必须始终大于Lo_thresh寄存器值。当设置为RDY模式时,ALERT/RDY引脚在单镜头模式下输出OS位,并在连续转换模式下提供连续转换准备脉冲。
在这里插入图片描述

五、程序

ADS1115.C

#include <STC89C5xRC.H>
#include <IIC.H>
/*****************寄存器位置*************/
#define REG_Conversion 0x00
#define REG_config		 0x01
#define REG_L_thresh 	 0x02
#define REG_H_thresh 	 0x03/*****************寄存器EG_Conversion**********/
//存放着16位结果/*****************寄存器REG_config的位**********/
#define OS 				1 		//操作状态或单发转换启动  (1位)
#define MUX 			0x04 	//输入多路配置  通道0  (3位)
#define PGA 			0x00	//可编程增益放大器配置  量程 ±6.144  V  (3位)
#define MODE		  0x00	//设备运行方式  连续转换模式  (1位)
#define DR				0x03  //转换速率64SPS  (3位)
#define	COMP_MODE	0 		//比较器模式  传统比较器  (默认)(1位)
#define COMP_POL 	0			//比较器极性  低电平有效  (默认)(1位)
#define COMP_LAT	0 		//锁存比较器  非锁存比较器, 置位后ALERT / RDY引脚不锁存  (默认)(1位)
#define COMP_QUE	0x03 	//比较器置位和禁用  禁用 (默认)(2位)#define config_MSB (OS << 7)|(MUX << 4)|(PGA << 1)|(MODE)//OS移动到高8位 MUX移动到高7位 PGA移动到高四位 MODE高一位
#define config_LSB (DR << 5)|(COMP_MODE << 4)|(COMP_POL << 3)|(COMP_LAT << 2)|(COMP_QUE)//DR移动到低8位,COMP_MODE移动到低5位,COMP_POL移动到低4位,COMP_LAT移动到低3位,COMP_QUE最后两位/*****************寄存器REG_L_thresh REG_H_thresh值**********/
#define Lo_thresh	0x8000  // 比较器低阈值
#define Hi_thresh 0x7FFF  // 比较器高阈值void ADS1115_Write()
{IIC_Start();IIC_SendByte(0x90);IIC_ReceiveAck();//没有对返回的 ACK 做处理IIC_SendByte(REG_config);IIC_ReceiveAck();IIC_SendByte(config_MSB);IIC_ReceiveAck();IIC_SendByte(config_LSB);IIC_ReceiveAck();IIC_Stop();
}float ADS1115_Read()
{float ret=0;unsigned int ad=0;IIC_Start();IIC_SendByte(0x90);IIC_ReceiveAck();//没有对返回的 ACK 做处理IIC_SendByte(REG_Conversion);IIC_ReceiveAck();IIC_Start();IIC_SendByte(0x90+1);IIC_ReceiveAck();ad = IIC_ReceiveByte();ad = (ad<<8)|IIC_ReceiveByte();IIC_SendAck(1);IIC_Stop();if(ad>0x8000)//如果是负压{ret =(float)(((0xFFFF-ad)*6.144)/32768);//分辨率:6.144÷2^15  电压=分辨率*AD值}else{ret =(float)ad*(6.144/32768);}return ret;
}

main.C

#include <STC89C5xRC.H>
#include <IIC.H>
#include <uart.H>
#include <ADS1115.H>
#include <delay.H>//整形数据转字符数组
void IntToString(unsigned char *str,unsigned int dat)//str 存放字符的数组,dat 整形数据
{unsigned char i = 0;unsigned int buf[8];do { //先转换成 低位在前的十进制数组 将低位高位互换buf[i++] = dat % 10;dat /= 10;} while (dat > 0);while (i-- > 0) //将数组值转换为 ASCII 码反向拷贝到接收指针上{*str++ = buf[i] + '0';}*str = '\0';
}	void main()
{unsigned int voltage=0;unsigned char arr[8];char * P = arr;uart_init();//2400ADS1115_Write();Delay_x_ms(1000);while(1){voltage = (unsigned int)(ADS1115_Read()*1000);IntToString(P,voltage);UART_Send(P);UART_Send("mV");Delay_x_ms(1000);}
}

六、实验现象

AIN0引脚分别输入 1.8V 3.3V 5V模拟信号
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547805.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

软考高级:软件架构风格 AI 解读

软件架构风格指的是构建软件系统时常用的一些设计模式或设计方法。它们帮助开发人员从高层次组织代码、功能模块和数据流的方式。让我们通俗地解释一下几种常见的软件架构风格。 生活化例子 假设我们在做一桌丰盛的晚餐&#xff0c;分别由不同的厨师负责炒菜、煲汤、做甜点&a…

了解独享IP的概念及其独特优势

在网络世界中&#xff0c;IP地址是用来识别和定位设备的标识符。独享IP是一种服务模式。使用代理服务器时&#xff0c;用户拥有一个不与其他用户共享的专用独立IP地址。与共享IP相比&#xff0c;独享IP为用户提供了更高的独立性和隐私保护。下面详细介绍独享IP的定义、工作原理…

idea 2024.2切换到旧版的UI

在 IntelliJ IDEA 2024.2 中&#xff0c;新 UI 现在成为所有用户的默认选项&#xff0c;经典 UI 则作为插件提供。 新 UI 简洁而现代&#xff0c;提供更大、更易用的控件、一致的调色盘、明亮清晰的图标、增强的对比度和更好的强调色。 为了使用原来的旧版UI操作其实很简单&am…

构建企业数字化转型的架构指南——基于TOGAF框架的实用方法论

数字化转型的驱动力与挑战 随着全球经济的数字化转型加速&#xff0c;企业正面临技术、业务模式以及组织架构的深刻变革。要实现这一复杂而系统性的转型&#xff0c;仅靠引入新技术是远远不够的&#xff0c;企业必须从战略层面重塑其业务架构&#xff0c;以确保技术投资与业务…

死磕P7: JVM垃圾回收那点事,轻松拿捏不是事儿(一)

这是「死磕P7」系列第 003 篇文章&#xff0c;欢迎大家来跟我一起 死磕 100 天&#xff0c;争取在 2025 年来临之际&#xff0c;给自己一个交代。 上两篇介绍了 JVM 内存区域划分&#xff0c;简单记忆一下就可以了&#xff0c;后面再不断深入吧。 死磕P7: JVM内存划分必知必会…

php 平滑重启 kill -SIGUSR2 <PID> pgrep命令查看进程号

有时候我们使用nginx 大家都知道平滑重启命令: /web/nginx/sbin/nginx -s reload 但大家对php-fpm 重启 可能就是简单暴力的kill 直接搞起了 下面介绍一个sh 文件名保存为start_php.sh 来对php-fpm 进行平滑重启 #!/bin/bash# 检查 PHP-FPM 是否运行 if ! pgrep php-…

常用并发设计模式精讲

1. 优雅终止线程的设计模式 思考&#xff1a;在一个线程 T1 中如何优雅的终止线程 T2&#xff1f; 正确思路&#xff1a;两阶段终止模式 1.1 两阶段终止&#xff08;Two-phase Termination&#xff09;模式——优雅的终止线程 两阶段终止&#xff08;Two-phase Termination…

新160个crackme - 065-Eternal Bliss

运行分析 选择验证方式&#xff0c;破解字符串标题提示为vb程序 PE分析 VB程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 使用VB Decompiler进行分析&#xff0c;发现Command1_Click_403604为check按钮事件&#xff0c;需要使Me 1 CBool(expression) 将表达…

CSS 中的文本相关属性(line - height、font、letter - 属性、text - 属性)

目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 line - height属性 字号与行高的取值约定 行高与盒子高度的关系 font、letter -属性 、text -属性 font属性 letter -属性 text - 属性 非 VIP 用户可前往公众号回复“css”进行免费阅读 line - height属性 字号与…

SQLI—LABS刷题 | SQL总结

Less1-2&#xff08;联合注入&#xff09; ?id1 查询到用户名及密码 ​​​​​​​?id1 报错&#xff1a;You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 1 LIMIT 0,1 at li…

C++结尾

面试题 1.什么是虚函数&#xff1f;什么是纯虚函数 在定义函数时前面加virtual。虚函数是为了&#xff0c;父子类中只有一个该函数。如果在子类重写虚函数&#xff0c;那么用的就是子类重写的虚函数&#xff1b;如果子类没有重写虚函数&#xff0c;那么调用的是父类继承的虚函…

IP地址与5G时代的万物互联

5G时代&#xff0c;海量的设备将接入网络&#xff0c;从智能手机、平板电脑到智能家电、工业传感器等&#xff0c;每一个设备都需要一个独特的IP地址来进行标识和通信。可以说&#xff0c;IP地址就如同这些设备在数字世界中的“身份证”&#xff0c;确保它们能够准确地找到彼此…

vue嵌套路由刷新页面空白问题

问题描述 在vue项目开发中遇到这样一个问题&#xff0c;在history模式下通过页面点击路由跳转可以打开页面&#xff0c;但是在当前页面刷新就空白了&#xff0c;如下&#xff1a; 点击路由跳转页面是有的 刷新页面就空白 代码 {path: "/home",name: "home&qu…

PCIe6.0 AIC金手指和板端CEM连接器信号完整性设计规范

先附上我之前写的关于PCIe5.0金手指的设计解读&#xff1a; PCIe5.0的Add-in-Card(AIC)金手指layout建议&#xff08;一&#xff09;_pcie cem-CSDN博客 PCIe5.0的Add-in-Card(AIC)金手指layout建议&#xff08;二&#xff09;_gnd bar-CSDN博客 首先&#xff0c;相较于PCI…

vscode【实用插件】Code Runner 运行代码

安装 在 vscode 插件市场的搜索 Code Runner点 安装 使用 运行指定文件的代码 用 vscode 打开目标文件&#xff0c;右键快捷菜单运行即可 运行选中的代码 选中要执行的代码右键快捷菜单执行

配置树莓派打开SSH服务

在树莓派终端中查看IP 在终端中输入命令来查看IP地址。最常用的命令是&#xff1a;hostname -I注意&#xff0c;这里的参数I是大写的&#xff0c;它表示查看本机上所有配置的IP地址&#xff08;包括IPv4和IPv6&#xff0c;如果有的话&#xff09;。如果你只需要查看IPv4地址&am…

【NTN 卫星通信】基于NR的NTN RAN架构

1 引言 3GPP中,38.821协议中,研究了如何最大限度地减少对NG-RAN中新接口和协议的需求,以支持非地面网络。 研究了包括透传星和再生星的RAN架构。 2 基于透传星的NG-RAN架构 2.1 概述: 对于透传模式,卫星有效载荷在上行链路和下行链路方向上实现频率转换和射频放大器。它…

【Linux】环境变量(初步认识环境变量)

文章目录 1. 环境变量1.1 基本概念 2. 认识常见环境变量2.1 PATH2.2 HOME2.3 SHELL2.4 PWD2.5 USER 3. 理解环境变量 1. 环境变量 在main函数的命令行参数中&#xff0c;有argc、argv、env三个参数。 argc&#xff1a;命令函参数的个数argc&#xff1a;存放每个参数的具体数值…

SEO之页面优化(三、四——关键词标签与正文中的关键词)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客&#xff1a;阿幸SEO~探索搜索排名之道 &#xff08;接上一篇。。…

UnityHub下载任意版本的Unity包

1)先打开 // 也可以采用2直接打开 2)也可以直接打开 下载存档 (unity.com) 3)关联起来UnityHub即可