/*
ADC0804屬于8位CMOS三態(tài)鎖定輸出逐次逼近型A/D轉(zhuǎn)換器,存取時(shí)間135us,轉(zhuǎn)換時(shí)間100us,總誤差
1LSB。現(xiàn)在講一下它的轉(zhuǎn)換原理和硬件連接:
它的管腳有20個(gè):
/CS:芯片選通信號(hào),低電平選通,只有CS為低電平的時(shí)候,芯片才被選通工作(但不一定開(kāi)始數(shù)據(jù)轉(zhuǎn)換,由/WR
控制起停轉(zhuǎn)換)。
/RD:讀宣統(tǒng)信號(hào),也就是外部單片機(jī)讀取轉(zhuǎn)換結(jié)果的控制信號(hào),/RD為高電平,DB0~DB7處于高阻態(tài),處于低電
平數(shù)字?jǐn)?shù)據(jù)才會(huì)輸出。
/WR:啟動(dòng)轉(zhuǎn)換的控制輸入,轉(zhuǎn)換的開(kāi)始與停止由它控制,/CS=0的前提下,/WR由高變?yōu)榈停D(zhuǎn)換器被清除,/WR
由低變?yōu)楦撸D(zhuǎn)換正式開(kāi)始。
CLK IN、CLK R:時(shí)鐘輸入或接震蕩元件(R、C),頻率約限制在100KHZ~1460KHZ,如果使用RC電路則其振蕩頻
率為1/(1.1RC).
/INTR:中斷請(qǐng)求信號(hào)輸出,低電平動(dòng)作,準(zhǔn)備轉(zhuǎn)換前置1,轉(zhuǎn)換結(jié)束后,自動(dòng)產(chǎn)生一個(gè)低電平信號(hào),通過(guò)查詢(xún)可
控制讀取數(shù)據(jù)的時(shí)間。
VIN(+)、VIN(-):差動(dòng)模擬電壓輸入端,輸入單端正電壓時(shí),VIN(-)接地,而差動(dòng)輸入時(shí),直接加入VIN(+)、
VIN(-).
AGND:模擬信號(hào)接地端。
DGND:數(shù)字信號(hào)接地段。
VREF:輔助參考電壓。
DB0~DB7:8位數(shù)字輸出。
VCC:電源供應(yīng)以及作為電路的參考電壓。
*/
#include<reg52.h>
code unsigned char seg7code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit int1=P3^3;
sbit cs=P3^2;
sbit wr=P3^6;
sbit rd=P3^7;
void Delay(unsigned int tc)
{
while(tc!=0)
{
unsigned int i;
for(i=0;i<100;i++);
tc--;
}
}
unsigned char adc0804(void)
{
unsigned char addata,i;
rd=1;wr=1;int1=1;
P1=0xff;
cs=0;wr=0;wr=1;
while(int1==1);
rd=0;
i=i;i=i;
addata=P1;
rd=1;cs=1;
return(addata);
}
unsigned int datpro(void)
{
unsigned char x;
unsigned int dianyah,dianyal;
unsigned int dianya=0;
for(x=0;x<10;x++)
{
dianya=adc0804()+dianya;
}
dianya=dianya/10;
dianyah=dianya&0xf0;
dianyah=dianyah>>4;
dianyal=dianya&0x0f;
dianya=dianyal*20+dianyah*320;
return(dianya);
}
void Led()
{
unsigned int date;
date=datpro();
P2=P2&0x7f;
P0=seg7code[date/1000]|0x80;
Delay(8);P2=P2|0xf0;P2=P2&0xbf;
P0=seg7code[date%1000/100];
Delay(8);P2=P2|0xf0;P2=P2&0xdf;
P0=seg7code[date%100/10];
Delay(8);P2=P2|0xf0;P2=P2&0xef;
P0=seg7code[date%10];
Delay(8);P2=P2|0xf0;
}
main()
{
while(1)
{
Led();
}
}
/*
這個(gè)程序?qū)懙倪是很不錯(cuò)的,用到了多次采樣求平均值以減少誤差,由于參考電壓選取的是+5V,所以
測(cè)量的模擬量不能超過(guò)5V,也就是說(shuō)測(cè)量結(jié)果的整數(shù)位只有一位,其他三位為小數(shù)部分。關(guān)于轉(zhuǎn)換器的轉(zhuǎn)換精
度問(wèn)題,用分辨率(DAC)和轉(zhuǎn)換誤差(DAC)來(lái)描述其轉(zhuǎn)換精度。
完整程序下載:http://www.izizhuan.cn/f/0804dd.rar
分辨率:電路所能分辨的最小輸出電壓U(LSB)與滿(mǎn)刻度輸出電壓U(omax)之比。
分辨率=U(LSB)/U(omax)=1/(2^n-1)
轉(zhuǎn)換誤差:指輸入端加滿(mǎn)刻度的數(shù)字量時(shí),DAC輸出電壓的理論值與實(shí)際值只差。轉(zhuǎn)換誤差一般<0.5U(LSB)
最小分辨電壓:U(LSB)=分辨率*U(omax)=U(omax)/(2^n-1)
如果要求一系統(tǒng)的(DAC)轉(zhuǎn)換誤差(相對(duì)誤差)小于0.25%,那么應(yīng)該選擇多少位的DAC轉(zhuǎn)換器呢?
轉(zhuǎn)換誤差/U(omax)<0.25%
轉(zhuǎn)換誤差/U(omax)<0.5U(LSB)/U(omax)
0.5U(LSB)/U(omax)<0.25%
U(LSB)/U(omax)<0.5%
1/(2^n-1)100%<0.5%
n≈7.64
n=8
就adc0804來(lái)說(shuō),它的最小分辨電壓(Uref=5V)為0.019,采用四位數(shù)碼管比較合適。
*/
