上学期用过这款芯片,主要还是IIC的应用……
原理的话没有太多时间深究了,主要还是应用
芯片引脚图
AN0~AN3为模拟量输入(可以选择输入方式)
A0~A2为硬件地址引脚,用来编码地址
AOUT应该为模拟量输出(DA转换)
SCL、SDA即为IIC通信时的总线引脚
设备地址
高四位为固定的编码,用来标识PCF8591,第四位就是硬件引脚+读写位
控制字
第6位:控制模拟量输出使能
第5和4位:模拟量输入的方式
第2位:自动增量使能,每次A/D 转换后通道号将自动增加
第1和0位:模拟输入的通道选择
根据原理图可以确定硬件设备地址
AD转换的操作
分别来看写和读的时序
写:
读:
若要完成一次AD转换,应严格按照时序图进行:
开启总线-----发送地址+写-----发送控制字节-----等待PCF8591响应-----停止总线-----重新启动总线-----发送地址+读------读取数据-----主机发送非应答信号-----停止总线
利用之前的IIC总线的驱动完成PCF8591的AD转换
//读取AD转换后得到的值
void Read_PCF8591()
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x03);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
signal=IIC_RecByte();
IIC_SendAck(1);
IIC_Stop();
}
切记:每一次发送完数据都要调用等待应答函数,否则读数将出现问题!(之前一直显示127,后来发现发完读命令后忘记等待应答了……)
还有就是延时函数要调整,把宏定义改为25!
Reference:
https://www.cnblogs.com/whik/p/6650955.html
https://blog.csdn.net/ohy3686/article/details/86721281
评论(0)
您还未登录,请登录后发表或查看评论