【蓝桥杯单片机组】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