新聞中心

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

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

        作者: 時間:2017-01-24 來源:網絡 收藏

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

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

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

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

          DB0~DB7:測量結果輸出

          AGND:模擬信號地

          DGND:數字信號地

          CLK:時鐘信號輸入端

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

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

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

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

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

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

          VCC:電源輸入

            

         

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

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

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

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

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

            

         

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

          讀時序如下:

            

         

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

          由于不管讀寫,都要使片選有效,即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;//先把數據端口全部置1,避免原先數據影響

          ad_read = 0;//RD腳置高

          _nop_();

          val = P1;//把數據存入臨時變量

          ad_read = 1;//RD腳置低

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

          }

          }

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

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

            

         

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

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

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



        關鍵詞: Proteus AD轉換

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 连平县| 云南省| 易门县| 永春县| 新晃| 光泽县| 金川县| 朔州市| 永吉县| 北流市| 石棉县| 兰西县| 铁力市| 靖宇县| 蚌埠市| 磐石市| 印江| 酉阳| 札达县| 江川县| 神木县| 赤水市| 海阳市| 城市| 浦北县| 上饶县| 区。| 鄢陵县| 本溪市| 商洛市| 瑞昌市| 彝良县| 双辽市| 绥宁县| 定西市| 五台县| 绥芬河市| 札达县| 景谷| 香港 | 元阳县|