在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用Proteus學習51單片機之AD轉換

            用Proteus學習51單片機之AD轉換

            作者: 時間:2017-01-24 來源:網(wǎng)絡 收藏

              現(xiàn)實中的很多量,都是模擬量,如溫度,壓力等,單片機要去了解它們,首先就要把這些量進行數(shù)字化,即把模擬量轉變?yōu)閿?shù)字量。這次書上介紹的AD芯片為ADC0804,8位并行芯片。關于的詳細原理,我就不抄了,網(wǎng)上有的是。

            本文引用地址:http://www.biyoush.com/article/201701/343313.htm

              ADC0804的使用,比前面用過的鎖存器74LS573難用得多,主要是讀寫數(shù)據(jù)都要根據(jù)時序圖,進行電位的變化,而且芯片的接法也相對麻煩一點。下面記錄一下引腳定義:

              VIN(+),VIN(-):待測量的模擬信號輸入

              DB0~DB7:測量結果輸出

              AGND:模擬信號地

              DGND:數(shù)字信號地

              CLK:時鐘信號輸入端

              CLKR:內部時鐘發(fā)生器的外接電阻端,與CLK端配合可由芯片自身產(chǎn)生時鐘脈沖,其頻率為1/(1.1RC)

              CS:片選信號,低電平有效

              WR:寫信號輸入,低電平啟動A/D轉換

              RD:讀信號輸入,低電平有效

              INTR:A/D轉換結束信號,低電平表示本次轉換已經(jīng)完成

              VREF/2:參考電平輸入,決定量化單位(可以調節(jié)該電平,調節(jié)最終準確度)

              VCC:電源輸入

                

             

              關于時鐘:如果使用內部時鐘的話,官方的建議是用10K電阻和150pF電容,如上圖;

              模擬地和數(shù)字地一般直接接地即可。參考電平在2.5V左右,我試了一下,調到2.55的時候比較準確。關于待測量的模擬信號,如電壓,可以向上圖一樣連接,負直接接地即可。

              這里沒有用到INTR,即沒用中斷,而是直接用延時的方法,等待A/D轉換完成后,讀取DB0~DB7的值。

              --------------------------------------------------------------------

              讀寫芯片都要根據(jù)芯片的時序來,其寫時序如下:

                

             

              可以看到,首先要使片選信號置低電平,然后寫信號下降,上升后,芯片開始A/D轉換,轉換完成后INTR置低電平通知已經(jīng)完成。

              讀時序如下:

                

             

              可以看到,轉換完成后,選使片選有效,然后使讀引腳下降,再上升,即可讀取數(shù)據(jù)。

              由于不管讀寫,都要使片選有效,即CS腳置低,所以CS腳置一次低就可以了。

              1void main()

              {

              uchar val = 0;

              //允許AD芯片

              ad_cs = 0;

              while(1)

              {

              ad_write = 0;//WR腳置低

              _nop_();

              ad_write = 1;//WR腳置高,完成時序,轉換開始

              delay(50);//稍等后轉換會完成,由于沒用中斷,所以采用延時50毫秒

              P1 = 0xff;//先把數(shù)據(jù)端口全部置1,避免原先數(shù)據(jù)影響

              ad_read = 0;//RD腳置高

              _nop_();

              val = P1;//把數(shù)據(jù)存入臨時變量

              ad_read = 1;//RD腳置低

              show((val>>4)*0.32 + (val&0x0f)*0.02);//根據(jù)換算規(guī)則,把數(shù)據(jù)換算成實際電壓

              }

              }

              換算的規(guī)則是,8位數(shù)據(jù)的高四位,相當于每單位0.32V,低四位,相當于每單位0.02V,所以總電壓就是:

              (val>>4)*0.32 + (val&0x0f)*0.02)

                

             

              這次沒有使用中斷,直接采用延時讀取,實在是有些不爽,有時間的話,把程序改一下,改成使用中斷通知的。

              --------------------------------------------------------------

              嘗試了一下,完成了由中斷實現(xiàn)的A/D轉換,不再需要時刻去檢驗了,提高了程序的運行效率。原理圖需要稍微改一下,由于用到了外部中斷0,即P3.2腳,而這個腳本來連接到了ADC0804的片選引腳,所以要把片選改到P3.5,然后把芯片的INTR連接到P3.2腳才能引發(fā)中斷。具體請下載查看。



            關鍵詞: Proteus AD轉換

            評論


            相關推薦

            技術專區(qū)

            關閉