专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ADC0804测直流电压

作者:佚名   来源:本站原创   点击数:  更新时间:2011年01月18日   【字体:

/*

    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://www.51hei.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,采用四位数码管比较合适。

*/

关闭窗口

相关文章