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;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值