您的位置 首页 知识

用Proteus学习51单片机之AD转化

现实中的很多量,都是模拟量,如温度,压力等,单片机要去了解它们,首先就要把这些量进行数字化,AD转换即把模拟量转变为数字量。这次书上介绍的AD芯片为ADC0804,8位并行AD转换芯片。关于AD转

  实践中的很多量,都是模仿量,如温度,压力等,单片机要去了解它们,首要就要把这些量进行数字化,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脚才干引发中止。详细请下载检查。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/209050.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部