一線式A/D轉換器DS2450的原理與應用
預置控制字可以對相應通道的轉換結果存儲器進行預置。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端串行讀寫數據位時的時序配合要求。
5DS2450與單片機的典型接口設計
圖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]的相關內容。
評論