原创 AD0832

2007-7-18 17:30 7903 9 10 分类: 汽车电子

二.             串行AD转换器ADC0832的使用


单片机控制系统中通常要用到AD转换,根据输出格式,常用的AD转换方式可分为并行AD和串行AD并行方式一般在转换后可直接接收,但芯片的引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。可是单片机I/O引脚本来就不多,使用串行器件可以节省I/O资源。


<?XML:NAMESPACE PREFIX = V />ADC0832是8位逐次逼近模数转换器,可支持两个单端输入通道和一个差分输入通道。相同功能的器件还有ADC0834ADC0838ADC0831。所不同的是它们的输入通道数量不同。它们的通道选择和配置都是通过软件设置。AD0832的主要特点如下:


易于和微处理器接口或独立使用;


可满量程工作;


可用地址逻辑多路器选通各输入通道;


单5V供电,输入范围为0~5V;


输入和输出与TTL、CMOS电平兼容;


 


   ADC0832通过内部多路器来控制选择通道,处理器的控制命令通过DI引脚输入。引脚图如右图所示,通道配置命令和通道选择命令如下:



输入配置可在多路器寻址时序中进行。多路器地址可通过DI端移入转换器。多路器地址选择模拟输入通道可决定输入是单端输入还是差分输入。当输入是差分时,应分配输入通道的极性,并应将差分输入分配到相邻的输入通道对中。例如通道0和通道1可被选为一对差分输入。另外,在选择差分输入方式时,极性也可以选择。一对输入通道的两个输入端的任何一个都可以作为正极或负极。通常ADC0832在输出以最高位(MSB)开头的数据流后,会以最低位(LSB)开头重输出一遍(前面的数据流)。(因此,编程时要发两轮脉冲,第一次取数据,第二次若不要从低到高的数据,也要发一轮8 个脉冲将0832中寄存器的数据移出。是的,其工作时序如下所示:



ADC08328只引脚,CH0CH1为模拟输入端,CS为片选引脚,只有CS置低才能对ADC0832进行配置和启动转换。CLKADC0832的时钟输入端。CS在整个转换过程中都必须为,当CS为低时,在数据输入端DI(数据输入端)加一个高电平(这个高电平是否算在送到DI的一位之中?如果算,那么后面就只要再送两位。是的,这个高电平是作为起始标志,接着在CLK上加一个时钟,DI上的逻辑1就会使ADC0832DI脱离高阻态,然后通道配置数据拌随着时钟通过DI端移入多路器,当最后一位数据移入多路器时(数据是三位吗?还是可以有更多位?是否因为是仅仅作状态设置,所以只须三位?数据是三位,前一位标志输入开始,后两位是用来作通道设置和选择DI变为高阻态,在这以前DO(数据输出端)都为高阻态(这个“以前”的概念是什么?就是CS从高跳到低到现在。在经过一个时钟(是指在最后一个数据从DI移入后,还要再经过一个时钟?是的,当最后一位数据移入DI,需要再加一个时钟使DO脱离高阻态),DO脱离高阻态并启动转换。接着从处理器接收时钟信号,每经过一个时钟,转换后的数据就会从高位到位逐次从DO移出,经过8个时钟后,数据又以从位到高位的形式从DO移出(也是每个时钟移一位)。当最后一位数据移出时转换完成。当CS从低变为高时,ADC0832内部所有寄存器清零。如想要进行下一次转换,CS必须做一个从高到的跳变,后跟着地此配置数据重复上面的过程。


在进行单片机和ADC0832的连接时,因为DIDO并不是同时使用,所以DIDO可以共用单片机的一条I/O线,再加上一条时钟线和一条片选线就可以实现单片机和ADC0832的连接,电路连接例子如下图所示:



ADC083251单片机上的AD转换程序的设计也不复杂,下面给出以上图为例的51单片机程序:


 


adc_0832_cs      bit     p2.2


adc_0832_clk     bit     p2.1


adc_0832_di      bit     p2.0


adc_0832_ch0     equ    38h                  ;buf of ch0


 


adc_0832_conv:   push    a


                 push    psw


                 push    0


 


                 clr     adc_0832_clk          ;clear clok


                 clr     adc_0832_di


                 setb    adc_0832_cs           ;set CS to enable converters


                 clr     adc_0832_cs                ; cs作一个从高到低的跳变。 


                 setb    adc_0832_di           ;set start bit to enable data input


                 setb    adc_0832_clk              ; clk作一个从高到低的跳变,并不是从高到低跳变,而是一个上升脉冲,因为在这步以前clk处于低电平,现在是先高,然后又低,形成一个上升脉冲


                 clr     adc_0832_clk                     ;上面指令中di1进入寄存器。


                 setb    adc_0832_di           ;MSB address select CH0


                 setb    adc_0832_clk              ; clk第二个从高到低的跳变,


                 clr     adc_0832_clk                     ;上面指令中di再进一个1到寄存器。


                 clr     adc_0832_di           ;LSB address


                 setb    adc_0832_clk


                 clr     adc_0832_clk                     ;上面指令中,di进入的数据为110


                 setb    adc_0832_clk              ;设高位先行进入。


                 clr     adc_0832_clk                     ;上面说的再进一个时钟就是最后的这个吧?是的,这个时钟使DO脱离高阻态


 


adc_conv:        mov     r0,#08h                            ;该段从0832取数。


adc_next_bit:     mov     c,adc_0832_di


                 rlc     a


                 setb    adc_0832_clk


                 clr     adc_0832_clk


                 nop


                 djnz    r0,adc_next_bit


 


                 mov    r0,#08h                      ;该段就是所说的0832又从低位到高位再送一次数,


adc_skip_byte:    setb   adc_0832_clk                ;但这里不作保存,只空操作8个时钟,


                 clr    adc_0832_clk                ;0832从低位到高位的8个数据扔出去。


                 djnz   r0,adc_skip_byte


 


                 setb   adc_0832_clk


                 clr    adc_0832_clk


                 setb   adc_0832_cs                 ;完事后将cs置高。


 


                 mov    r0,#adc_0832_ch0


                 mov    @r0,a


 


                 pop    0                         


                 pop    psw


                 pop    a


 


                 ret


 

文章评论3条评论)

登录后参与讨论

用户1648059 2011-1-6 10:56

不错,0832很适合入门,不过现在大多数的单片机都内部集成A/D了

用户98940 2007-8-9 23:49

单片机和ADC0832的连接图呢

用户89933 2007-7-23 20:09

怎么不尝试用c编呢

相关推荐阅读
用户74185 2007-12-26 09:39
几种常见运放电路图
这几种电路都可以在负载电阻RL上获得恒流输出第一种由于RL浮地,一般很少用第二种RL是虚地,也不大使用第三种虽然RL浮地,但是RL一端接正电源端,比较常用第四种是正反馈平衡式,是由于负载RL接地而受到...
用户74185 2007-12-15 08:51
C语言指针
  指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的...
用户74185 2007-07-19 10:56
基于51的温度测试系统
摘 要: 单片机在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。 本文从硬件和软件两方面介绍了AT89C2051单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁...
用户74185 2007-07-19 10:53
C语言宏定义
C语言宏定义技巧(常用宏定义) C语言宏定义技巧(常用宏定义)  写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。...
用户74185 2007-07-17 15:30
7219
串行LED显示驱动器MAX7219及其应用  2006-5-10摘 要 阐述了新型显示驱动芯片MAX7219的基本工作原理和软件设计方法。该芯片功能强大、编程简单、控显可靠,可广泛用于工业控制器等方面...
我要评论
3
9
关闭 站长推荐上一条 /2 下一条