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