实践中的很多量,都是模仿量,如温度,压力等,单片机要去了解它们,首要就要把这些量进行数字化,AD转化即把模仿量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转化芯片。关于AD转化的详细原理,我就不抄了,网上有的是。
ADC0804的运用,比前面用过的锁存器74LS573难用得多,主要是读写数据都要依据时序图,进行电位的改变,并且芯片的接法也相对费事一点。下面记载一下引脚界说:
VIN(+),VIN(-):待丈量的模仿信号输入
DB0~DB7:丈量成果输出
AGND:模仿信号地
DGND:数字信号地
CLK:时钟信号输入端
CLKR:内部时钟发生器的外接电阻端,与CLK端合作可由芯片本身发生时钟脉冲,其频率为1/(1.1RC)
CS:片选信号,低电平有用
WR:写信号输入,低电平发动A/D转化
RD:读信号输入,低电平有用
INTR:A/D转化完毕信号,低电平表明本次转化现已完结
VREF/2:参阅电平输入,决议量化单位(能够调理该电平,调理终究精确度)
VCC:电源输入
关于时钟:假如运用内部时钟的话,官方的主张是用10K电阻和150pF%&&&&&%,如上图;
模仿地和数字地一般直接接地即可。参阅电平在2.5V左右,我试了一下,调到2.55的时分比较精确。关于待丈量的模仿信号,如电压,能够向上图一样衔接,负直接接地即可。
这儿没有用到INTR,即没用中止,而是直接用延时的办法,等候A/D转化完结后,读取DB0~DB7的值。
——————————————————————–
读写芯片都要依据芯片的时序来,其写时序如下:
能够看到,首要要使片选信号置低电平,然后写信号下降,上升后,芯片开端A/D转化,转化完结后INTR置低电平告诉现已完结。
读时序如下:
能够看到,转化完结后,选使片选有用,然后使读引脚下降,再上升,即可读取数据。
因为不论读写,都要使片选有用,即CS脚置低,所以CS脚置一次低就能够了。
1void main()
{
uchar val = 0;
//答应AD芯片
ad_cs = 0;
while(1)
{
ad_write = 0;//WR脚置低
_nop_();
ad_write = 1;//WR脚置高,完结时序,转化开端
delay(50);//稍等后转化会完结,因为没用中止,所以选用延时50毫秒
P1 = 0xff;//先把数据端口悉数置1,防止原先数据影响
ad_read = 0;//RD脚置高
_nop_();
val = P1;//把数据存入暂时变量
ad_read = 1;//RD脚置低
show((val>>4)*0.32 + (val&0x0f)*0.02);//依据换算规矩,把数据换算成实践电压
}
}
换算的规矩是,8位数据的高四位,相当于每单位0.32V,低四位,相当于每单位0.02V,所以总电压便是:
(val>>4)*0.32 + (val&0x0f)*0.02)
这次没有运用中止,直接选用延时读取,实在是有些不爽,有时间的话,把程序改一下,改成运用中止告诉的。
————————————————————–
尝试了一下,完结了由中止完成的A/D转化,不再需求时间去查验了,提高了程序的运转功率。原理图需求略微改一下,因为用到了外部中止0,即P3.2脚,而这个脚原本衔接到了ADC0804的片选引脚,所以要把片选改到P3.5,然后把芯片的INTR衔接到P3.2脚才干引发中止。详细请下载检查。