蓝桥杯单片机PCF8591原理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

PCF85918位A/D和D/A转换器PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有4个模拟输入、一个输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于编程硬件地址,允许将最多8个器件连接至I2C总线而不需要额外硬件。器件的地址、控制和数据通过两线双向I2C总线传输。器件功能包括多路复用模拟输入、片上跟踪和保持功能、8位模数转换和8位数模拟转换。最大转换速率取决于I2C总线的最高速率。什么是I2C总线?I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C总线特征?1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;I2C数据的有效性SDA线上的数据必须在时钟的高电平周期保持稳定。数据线SDA的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变。I2C起始和停止条件SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件;SCL线是高电平时,SDA线由低电平向高电平切换,这个情况表示停止条件。起始和停止条件一般由主机产生,总线在起始条件后被认为处于忙的状态,在停止条件的某段时间后总线被认为再次处于空闲状态。I2C总线数据传输字节格式发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),如果从机要完成一些其他功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平,迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续。应答响应数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA线(高)。在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。寻址方式第一个字节的头7位组成了从机地址,最低位(LSB)是第8位,它决定了传输的方向。第一个字节的最低位是“0”,表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息,当发送了一个地址后,系统中的每个器件都在起始条件后将头7位与它自己的地址比较,如果一样,器件会判定它被主机寻址,至于是从机接收器还是从机发送器,都由R/W位决定。PCF8591•单电源供电•工作电压:2.5V~6V•待机电流低•I2C总线串行输入/输出•通过3个硬件地址引脚编址•采样速率取决于I2C总线速度•4个模拟输入可编程为单端或差分输入•自动增量通道选择•模拟电压范围:VSS~VDD•片上跟踪与保持电路•8位逐次逼近式A/D转换•带一个模拟输出的乘法DAC1、概述2、应用•闭环控制系统•用于远程数据采集的低功耗转换器•电池供电设备•在汽车、音响和TV应用方面的模拟数据采集PCF85913、引脚图•AIN0~AIN3:模拟信号输入端。•A0~A3:引脚地址端。•VDD、VSS:电源端。(2.5~6V)•SDA、SCL:I2C总线的数据线、时钟线。•OSC:外部时钟输入端,内部时钟输出端。•EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。•AGND:模拟信号地。PCF8591voidiic_start(void){SDA=1;_nop_();SCL=1;somenop;SDA=0;somenop;SCL=0;}I2C起始SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示起始条件;#definesomenop{_nop_();_nop_();_nop_();_nop_();_nop_();}voidiic_stop(void){SDA=0;_nop_();SCL=1;somenop;SDA=1;}I2C停止SCL线是高电平时,SDA线由低电平向高电平切换,这个情况表示停止条件。PCF8591采用典型的I2C总线接口器件寻址方法,即总线地址由器件地址、引脚地址和方向位组成。由PHILIPS公司规定AD器件地址为1001,引脚地址为A2A1A0,其值由用户选择因此系统中最多可接8个具有I2C接口的器件,地址的最后一位为方向为R/W,当主控器对A/D器件进行读操作时为1,进行写操作时为0,总线操作时,由器件地址、引脚地址和方向位组成的从地址为主控器发送的第一字节。器件总地址iic_sendbyte(0x90);控制字节控制字节用于实现器件的各种功能如模拟信号由哪几个通道输入等控制字节存放在控制寄存器中总线操作时为主控器发送的第二字节其格式如下所示。其中:D1D0两位是A/D通道编号:00:通道0;01:通道1;10:通道2;11:通道3D2:自动增量选择(有效位为1),每次A/D转换后通道号将自动增加D5,D4模拟量输入选择:00为四路单数入;01为三路差分输入;10为单端与差分配合输入;11为模拟输出允许有效D6:模拟输出使能,即DA使能iic_sendbyte(0x03);控制字节D5,D4模拟量输入选择:00为四路单数入;01为三路差分输入;10为单端与差分配合输入;11为模拟输出允许有效在进行数据操作时:首先是主控器发出起始信号;然后发出寻址字节(写);被控器做出应答后;然后发出控制字节(写);被控器做出应答后;读字节(AD)操作流程然后发出寻址字节(读);被控器做出应答后;主控器从被控器读出第一个数据字节,主控器发出应答;主控器从被控器读出第二个数据字节,主控器发出应答;……主控器从被控器读出第n个数据字节,主控器发出非应答信号;主控器发出停止信号。在进行数据操作时:首先是主控器发出起始信号;然后发出寻址字节(写);被控器做出应答后;然后发出控制字节(写);被控器做出应答后;写字节(DA)操作流程主控器向被控器写入第一个数据字节,被控器回一个应答;主控器向被控器写入第二个数据字节,被控器回一个应答;……主控器发出停止信号。应答响应数据传输必须带响应,相关的响应时钟脉冲由主机产生。在响应的时钟脉冲期间发送器释放SDA线(高)。在响应的时钟脉冲期间,接收器必须将SDA线拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。通常被寻址的接收器在接收到的每个字节后,除了用CBUS地址开头的数据,必须产生一个响应。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平,主机产生一个停止或重复起始条件。如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束。从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。voidiic_ack(bitackbit){if(ackbit)SDA=0;//应答elseSDA=1;//非应答somenop;SCL=1;somenop;SCL=0;SDA=1;//SDA拉高,释放SDA线somenop;}应答响应bitiic_waitack(void){SDA=1;//P2.1作为输入口somenop;SCL=1;//拉高,准备检测SDA电平somenop;//要大于4usif(SDA)//检测应答信号{SDA=1//无应答SCL=0;iic_stop();//主机终止IICreturn0;//返回0,退出}else//有应答{SCL=0;return1;//返回1,退出}}主机等待从机应答主机在接收到一个字节后,向从机作出应答当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。voidiic_sendbyte(unsignedcharbyt){unsignedchari;for(i=0;i8;i++){if(byt&0x80)//先发高位SDA=1;elseSDA=0;somenop;SCL=1;byt=1;somenop;SCL=0;}}发送字节unsignedchariic_recbyte(void){unsignedcharda;unsignedchari;for(i=0;i8;i++){SCL=1;somenop;da=1;if(SDA)da|=0x01;SCL=0;somenop;}returnda;}接收字节PCF8591作为AD时的初始化流程voidinit_pcf8591AD(void){iic_start();//启动IICiic_sendbyte(0x90);//总线寻址,进入写模式iic_waitack();//等待从机应答响应iic_sendbyte(0x03);//写通道号,可以00,01,02,03iic_waitack();//等待从机应答响应iic_stop();//停止IICdelay(10);}unsignedcharadc_pcf8591(void){unsignedchartemp;iic_start();//启动IICiic_sendbyte(0x91);//总线寻址,进入读模式iic_waitack();//等待从机应答响应temp=iic_recbyte();//读一个字节iic_ack(0);//主机向从机作出非应答响应,释放SDAiic_stop();//停止IICreturntemp;//返回一个0~255之间的AD结果}转换结果当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。PCF8591作为DA时的初始化流程及DA转换voidinit_pcf8591DA(void){iic_start();//启动IICiic_sendbyte(0x90);//总线寻址,进入写模式iic_waitack();//等待从机应答响应iic_sendbyte(0x40);//写通道号,可以00,01,02,03iic_waitack();//等待从机应答响应}这里不用停止IIC,下面仍然是写模式;数字量变为模拟量,及DA功能iic_sendbyte(table[i]);//模拟电压从OUT引脚输出iic_waitack();

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功