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

          新聞中心

          EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > MAXQ3120中模數(shù)轉(zhuǎn)換器在輪詢模式下的使用

          MAXQ3120中模數(shù)轉(zhuǎn)換器在輪詢模式下的使用

          ——
          作者: 時(shí)間:2007-01-26 來源:《Maxim公司》 收藏

          在設(shè)置中斷優(yōu)先級(jí)比較麻煩或者中斷固有的不可預(yù)測(cè)性不好處理的應(yīng)用中,模數(shù)轉(zhuǎn)換器(adc)工作在輪詢模式下要比工作在中斷驅(qū)動(dòng)模式下更適合。本應(yīng)用筆記詳細(xì)論述了maxq3120微控制器的16位σ-δ adc工作在輪詢模式下時(shí)需要注意的一些事項(xiàng)。用匯編語(yǔ)言源代碼演示了輪詢模式的實(shí)現(xiàn)方法。

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

          概述

          maxq3120是第一款集成了雙通道、16位σ-δ模數(shù)轉(zhuǎn)換器(adc) (圖1)的maxq微控制器。該adc使這款微控制器尤其適用于單相電表,同時(shí)也適用于任何需要高精度模數(shù)轉(zhuǎn)換的應(yīng)用場(chǎng)合。對(duì)于設(shè)置中斷優(yōu)先級(jí)比較麻煩或者中斷固有的不可預(yù)測(cè)性不好處理的應(yīng)用,adc最好工作在輪詢模式下而不是中斷驅(qū)動(dòng)模式下。

          圖1. adc功能框圖 該應(yīng)用筆記闡述了maxq3120的adc工作在輪詢模式下時(shí)的使用情況,并討論了編程注意事項(xiàng)。給出了adc的一個(gè)特定代碼實(shí)例。對(duì)maxq3120乘法-累加器(mac)的用法和lcd驅(qū)動(dòng)器性能也進(jìn)行了說明。在這個(gè)實(shí)例中,mac完成adc輸出的簡(jiǎn)單求和(和隨后的求平均值運(yùn)算),并由lcd顯示平均轉(zhuǎn)換結(jié)果。

          本文所給出的代碼實(shí)例是針對(duì)maxq3120編寫并經(jīng)過測(cè)試的,但也可以在包含相似資源的其他相關(guān)maxq器件上運(yùn)行。該例程代碼的整個(gè)開發(fā)環(huán)境采用max-ide 1.0版本和maxq3120評(píng)估板硬件版本b。


          編程注意事項(xiàng)

          當(dāng)maxq3120的adc工作在輪詢模式下時(shí),軟件設(shè)計(jì)應(yīng)考慮轉(zhuǎn)換器的以下幾個(gè)特性:第一,設(shè)計(jì)者必須了解adc控制寄存器(adcn)中各個(gè)位的意義和用法。表1列出了該寄存器的各個(gè)位,每一位的功能說明如表2所示。當(dāng)一個(gè)adc輸出值準(zhǔn)備就緒時(shí),硬件將asr1或asr0位置1。此時(shí)軟件可以從adc的輸出寄存器(ad1或ad0)中讀取一個(gè)帶符號(hào)的16位數(shù)值。如果在讀輸出寄存器之前完成了多次轉(zhuǎn)換,那么新的轉(zhuǎn)換結(jié)果不寫入輸出寄存器。采樣丟失位asl1或asl0置位,并舍棄這些轉(zhuǎn)換結(jié)果。在附帶的軟件(參見下面的實(shí)例代碼部分)中,每次讀輸出寄存器之前都要測(cè)試asr0位的狀態(tài)。在本文這種情況下,輸出是否溢出并不重要。因此忽略了采樣丟失位的狀態(tài)。同時(shí),增益設(shè)置為1,由內(nèi)部帶隙提供基準(zhǔn)電壓,在該實(shí)例中僅使能了一個(gè)模數(shù)轉(zhuǎn)換通道(0)。



          軟件中另一個(gè)需考慮的問題是adc中各種不同模塊的建立時(shí)間。調(diào)制器、sinc3濾波器和基準(zhǔn)帶隙緩沖器都存在建立時(shí)間。通過在程序的開始階段啟動(dòng)adc,并允許其連續(xù)運(yùn)行,可以使這些建立時(shí)間只出現(xiàn)一次。軟件實(shí)例中包含一個(gè)大約1s的軟件循環(huán)延時(shí)(基于8mhz時(shí)鐘),可以減慢程序循環(huán)以及隨后的顯示刷新操作。adc啟動(dòng)之后也加入了這一延時(shí),從而給各模塊提供了建立時(shí)間。當(dāng)然這一延時(shí)比所需要的建立時(shí)間長(zhǎng)的多(具體規(guī)格參見maxq3120數(shù)據(jù)資料),采用這種代碼延時(shí)只是為了實(shí)現(xiàn)更加簡(jiǎn)單。

          maxq3120包含一個(gè)可以在一個(gè)時(shí)鐘內(nèi)實(shí)現(xiàn)16位 x 16位字mac功能的硬件模塊。該性能可與許多數(shù)字信號(hào)處理器相媲美,使得maxq3120能夠快速執(zhí)行數(shù)學(xué)計(jì)算。本應(yīng)用不需要快速數(shù)學(xué)計(jì)算功能,但mac幫助計(jì)算adc輸出的平均值,以平滑輸出結(jié)果并使顯示的數(shù)值變化更緩慢一些。為了得到這個(gè)平均值,一個(gè)乘數(shù)取為1,將16個(gè)16位轉(zhuǎn)換結(jié)果傳送給mac。這16個(gè)數(shù)據(jù)字的總和存放在累加器中。在完成求和運(yùn)算后,該結(jié)果除以16 (移位和相加)來計(jì)算平均值。這個(gè)平均值送到lcd上進(jìn)行顯示。有關(guān)mac性能的詳細(xì)說明參見maxq微控制器用戶指南。


          實(shí)例代碼

          和本應(yīng)用筆記配套的軟件包含在adc_polled.zip文件中,可以進(jìn)行下載。該文件包括:源代碼文件adc_polled.asm,my3120kit_lcd.asm,maxq_math.asm;包含文件maxq3120x.inc;以及max-ide工程文件adc_polled.prj。將這些文件解壓到一個(gè)公用目錄下,對(duì)該軟件進(jìn)行匯編并在maxq3120評(píng)估板上執(zhí)行。
          給maxq3120的adc輸入施加一個(gè)變化的電壓,然后觀察lcd上的顯示結(jié)果,該應(yīng)用非常有用并能提供更多的信息。用一個(gè)定值電阻和一個(gè)電位器可產(chǎn)生范圍合適的可變電壓。該電路的元件連接原理圖見圖2。maxq3120評(píng)估板在db-9串行連接器附近提供了一小塊原型區(qū)域。原型區(qū)域邊沿還具有連接avcc和agnd走線的過孔。加入這一簡(jiǎn)單電路后,可在模擬通道0輸入端(an0+)施加0至0.823v電壓(最大值接近1v)。如原理圖所示,an0-輸入接agnd,以提供一個(gè)參考電平。


          圖2. 產(chǎn)生adc輸入的分壓器電路原理圖 結(jié)束語(yǔ)

          maxq3120微控制器包括一個(gè)雙通道、16位σ-δ adc,可用于所有需要高精度模數(shù)轉(zhuǎn)換的系統(tǒng)中。該應(yīng)用筆記講述了工作在輪詢模式下時(shí)需要考慮的一些adc特性。實(shí)例代碼演示了如何在輪詢模式下使用adc。實(shí)例代碼還演示了包括mac硬件和直接lcd驅(qū)動(dòng)性能在內(nèi)的其他maxq3120特性。maxq3120評(píng)估板作為該軟件的平臺(tái)。通過加入由兩個(gè)常見元件組成的電路,用戶可將一個(gè)可變電壓加到adc輸入端,并觀察評(píng)估板上lcd的顯示結(jié)果。


          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();