AD數模轉化AD0809

數模轉化 AD0809

AD轉換就是模數轉換,就是把模擬信號轉換成數字信號。D/A轉換是把數字量轉變成模擬的器件。模擬信號只有通過A/D轉化爲數字信號後才能用軟件進行處理,這一切都是通過A/D轉換器(ADC)來實現的。與模數轉換相對應的是數模轉換,數模轉換是模數轉換的逆過程。
一、ad0809實例圖
在這裏插入圖片描述
(1)ADC0809 的內部邏輯結構
由下圖可知,ADC0809 由一個 8 路模擬開關、一個地址鎖存與譯碼器、一個 A/D 轉換器和一
個三態輸出鎖存器組成。多路開關可選通 8 個模擬通道,允許 8 路模擬量分時輸入,共用
A/D 轉換器進行轉換。三態輸出鎖器用於鎖存 A/D 轉換完的數字量,當 OE 端爲高電平時,纔可以從三態輸出鎖存器取走轉換完的數據。

在這裏插入圖片描述

AD性能指標:分辨率
分辨率是指輸入數字量的最低有效位(LSB)發生變化時,所對應的輸出模擬量(電壓或電流)的變化量。它反映了輸出模擬量的最小變化值。
分辨率與輸入數字量的位數有確定的關係,可以表示成FS /(2^n)。FS表示滿量程輸入值,n爲二進制位數。對於5V的滿量程,採用8位的DAC時,分辨率爲5V/256=19.5mV;當採用12位的DAC時,分辨率則爲5V/4096=1.22mV。顯然,位數越多分辨率就越高
二、AD各個引腳結構:

D7-D0:8 位數字量輸出引腳。
IN0-IN7:8 位模擬量輸入引腳。
VCC:+5V 工作電壓。
GND:地。
REF(+):參考電壓正端。
REF(-):參考電壓負端。
START:A/D 轉換啓動信號輸入端。
ALE:地址鎖存允許信號輸入端。
(以上兩種信號用於啓動 A/D 轉換).
EOC:轉換結束信號輸出引腳,開始轉換時爲低電平,當轉換結束時爲高電平。
OE:輸出允許控制端,用以打開三態數據輸出鎖存器。
CLK:時鐘信號輸入端(一般爲 500KHz)。
在這裏插入圖片描述

ALE 爲地址鎖存允許輸入線,高電平有效。當 ALE 線爲高電平時,地址鎖存與譯碼器將 A, B,C 三條地址線的地址信號進行鎖存,經譯碼後被選中的通道的模擬量進轉換器進行轉換。
A,B 和 C 爲地址輸入線,用於選通 IN0-IN7 上的一路模擬量輸入。
在這裏插入圖片描述

ST 爲轉換啓動信號。當 ST 上跳沿時,所有內部寄存器清零;下跳沿時,開始進行 A/D 轉換;在轉換期間,ST 應保持低電平。EOC 爲轉換結束信號。當 EOC 爲高電平時,表明轉換結束;
否則,表明正在進行 A/D 轉換。OE 爲輸出允許信號,用於控制三條輸出鎖存器向單片機輸出
轉換得到的數據。OE=1,輸出轉換得到的數據;OE=0,輸出數據線呈高阻狀態。D7-D0 爲
數字量輸出線。
CLK 爲時鐘輸入信號線。因 ADC0809 的內部沒有時鐘電路,所需時鐘信號必須由外界提供,通常
使用頻率爲 500KHZ,
VREF(+),VREF(-)爲參考電壓輸入
ADC0809 應用說明:
(1). ADC0809 內部帶有輸出鎖存器,可以與 AT89S51 單片機直接相連。
(2). 初始化時,使 ST 和 OE 信號全爲低電平。
(3). 送要轉換的哪一通道的地址到 A,B,C 端口上。
(4). 在 ST 端給出一個至少有 100ns 寬的正脈衝信號。
(5). 是否轉換完畢,我們根據 EOC 信號來判斷。
(6). 當 EOC 變爲高電平時,這時給 OE 爲高電平,轉換的數據就輸出給單片機了。
程序示例:

//ADC0809讀取信息
uchar ADC0809()
{
 uchar temp_=0x00;
 //初始化高阻太
 TMOD=0X01;     //定時器中斷0
 CLK=0;      //脈衝信號初始值爲0
 TH0=(65536-2)/256;   //定時時間高八位初值
 TL0=(65536-2)%256;   //定時時間低八位初值
 EA=1;      //開CPU中斷
 ET0=1;      //開T/C0中斷
 TR0=1;
 OE=0;
 //轉化初始化
 ST=0;
 //開始轉換
 ST=1;
 ST=0;
 //外部中斷等待AD轉換結束
 while(EOC==0)
 {
 //讀取轉換的AD值
 OE=1; 
 }
 temp_=Data_ADC0809;   //將P1的數據讀出到temp_
 OE=0; 
 return temp_;    //將數據返回
}
/*************************************************************************
                                CLK振盪信號 
**************************************************************************/
void timer0( ) interrupt 1 //定時器0工作方式1
{
TH0=(65536-2)/256;   //重裝計數初值
TL0=(65536-2)%256;   //重裝計數初值
CLK=!CLK;     //取反
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章