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