專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

ADC0809模數(shù)轉(zhuǎn)換器的使用詳解與程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2010年06月12日   【字體:

 帶我們的王老師剛評上碩導(dǎo)了,下學(xué)期開始帶研究生了。
  從他那里了解到每做一次實驗或者實踐,應(yīng)該把它用規(guī)范的格式記錄下來,一來自己可以日后查看,二來同學(xué)間可以相互交流,共通過進(jìn)步,甚為必要。現(xiàn)將本次實驗記錄如下。
  實驗
名稱:根據(jù)光強(qiáng)控制外圍器件的通斷。
  實驗原理;使用AD芯片將太陽能電池產(chǎn)生的光生伏打電壓轉(zhuǎn)化為數(shù)字信號,再通過單片機(jī)處理后,在數(shù)碼管上顯示電壓,同時根據(jù)設(shè)定電壓伐值,控制外圍器件的通斷。
  實驗所需的設(shè)備:51單片機(jī)燒寫器一個,電腦一臺,數(shù)字式示波器一個,數(shù)字式萬用表一個
  實驗所需的元件:太陽能電池一片,單片機(jī)一片,1k排阻一個,四位連體的數(shù)碼管一個,排針若干排,導(dǎo)線,萬用版一塊,焊錫。
  實驗前的理論準(zhǔn)備;能熟練使用51單片機(jī),示波器,keil軟件,isp下載軟件,看懂AD0809的英文pdf說明
  實驗的難點:難點一就是AD0809芯片的使用。
難點二就是將AD0809產(chǎn)生的0~256的數(shù)字換算成0~5.000的精確度,而又不至于溢出出錯。
難點三就是以上的理論準(zhǔn)備全部系自學(xué),呵呵
下面著重說明AD0809的使用難點。

  ADC0809是采樣頻率為8位的、以逐次逼近原理進(jìn)行模—數(shù)轉(zhuǎn)換的器件。其內(nèi)部有一個8通道多路開關(guān),它可以根據(jù)地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進(jìn)行A/D轉(zhuǎn)換。
  1.主要特性
  1)8路8位A/D轉(zhuǎn)換器,即分辨率8位。
  2)具有轉(zhuǎn)換起停控制端。
  3)轉(zhuǎn)換時間為100μs
  4)單個+5V電源供電
  5)模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準(zhǔn)。
  6)工作溫度范圍為-40~+85攝氏度
  7)低功耗,約15mW。
  2.內(nèi)部結(jié)構(gòu)
  ADC0809是CMOS單片型逐次逼近式A/D轉(zhuǎn)換器,內(nèi)部結(jié)構(gòu)如圖13.22所示,它由8路模擬開關(guān)、地址鎖存與譯碼器、比較器、8位開關(guān)樹型D/A轉(zhuǎn)換器、逐次逼近
  3.外部特性(引腳功能)
  ADC0809芯片有28條引腳,采用雙列直插式封裝,如圖13.23所示。下面說明各引腳功能。
  IN0~I(xiàn)N7:8路模擬量輸入端。
  2-1~2-8:8位數(shù)字量輸出端。
  ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路
  ALE:地址鎖存允許信號,輸入,高電平有效。
  START: A/D轉(zhuǎn)換啟動信號,輸入,高電平有效。
  EOC: A/D轉(zhuǎn)換結(jié)束信號,輸出,當(dāng)A/D轉(zhuǎn)換結(jié)束時,此端輸出一個高電平(轉(zhuǎn)換期間一直為低電平)。
  OE:數(shù)據(jù)輸出允許信號,輸入,高電平有效。當(dāng)A/D轉(zhuǎn)換結(jié)束時,此端輸入一個高電平,才能打開輸出三態(tài)門,輸出數(shù)字量。
  CLK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHZ。
  REF(+)、REF(-):基準(zhǔn)電壓。
  Vcc:電源,單一+5V。
  GND:地。
  ADC0809的工作過程是:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此 地址經(jīng)譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復(fù)位。下降沿啟動 A/D轉(zhuǎn)換,之后EOC輸出信號變低,指示轉(zhuǎn)換正在進(jìn)行。直到A/D轉(zhuǎn)換完成,EOC變?yōu)楦唠娖,指示A/D轉(zhuǎn)換結(jié)束,結(jié)果數(shù)據(jù)已存入鎖存器,這個信號可 用作中斷申請。當(dāng)OE輸入高電平 時,輸出三態(tài)門打開,轉(zhuǎn)換結(jié)果的數(shù)字量輸出到數(shù)據(jù)總線上。
 

  值得一提的是,我按照上面電路,把AD的ABC三腳共同接接地時,AD0809088始終輸出高電平,最后當(dāng)我把BC共同接地,在程序中給A一個0,則AD0809正常運行,有輸出,并且發(fā)現(xiàn)當(dāng)所給的時鐘頻率越低,最高精度的那位輸出越穩(wěn)定,具體參數(shù)范圍從芯片資料里有詳細(xì)介紹,不過十全英文,專業(yè)詞匯哦。哈哈
  現(xiàn)將程序記錄如下:
 完整的程序從這里下載: http://www.torrancerestoration.com/ziliao/file/0809c51x.rar

 
#include< reg52.h> 
#define uint unsigned int 
#define uchar unsigned char 
uchar aa,qian,bai,shi,ge; 
uint temp; 
sbit clock=P2^0; 
sbit start=P2^1; 
sbit eoc=P2^2; 
sbit oe=P2^3; 
sbit ale=P2^4; 
sbit adda=P2^5; 
uchar code table[]={ 

0x3f,0x06,0x5b,0x4f, 
0x66,0x6d,0x7d,0x07, 
0x7f,0x6f,0x77,0x7c, 
0x39,0x5e,0x79,0x71 
}; 
//void display(uchar bai,uchar shi,uchar ge); 
void delay(uint z); 
void main() 
{ 
    TMOD=0x20;  //設(shè)置定時器1為工作方式2 
    TH1=0x216;    //216 
    TL1=0x216;    //216 
    EA=1;       //開總中斷 
    ET1=1;        //開t1中斷 
    TR1=1;         
    start=0;    //復(fù)位 
    oe=0;         //輸出 
    adda=0; 
    //eoc=0; 
    ale=0;           //關(guān)閉地址選擇 
    while(1) 
    { 
         
        start=0; 
        ///delay(10); 
        start=1;     //        復(fù)位 
        ale=1;           //     打開地址選擇 
        adda=0; 
        ///delay(10); 
     
        start=0;         //     開始轉(zhuǎn)換 
        ale=0;             //      關(guān)地址 
        //delay(1);     
        while(eoc==0);         //       等待eoc變?yōu)? 
        //delay(1); 
        oe=1;             //       打開輸出 
        //delay(1); 
        //P1=0xff; 
         
        temp=P1;             //      取p1到p3 
        oe=0;             //      關(guān)輸出 
         

  temp=temp*50; 
  temp=temp/256; 
   
  qian=temp/1000; 
  bai=temp%1000/100; 
  shi=temp%100/10; 
  ge=temp%10; 
   
  P3=0x00; 
  P0=0xfe; 
  P3=table[qian]; 
  delay(50); 
  P3=0x00; 
  P0=0xfd; 
  P3=table[bai]; 
  delay(50); 
  P3=0x00; 
  P0=0xfb; 
  P3=table[shi]; 
  delay(50); 
  P3=0x00; 
  P0=0xf7; 
  P3=table[ge]; 
  } 
} 
void delay(uint z) 
{ 
    uint x,y; 
    for(x=z;x>0;x--) 
        for(y=1;y>0;y--); 
} 
void cl() interrupt 3 
{ 
    clock=!clock; 
}  
  
關(guān)閉窗口

相關(guān)文章