/*
ADC0804屬于8位CMOS三態(tài)鎖定輸出逐次逼近型A/D轉(zhuǎn)換器,存取時間135us,轉(zhuǎn)換時間100us,總誤差
1LSB。現(xiàn)在講一下它的轉(zhuǎn)換原理和硬件連接:
它的管腳有20個:
/CS:芯片選通信號,低電平選通,只有CS為低電平的時候,芯片才被選通工作(但不一定開始數(shù)據(jù)轉(zhuǎn)換,由/WR
控制起停轉(zhuǎn)換)。
/RD:讀宣統(tǒng)信號,也就是外部單片機(jī)讀取轉(zhuǎn)換結(jié)果的控制信號,/RD為高電平,DB0~DB7處于高阻態(tài),處于低電
平數(shù)字?jǐn)?shù)據(jù)才會輸出。
/WR:啟動轉(zhuǎn)換的控制輸入,轉(zhuǎn)換的開始與停止由它控制,/CS=0的前提下,/WR由高變?yōu)榈停D(zhuǎn)換器被清除,/WR
由低變?yōu)楦撸D(zhuǎn)換正式開始。
CLK IN、CLK R:時鐘輸入或接震蕩元件(R、C),頻率約限制在100KHZ~1460KHZ,如果使用RC電路則其振蕩頻
率為1/(1.1RC).
/INTR:中斷請求信號輸出,低電平動作,準(zhǔn)備轉(zhuǎn)換前置1,轉(zhuǎn)換結(jié)束后,自動產(chǎn)生一個低電平信號,通過查詢可
控制讀取數(shù)據(jù)的時間。
VIN(+)、VIN(-):差動模擬電壓輸入端,輸入單端正電壓時,VIN(-)接地,而差動輸入時,直接加入VIN(+)、
VIN(-).
AGND:模擬信號接地端。
DGND:數(shù)字信號接地段。
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(); } }
/*
這個程序?qū)懙倪是很不錯的,用到了多次采樣求平均值以減少誤差,由于參考電壓選取的是+5V,所以
測量的模擬量不能超過5V,也就是說測量結(jié)果的整數(shù)位只有一位,其他三位為小數(shù)部分。關(guān)于轉(zhuǎn)換器的轉(zhuǎn)換精
度問題,用分辨率(DAC)和轉(zhuǎn)換誤差(DAC)來描述其轉(zhuǎn)換精度。
完整程序下載:http://www.zg4o1577.cn/f/0804dd.rar
分辨率:電路所能分辨的最小輸出電壓U(LSB)與滿刻度輸出電壓U(omax)之比。
分辨率=U(LSB)/U(omax)=1/(2^n-1)
轉(zhuǎn)換誤差:指輸入端加滿刻度的數(shù)字量時,DAC輸出電壓的理論值與實際值只差。轉(zhuǎn)換誤差一般<0.5U(LSB)
最小分辨電壓:U(LSB)=分辨率*U(omax)=U(omax)/(2^n-1)
如果要求一系統(tǒng)的(DAC)轉(zhuǎn)換誤差(相對誤差)小于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來說,它的最小分辨電壓(Uref=5V)為0.019,采用四位數(shù)碼管比較合適。
*/