教你如何來看單片機(jī)外設(shè)A/D轉(zhuǎn)換器ADC0804時(shí)序圖
如圖,為單片機(jī)AD轉(zhuǎn)換器的一種:
ADC0804單片集成A/D轉(zhuǎn)換器。它采用CMOS工藝20引腳集成芯片,分辯率為8位,轉(zhuǎn)換時(shí)間為100µs,輸入電壓范圍為0~5V。芯片內(nèi)具有三態(tài)輸出數(shù)據(jù)鎖存器,可直接接在數(shù)據(jù)總線上。
各引腳名稱及作用如下:
VIN(+),VIN(-)——兩模擬信號輸入端,用以接收單極性、雙極性和差模輸入信號。
DB7~DB0——具有三態(tài)特性數(shù)字信號輸出口。
AGND——模擬信號地。
DGND——數(shù)字信號地。
CLK——時(shí)鐘信號輸入端。
CLKR——內(nèi)部時(shí)鐘發(fā)生器的外接電阻端,與CLK端配合可由芯片自身產(chǎn)生時(shí)鐘脈沖,其頻率為1/(1.1RC)。
CS#---片選信號輸入端,低電平有效,一旦CS#有效,表明A/D轉(zhuǎn)換器被選中,可啟動工作。
WR#---寫信號輸入,低電平啟動A/D轉(zhuǎn)換。
RD#---讀信號輸入,低電平輸出端有效。
INTR#---A/D轉(zhuǎn)換結(jié)束信號,低電平有效表示本次轉(zhuǎn)換已完成。
VREF/2---參考電平輸入,決定量化單位。
VCC---芯片電源5V輸入。
打開ADC0804的數(shù)據(jù)手冊,我們可以看到以下典型的電路接法:
我們可以用仿真軟件畫出來:
接下來,我們分析一下上圖的工作原理:
①ADC0804的片選端CS連接U2鎖存哭的Q7輸出端,我們可通過控制鎖存器來控制CS,這樣接的原因是TX-1C實(shí)驗(yàn)板擴(kuò)展的外圍太多,沒有多余的I/O口獨(dú)立控制ADC0804的CS端,所以選擇U2。
② VIN(+)接電位器的中間滑動端,VIN(-)接地,因?yàn)檫@兩端可以輸入差分電壓,即它可測量VIN(+)與VIN(-)之間的電壓,當(dāng)VIN(-)接地時(shí),VIN(+)端的電壓即為ADC0804的模擬輸入電壓。VIN(+)與電位器之間串聯(lián)一個(gè)10kΩ電阻,目的是限制流入VIN(+)端的電流,防止電流過大而燒壞A/D芯片,當(dāng)用短路帽短接插針ADIN后,電位器的中間滑動端便通過電阻R12與VIN(+)連接,此時(shí)調(diào)節(jié)電位器的旋鈕,其中間滑動端的電壓便在0~VCC變化,進(jìn)而ADC0804的數(shù)字輸出端也在0x00~0xFF變化。
③ CLKR,CLR,GND之間用電阻和電容組成RC振蕩電路,用來給ADC0804提供工作所需的脈沖,其脈沖的頻率為1/(1.1RC),按芯片手冊上說明,R取10kΩ,C取150pF,TX-1C實(shí)驗(yàn)板上為了減少元件種類和焊接方便,C選用的是104磁片電容。大家在設(shè)計(jì)自己的電路時(shí),可選擇150pF電容,否則會影響A/D的轉(zhuǎn)換速率。
④ VREF/2端用兩個(gè)1kΩ的電阻分壓得到VCC/2電壓,即2.5V,將該電壓作為A/D芯片工作時(shí)內(nèi)部的參考電壓。
⑤WR#、 RD#分別接單片機(jī)的P3.6和P3.7引腳,數(shù)字輸出端接單片機(jī)的P1口。
⑥ 將AGND和DGND同時(shí)連接到實(shí)驗(yàn)板的GND上。我們在設(shè)計(jì)產(chǎn)品時(shí),若用到A/D和D/A,一般這些芯片都提供獨(dú)立的模擬地(AGND)和數(shù)字地(DGND)引腳,為了達(dá)到精度高,穩(wěn)定性好的目的,最好將所有器件的模擬地和數(shù)字地分別連接,最后將模擬地與數(shù)字地僅在一點(diǎn)連接。
⑦ INTR#引腳未連接,TX-1C實(shí)驗(yàn)板上讀取A/D數(shù)據(jù)未用中斷法,因此可不接該引腳。數(shù)字芯片在操作時(shí)首先要分析它的操作時(shí)序圖,圖4.4.6是ADC0804的啟動轉(zhuǎn)換時(shí)序圖。
ADC0804轉(zhuǎn)換時(shí)序圖:
分析圖4.4.6可知,CS先為低電平,WR#隨后置低,經(jīng)過至少tW(WR#)L時(shí)間后,WR#拉高,隨后A/D轉(zhuǎn)換器被啟動,并且在經(jīng)過(1~8個(gè)A/D時(shí)鐘周期+內(nèi)部TC)時(shí)間后,模/數(shù)完成轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入數(shù)據(jù)鎖存器,同時(shí)INTR自動變?yōu)榈碗娖剑ㄖ獑纹瑱C(jī)本次轉(zhuǎn)換已結(jié)束。關(guān)于幾個(gè)時(shí)間的大小在芯片手冊中都有說明。
我在寫單片機(jī)程序啟動A/D轉(zhuǎn)換時(shí)就要遵循上面的時(shí)序,由于TX-1C實(shí)驗(yàn)板未用中斷讀取A/D數(shù)據(jù),因此我們在啟動A/D轉(zhuǎn)換后,稍等一會兒時(shí)間,然后直接讀取A/D的數(shù)字輸出口即可。讀取結(jié)束啟動一次A/D轉(zhuǎn)換,如此循環(huán)下去。力4.4.7是ADC0804讀取數(shù)據(jù)時(shí)序圖。
分析上圖可知,CS先為低電平,WR#隨后置低,經(jīng)過至少tW(WR#)L時(shí)間后,WR#拉高,隨后A/D轉(zhuǎn)換器被啟動,并且在經(jīng)過(1~8個(gè)A/D時(shí)鐘周期+內(nèi)部TC)時(shí)間后,模/數(shù)完成轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入數(shù)據(jù)鎖存器,同時(shí)INTR自動變?yōu)榈碗娖?,通知單片機(jī)本次轉(zhuǎn)換已結(jié)束。關(guān)于幾個(gè)時(shí)間的大小在芯片手冊中都有說明。
我在寫單片機(jī)程序啟動A/D轉(zhuǎn)換時(shí)就要遵循上面的時(shí)序,由于TX-1C實(shí)驗(yàn)板未用中斷讀取A/D數(shù)據(jù),因此我們在啟動A/D轉(zhuǎn)換后,稍等一會兒時(shí)間,然后直接讀取A/D的數(shù)字輸出口即可。讀取結(jié)束啟動一次A/D轉(zhuǎn)換,如此循環(huán)下去。力下圖是ADC0804讀取數(shù)據(jù)時(shí)序圖。
分析上圖可知,當(dāng)INTR#變?yōu)榈碗娖胶螅瑢S#先置低,在RD#置低至少經(jīng)過tACC時(shí)間后,數(shù)字輸出口上的數(shù)據(jù)達(dá)到穩(wěn)定狀態(tài),此時(shí)直接讀取數(shù)字輸出端口數(shù)據(jù)便可得的數(shù)字信號,讀走數(shù)據(jù)后,馬上將RD#拉高,然后再將CS#拉高,INTR#是自動變化的,當(dāng)RD#置低tR1時(shí)間后,INTR#自動拉高,我們不必人為去干涉。
圖4.4.6和圖4.4.7是ADC0804啟動轉(zhuǎn)換和讀取數(shù)據(jù)的時(shí)序圖,這是啟動一次和讀取一次數(shù)據(jù)的時(shí)序圖,當(dāng)我們要連續(xù)轉(zhuǎn)換并且連續(xù)讀取數(shù)據(jù)時(shí),有沒有必要每次都把CS#置低再位高,因?yàn)镃S#是片選信號,置低表示該芯片可被操作或處于能夠正常工作狀態(tài),所以在寫程序時(shí),只要一開始將CS#置低,以后當(dāng)要啟動轉(zhuǎn)換和讀取數(shù)據(jù)時(shí)只需操作WR#和RD#即可。
編輯:admin 最后修改時(shí)間:2018-05-18