PCF8591(ADC,DAC转换)

PCF8591ADDA芯片中文带图介绍.pdficon-default.png?t=N7T8https://www.yuque.com/office/yuque/0/2023/pdf/22878478/1677915772303-ccb18375-4b81-4eea-bd83-a8e674f7917e.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fu22435687%2Fuo7teb%2Flqmhikmop33t83mmpcf8591中文.pdficon-default.png?t=N7T8https://www.yuque.com/office/yuque/0/2023/pdf/22878478/1677915776573-ac836958-6e3c-4080-b58c-2c13d9202f5e.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fu22435687%2Fuo7teb%2Flqmhikmop33t83mmPCF8591中文数据手册.pdficon-default.png?t=N7T8https://www.yuque.com/office/yuque/0/2023/pdf/22878478/1677915778360-9a1f7979-8101-444b-8bd2-e6dfee1ce978.pdf?from=https%3A%2F%2Fwww.yuque.com%2Fu22435687%2Fuo7teb%2Flqmhikmop33t83mm

PCF8591芯片的驱动协议是IIC通信协议


PCF8591编程配置

ADC转换步骤:

  1. 开启IIC
  2. 写地址(0x90:写控制字),等待应答
  3. 配置控制字(0x4D/0x43),等待应答
  4. 开启IIc
  5. 写地址(0x91:对控制字地址进行数据读取),等待应答
  6. 读控制字数据(char类型数据),发送应答(1表示应答,0表示不应答)
  7. 关闭

编程参考:


//函数名称:PCF8591(ADC转换),channel_num_contrl(0x4D/0x43)
//入口参数:PCF8091转换通道(控制字)
//返回值:AD转换后的数值
//函数功能:A(模拟量)转D(数字量),并返回转换后的数值
unsigned char PCF8591_Adc(unsigned char channel_num_contrl)
{
    unsigned char temp;//存储PCF8591(ADC)转换后的数字量
    IIC_Start();//开启转换条件
    IIC_SendByte(0x90);//选择PCF8591芯片,确定写的模式
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答

    IIC_SendByte(channel_num_contrl);//配置PCF8591(ADC)通道,以及开启允许模拟输入模式
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答
    
    IIC_Start();//重新开启发送条件,在每个起始地址前,都应开启转换条件
    IIC_SendByte(0x91);//选择PCF8591芯片,确定读的模式
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答
    
    temp=IIC_RecByte();//读取PCF8591(ADC)转换后的数字量
    IIC_SendAck(1);//读取完一个字节后,要给从机发送一个应答位  
    IIC_Stop();//关闭转换条件
    
    return temp;//返回ADC转换后的值
}

DAC转换步骤:

  1. 开启IIC
  2. 写地址(0x90:写控制字),等待应答
  3. 配置控制字,等待应答
  4. 开启IIC
  5. 写入数据(数字量),等待应答
  6. 关闭

 编程参考:

//函数名称:PCF8591(DAC转换)
//入口参数:需要转换位模拟量的数值
//返回值:无
//函数功能:D(数字量)转A(模拟量)
void PCF8591_Dac(unsigned char dat)
{
    IIC_Start();//开启转换条件
    IIC_SendByte(0x90);//选择PCF8591芯片,确定写的模式
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答

    IIC_SendByte(0x41);//配置PCF8591(DAC)通道,以及开启允许模拟输入模式(暂时用不上,使用通道可以顺便写一个)
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答
    
    IIC_SendByte(dat);
    IIC_WaitAck();//等待应答,每发送一个字节都要等待应答
    IIC_Stop();//关闭转换条件
}

注意:

        IAP15F2K61S2中:光敏传感器通道是:0x41;滑动变阻器通道是0x43

        每8个数据字节后都紧跟一个应答位。

        DAC(数模)转换地址可以是0x4x(x可以为0~F),只需要将模拟输入允许位(D6位)置一(0x40)即可。

如有不妥之处,还请指出,如有补充,洗耳恭听。此笔记仅供参考,如若对你有所帮助,点个赞呗谢谢,最后祝愿你旗开得胜,金榜题名。如果有其他相关问题,也可与我联系,我定力所能及的帮助你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值