解析PCF8591的IIC信号
2023-05-19 07:13:26   来源:哔哩哔哩

e小白网址:www.e-xiaobai.com


【资料图】

1.PCF8591模块原理图及引脚定义

2.PCF8591的IIC通讯地址

模块上A2,A1,A0都连接GND,那么PCF8591的地址/写是0X90,地址/读是0x91。

3.PCF8591的控制字节

由此可知,读取1通道的AD值的控制字节为0x41or0x01;DA输出的控制字节为0x4?(此时“?”可以表示0,1,2,3,因为是DA输出与AD输入无关,一般直接写0x40即可)

4.PCF8591的读时序

5.PCF8591的写时序

6.代码

6.1读AD

//channel可取0x00,0x01,0x02,0x03或0x40,0x41,0x42,0x43

u8 ADCconversion(u8 channel)

{

u8 data;

PCF8591_IIC_Start();    //发送IIC开始信号

PCF8591_IIC_Send_Byte(0x90);    //IIC发送一个字节

PCF8591_IIC_Wait_Ack();

PCF8591_IIC_Send_Byte(channel);

PCF8591_IIC_Wait_Ack();

PCF8591_IIC_Start();

PCF8591_IIC_Send_Byte(0x91);

PCF8591_IIC_Wait_Ack();

data=PCF8591_IIC_Read_Byte(0);      //IIC读取一个字节

PCF8591_IIC_Stop();      //发送IIC停止信号

return(data);

}

下图为逻辑分析仪解析的IIC读时序(channel的值为0x03):

其中,0XB0为读取到的AD值,转化为10进制为176,与OLED显示的数字一致。

6.2写DA

//DA 

//V的范围是0-5

void DACconversion(float V)

{

float a;

a=(u8)(V*255/5);

PCF8591_IIC_Start();    //发送IIC开始信号

PCF8591_IIC_Send_Byte(0x90);    //IIC发送一个字节

PCF8591_IIC_Wait_Ack();

PCF8591_IIC_Send_Byte(0x40);

PCF8591_IIC_Wait_Ack();

PCF8591_IIC_Send_Byte(a);

PCF8591_IIC_Wait_Ack();

PCF8591_IIC_Stop();      //发送IIC停止信号

}

下图为逻辑分析仪解析的IIC写时序(V为3.5):

其中,0XB2为输出电压的数字值。

标签:

上一篇: 5月18日基金净值:光大安祺债券A最新净值1.2012,涨0.02%
下一篇: 最后一页