【蓝桥杯单片机组】IIC协议——PCF8591

PCF8591

    对于PCF8591(AD/DA转换)芯片的操作采用IIC进行通信,前文已有介绍,不赘述;IIC传输给PCF8591的数据遵从如下格式:

    

    七位地址&一位方向(1/0)---应答---控制字节---应答---数据字节---应答---数据字节---应答。。。

    其中蓝桥杯开发板的PCF8591在原理图中如下:

                 

 

 

地址&方向:

7位地址+读写(1/0):

    对于地址起决定作用的A0、A1、A2都接地,故地址为1001 000 下一位为读写位,写为0,读为1;

控制字节:

 

应用:

 

    typeA:以对电位器进行电压采集为例,采用四通道单独输入,无需自增 ,通道号为3,故控制字节为0000 0010(0x03) ,在给pcf8591传输完如上信号后,写入结束,就可以接收传输来的数据,此时再次发送start,读取接收的的data byte,具体代码实现如下:

//需要引入官方iic库文件
unsigned char Read_ADC_Byte() {
//配置数据写入部分 unsigned
char dat; IIC_Start(); IIC_SendByte(0x90); IIC_WaitAck(); IIC_SendByte(0x03); IIC_WaitAck();

//采集数据读取部分 IIC_Start(); IIC_SendByte(
0x91); IIC_WaitAck(); dat = IIC_RecByte(); IIC_WaitAck(); IIC_Stop();
return dat; }

    其中返回的dat为0-255的比例值,需要通过计算将其转化为实际值,具体转换取决于参考电压值,注意数据类型

    typeB:以利用pcf8591输出模拟量为例,地址不变,控制字节模拟输出置1,其余位取决于AD转换所需的配置值,此处默认全为0,即四单独通道输入,通道0,故为0100 0000(0x40)此后传输所需输出电压对应的比例值

 

void Write_DAC_Byte(unsigned int dat)
{
    IIC_Start();
    IIC_SendByte(0x90);
    IIC_WaitAck();
    IIC_SendByte(0x40);
    IIC_WaitAck();

    IIC_SendByte(dat);
    IIC_WaitAck();
    IIC_Stop();
}

 

2021/1/19 17:59

Lynn SX in SZ

  

posted @ 2021-01-19 17:49  骤雨重山  阅读(993)  评论(0编辑  收藏  举报