<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 基于A/D芯片AD1674設計的數(shù)據(jù)采集電路

          基于A/D芯片AD1674設計的數(shù)據(jù)采集電路

          作者: 時間:2008-07-11 來源:嵌入式技術網(wǎng) 收藏

            1.3.2 A/D轉(zhuǎn)換數(shù)據(jù)的讀取方式

          本文引用地址:http://www.ex-cimer.com/article/85599.htm

            在系統(tǒng)中,計算機讀取A/D轉(zhuǎn)換數(shù)據(jù)的方式一般有三種,即查詢、中斷和方式。其中查詢方式就是通過查詢標志位來判斷A/D是否轉(zhuǎn)換完畢,如果 A/D轉(zhuǎn)換完畢則讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式下CPU主動查詢,通過CPU讀取A/D轉(zhuǎn)換的數(shù)據(jù),故實現(xiàn)的硬件簡單,但數(shù)據(jù)讀取速度慢,同時在 WINDOWS的多任務執(zhí)行方式下,存在著A/D轉(zhuǎn)換數(shù)據(jù)不能及時讀入的問題。中斷方式是利用A/D轉(zhuǎn)換完畢的標志位觸發(fā)一硬中斷,然后中斷管理器向 CPU提出中斷申請。在中斷允許的情況下,執(zhí)行中斷服務程序讀入轉(zhuǎn)換的數(shù)據(jù)。這種方式實現(xiàn)的硬件也比較簡單,但中斷服務程序的介入,引起程序的斷點的不可預測性,這樣會導致程序的失控。方式利用A/D轉(zhuǎn)換完畢的標志位向控制器提出DMA申請,當DMA控制器從CPU取得總線控制權時,接口便與內(nèi)存之間直接地進行數(shù)據(jù)交換(不經(jīng)過CPU)。這種方式下,由于不經(jīng)過CPU讀入數(shù)據(jù),故提高了數(shù)據(jù)傳輸速度。同時由于A/D轉(zhuǎn)換器主動申請數(shù)據(jù)傳輸,而DMA申請比外設中斷申請的優(yōu)先級高,A/D轉(zhuǎn)換數(shù)據(jù)能夠及時讀入,系統(tǒng)性能也得到了提高,但實現(xiàn)的硬件較前兩種方式復雜。

            本電路設計有查詢、中斷和DMA三種數(shù)據(jù)傳輸方式。通過一撥碼盤開關來選擇不同的的傳輸方式。如圖3所示,當A/D轉(zhuǎn)換完畢時,標志位STS由高電平變?yōu)榈褪请娖?,從而引起D觸發(fā)器U20A觸發(fā),U20A的輸出Q由低電平變成高電平。當撥碼盤開關S1選擇為查詢方式時,該U20A的輸出Q通過一個三態(tài)門(端口地址為&0X23F)與數(shù)據(jù)線D6相連,提供計算機查詢;在中斷方式下,該U20A的輸出Q直接與硬中斷引腳IRQ2相連,當Q由低電平變成高電平時,引起計算機中斷。在前兩種方式下,通過軟件編程,向一鎖存器U22的最低位寫入0或1,選擇讀取A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位,且由專門的端口(地址為&0X23D)讀取A/D轉(zhuǎn)換的數(shù)據(jù)。實現(xiàn)的硬件電路簡單。而在DMA方式下,通過應答信號DACK1尋址,并不由專門的端口讀取A/D 轉(zhuǎn)換的數(shù)據(jù),故選擇A/D轉(zhuǎn)換數(shù)據(jù)的高八位或低四位的功能必須由硬件電路來實現(xiàn),比較而言,電路更復雜一些。

            下面介紹DMA方式下的具體實現(xiàn)電路。DMA請求電路由兩個D觸發(fā)器組成,當A/D轉(zhuǎn)換完畢時,U20A的輸出Q由低電平變成高電平,DRQ1=1, DMA通道1發(fā)出請求,DRQ1被認可后進行兩次DMA傳輸。在第一次DMA傳輸期間,觸發(fā)器U20B的輸出Q為低電平,A/D轉(zhuǎn)換數(shù)據(jù)的高八位傳輸?shù)街付▋?nèi)存單元。在第一次DMA傳輸結(jié)束時,DACK1由低電平變成高電平,觸發(fā)器U20B的輸出為高電平,但觸發(fā)器U20A的輸出Q仍然是高電平,該電平申請第二次DMA傳輸。在第二次DMA傳輸期間,觸發(fā)器U20B的輸出為高電平,A/D轉(zhuǎn)換數(shù)據(jù)的低四位傳輸?shù)街付ǖ膬?nèi)存單元。當?shù)诙蜠MA傳輸結(jié)束時, DACK1由低電平變成高電平,使觸發(fā)U20B輸出低電平,同時觸發(fā)器U20A的輸出Q變?yōu)榈碗娖?,DRQ1=0變?yōu)榈碗娖?,DRQ1=0,DMA通道1 的請求被撤銷,結(jié)束一次A/D轉(zhuǎn)換12位數(shù)據(jù)傳輸過程。

            2 軟件設計

            該接口電路支持各種帶有口指令操作的高級語言和8086/8088匯編語言。以下就以Turbo C為例對相應的部分編程,經(jīng)供參考。

            2.1 A/D編程

            該編程適合于中斷或查詢方式下的編程,端口地址=0x238~0x23f。

            outportb(0x23c,0x00); /*初始化清零*/

            outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準備*/

            {

            }; /*啟動A/D并檢查A/D是否轉(zhuǎn)換完畢*/

            dh=inportb(0x23d); /*輸入高八位數(shù)據(jù)*/

            outporth(0x23a,0x01); /*選擇傳輸?shù)退奈粩?shù)據(jù)*/

            dl=inportb(0x23d); /*輸入低四位數(shù)據(jù)*/

            outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準備*/

            dl=dl>>4;

            dh1=dh;

            dl=(dh1<<4)+dl;

            dh=dh>>4; /*將高八位低四位數(shù)據(jù)轉(zhuǎn)化為高四位低八位數(shù)據(jù)*/

            d=dh*256+dl; /*拼合12位數(shù)據(jù)*/

            u=(d-2047)*10.0/4096; /*轉(zhuǎn)換電壓值*/

            2.2 寫啟動和查詢方式的編程

            outportb(0x23d,0x00); /*寫啟動A/D轉(zhuǎn)換*/

            if(inporth(0x23e)&0x80);/*D7=1則A/D轉(zhuǎn)換完畢*/

            2.3 8253定時器編程

            outportb(0x23b,0x03); /*set 8253 timer into writing mode word state*/

            outportb(0x23f,0x36); /*set 0 channel working with mode 3*/

            outportb(0x23f,0x74); /*set 1 channel working with mode 2*/

            outportb(0x23b,0x00); /*set to write data to 0 Channel mode */

            outportb(0x23f,0x02); /*write low data to 0 channel*/

            outportb(0x23f,0x00); /*write high data to 0 channel*/

            outportb(0x23b,0x01); /*set to write data to 1 channel*/

            outportb(0x23f,LC1); /*write low data to 1 channel*/

            outportb(0x23f,HC1); /*write high data to 1 channel*/

            outportb(0x23b,0x0c); /*啟動CH0,CH1工作*/

            其中采樣頻率決寫入計數(shù)器1的計數(shù)值。

            2.4 DMA方式下PC主機中8237A DMA控制器編程

            8237A DMA控制器具有4個DMA通道,該接口電路使用通道1。

            outportb(0x0x,0x05); /*mask DMA channel 1*/

            outportb(0x0c,0x00); /*clear byet pointer flip*/

            outportb(0x0b,0x55); /*write mode word.demand mode,address tincrease,autoinitialization,write trasfer and select 1*/

            outportb(0x83,SEG); /*write page number*/

            outportb(0x02,LA); /*write low 8 bit address*/

            outportb(0x02,HA); /*write hige 8 bit address*/

            outportb(0x03,LC); /*write low 8 bit count data*/

            outportb(0x03,HC); /*write hige 8 bit count data*

            outportb(0x03,0x01); /*clear mask bit of DMA channel*/

            其中寫入11口的數(shù)值應按照具體的工作方式來確定,寫入131口的頁地址SEG取20位絕對地址的最高4位的數(shù)值,而將低16位地址的數(shù)值寫入地址寄存器。寫基值字節(jié)計數(shù)寄存器的字節(jié)總數(shù)值應為需要傳輸?shù)淖止?jié)數(shù)減1。

            2.5 中斷服務程序的編寫以有中斷向量的裝入

            void interrupt int9() /*中斷服務程序*/

            { disable();

            ah5=inportb(0x23d); /*輸入高八位數(shù)據(jù)*/

            outportb(0x23a,0x01); /*選擇傳輸?shù)退奈粩?shù)據(jù)*/

            dl5=inportb(0x23d); /*輸入低四位數(shù)據(jù)*/

            outportb(0x23a,0x00); /*選擇傳輸高8位數(shù)據(jù)并為A/D轉(zhuǎn)換作準備*/

            outportb(0x23c,0x00); /*A/D轉(zhuǎn)換完畢的標志位清零*/

            outportb(0x20,0x20);

            enable();

            }

            void stall 1(void interrupt(*faddr)())

            {

            disable();

            setvect(INT1,faddr); /*裝入中斷服務程序*/

            enable();

            }

            本文介紹一種基于AD1674設計的接口電路,該電路具有查詢、中斷和DMA三種數(shù)據(jù)傳輸功能,同時采用8253定時脈沖或端口寫兩種A/D啟動方式。其中 DMA方式實現(xiàn)了數(shù)據(jù)的快速傳輸,而兩種A/D啟動方式將會使采樣率的設定更加靈活。應用本文原理設計的可插入通用PC機的數(shù)據(jù)采集板已用于我們的高頻多譜勒和到達角探測分析系統(tǒng)中,取得了滿意的效果。這些設計方法和原理在其它實際數(shù)據(jù)采集系統(tǒng)的設計過程中,也會具有重要的參考價值。

          DIY機械鍵盤相關社區(qū):機械鍵盤DIY



          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();