A/D、D/A转换PCF8591

PCF8591是一款CMOS数据采集器件,通过IIC与单片机进行通信,具有4路A/D转换输入、1路D/A模拟输出
以五一板子上面的原理图为例
在这里插入图片描述
AIN0~AIN3:模拟信号输入端
EXT:内部、外部时钟选择线,使用内部时钟时EXT接地
Vref:基准电源端
AOUT:D/A转换的模拟输出端

器件地址

在这里插入图片描述
进行IIC通信的时候都知道需要先写器件地址和读写操作,从图中可以看出,PCF8591的地址高四位为固定的1001,A2A1A0为可编程寻址位,意思是从000~111该IIC总线可以同时挂载8个同类芯片,最后一位是读写位,1是读0是写

控制字节

第一个字节写完后,IIC总线写的第二个字节是PCF8591的控制字节。
在这里插入图片描述
第7位和第3位固定为0,为预留扩展功能位。
第0位第1位则是通道号,表示4路A/D通道编号
第6位是模拟输出使能位
第2位是自动增量位,如果这位置1,每次A/D转换后通道号将自动增加
第4和第5位是定义模拟输入的方式,00为4路单端输入、01为三路差分输入、10为单端与差分配合输入、11为两路差分输入
具体如下图所示
在这里插入图片描述

程序

下面是五一上面驱动PCF8591的程序,器件是基于IIC通信协议的,基本的协议过程就不再讲解,如下图所示,通道0123分别接到了VRout、GND、GND、+5V,VRout是滑动变阻器的电压值,分别读取四个通道的电压值,A2A1A0接了地,故需要向总线上写入的第一个字节就是0x90
在这里插入图片描述

unsigned char GetADCValue(unsigned char chn)
{
	unsigned char val;

	I2CStart();
	if(!I2CWrite(0x90))//写入器件地址,直到获取到应答
	{
		I2CStop();
		return 0;
	}
	I2CWrite(0x40 | chn);//写入控制字,或上通道号提供选择
	I2CStart();
	I2CWrite(0x90);//再次写入地址开始通信
	I2CReadACK();
	val = I2CReadNAK();
	I2CStop();

	return val;
}
原创文章 23 获赞 49 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43086497/article/details/105775692