标题: 关于PCF8591寻址 [打印本页]

作者: omikeai    时间: 2018-7-25 10:23
标题: 关于PCF8591寻址
最近看到网上很多PCF8591程序,如下


其中第五行寻址为什么要写成0X48<<1  ,  为什么不能直接写成0X90??反正这芯片的寻址是如图


还有转换的电压是怎么计算的,为什么要乘25? 本人刚学,希望大神来指导一下。

寻址.png (25.05 KB, 下载次数: 57)

寻址.png

作者: zl2168    时间: 2018-7-25 16:28
你的问题不是三言两语能说清,需要系统学习。介绍你一本书,《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9。内有IIC和PCF8591内容。
作者: 哈兰德    时间: 2023-5-21 19:16
其中第五行寻址为什么要写成0X48<<1  ,  为什么不能直接写成0X90??

看的是金沙滩宋老师的视频吧。0x48 = 0100 1000.这里是宋老师的写法原因,左移一位得到1001 0000.
这时候查阅PCF8591手册,这是写地址。1001手册规定是0,后三位A2 ,A1,A1根据电路图选位0,最后一位是读写位。

Snipaste_2023-05-21_19-14-44.jpg (19.12 KB, 下载次数: 42)

Snipaste_2023-05-21_19-14-44.jpg

作者: Hephaestus    时间: 2023-5-21 22:55
0x48是把LSB的R/W去掉,看起来比较清楚的意思,实际上更不清楚了,0x48<<1这个操作在编译器阶段就已经计算完毕,并不会增加单片机运行期间的工作量。
作者: 123456ZXC1    时间: 2023-5-22 13:35
对于 PCF8591 芯片的寻址,它使用 7 位的地址(A6~A0)进行寻址,其中最高位(MSB)是固定为 0。因此,当我们将芯片地址写入 I2C 总线时,需要将地址左移一位,并将最低位置为 0,以与读写位进行组合。这就是为什么在代码中将地址写为 (0x48 << 1) 的原因。

以 0x48 为例,二进制表示为 0100 1000,左移一位后为 1001 0000,再将最低位置为 0,即 1001 0000(0x90)为写操作,1001 0001(0x91)为读操作。这样可以确保正确的地址与读写位组合。

关于电压的转换,PCF8591 是一个 8 位 ADC(模数转换器),它将输入电压转换为数字值。该芯片的输入范围是 0V 到 Vref(供电电压),对应于 0 到 255 的数字范围。因此,通过读取 ADC 转换值,可以得到输入电压对应的数字值。

在给定的程序中,val 变量存储了 ADC 转换的结果,即输入电压对应的数字值。为了得到电压值,将 val 乘以系数 25。这个系数是根据特定的应用场景和参考电压(Vref)来确定的。具体的系数值可能需要根据实际情况进行调整。

总结一下,程序中的代码实现了对 PCF8591 芯片进行读取 ADC 转换值的操作,通过寻址和写入控制字节选择转换通道,并读取转换结果。转换结果可以通过乘以系数得到相应的电压值。请注意,具体的芯片规格和应用需求可能会有所不同,这里提供的解释是基于一般情况的理解。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1