- ADC0832的引腳及其功能,以及與單片機的硬件連接?
引言: 數字電壓表的基本工作原理是利用A/D轉換電路將待測的模擬信號轉換成數字信號,通過相應換算后將測試結果以數字形式顯示出來的一種電壓表。較之于一般的模擬電壓表,數字電壓表具有精度高、測量準確、讀數直觀、使用方便等優點。數字電壓表的核心部件是A/D轉換器,由于各種不同的A/D轉換原理構成了各種不同類型的DVM。一般說來,A/D轉換的方式可分為兩類:積分式和逐次逼近式。 積分式A/D轉換器是先用積分器將輸入的模擬電壓轉換成時間或頻率,再將其數字化。根據轉化的中間量不同,它又分為U-T(電壓-時間)式和U-F(電壓-頻率)式兩種。 逐次逼近式A/D轉換器分為比較式和斜坡電壓式,根據不同的工作原理,比較式又分為逐次比較式及零平衡式等。斜坡電壓式又分為線性斜坡式和階梯斜坡式兩種。 在高精度數字電壓表中,常采用由積分式和比較式相結合起來的復合式A/D轉換器。本設計以AT89C51單片機為核心,以逐次比較型A/D轉換器ADC0808、液晶顯示器LCD1602為主體,構造了一款簡易的數字電壓表,能夠測量1路0~5V直流電壓,最小分辨率0.02V。 6.2基于LCD1602和ADC0808設計的數字電壓表 逐次逼近型A/D轉換器屬于直接型A/D轉換器,它能把輸入的模擬電壓直接轉換為輸出的數字代碼,而不需要經過中間變量。主要由比較器、環形分配器、控制門、寄存器與D/A轉換器組成。 6.2.1 ADC0808簡介 1、主要技術指標和特性 (1)分辨率: 8位。 (2)總的不可調誤差: ADC0808為± LSB,ADC 0809為±1LSB。 (3)轉換時間: 取決于芯片時鐘頻率,如CLK=500kHz時,TCONV=128μs。 (4)單一電源: +5V。 (5)模擬輸入電壓范圍: 單極性0~5V;雙極性±5V,±10V(需外加一定電路)。 (6)具有可控三態輸出緩存器。 (7)啟動轉換控制為脈沖式(正脈沖),上升沿使所有內部寄存器清零,下降沿使A/D轉換開始。 (8)使用時不需進行零點和滿刻度調節。 2、ADC0808引腳功能 圖6-2-1 ADC0808引腳圖 (1)IN0~IN7——8路模擬輸入,通過3根地址譯碼線ADDA、ADDB、ADDC來選通一路。 (2)D7~D0——A/D轉換后的數據輸出端,為三態可控輸出,故可直接和微處理器數據線連接。8位排列順序是D7為最高位,D0為最低位。 (3)ADDA、ADDB、ADDC——模擬通道選擇地址信號,ADDA為低位,ADDC為高位。地址信號與選中通道對應關系如表11.3所示。 (4)VR(+)、VR(-)——正、負參考電壓輸入端,用于提供片內DAC電阻網絡的基準電壓。在單極性輸入時,VR(+)=5V,VR(-)=0V;雙極性輸入時,VR(+)、VR(-)分別接正、負極性的參考電壓。 表6-1-1 地址信號與選中通道的關系
(5)ALE——地址鎖存允許信號,高電平有效。當此信號有效時,A、B、C三位地址信號被鎖存,譯碼選通對應模擬通道。在使用時,該信號常和START信號連在一起,以便同時鎖存通道地址和啟動A/D轉換。 (6)START——A/D轉換啟動信號,正脈沖有效。加于該端的脈沖的上升沿使逐次逼近寄存器清零,下降沿開始A/D轉換。如正在進行轉換時又接到新的啟動脈沖,則原來的轉換進程被中止,重新從頭開始轉換。 (7)EOC——轉換結束信號,高電平有效。該信號在A/D轉換過程中為低電平,其余時間為高電平。該信號可作為被CPU查詢的狀態信號,也可作為對CPU的中斷請求信號。在需要對某個模擬量不斷采樣、轉換的情況下,EOC也可作為啟動信號反饋接到START端,但在剛加電時需由外電路第一次啟動。 (8)OE——輸出允許信號,高電平有效。當微處理器送出該信號時,ADC0808/0809的輸出三態門被打開,使轉換結果通過數據總線被讀走。在中斷工作方式下,該信號往往是CPU發出的中斷請求響應信號。 3、ADC0808內部結構圖 逐次逼近型A/D轉換器ADC0808由八路模擬開關、地址鎖存與譯碼器、比較器、D/A轉換器、寄存器、控制電路和三態輸出鎖存器等組成。其內部結構如圖4所示。 
圖6-2-2 ADC0808內部結構 4、工作時序與使用說明 圖6-2-3 ADC0808工作時序 ADC 0808/0809的工作時序如圖11.21所示。當通道選擇地址有效時,ALE信號一出現,地址便馬上被鎖存,這時轉換啟動信號緊隨ALE之后(或與ALE同時)出現。START的上升沿將逐次逼近寄存器SAR復位,在該上升沿之后的2μs加8個時鐘周期內(不定),EOC信號將變低電平,以指示轉換操作正在進行中,直到轉換完成后EOC再變高電平。微處理器收到變為高電平的EOC信號后,便立即送出OE信號,打開三態門,讀取轉換結果。 6.2.2 系統硬件設計 從以上分析可知。ADC0808有8個模擬通道,本文的模擬量從0通道輸入,由ADC0808的模擬通道地址表可知,電路中應當把ADDC、ADDB、ADDA三個引腳全部接地。 根據ADC0808的工作時序圖可知,START引腳在一個高電平后啟動A/D轉換,當EOC引腳出現一個低電平時轉換結束,然后由OE引腳控制,從并行輸出端讀取一個字節的轉換結果。轉換后的結果為0x00-0xFF,轉換過程中芯片所需的時鐘信號由單片機定時器中斷子程序提供。具體硬件結構圖如圖6-2-4所示: 圖6-2-4 系統硬件連接圖 6.2.3 系統軟件設計 根據需要,可將系統軟件按照功能劃分為4個模塊,分別是主程序模塊、A/D轉換模塊、液晶顯示模塊、中斷服務程序模塊(改變顯示的小數點位置)。編寫系統軟件時,可首先編寫各模塊的底層驅動程序,而后是系統聯機調試,最后編寫上層主程序。 1、 主程序設計 主程序主要負責初始化工作:設置定時器、寄存器的初值,啟動A/D轉換,讀取轉換結果,處理量程轉換響應,控制液晶實時顯示等,其流程圖如圖6-2-5所示。 圖6-2-5主程序流程圖 2、A/D轉換程序圖6-2-6 A/D轉換程序流程圖 A/D轉換程序的功能是采集數據,在整個系統設計中占有很高的地位。當系統設置好后,單片機掃描轉換結束管腳P1.7的輸入電平狀態,當輸入為高電平則轉換完成,將轉換的數值轉換并顯示輸出。若輸入為低電平,則繼續掃描。程序流程圖如圖6-2-6所示。 程序如下: #include<reg52.h> #include <intrins.h> unsigned long dat_adc0808; uint adc0808_init() // AD初始化 { START=0; OE=0; START=1; START=0; while(EOC==0); OE=1; dat_adc0808=P1; OE=0; return dat_adc0808; } 得到ADC0808的轉換結果后,應當及時處理成LCD1602能夠顯示的數字字符。以下函數實現此功能,為ADC0808顯示刷新子程序: void Refresh_show() //刷新顯示 { uint t=dat_adc0808*500.0/255; // display_buffer[1][7] = t/100+'0'; //整數位 display_buffer[1][9] = t/10%10+'0'; //兩個小數位 display_buffer[1][10] = t%10+'0'; } 本節課我們主要學習了如何應用ADC0808設計一個數字電壓表。知道了在硬件上ADC0808芯片和單片機的連接,在軟件方面,我們著重介紹了如何獲取A/D轉換結果函數的設計,這需要我們從ADC0808芯片的技術資料中獲得設計程序的方法。通過和前面一個項目的對比可知,對于模數轉換芯片的使用,關鍵的一點就是我們必需明白A/D芯片的轉換機制,ADC0808轉換時和時鐘引腳的頻率有很大的關系,頻率設置不當,ADC0808就不能轉換,這一點同學們要特別注意。 5、main.c 主程序
#include<reg52.h>
#include <intrins.h>
#include "LCD1602.h"
#include "ADC0808.h"
sbit CLOCK=P2^6;
extern uchar display_buffer[][16];
void main()
{
TMOD=0x02;
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
Initialize_LCD1602();
delay50us(10);
Write_LCD_Command(0x80);//設置顯示的初始位置
LCD_Display(display_buffer[0]);//顯示"The voltage is: "
while(1)
{
adc0808_init();
Refresh_show();
Write_LCD_Command(0xC0);//設置顯示的初始位置
LCD_Display(display_buffer[1]); //顯示測得的數據
}
}
void Timer0_INT() interrupt 1
{
CLOCK=!CLOCK;
}
完整的Word格式文檔51黑下載地址(內含清晰圖片):
|