PCF8591芯片使用教程
前言
PCF8591通过IIC进行通信
本章内容涉及到IIC通信相关知识,请在看之前,先阅读这篇文章 点我阅读
PCF8591有什么用
PCF8591是八位的A/D和D/A转换器,通过I2C总线串行输入/输出,并且通过3个硬件地址引脚编址,具有4个模拟输入通道,1个输出通道和1个串行I2C总线接口。3个地址引脚A0,A1和A2用于硬件编程地址。如图蓝桥杯仿真如下:
A0,A1,A2是地址脚,通常有八种组合方式,即最多可以连8个PCF8591。
发送第一个字节:芯片的地址
在蓝桥杯中,A0,A1,A2都接地,所以只有一个PCF8591,最后一位用于控制读写。
ADC转换功能及其源码
发送的第二个字节:芯片的基础设置
第七位:默认为0; 第六位:如果为1,则为DA模式,如果为0,则为AD模式;
第五位,第四位:输出模式,默认为00; 第二位:默认为0(自动增量位,一般不用考虑);
第一位,第零位:通道选择位;
选择哪一个A/D通道口,00对应通道0,01对应通道1,10对应通道2,11对应通道3.
首先进行写操作,先进行芯片寻址,0x90->写操作,然后选择哪一个A/D通道,0x01即为AIN1。
void write_ad(void)
{
int i;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(0x03);
IIC_WaitAck();
IIC_Stop();
for (i=0;i<1000;i++);
}
然后是读操作:
unsigned char read_ad(void)
{
unsigned char temp;
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
temp = IIC_RecByte();
IIC_Ack(0);
IIC_Stop();
return temp;
}
只有一个IIC_Start();但发送的第一个字节还是先寻址芯片地址,0x91->读操作,读取到的结果temp经过换算——temp*5/256=所测出的模拟值。
DAC输出功能及其源码
发送第一个字节:依旧是芯片地址
发送的第二个字节:0x40 —> 即允许D/A转换(模拟输出)
第三个字节:发送你要转换的数字量
输入的数字里 255=5V,以此类推
注意:在读取AD值时,最好有一个延迟且写入数字量后不能立马读取AD,需要先初始化ADC
具体例程
蓝桥杯仿真滑动变阻器ADC转换,点击下载,提取码:klqg
上一篇: STM32F103RC学习(一)