zoukankan      html  css  js  c++  java
  • 【蓝桥杯单片机组】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

      

  • 相关阅读:
    File类总结
    MyBatis框架一级缓存与二级缓存
    SpringMVC运行原理总结
    SpringMVC:详述拦截器
    SpringMVC:自定义视图及其执行过程
    详述ThreadLocal
    浅析MVC中的数据流动
    error: gpg failed to sign the data 的一个解决办法
    保险业务核心系统设计参考
    奇怪的404
  • 原文地址:https://www.cnblogs.com/ZYQS/p/14296045.html
Copyright © 2011-2022 走看看