PCF8591的介绍..

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PCF8591介绍
应用: 1 闭环控制系统 2 用于远程数据采集的低功耗转换器 3 电池供电设备 4 在汽车、音响和 TV 应用方面的模拟 数据采集
PCF8591介绍
管脚定义及原理图: AIN0-AIN3:模拟输入(A/D转换)。 AOUT:模拟输出(D/A转换)。 A0-A1:硬件设备地址。 GND:电源负极地 VREF:参考电压输入。 EXT:振荡器输入时,内部/外部的 切换开关。 OSC:振荡器输入/输出。 SCL: I2C BUS时钟输入。 SDA:I2C BUS 数据输入/输出。 AGND:模拟地,模拟信号和基准电 源的参考地
例子原理图及程序
void main() { unsigned int adNum[5]; float value0; LcdInit(); while(1) { //--显示电位器电压--// Pcf8591SendByte(0); //发送电位器转换命令 adNum[0]= Pcf8591ReadByte()*2;//将前一次转换结果读走 LcdWriteCom(0x80+0x46); LcdWriteData('0'+adNum[3]/1000); //发送显示数据 LcdWriteData('0'+adNum[3]%1000/100); LcdWriteData('0'+adNum[3]%100/10); LcdWriteData('0'+adNum[3]%10); Pcf8591SendByte(1); //发送热敏转换命令 adNum[0]= Pcf8591ReadByte()*2;//读取电位器转换结果 value0=adNum[0]/2*0.01953; //转为电压值 adNum[0]=value0*100; //保留两位小数 LcdWriteCom(0x80); LcdWriteData('0'+adNum[0]%1000/100); LcdWriteData('.'); LcdWriteData('0'+adNum[0]%100/10); LcdWriteData('0'+adNum[0]%10); LcdWriteData('V'); Pcf8591SendByte(2); //发送光敏转换命令 adNum[1]=Pcf8591ReadByte()*2; //ADC1读取热敏
PCF8591介绍
控制字: 发送到 PCF8591 的第二个字节将被存储在控制寄存器,用于控制 器件功能。控制寄存器的高半字节用于允许模拟输出,和将模拟输 入编程为单端或差分输入。低半字节选择一个由高半字节定义的模 拟输入通道。如果自动增量(auto-increment)标志置1,每次A/D 转换后通道号将自动增加。
PCF8591介绍
A/D 转换: A/D 转换器采用逐次逼近转换技术。在A/D 转换周期将临时使用片 上D/A 转换器和高增益比较器。一个 A/D 转换周期总是开始于发送一 个有效读模式地址给PCF8591 之后。A/D 转换周期在应答时钟脉冲 的后沿被触发,并在传输前一次转换结果时执行。 一旦一个转换周期被触发,所选通道的输入电压采样将保存到芯片 并被转换为对应的8 位二进制码。 转换结果被保存在ADC 数据寄存器等待传输。如果自动增量标志被 置1,将选择下一个通道。
PCF8591的介绍
第六组
目录
1 2
PCF8591介绍 程序构成
3
例子原理图及程序
Click to add title in here
PCF8591介绍
PCF8591的介绍:
PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个 模拟输入、一个输出和一个串行I2C 总线接口。3 个地址引脚A0、A1 和A2 用于编程硬件地址,允许将最多8 个器件连接至I2C总线而不需 要额外硬件。PCF8591由于其使用的简单方便和集成度高,在单片机 应用系统中得到了广泛的应用。 特点: 1 单电源供电 2 工作电压:2.5 V ~ 6 V 3 I2C 总线串行输入/输出 4 通过 3 个硬件地址引脚编址 5 采样速率取决于 I2C 总线传输速率决定 6 4 个模拟输入可编程为单端或差分输入 7 自动增量通道选择 8 8 位逐次逼近式A/D 转换
PCF8591介绍
内部框图:
PCF8591介绍
地址: I2C 总线系统中的每一片PCF8591 通过发送有效地址到该器件 来激活。该地址包括固定部分和可编程部分。可编程部分必须 根据地址引脚A0、A1 和A2 来设置,因此I2C系统中最多可接 2 3 =8个PCF8591。在I2C 总线协议中地址必须是起始条件后作为 第一个字节发送。地址字节的最后一位是用于设置以后数据传 输方向的读/写位1为读操作,0为写操作。
PCF8591介绍
D/A转换时序图:Fra bibliotek程序构成
• PCF8591的写入
– 第一个字节是器件地址和读写控制 – 第二个字节被存到控制寄存器,用于控制器件功能。 – 第三个字节被存储到DAC数据寄存器,并使用片上D/A转换器转 换成对应的模拟电压。(所以不输入D/A时,可以不用输入。)
• PCF8591发送一个字节的程序 /************************************************************ * 函数名 : Pcf8591SendByte * 函数功能 : 写入一个控制命令 * 输入 : channel(转换通道) * 输出 :无 ************************************************************/ void Pcf8591SendByte(unsigned char channel) { I2cStart(); I2cSendByte(WRITEADDR);//发送写器件地址 I2cSendByte(0x40|channel);//发送控制寄存器 I2cStop(); }
• PCF8591的读取
– – – – 读取的第一个字节是包含上一次转换结果 将上一个字节读取时,才开始进行这次转换的采样。 读取的第二个字节才是这次的转换结果。 所以读取转换结果的步骤是:发送转换命令,将上次 的结果读走,然后等一会儿,然后读取结果。
• PCF8591读取一个字节的程序 /************************************************************ * 函数名 : Pcf8591ReadByte * 函数功能 : 读取一个转换值 * 输入 : * 输出 : dat ************************************************************/ unsigned char Pcf8591ReadByte() { unsigned char dat; I2cStart(); I2cSendByte(READADDR);//发送读器件地址 dat=I2cReadByte();//读取数据 I2cStop(); //结束总线 return dat; }
PCF8591介绍
控制字: D0-D1 用于4个通道设置 D2 自动增益选择(有效位为1) D5 D4 模拟量输入选择 00 4路单端输入 01 3路差分输入 10 单端与差分输入 11 2路差分输入
PCF8591介绍
AD的差分输入与单端输入: 单端输入,输入信号均以共同的地线为基准.这种输入方法主要应用于 输入信号电压较高(高于1 V),信号源到模拟输入硬件的导线较短,且所 有的输入信号共用一个基准地线.如果信号达不到这些标准,此时应该 用差分输入.对于差分输入,每一个输入信号都有自有的基准地线;由于 共模噪声可以被导线所消除,从而减小了噪声误差. 单端输入时, 是判断信号与 GND 的电压差. 差分输入时, 是判断两 个信号线的电压差. 信号受干扰时, 差分的两线会同时受影响, 但电压差变化不大. (抗 干扰性较佳) 而单端输入的一线变化时, GND 不变, 所以电压差变化较 大. (抗干扰性较差)
• PCF8591发送一次转换的程序 /************************************************************ * 函数名 : Pcf8591DaConversion * 函数功能 : PCF8591的输出端输出模拟量 * 输入 : value(转换的数值) * 输出 :无 ******************* *****************************************/ void Pcf8591DaConversion(unsigned char value) { I2cStart(); I2cSendByte(WRITEADDR);//发送写器件地址 I2cSendByte(0x40);//开启DA写到控制寄存器 I2cSendByte(value);//发送转换数值 I2cStop(); }
PCF8591介绍
(1)首先发出“启动信号”信号S。当S由高变低
时,“逐次逼近寄存器SAR”清0,DAC输出 Vo=0,“比较器”输出1。当S变为高电平时, “控制电路”使SAR开始工作。 (2)SAR首先产生8位数字量的一半,即 10000000B,试探模拟量的Vi大小,若Vo>Vi, “控制电路”清除最高位,若Vo<Vi,保留最高位。 (3)在最高位确定后,SAR又以对分搜索法确 定次高位,即以低7位的一半y1000000B(y为已确 定位) 试探模拟量Vi的大小。在bit6确定后,SAR 以对分搜索法确定bit5位,即以低6位的一半 yy100000B(y为已确定位) 试探模拟量Vi的大小。 重复这一过程,直到最低位bit0被确定。 (4)在最低位bit0确定后,转换结束,“控制电 路”发出“转换结束”信号EOC。该信号的下降 沿把SAR的输出锁存在“缓冲寄存器”里,从而 得到数字量输出。 从转换过程可以看出: 启动 信号为负脉冲有效。 转换结束信号为低电平。
例子原理图及程序
例子: *实验名 * 实验说明 : AD显示试验 : 使用LCD1602显示AD读取到的各个数值
说明:电压值=读取值*分辨率。
例子原理图及程序
原理图:
热敏电 阻 光敏电阻
例子原理图及程序
程序(采用C51): #include<reg51.h> #include"i2c.h" #include"lcd.h"
//--定义PCF8591的读写地址--// #define WRITEADDR 0x90 #define READADDR 0x91
//写地址 //读地址
//--声明全局函数--// void Pcf8591SendByte(unsigned char channel); unsigned char Pcf8591ReadByte(); void Pcf8591DaConversion(unsigned char value);
PCF8591介绍
A/D转换时序图:
在读周期传输的第一个字节包含前一次读周期的转换结果代码。以上电复位 之后读取的第一个字节是0x80。
PCF8591介绍
D/A转换: 发送给 PCF8591 的第三个字 节被存储到DAC 数据寄存器, 并使用片上D/A 转换器转换成 对应的模拟电压。这个D/A 转 换器由连接至外部参考电压的 具有256 个接头的电阻分压电 路和选择开关组成。接头译码 器切换一个接头至DAC 输出线 。模拟输出电压由自动清零单 位增益放大器缓冲。这个缓冲 放大器可通过设置控制寄存器 的模拟输出允许标志来开户或 关闭。在激活状态,输出电压 将保持到新的数据字节被发送 。
//发送显示坐标
例子原理图及程序
LcdWriteCom(0x86); LcdWriteData('0'+adNum[1]/1000); LcdWriteData('0'+adNum[1]%1000/100); LcdWriteData('0'+adNum[1]%100/10); LcdWriteData('0'+adNum[1]%10); Pcf8591SendByte(3); //发送外部输入电压转换命令 adNum[2]=Pcf8591ReadByte()*2; //ADC2读取光敏
相关文档
最新文档