ADS1015调试心得

 

3.

最近刚好调了一下ads1015,顺便借此机会梳理一下iic协议

首先我们只看ads1015.c和.h文件,对于模拟iic.c和.h的文件以后有机会再说

为了保证连续性,我们先讲讲这个iic协议的怎么传输数据,然后我们来说说寄存器怎么配置,也就是说下时序图怎么弄,我们可以对照着代码一起看看,不好看的话,我建议再打开一个手册,分屏看下,图片大小不好弄

 

 

 

如图,这个过程可以被这样拆解,先是start,发送Slave address(就是ADS的地址,地址怎么看的,后面附一张图)(注意iic是高电平读取,SCL的高电平,对应的R/W是低电平,意思是写的意思就是R),然后是主机wait一个来自ADS1015的ack(确认指令,可以类比通信网络里面的TCP协议哈,就是一个确认标志),然后发送要写入的ADS内部的Address(就是对应的寄存器的地址,地址怎么看的,后面附一张图),然后是Stop,接下来又是start,再发一遍寄存器的地址,最后补一位1,表示读取,然后Wait一个ACK,接下来是读取(读取函数是iic里面的,这里就不详细讲了),接下来是ACK发送,这个发送的过程已经写到IIC_Read_Byte里面了,所以这里它就没有写,因为是读两个数据,而每个数据都是uint8_t,即8位的2进制数,所以左移八位,再把后读到的数字用或操作加在后面。最后发送一个Stop.

知道了如何传输数据过后,我们来看看如何向我想要的寄存器写入值,因为比如初始化的话其实也就是配置对应的初始化寄存器,调节我一些想要的参数

接下来就以config为例

.c文件中的函数

 

接下来是.h

先是配置了一下ADS1015_CONFIG这个数,这个数是等会写到寄存器里面的值,

我们来对照这张图来看看,它这个CONFIG值是后面的很多值进行一个或运算,其实可以看成是一个加运算哈。因为它是用的十六进制,所以对于一个有16位的寄存器,相当于用四个数字就能表示。

好接下来举一个栗子:

如果我要配置Nonlatching comparator并且 Disable comparator and set ALERT/RDY pin to high-impedance (default)

 

那我是不是应该对0~3寄存器写入0011,转化为十六进制就是0x003

我们来看看下面的配置,确实是这样做的

可以对照着看看,显示配置对应的寄存器是吧,那个switch也是写入对应选择哪个通道。

好讲完写入寄存器的值过后,我们来看看是如何写入对应的寄存器的:

 

这个函数的意思是什么意思呢?在上面已经讲过了,就是向一个slave(从机,这里就是指ads1015)的对应寄存器写入数据。前面还埋了一个坑,就是我的地址是如何得到的?这里包含了两个地址,一个是slave从机的地址,还有一个是寄存器的地址

①先说设备地址

这张图说明了就是通过把ADDR那个引脚连到不同的地方,slave的地址会不一样,一般情况下直接接地,就是1001000,转化为十六进制就是0x48.

②再说寄存器地址偏移量

p[1:0]就是说只有0~1位有效,就是有四个寄存器的地址

这个0h就是说转化为十六进制(hexadecimal)是0x0

再举一个栗子

这个寄存器就是0x01

 

我们来看看实际的.h文件中是如何定义的

哈哈哈,跟我们的理论分析是一样的

其他的操作类似,有机会附一下我用逻辑分析仪测的波形

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ADS1015是一种集成了模数转换器的芯片,可以通过IIC(Inter-Integrated Circuit)总线进行通信。IIC是一种串行通信协议,用于在多个设备之间进行数据传输。在与ADS1015进行通信时,需要按照一定的顺序发送一系列指令和数据。 首先,需要发送一个起始信号(start),然后发送ADS1015的从机地址和读写位(R/W)。从机地址是ADS1015的地址,读写位表示是读取还是写入操作。接下来,需要等待ADS1015发送一个确认信号(ack)。 然后,需要发送要写入的ADS1015内部寄存器的地址。寄存器地址用于指定要读取或写入的特定寄存器。再次发送一个起始信号(start),然后再次发送寄存器地址和读写位,这次读写位为1,表示读取操作。再次等待ADS1015发送一个确认信号。 接下来是读取数据的过程,具体的读取函数可以参考IIC库中的函数。读取到的数据是8位的二进制数,需要左移8位,并使用或操作将后读取的数据添加到前面的数据中。 最后,发送一个停止信号(stop)来结束通信。 总结来说,ADS1015通过IIC总线进行通信时,需要按照一定的顺序发送起始信号、从机地址、读写位、寄存器地址、读写位、数据等指令和数据。具体的操作可以参考相关的IIC库函数。 #### 引用[.reference_title] - *1* *2* [ADS1015调试心得](https://blog.csdn.net/XiaoQiXiaoWei_J/article/details/117808422)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值