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--已调通(附源码)相关推荐

  1. C# winform 实现微信二维码登录、第三方登录(已实现、附源码)

    前言 应上级要求,在项目登录的时候实现第三方登录.很荣幸我接到了这个任务,但是我之前完全都没接触到.开发周期是三天,对于我们这种小白完全是从零开始.最后成功的实现这个功能固然重要,但是这个探索的过程才 ...

  2. 用ionic快速开发hybird App(已附源码,在下面+总结见解)

    用ionic快速开发hybird App(已附源码,在下面+总结见解) 1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说 ...

  3. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...

    原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...

  4. 【Spring AOP】@Aspect结合案例详解(二): @Pointcut使用@within和within(已附源码)

    文章目录 前言 @within 完善打印日志案例 @within深入说明 within 匹配指定类 匹配指定包(package) 源码下载 总结 前言 在微服务流行的当下,在使用Spring Clou ...

  5. [附源码]计算机毕业设计Python+uniapp基于Android的移动端校友通 zv2j0(程序+源码+LW+远程部署)

    [附源码]计算机毕业设计Python+uniapp基于Android的移动端校友通 zv2j0(程序+源码+LW+远程部署) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行环 ...

  6. 【附源码】计算机毕业设计JAVA中小学家校通系统

    [附源码]计算机毕业设计JAVA中小学家校通系统 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Inte ...

  7. Java毕设项目中小学家校通系统计算机(附源码+系统+数据库+LW)

    Java毕设项目中小学家校通系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  8. JAVA计算机毕业设计南京新东方学校家校通系统(附源码、数据库)

    JAVA计算机毕业设计南京新东方学校家校通系统(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  9. 安卓调用日历提醒,并实现闹钟提醒功能,在miui上测试通过,日历提醒闹钟设置失败解决(附源码,源码已更新)

    不想看教程的可以直接走这里的后门去下载源码(源码已更新),源码小米手机亲测通过,有问题可以私信我:源码下载https://download.csdn.net/download/Spy003/87418 ...

  10. android序列帧动画纯代码,H5序列帧动画实现过程(附源码)

    H需朋者说上事是础一发一开程和开数的目前间5序列帧动画实现过程(新直能分支调二浏页器朋代说,事刚附源码) 序列帧动画 序列帧.轻厅设近幸松.备近幸松.备近幸松.备近动画,又称为逐帧动画,是使用多张连续 ...

最新文章

  1. “聚沙成塔”——用大数据思维理解生命的复杂体系,数据之眼看显微镜下的复杂生命【数据故事计划二等奖】...
  2. 如何通过Geth、Node.js和UNIX/PHP访问以太坊节点
  3. dim private public static_static方法 (静态方法)
  4. 爬虫:滑动验证解决方法及python实现
  5. linux通过SSH连接的SSH加密原理(笔记自用)
  6. 目前区块链项目的生态系统:一共七大类
  7. JavaScript 中的常用12种循环遍历(数组或对象)的方法
  8. ListView滑动删除效果实现
  9. python twised系列教程四–twisted Poetry client
  10. 混合类型数据格式化输入
  11. html 页面缩放事件,浏览器缩放不触发window.onresize事件的BUG
  12. 免费复制百度文库的VIP文章(非常简单!)
  13. 黑苹果 无线网卡相关配置
  14. creo怎么返回上一步_creo零基础教程,教你creo4.0复制粘贴怎么用
  15. python列表功能默写_python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类...
  16. 如何批量修改文件名、照片文件名
  17. python数据分析:商品数据化运营(上)——知识点
  18. 为任意屏幕尺寸构建 Android 界面
  19. 关键遥信量性能缺失的分析报告
  20. 创业7堂课:看准路,选对人,找到钱

热门文章

  1. 微信号注册人工服务器,两个方法让你一次性找到微信人工客服,简单而又粗暴!...
  2. Vue中native的用法
  3. Photoshop裁剪工具隐藏技巧
  4. 使用python绘制一个太阳花代码_如何绘制多样化的太阳花?
  5. python 相似形态 股票_比对相似k线软件 python比对股市k线相似性
  6. html怎样使图片自动旋转,css怎么让图片旋转?
  7. data could not be sent to remote host
  8. 最新时空观测结果证实爱因斯坦相对论合理性
  9. 海康威视摄像头密码重置方法
  10. vue配置路由请求 request 文件