1、实验4 生物信号的数据采集实验四 生物信号的数据采集一、实验要求 利用8位串行控制模数转换器TLC0832做A/D转换器,采用实验板上的电位器,或其它信号(如心电仿真仪信号)提供模拟量输入,编制程序,将模拟量转换成二进制数字量。存放在RAM区,以供查阅。二、实验目的1、 熟悉串行外围设备接口SPI总线技术的结构和原理。2、 掌握8位串行控制模数转换器TLC0832的转换性能及编程。3、 掌握TLC0832与80C51单片机的接口方法。4、 通过实验了解如何使用单片机进行数据采集。 三、 实验设备 1 机 一台 2 实验面包板 一个 3 80C51仿真器 一套 4 元件:TLC0832 一片 4
2、 导线 若干四、实验说明一个微处理器系统中除了作为核心部件的微处理器外,多少要使用一些外围设备(通常被简称为“外设”)。微处理器外设之间的连接方式基本上可以分为并行和串行2大类,也就是通过并行或串行接口连接。并行接口设备使用了多根数据线,一次同时可以传递多个BIT的数据,所以传递速度较快,单器件之间的连线复杂。而串行接口设备仅使用了一根数据线,每次只能传递一个BIT的数据,所以传递速度较慢,但由于使用串行接口的系统中器件之间的连线比较简单,在微型化的系统中倍受重视。随着器件时钟速度的不断提高,串行接口的数据交换率同样可以做得很高。另外基于异步串行接口电路的技术的器件因其相当高的效率,在DSP
3、系统中被广泛采用。(1)SPI总线介绍串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。SPI总线是一种三线制同步式串行总线,其物理结构是相当典型的。因其硬件配备(在各种串行接口中)较为“完整”,所以,与SPI有关的软件就相对简单,使CPU有更多的时间处理其他事务。它基本上由3根连线构成,即:DI,DO,CLK,故称为三线制串行总线。除了这3条基本信号线以外,当系统使用多个SPI器件时,为区别各个器件,往往还要加上一条片选信号线“/CS”。使用了/CS信号后,所有的SPI器件可以使用公共的DI,DO,CLK信号
4、,而只有/CS有效的芯片才被主控器件操纵。各信号线的意义为:信号符号信号名称信号意义DI数据输入线外设的数据输入端,其电平表示当前输入的数据DO数据输出线外设的数据输出端,其电平表示当前输出的数据CLK时钟信号主控器件提供的同步时钟,以保证数据的正确/CS片选信号用来选通所操纵的器件除了上述引线之外,由于各种外设控制功能的不同,采用SPI接口,有时还要添加一些辅助的控制线,例如复位信号、中断信号等。(2)实际SPI器件TLC0832实际的SPI器件品种繁多,本次实验使用的TLC0832是一种基于SPI接口的双路A/D转换器。该器件的详细资料参见参考文献1和文献2TLC0832是一种2通道逐次逼
5、近似方式的A/D转换器。基本性能如下: 8位分辨率 可以“满量程”工作或使用5V基准电压 单通道或多路器选择的双通道,可单端或差分输入选择 当时钟频率为250kHz时,转换时间为32s 总非调整误差为1LSB TLC0832的引脚及其功能:实验用的TLC0832芯片为8脚的“双列直插”(DIP)式封装。其引线方式参见下图。各引脚的意义参见下表:序号引脚名称意义1/CS片选信号。当该信号为高电平时,芯片未被选中,所有信号引线均为高阻态。芯片的任何功能必须当该信号为低电平时方能实现。2CH0模拟通道0的输入端。可以作为独立的输入通道使用,也可以由程序控制,与CH1配合实现差分输入方式。3CH1模拟
6、通道1的输入端。可以作为独立的输入通道使用,也可以由程序控制,与CH0配合实现差分输入方式。4GND地线。5DI数据输入端。来自主控器件(CPU)的控制命令由此输入。6DO数据输出端。转换结果由此输出。7CLK时钟信号。8VCC/REF电源/参考电压输入端。TLC0832的动作时序:TLC0832的动作时序见下图。图中可见TLC0832的全部动作过程。应当注意以下要点:1 任何有效操作均必须在/CS为低电平时才能实现。所以,开始对TLC0832作任何操作都必须首先将/CS由高电平置为低电平,一次完整的操作结束后,应当及时地将/CS置为高电平;2 时钟信号CLK是由主控器件(CPU)主动提供的,
7、它控制了转换的节拍;3 一个完整的转换过程分2个基本步骤:A. 由CPU向器件发出控制命令;B. CPU从器件读出转换后的数据;4 控制命令由CPU通过DI线向器件发出,包括3个BIT。第1个BIT为启动位,后2个BIT为配置位;5 2个BIT的配置位的名称为SGL/DIF和ODD/EVEN,共同决定了器件的输入性质(参见附表);6 CLK信号是由CPU操纵下“人为制造”出高低电平变化而形成的。每当需要向器件写入命令时,应当首先将所需要的数据加到DI脚上,然后让CLK由低电平向高电平变化(上升沿),这时器件会自动保持DI上的数据,之后,应当将CLK恢复到低电平,以便下一个节拍的操作;7 由器件
8、中读出数据时有些不同,此时应当首先将CLK置为高电平,然后,再将CLK由高电平置为低电平,在由高电平向低电平变化的“下降沿”后,器件的DO端会出现有效的数据信号。CPU可以在此时检测DO端的状态,读出有效的数据;8 命令BIT发送之后,便可以开始读出转换结果,事实上,器件内部的逐次近似转换过程是在CLK的控制下一拍、一拍地进行,每一拍完成一个BIT的转换,转换的结果同时就出现在DO上,这就是所谓的“外部时钟方式”。特点是简单,但是对于外部时钟的“占空比”有较严格的控制,否则精度将受到影响有些串行A/D器件内部自己配备了时钟系统,无须CPU的CLK信号,而是利用自身的时钟系统完成转换,这样的器件
9、精度比较有保障。使用这种器件时,在启动器件开始转换后,CPU应当等待“转换完成(EOC)”信号,当EOC出现后,才开始读取数据;9 数据读出时,器件首先以“高位在前”(MSB-First)方式输出数据,然后再以“低位在前”(LSB-First)方式输出数据。事实上,应用系统的设计人员可以根据自己的需要选择适当的方式读取数据,如果只需要MSB-First方式,则启动转换后只需要8个CLK就可以完成全部操作,这时,从图中的第12个CLK后面的操作可以不必进行;10 全部操作完成后应当将/CS置为高电平。使用TLC0832需要注意: TLC0832要求在转换数据时CLK占空比为40%60%,否则会导
10、致转换结果不正确,CLK可由单片机的一根I/O口线驱动,用软件控制脉冲的频率和占空比。TLC0832的模拟输入信号的的功能比较齐备,可以通过控制命令灵活地配置为差分或单端方式。即,2个输入通道CH0和CH1可以作为一对差分输入的互补信号线,也可以配置为各自独立的单端输入信号线。请注意以下要点:1、 配置命令由信号SGL/DIF 和ODD/EVEN 2个BIT组成,排列顺序是SGL/DIF在前,ODD/EVEN在后,2个控制BIT组合的意义参见附表;2、 差分输入方式是指一对大小相同方向相反的输入方式,它需要2个输入端,而且这2个输入端有极性之分;3、 单端输入实际上也需要2个输入端,一个是信号
11、端,另一个是参考端,即所谓的“地”。但是应当注意,地线作为参考端被假定为稳定不变的,输入信号完全由输入端上的电压变化而决定; 4、 TLC0832配置为差分输入方式时只能组成一路输入;配置为单端输入方式时,可以提供2路独立的输入。TLC0832 输入信号地址控制逻辑表地址选择通道号操作意义SGL/DIFODD/EVENCH0CH1LLH HLHLH+CH0 为正极性,CH1 为负极性的差分输入方式CH0 为负极性,CH1 为正极性的差分输入方式选择 CH0 的单极性,单通道方式选择 CH1 的单极性,单通道方式 H = 高电平, L = 低电平, or + = 所选择的输入端的终端极性五、实验
12、电路及连线LC0832与51系列微处理器的连接相当简单,具体的参考电路参见下图:实验中,我们采用选择 CH0 的单极性,单通道方式。因此,CH1端应接地,CH0端为输入电压。我们采用通过可调电位器的方法改变输入电压,以观察A/D转换结果。配置命令由信号SGL/DIF 和ODD/EVEN 2个BIT组成,在本实验中应设置为:SGL/DIF =1;ODD/EVEN=0六、软件流程及编程1、A/D转换的软件流程图图中绘出了A/D转换的基本过程。必须说明,这个流程图并不是最优化的,而仅仅表现了A/D转换的主要步骤。流程图的右侧绘出了每个步骤相应的注释。图中使用了sCLK子程序,该子程序的流程图附在本小
13、节的后部。这里应当注意的是,sCLK子程序中使用了2个延时子程序,DELAY1和DELAY2,其目的是为了调整时钟信号的频率和占空比,实际的延时子程序可以用不同长度的循环来实现,或者简单地插入若干个NOP来解决。具体的延时长度应当视实际需要而定。延时时间的确定原则在于使得CLK信号处于高电平和低电平的时段基本相等,而且必须考虑到sCLK子程序返回后,A/D程序进行其它操作时CLK处于低电平的时段长度。2、A/D转换程序:( 见源程序文件TLC0832.ASM) BEGIN: CLR P1.4 ; /CS=0,选通器件 SETB P1.1 ;DI=1,置启动条件 CALL SCLK ;发出一个时
14、钟 SETB P1.1 ;DI=S/D=1,送控制命令的第1个BIT CALL SCLK ;发出一个时钟 CLR P1.1 ;DI=O/E=0,送控制命令的第2个BIT MOV A, #00H ;设存放转换结果的寄存器A初值 MOV R0, #08H ;读8位BIT GETDATA: CALL SCLK ;发出一个时钟 MOV C, P1.0 ;由DO读出一个BIT,检测DO的状态 RLC A ;将读出的BIT用于字节输出到指定的BYTE,选通器件 DJNZ R0, GETDATA;读完8次了吗?未读完,继续 SETB P1.4 ;/CS=1. 读完,放弃对于器件的控制 SJMP $ ;SCL
15、K入口 SCLK: SETB P1.2 ;CLK=1,发出时钟的高电平 NOP ;适当延时片刻 NOP NOP NOP CLR P1.2 ;CLK=0,发出时钟的低电平 NOP ;适当延时片刻 NOP NOP NOP RET END ; 查指令表可知NOP指令需用1个机器周期,在12MHz晶振时,一个机器周期时间长度为12/(12MHZ)=1us ; 所以该段延时程序执行时间为:2*1us=2us ; 因此,若取CLK的时钟占空比为50%,则高低电平延时时间相同,即总共的时钟周期为:2*2us=4us, ; 即CLK时钟频率为1/(4us)=250KHz ; 同学们可以编写两个不同的延时程序,
16、实现不同的CLK时钟频率和占空比, ; 但是要注意CLK必须在10KHz600KHz之间,占空比必须在40%60%之间. 参考文献 1 武汉力源电子股份有限公司. TLC0831C/I,TLC0832C/I 8位串行控制模数转换器产品资料. 1998.6 武汉2 Texas Instruments Incorporated. Data Sheet of TLC0831C, TLC0831I, TLC0832C, TLC0832I 8-BIT ANALOG-TO-DIGITAL CONVERTERS WITH SERIAL CONTROL. APRIL 1996, USA七、实验思考题1 单步执
17、行参考程序,观察记录实验结果:Vi=0V,1V,2V,3V,4V,5V时,A/D转换的数据。2 A/D转换数据的分辨率?3 A/D转换数据的时间(1个字节)?4 修改完善参考程序,实现定时采样的功能。查看记录DATA、CODE空间的数据,实现数据的采集。实验五 生物信号数据通讯与存储一、实验要求 本实验利用AT24C16对单片机进行外部数据存储器的扩展,使用8051单片机模拟I2C总线实现串行E2PROM的读写。将单片机内部RAM 30H开始的16个字节的数据写到外部数据区,然后再将外部数据区的16个字节的内容读到内部RAM 40H开始的单元中,以检验是否将数据正确的写到外部存储器。二、实验目
18、的5、 熟悉I2C串行数据总线技术的结构和原理。6、 掌握AT24C系列 E2PROM接口的转换性能及编程。7、 掌握AT24C系列与80C51单片机的接口方法。8、 通过实验了解如何使用具有I2C总线接口功能的串行E2PROM来扩展单片机的外部数据存储区。三、实验设备 1 机 一台 2 实验面包板 一个 3 80C51仿真器 一套4 元件: AT24C16 1片5 导线 若干四、实验说明 I2C 是一种新的芯片间的通讯方式,由PHILIPS 开发和推广。I2C通讯采用两条线进行通讯,一条数据线,一条时钟线,可进行多器件通讯。总线上的每个器件都有自己的地址。数据传送是双向的,总线支持多主机,8
19、051上I2C总线的接口为P0 端口的两根线,有专门的特殊功能寄存器来控制总线的工作和执行传输协议。而在单片机系统中广泛使用E2PROM作为数据存储器,AT24C系列串行E2PROM是具有I2C总线接口功能的数据存储器。本实验介绍了I2C总线及AT24C系列串行E2PROM,给出了8051单片机与串行E2PROM通讯的硬软件实现方法和实用的读/写子程序。1、I2C总线简介 I2C总线是一种双线串行数据总线,具有多端控制能力,由串行数据(SDA)线和串行时钟(SCL)线,在CPU与被控IC与IC之间进行数据双向传输,最高传输率为100千比特/秒。SDA线与SCL线均为双向I/O线,经电阻接+5伏
20、,当总线空闲时,两线为高电平,当I2C总线有所挂IC准备发送数据时,把集电极电压拉低,从而使与之相连的SDA线电压降低,占据了SDA线发送数据。在传送数据过程,有三种信号出现,分别是: 开始信号。SCL线为高电平,SDA线由高电平变低电平,视为开始传送数据。 结束信号。SCL线为高电平,SDA线由低电平变高电平,视为结束传送数据。 应答信号。接收数据的IC收到期1字节(8比特)数据后,向发送数据的IC发出低电平脉冲信号,视为已收到信号。在I2C总线上传送的一个数据字节由八位组成。总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位。数据传送首先传送最高位(MSB),数据传送按图1所示格
21、式进行。首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据。启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读)。被寻址到的从机设备按传送方向位设置为对应工作方式。标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节,并将接收到的地址与自己的地址进行比较,如果地址相符则为主机要寻访的从机,应在第九位答时钟脉冲时向SDA线送出低电平作为应答。除了第一字节是通用呼叫地址或十位从机地址之外,第二字节开始即数据字节。数据传送完毕
22、,由主机发出停止信号“P”(SDA在SCL高电平期间由低电平跳变为高电平)。2、AT24C系列串行E2PROMAT24C系列串行E2PROM具有I2C总线接口功能,功耗小,宽电源电压(根据不同型号2.5V6.0V),工作电流约为3mA,静态电流随电源电压不同为30A110A,存储容量见表1。(1) AT24C系列 E2PROM接口及地址选择由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件地址为7位数据(即一个I2C总线系统中理论上可挂接128个不同地址的器件),它和1位数据方向位构成一个器件寻址字节,最低位D0为方向位(读/写)。器件寻址字
23、节中的最高4位(D7D4)为器件型号地址,不同的I2C总线接口器件的型号地址是厂家给定的,如AT24C系列E2PROM的型号地址皆为1010,器件地址中的低3位为引脚地址A2A1A0,对应器件寻址字节中的D3、D2、D1位,在硬件设计时由连接的引脚电平给定。对于E2PROM的片内地址,容量小于256字节的芯片(AT24C01/02),8位片内寻址(A0A7)即可满足要求。然而对于容量大于256字节的芯片,则8位片内寻址范围不够,如AT24C16,相应的寻址位数应为11位(211=2048)。若以256字节为1页,则多于8位的寻址视为页面寻址。在AT24C系列中对页面寻址位采取占用器件引脚地址(
24、A2、A1、A0)的办法,如AT24C16将A2、A1、A0作为页地址。凡在系统中引脚地址用作页地址后,该引脚在电路中不得使用,作悬空处理。AT24C系列串行E2PROM的器件地址寻址字节如表1所示,表中P0P1P2表示页面寻址位。(2)AT24C系列 E2PROM读写操作对AT24C系列 E2PROM的读写操作完全遵守I2C总线的主收从发和主发从收的规则。连续写操作:连续写操作是对E2PROM连续装载n个字节数据的写入操作,n随型号不同而不同,一次可装载字节数见表1。SDA线上连续写操作数据状态如图2。 AT24C系列片内地址在接收到每一个数据字节地址后自动加1,故装载一页以内规定数据字节时
25、,只须输入首地址,若装载字节多于规定的最多字节数,数据地址将“上卷”,前面的数据被覆盖。连续读操作:连续读操作时为了指定首地址,需要两个伪字节写来给定器件地址和片内地址,重复一次启动信号和器件地址(读),就可读出该地址的数据。由于伪字节写中并未执行写操作,地址没有加1。以后每读取一个字节,地址自动加1。 在读操作中接收器接收到最后一个数据字节后不返回肯定应答(保持SDA高电平)随后发停止信号。连续读操作SDA上数据状态如图3。五、8051单片机与AT24C系列 E2PROM通讯的硬软件实现(1) 硬件电路图4是用8051 P1口模拟I2C总线与E2PROM连接电路图(以AT24C16为例),由
26、于AT24C16是漏极开路,图中R1、R2为上拉电阻(5.1k)。A0A2地址引脚、TEST测试脚均悬空。(2) 软件实现由前述分析和图4的硬件电路,我们编制了E2PROM的读写子程序。两者的主要区别在于读子程序需发器件地址(写)和片内地址作为伪字节,之后再发一次开始信号和器件地址(读命令)。读写程序分别见: I2CREAD.ASM I2CWRITE.ASM 写程序: I2CWRITE.ASM ;将51单片机内部RAM区30H开始的16个字节写到E2PRPR0M的第0页中00H单元开始的区域 ;写串行E2PROM子程序EEPW ; (R3)=器件地址 1010 p2p1p0 R/W = 101
27、0*0 ; (R4)=片内字节地址 A7A6A5A4A3A2A1A0=* ; (R1)=欲写数据存放地址指针 8051RAM区地址0255 ; (R7)=连续写字节数n 224C16连续写字节数n=16 MOV R3, #10100000B ;器件寻址(写),选择向24c16第0页写数据 MOV R4, #00000000B ;片内地址为00H MOV R1, #30H ; 8051RAM区地址30H MOV R7, #16 ;24C16连续写字节数n=16 EEPW: MOV P1, #0FFH CLR P1.0 ;发开始信号( 高电平变为低电平) MOV A, R3 ;送器件地址 CALL
28、 SUBS MOV A, R4 ;送片内字节地址 CALL SUBSAGAIN: MOV A, R1 CALL SUBS ;调发送单字节子程序 INC R1 ; 8051RAM区地址 DJNZ R7, AGAIN ;连续写n个字节 CLR P1.0 ;SDA置0, 准备送停止信号 CALL DELAY ;延时以满足传输速率要求 SETB P1.1 ;发停止信号 CALL DELAY SETB P1.0 ;电平变高,写停止位 SJMP FINISH ;结束写数据,转读数据程序 ;写一个字节 SUBS: MOV R0,#08H ;发送单字节子程序 LOOP: CLR P1.1 ;产生低电平 RLC
29、 A ;从高位到低位发送,左移到进位标志中 MOV P1.0, C NOP SETB P1.1 ;产生高电平,形成写数据脉冲 CALL DELAY DJNZ R0, LOOP ;循环8次送8个bit CLR P1.1 CALL DELAY SETB P1.1 ;产生应答脉冲REP: MOV C, P1.0 ;读应答信号 JC REP ;判应答到否,未到则等待 CLR P1.1 ;应达到,使电平变低,准备下一字节数据的发送 RETDELAY: NOP NOP RETFINISH:END读程序: I2CREAD.ASM ;将E2PRPR0M的第0页中00H单元开始的16个字节读到51单片机内部RA
30、M区40H开始的区域 ;读串行E2PROM子程序EEPR ;(R1)=欲读数据存放地址指针 8051RAM区地址0255 ;(R3)=器件地址 1010 p2p1p0 R/W = 1010*0 和 1010 p2p1p0 R/W = 1010*1分别送一次 ;(R4)=片内字节地址 A7A6A5A4A3A2A1A0=* ;(R7)=连续读字节数 24C16连续读字节数n=16 READDATA: MOV R3, #10100000B ;器件寻址(写),选择24c16第0页 MOV R4, #00000000B ;片内地址为00H MOV R1, #40H ; 8051RAM区地址40H MOV R7, #16 ;24C16连续写字节数n=16 EEPR: MOV P1,#0FFH CLR P1.0 ;发开始信号 MOV A ,R3 ;送器件地址(写) CALL SUBS ;调发送单字节子程序 MOV A,R4 ;送
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1