首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从ADS1115单次读取转换数据-详细位运算解读版

从ADS1115单次读取转换数据-详细位运算解读版

作者头像
云深无际
发布2025-02-10 19:09:23
发布2025-02-10 19:09:23
17100
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

如果学了前文看这个就容易了,这个操作来自于ADS1115的转换数据读取。

可以看到是一个16bit的结果,所以就要接收和拼接

这个就是转换的代码

读取ADC数据:

  1. 通过I2C通信与ADC设备交互,读取转换结果。
  2. 返回一个16位的有符号整数(int16_t),表示ADC的转换结果。

工作流程:

  1. 配置ADC寄存器以启动转换。
  2. 等待转换完成(如果是单次转换模式)。
  3. 读取转换结果并返回。
代码语言:javascript
代码运行次数:0
运行
复制
regValue = 1 << 15 | registerMap[CONFIG_ADDRESS];

regValue 的第15位设置为1,同时保留reg的当前配置。

意思是说,单次转换启动

寄存器的地址在这里

TI的设计是,把寄存器的数量先定义好

然后在控制的时候,先定位到数组

就是后面

| 是按位或操作,用于合并位。也可以说前面1<<15其实是位掩码。一计算就把配置寄存器的值修改了。

调用 sendI2CData 函数,将 regData 写入ADC的配置寄存器(CONFIG_ADDRESS)。

如果I2C通信失败(retStatus != false),函数返回0。

看这个,&,这个读取一个寄存器的位

在这里

这里就判断单次转换模式是不是启用

do-while 循环:

这是一个后测试循环,先执行循环体,再检查条件。

循环会一直执行,直到条件 !(regData[0] & 0x80) 为假(即 regData[0] & 0x80 为真)。

代码语言:javascript
代码运行次数:0
运行
复制
receiveI2CData(CONFIG_ADDRESS, regData, 2):

通过I2C通信从ADC的配置寄存器(CONFIG_ADDRESS)读取2字节数据,并存储到 regData 数组中。

regData[0] 是配置寄存器的高8位,regData[1] 是低8位。

代码语言:javascript
代码运行次数:0
运行
复制
if (retStatus != false):

如果I2C通信失败(retStatus 不为0),函数返回0,表示读取失败。

代码语言:javascript
代码运行次数:0
运行
复制
!(regData[0] & 0x80):

regData[0] & 0x80 是一个按位与操作,用于检查 regData[0] 的第7位(最高位)是否为1。

0x80 的二进制表示为 10000000,掩码用于提取第7位。

  1. 如果第7位为1,表示转换完成。
  2. 如果第7位为0,表示转换未完成。

!(regData[0] & 0x80) 表示“如果第7位为0,则继续循环”。

代码里面一把都有转换完成标志:

  1. 通常是一个特定的位(如第7位),用于指示转换是否完成。
  2. 通过按位与操作(&)提取该位并检查其值。

因为我们不知道什么时候会完成转换所以有轮询机制:

  1. 使用 do-while 循环不断读取配置寄存器,直到转换完成。
  2. 如果I2C通信失败,函数返回0。

调用 readSingleRegister 函数,从ADC的转换结果寄存器(CONVERSION_ADDRESS)读取数据。

这里面有个合并函数,因为读取回来两个字节

相信你认真学习我的文章一定学会了

将读取的值存储在 registerMap[CONVERSION_ADDRESS] 中。

将结果强制转换为 int16_t 并返回。

也就是说,读取了寄存器的单次结果,括号里面是地址。接着把这个数据存到寄存器MAP的转换寄存器的位置。

最后就是把寄存器了里面,转换寄存器的数据强壮的转换,这就是完整的ADC读取数据的过程。

很多人可能会问,这么复杂有什么用?

TI也推出了自己的精密转换库,学会一个:

就相当于学会多,这个投资值了,很新的库

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档