欢迎光临散文网 会员登陆 & 注册

解析PCF8591的IIC信号

2023-05-19 06:57 作者:e小白官方  | 我要投稿

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为输出电压的数字值。


解析PCF8591的IIC信号的评论 (共 条)

分享到微博请遵守国家法律