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

      

  • 相关阅读:
    记一次x87 FPU寄存器栈溢出
    从Unit Bezier的实现学习两种经典数值求解算法
    OI Memory 后记(1):IOI2021 漫谈
    Solution -「BZOJ #3786」星系探索
    Solution -「UOJ #46」玄学
    Solution -「多校联训」神
    Solution -「多校联训」自动机
    Solution -「多校联训」取石子游戏
    Solution -「HDU 6875」Yajilin
    Solution -「多校联训」最小点覆盖
  • 原文地址:https://www.cnblogs.com/ZYQS/p/14296045.html
Copyright © 2020-2023  润新知