當前位置:吉日网官网 - 傳統節日 - 單片機控制ADC的常用方法有哪些?

單片機控制ADC的常用方法有哪些?

1,ADC原理

ADC轉換器由前置濾波器、調制器、數字濾波器和梳狀濾波器組成,22?ADC的結構如圖1所示。它將輸入信號通過22?調制器量化成1bit的高速數據流,經過數字濾波和采樣後得到最終結果。d轉換,其原理和結構大相徑庭,以下是壹階22?調制器為例來說明22?ADC原理。

圖1 2-?ADC的結構

2.常用方法

ADC0809是壹款CMOS器件,內置8位模數轉換器、8路多路復用器和微處理器兼容型控制邏輯。它是壹種逐次逼近型A/D轉換器,可以直接與單片機接口。?

(1)ADC0809的內部邏輯結構

從下圖可以看出,ADC0809由壹個8通道模擬開關、壹個數據鎖存器和解碼器、壹個模數轉換器和壹個三態輸出鎖存器組成。多路開關可通過8路模擬通道,允許8路模擬分時輸入,* * *由A/D轉換器轉換。三態輸出鎖存器用於鎖存A/D轉換後的數字量,只有當OE端為高電平時,才能從三態輸出鎖存器中取出轉換後的數據。

(2).ADC 0809引腳結構

ADC0809各引腳的功能如下:

?D7-D0: 8位數字輸出引腳。

?In0-in7: 8位模擬輸入引腳。

?Vcc:+5v工作電壓。

?GND:地面。

?REF(+):參考電壓的正端。

?REF(-):參考電壓的負端。

?Start: a/d轉換開始信號輸入端子。

?ALE:數據鎖存允許信號輸入端子。

?上述兩個信號用於啟動A/D轉換。

?EOC:轉換結束信號的輸出引腳,轉換開始時為低電平,轉換結束時為高電平。

?OE:輸出使能控制端子用於打開三態數據輸出鎖存器。

?CLK:時鐘信號輸入(壹般500KHz)。

?a、b和c:地址輸入線。

ADC0809要求輸入模擬量:信號單極性,電壓範圍0-5V。如果信號太小,就必須放大;在轉換過程中,輸入模擬量應保持不變。如果模擬量變化太快,應在輸入前增加壹個采樣保持電路。?

?地址輸入和控制線:4。

ALE是數據鎖存使能輸入線,在高電平時有效。當ALE線為高電平時,數據鎖存和解碼器鎖存A、B、C三條地址線的地址信號,所選通道的模擬信號經解碼後轉換成轉換器。a、B和C是地址輸入線,用於選通IN0-IN7上的所有模擬輸入。頻道選擇表如下表所示。

數字輸出和控制線:11。

ST是轉換開始信號。當ST在邊沿跳變時,所有內部寄存器清零;邊沿跳變時,開始A/D轉換;轉換期間,ST應保持低電平。EOC是轉換信號的結束。當EOC為高電平時,表示轉換結束;否則,表示A/D轉換正在進行中。OE為輸出使能信號,用於控制三個輸出鎖存器將轉換後的數據輸出到單片機。OE = 1,輸出轉換後的數據;OE = 0,輸出數據線處於高阻態。D7-D0是數字輸出線。?

CLK是時鐘輸入信號線。由於ADC0809中沒有時鐘電路,所需的時鐘信號必須由外界提供,通常頻率為500KHZ。

Vref (+)和Vref (-)是基準電壓輸入。

2.ADC 0809應用說明?

(1).ADC 0809有壹個輸出鎖存器,可以直接與AT89S51單片機連接。

(2)初始化時,使ST和OE信號都為低電平。

(3)將待轉換通道的地址發送到端口A、B和C..?

(4)在st端給出壹個寬度至少為100ns的正脈沖信號。

(5)根據EOC信號判斷轉換是否完成。?

(6).當EOC變為高電平時,此時OE為高電平,轉換後的數據輸出到單片機。

3.實驗任務

如下圖所示,從ADC0809的通道IN3輸入0 ~ 0-5V之間的模擬量,通過ADC0809轉換成數字量,以十進制形式顯示在數碼管上。ADC0809的VREF連接到+5v。?

4.程序設計內容

(1).在A/D轉換過程中,通過查詢EOC的標誌信號來檢查A/D轉換是否完成。如果完成,通過P0口讀取數據,經過數據處理後顯示在數碼管上。

(2).A/D轉換前,如何開始轉換?

ABC = 110選擇第三個頻道。

ST = 0,ST = 1,ST = 0產生壹個正脈沖信號來啟動轉換。

c語言源程序

?#包括

?無符號字符代碼dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

?0xef,0xdf,0xbf,0x7f };

?無符號字符代碼dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

?0x6d、0x7d、0x07、0x7f、0x6f、0x 00 };

?無符號char dispbuf[8]={10,10,10,10,10,0,0,0 };

?無符號字符顯示計數;

sbit st="p3"^0;

?sbit oe="p3"^1;

?sbit eoc="p3"^2;

?unsigned char channel = " 0xbc//IN3

?無符號字符getdata

無效總管(無效)

?{

?TMOD = 0x 01;

?TH0 =(65536-4000)/256;

?TL0 =(65536-4000)% 256;

?TR0 = 1;

?ET0 = 1;

?EA = 1;

P3 =頻道;

while(1)

?{

?ST = 0;

?ST = 1;

?ST = 0;

?while(EOC = = 0);

?OE = 1;

?getdata = P0

?OE = 0;

?disp buf[2]= get data/100;

?get data = get data % 10;

?disp buf[1]= get data/10;

?disp buf[0]= get data % 10;

?}

?}

void t0(void)使用0中斷1

?{

?TH0 =(65536-4000)/256;

?TL0 =(65536-4000)% 256;

?p 1 = disp code[disp buf[disp count]];

?P2 = dispbitcode[disp count];

?disp count++;

?if(dispcount==8)

?{

?dispcount = 0;

?}

  • 上一篇:醫療終結證明怎麽開?
  • 下一篇:博羅歷史簡介
  • copyright 2024吉日网官网