张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号
考虑到 Raspberry Pi 读取模拟信号是很烦人的事情,更何况是在没人玩的 Windows 10 IoT 下,所以准备正儿八经的写点东西。
需求:使用 Raspberry Pi 读取输出模拟信号的 MQ 系列气体传感器。(GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ADS1115)
由于 Raspberry Pi 3B 内部并没有集成 ADC,因此需要外接 ADC 来进行模数转换。外接 ADC 选用的是 ADS1115,淘宝到处都是,而且还不贵, I2C 的通讯方式实现起来相对容易些。
1. 过程分析
在 ADS1115 的数据手册(GitHub项目中附带了PDF)的第11页中,官方给出了一个简单的快速开始
(1)设置配置寄存器
(2)定位到转换寄存器
(3)读取转换寄存器
2. 寄存器配置分析
了解了大概过程后接下来就是查寄存器的格式及配置方法了。
ADS1115 的 ADDR 接口的接法决定了地址。
地址确定后,下面来看看寄存器的地址指针。由于我们只是简单的读取,只需要用到最上面的两个指针。配置寄存器为 0x01,转换寄存器为 0x00。
按照第一点的过程分析,第一步我们要设置配置寄存器。配置寄存器分高八位和低八位,指针定位到配置寄存器后,需要分别写入两个 byte 的配置数据。详细的比特位的功能可以查下数据手册。在这里只介绍用的到的。
在14-12位,是 MUX 配置。简单的说,这决定了 ADS1115 的 A0-A3 接口的测量方式。比如说,当设置为 0x04 时测量的为 A0-GND 的电压,当设置为 0x00 时测量的为 A0-A1 间的电压。
在11-9位,是 PGA 配置。这决定了 ADS1115 的量程。
在第8位,是 ADS1115 的状态配置。0x00 为测量模式,0x01 为休眠。
在第7-5位,是每秒采样次数的配置。
以上是我们需要的配置位,其他的按照数据手册上的默认即可。即高八位 0 100 001 0(0x42),低八位 100 0 0 0 11(0x83)。需要其他的功能,按照数据手册上的更改即可。
配置完成后,读取数据是非常简单的,直接读取即可。
3. 连线
VDD - 5V
GND - GND
SCL - SCL
SDA - SDA
ADDR - GND
A0 - MQ 传感器的 A0
4. 部分代码
详细的代码已经放在 GitHub 上了,这里只给出 ADS1115.cs 的简单介绍。
/// <summary>
/// Constructor
/// </summary>
/// <param name="addr">ADS1115 Address</param>
/// <param name="mux">Input Multiplexer</param>
/// <param name="pga">Programmable Gain Amplifier</param>
/// <param name="rate">Data Rate </param>
public ADS1115(AddressSetting addr = AddressSetting.GND, InputMultiplexeConfig mux = InputMultiplexeConfig.AIN0, PgaConfig pga = PgaConfig.FS4096, DataRate rate = DataRate.SPS128); /// <summary>
/// Initialize ADS1115
/// </summary>
/// <returns></returns>
public async Task InitializeAsync(); /// <summary>
/// Read Raw Data
/// </summary>
/// <returns>Raw Value</returns>
public short ReadRaw(); /// <summary>
/// Convert Raw Data to Voltage
/// </summary>
/// <param name="val">Raw Data</param>
/// <returns>Voltage</returns>
public double RawToVoltage(short val); /// <summary>
/// Cleanup
/// </summary>
public void Dispose();
5. 如何使用
第一步,需要实例化 ADS1115,并调用 InitializeAsync()。
ADS1115 adc = new ADS1115(AddressSetting.GND, InputMultiplexeConfig.AIN0, PgaConfig.FS4096, DataRate.SPS860);
await adc.InitializeAsync();
第二步,读取数据。
short raw = adc.ReadRaw();
double vol = adc.RawToVoltage(raw);
如果需要释放,调用 adc.Dispose();
6. 运行图
张高兴的 Windows 10 IoT 开发笔记:使用 ADS1115 读取模拟信号的更多相关文章
- 张高兴的 Windows 10 IoT 开发笔记:使用 Lightning 中的软件 PWM 驱动 RGB LED
感觉又帮 Windows 10 IoT 开荒了,所以呢,正儿八经的写篇博客吧.其实大概半年前就想写的,那时候想做个基于 Windows 10 IoT 的小车,但树莓派原生不支持 PWM 啊.百度也搜不 ...
- 张高兴的 Windows 10 IoT 开发笔记:HC-SR04 超声波测距模块
HC-SR04 采用 IO 触发测距.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 C# 进行编码. 1. 准备 H ...
- 张高兴的 Windows 10 IoT 开发笔记:BH1750FVI 光照度传感器
BH1750FVI 是一款 IIC 接口的数字型光强度传感器集成电路.下面介绍一下其在 Windows 10 IoT Core 环境下的用法. 项目运行在 Raspberry Pi 2/3 上,使用 ...
- 张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用
今天是大年初二,都去走亲戚了吧,享受一下这难得的能和亲友相聚的时光.而我就不一样了,今天一回到家就又开始瞎折腾了,哈哈哈. 问题背景 最近花了点时间用 ASP.NET Core 2 写了个个人博客,中 ...
- 张高兴的 Windows 10 IoT 开发笔记:串口红外编解码模块 YS-IRTM
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub: https://github.c ...
- 张高兴的 Windows 10 IoT 开发笔记:无线收发芯片 nRF24L01
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:FM 电台模块 KT0803L
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:0.96 寸 I2C OLED
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
- 张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动数码管
This is a Windows 10 IoT Core project on the Raspberry Pi 2/3, coded by C#. GitHub:https://github.co ...
随机推荐
- 踩坑实录 使用 cardview 时报错 error: No resource identifier found for attribute 'cardCornerRadius' in package 'com.xxxxx.xxx'
在项目中引用 cardview 卡片布局,编译时 Android Studio 报出下面图片中红框标记的错误: 出现这种情况的原因在于没有导入 cardview 卡片布局相应的依赖包,因此我们需要在 ...
- LoonAndroid自动检测输入框 --- Author: rose && lvyerose@163.com
LoonAndroid框架,同时给我们提供了一套自动检测输入规则的工具,用起来很是方便,下面介绍一下这个东东的使用方法(注意,该说明是基于项目已经集成了LoonAndroid框架而言,如果您未集成该框 ...
- ElasticSearch Index API && Mapping
ElasticSearch NEST Client 操作Index var indexName="twitter"; var deleteIndexResponse = clie ...
- SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案
本文目的在于分享一下把DPI稿能用了的过程,主要说一下平台其他部分搭建好之后,在完成DPI相关工作阶段遇到的问题,以及解决的办法. 工作环境:win10 64bit, Questasim 10.1b ...
- DOM的发展,DOM0,DOM1,DOM2,DOM3
Documentc Object Model文档对象模型是针对XML但经过扩展用于HTML的应用程序接口(API Application programming Interface).DOM把整个界面 ...
- iptables配置详解
iptables主要参数 -A 向规则链中添加一条规则,默认被添加到末尾 -T指定要操作的表,默认是filter -D从规则链中删除规则,可以指定序号或者匹配的规则来删除 -R进行规则替换 -I插入一 ...
- HTML、CSS、JS 样式
把一个数组(一维或二维等)的内容转化为对应的字符串.相当于把print_r($array)显示出来的内容赋值给一个变量.$data= array('hello',',','world','!'); $ ...
- JavaScript中screen对象的两个属性
Screen 对象 Screen 对象包含有关客户端显示屏幕的信息. 这里说一下今天用到的两个属性:availHeigth,availWidth avaiHeigth返回显示屏幕的高度 (除 Wind ...
- 微信小程序后台音乐播放注意事项
wx.seekBackgroundAudio(OBJECT) 作用:控制音乐播放进度. 注意: 该事件 会触发 wx.onBackgroundAudioPlay(CALLBACK) 事件 ,也就是相当 ...
- Mobile game analysis
Let's take a look at a very popular mobile game "Garena 传说对决" . It would be very interesti ...