表2DS2450的通道选择字和预置控制字的各位含义 ![](../img/eef/analog-33023cfc2nxiinsv.jpg)
![](../img/eef/analog-33024th2rmdn35hg.gif) (a)初始化时序
(b)写时序
![](../img/eef/analog-33026zd5s2zo1ptl.gif) (c)读时序 图2DS2450的工作时序图
图3DS2450与微处理器的典型连接图 预置控制字可以对相应通道的转换结果存储器进行预置。SET、CLR=00,不预置,保持上次转换值;SET、CLR=01,转换前预置为全0;SET、CLR=10,预置为全1;SET、CLR=11,无效组合。
4.2存储器读/写控制
读存储器命令用于读取转换结果、工作状态、门限设定值等。总线管理器首先送出读存储器命令字[AAH],然后送出两字节的16位"起始数据"存储器地址,从总线上读取一个字节的数据后,地址自动加1,可紧接着读取下一个数据;当一页读完后,随后读取的两个字节为内部自动产生的16位循环冗余校验码,它由前面送出的命令字、地址、读取的存储器数据,根据表达式CRC16=X16+X15+X2+1生成,对校验码生成和应用的详细资料可参阅相关文献。
写存储器命令主要针对第1页和第2页的存储器,目的是写入各通道的工作方式控制字和对应通道的高、低门限设定值。总线管理器首先送出写存储器命令字[55H],然后送出两字节的16位存储器起始地址,接着逐个送出要写入的数据,其地址也是自动加1。若在刚写完一个数据后执行读操作,读出的数据应刚好为前一次写入的数据,可利用这一特点对写入和读出的数据进行比较,以判断传输的正确性。
如果通过软件校验,发现了读/写中的传输错误,则必须对芯片进行初始化,并重新进行读写操作。
4.3DS2450的工作时序
DS2450的一线工作协议流程是:初始化→ROM功能命令→存储器读写/转换控制功能命令→传输数据。其工作时序包括初始化时序、写时序和读时序,在普通速度工作模式下,如图2(a)(b)(c)所示。
初始化时序包括总线管理器(主机)发出的复位脉冲和DS2450反馈送出的存在脉冲两部分,存在脉冲告诉主机DS2450在线且已准备好;读/写时序规定了在DS2450的DATA端串行读写数据位时的时序配合要求。
5 DS2450与单片机的典型接口设计
图3以MCS-51系列单片机为例,示出DS2450与微处理器的典型连接。其DATA端接AT89C51的P1.0,采用外接电源供电方式,其VCC端用5V电源供电。此例中仅对D通道进行A/D转换,AIN-D接模拟信号输入;AIN-A,AIN-B外接上拉电阻器和电源,其输出作为D通道的高、低限报警。
假设单片机系统所用的晶振频率为12MHz,根据DS2450的初始化时序、写时序和读时序,分别编写了3个子程序:INIT为初始化子程序,发送复位脉冲并接收存在脉冲;WRITE为写(命令或数据字节)子程序,READ为读数据子程序。所有要读写的命令或数据字节均放在A寄存器中(限于篇幅,略去源程序,有兴趣者可向作者索取)。
主机控制DS2450完成A/D转换一般必须经过以下几个步骤:初始化使DS2450准备好、发ROM功能命令和相应的64位光刻ROM数据选中特定芯片、写入工作方式控制字和高/低限值、发转换控制命令、读取转换值及状态。
例如,将D通道设定为5.1V输入范围、转换精度为12位、高报警门限为3.0V(96H)、低报警门限为2.0V(64H)、通道A和B作为报警输出、转换结果放在如下30H和31H的子程序CTLAD中。
;--------------------------
CTLAD:LCALLINIT;发复位脉冲并接收存在脉冲 MOVA,#0CCH LCALLWRITE;发"跳过ROM"命令 ;设置4个通道工作方式控制字,写入存储器地址从0008H开始 FSKZ:MOVA,#55H LCALLWRITE;发"写存储器"命令 MOVA,#08H LCALLWRITE;发低8位地址 MOVA,#00H LCALLWRITE;发高8位地址 MOVA,#0C0H ;A通道漏极开路数字输出方式 LCALLWRITE;发A通道工作方式低字节 MOVA,#00H ;与报警、输入范围等设置无关 LCALLWRITE;发A通道工作方式高字节 MOVA,#0C0H ;B通道漏极开路数字输出方式 LCALLWRITE;发B通道工作方式低字节 MOVA,#00H ;与报警、输入范围等设置无关 LCALLWRITE;发B通道工作方式高字节 MOVA,#01H ;C通道不用,可随意设置 LCALLWRITE;发C通道工作方式低字节 MOVA,#00H ;C通道不用,可随意设置 LCALLWRITE;发C通道工作方式高字节 MOVA,#0CH ;D通道12位A/D转换方式 LCALLWRITE;发D通道工作方式低字节 MOVA,#0DH ;5.1V输入范围,允许高低限报警 LCALLWRITE;发D通道工作方式高字节 ;设置D通道高/低限值报警值,写入存储器地址从0016H开始 BJSZ:LCALLINIT;发复位脉冲并接收存在脉冲 MOVA,#0CCH LCALLWRITE;发"跳过ROM"命令 MOVA,#55H LCALLWRITE;发"写存储器"命令 MOVA,#16H LCALLWRITE;发低8位地址 MOVA,#00H LCALLWRITE;发高8位地址 MOVA,#64H ;低门限报警值2.0V(64H) LCALLWRITE;送D通道低门限存储器 MOVA,#96H ;高门限报警值3.0V(96H) LCALLWRITE ;送转换控制字,启动A/D转换。 QDZH:LCALLINIT;发复位脉冲并接收存在脉冲 MOVA,#0CCH LCALLWRITE;发"跳过ROM"命令 MOVA,#3CH LCALLWRITE;发"转换控制"命令字 MOVA,#08H ;仅D通道参与转换 LCALLWRITE;发通道选择控制字 MOVA,#40H ;D通道转换前预置为全0 LCALLWRITE;发预置数据控制字 ;读取D通道转换结果,放在31H、30H RDDT:LCALLINTI;发复位脉冲并接收存在脉冲 MOVA,#0CCH LCALLWRITE;发"跳过ROM"命令 MOVA,#0AAH LCALLWRITE;发"读存储器"命令字 MOVA,#06H LCALLWRITE;发低8位地址 MOVA,#00H LCALLWRITE;发高8位地址 LCALLREAD MOV30H,A ;低位转换结果放在30H LCALLREAD MOV31H,A ;高位转换结果放在31H RET ……
如果一线上挂接多个DS2450和其他一线式接口芯片、采用寄生电源供电方式、工作在超速模式、通信中进行校验,则子程序CTLAD的编写就要复杂一些,限于篇幅,这一部分不再详述,请参阅文献[1][2]的相关内容。
| | | | |