色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用Proteus學(xué)習(xí)51單片機(jī)之AD轉(zhuǎn)換

          用Proteus學(xué)習(xí)51單片機(jī)之AD轉(zhuǎn)換

          作者: 時(shí)間:2017-01-24 來(lái)源:網(wǎng)絡(luò) 收藏

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

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

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

            VIN(+),VIN(-):待測(cè)量的模擬信號(hào)輸入

            DB0~DB7:測(cè)量結(jié)果輸出

            AGND:模擬信號(hào)地

            DGND:數(shù)字信號(hào)地

            CLK:時(shí)鐘信號(hào)輸入端

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

            CS:片選信號(hào),低電平有效

            WR:寫信號(hào)輸入,低電平啟動(dòng)A/D轉(zhuǎn)換

            RD:讀信號(hào)輸入,低電平有效

            INTR:A/D轉(zhuǎn)換結(jié)束信號(hào),低電平表示本次轉(zhuǎn)換已經(jīng)完成

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

            VCC:電源輸入

              

           

            關(guān)于時(shí)鐘:如果使用內(nèi)部時(shí)鐘的話,官方的建議是用10K電阻和150pF電容,如上圖;

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

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

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

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

              

           

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

            讀時(shí)序如下:

              

           

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

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

            1void main()

            {

            uchar val = 0;

            //允許AD芯片

            ad_cs = 0;

            while(1)

            {

            ad_write = 0;//WR腳置低

            _nop_();

            ad_write = 1;//WR腳置高,完成時(shí)序,轉(zhuǎn)換開始

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

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

            ad_read = 0;//RD腳置高

            _nop_();

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

            ad_read = 1;//RD腳置低

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

            }

            }

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

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

              

           

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

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

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



          關(guān)鍵詞: Proteus AD轉(zhuǎn)換

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉