文档库 最新最全的文档下载
当前位置:文档库 › ADC0832

ADC0832

ADC0832
ADC0832

ADC0832

8位串行A/D 转换器ADC0832

1.功能特点

ADC0832是NS(National Semiconductor)公司生产的串行接口8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比较高,适宜在袖珍式的智能仪器仪表中使用。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。芯片具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。其主要特点如下:

●8位分辨率,逐次逼近型,基准电压为5V;●5V 单电源供电;

●输入模拟信号电压范围为0~5V;●输入和输出电平与TTL 和CMOS 兼容;

●在250KHZ 时钟频率时,转换时间为32us;●具有两个可供选择的模拟输入通道;●功耗低,15mW。2.外部引脚及其说明

ADC0832有DIP 和SOIC 两种封装,DIP 封装的ADC0832引脚排列如图6.21所示。各引脚说明如下:

●CS——片选端,低电平有效。

●CH0,CH1——两路模拟信号输入端。●DI——两路模拟输入选择输入端。●DO——模数转换结果串行输出端。●CLK——串行时钟输入端。

●Vcc/REF——正电源端和基准电压输入端。●GND——电源地。3.单片机对ADC0832的控制原理

一般情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK提供时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1个时钟脉冲到来之前DI端必须是高电平,表示启动位。在第2、3个时钟脉冲到来之前DI端应输入2位数据用于选择通道功能,其功能项见表6.4。

输入形式配置位

选择通道CH0

CH1CHO

CH1差分输入00+-01-+

单端输入

10+

11

+

如表6.4所示,当配置位2位数据为1、0时,只对CH0进行单通道转换。当配置2位数据为1、1时,只对CH1进行单通道转换。当配置2位数据为0、0时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当配置2位数据为0、1时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行输入。

到第3个时钟脉冲到来之后DI 端的输入电平就失去输入作用,此后DO/DI 端则开始利用数据输出DO 进行转换数据的读取。从第4个时钟脉冲开始由DO 端输出转换数据最高位D7,随后每一个脉冲DO 端输出下一位数据。直到第11个脉冲时发出最低位数据D0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个时钟脉冲输出D0。随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D 转换的结束。最后将CS 置高电平禁用芯片,直接将转换后的数据进行处理就可以了。图6.22为ADC0832

时序图。

4.ADC0832典型应用

(1)单片机串行口方式0与ADC0832接口

AT89S51

ADC0832

RXD TXD P1.7CS CLK DO CH0CH1

DI

如图6.23所示,AT89C51的P1.7为片选信号端,TXD 是时钟信号输出端,RXD 为启动信号,模拟通道选择信号发送端以及A/D 转换后输出数据的接收端。

ADC0832的时钟频率最高为400KHZ,单片机AT89C51晶振选用4MHZ,在TXD 端的输出频率为4MHZ/12=333KHZ,符合要求。

ADC0832输出的串行数据共15位,由两段8位数据组成,前一段是最高位在先,后一段是最高位在后,两段数据的最低位共用。只有在时钟的下降沿,ADC0832的串行数据才移出一位。由单片机控制时钟信号进行发送,并由TXD 发出,以达到控制ADC0832输出数据位的目的。为了得到一列完整的8位数据,单片机分两次采集含有不同位的数据,再合成一列完整的

8位数据。

当REN=0时,AT89C51连续一次向

ADC0832发送8个时钟脉冲,前3

个脉冲发送的是启

动位和模拟通道选择位,共计3位;从第4个脉冲下降沿开始,ADC0832发出转换数据D7~D4(在脉冲上升沿单片机方可接收)。但由于REN=0,单片机不予接收,丢失D7~D4数据。

当REN=1时,单片机又向ADC0832连续发出8个时钟脉冲,其输出转换数据D3,D2,D1,和d0,d1,d2,d3,d4,存入累加器A形成如下结构:

累加器A

d4d3d2d1d0D1D2D3

MSB LSB

上述数据右移3位,并屏蔽掉高3位,暂存于寄存器B,得到如下结构:寄存器B

000d4d3d2d1d0

MSB LSB

单片机第二次接收,可得到下列数据:

累加器A

X X X X X d7d6d5

MSB LSB

以上数据左移5位,并屏蔽低5位,送入累加器A,得到如下结构:

累加器A

d7d6d500000

MSB LSB

进行(A)+(B)→(A)运算,得到如下结构:

累加器A

d7d6d5d4d3d2d1d0

MSB LSB

从而得到一个完整的8位A/D转换结果。

根据图6.23对CH1通道的模拟输入信号实行A/D转换的程序如下:

CADA:CLR P1.7;CS=0

MOV SCON,#00H;串行口方式0,REN=0

MOV A,#07H;通道配置位为11,启动位为1

MOV SBUF,A;启动发送

LOOPA1:JNB T1,LOOPA1;发送等待

MOV SCON,#10H;REN=1,RI=0,启动接收

LOOPA2:JNB R1,LOOPA2;接受等待

MOV A,SBUF

RR A

RR A

RR A

ANL A,#1FH;屏蔽高3位

MOV B,A

MOV SCON,#10H;第二次启动接收

LOOPA3:JNB RI,LOOPA3

MOV A,SBUF

RL A SWAP A ANL A,#0E0H ADD A,B SETB P1.7RET

(2)SPI 串行接口方式

SPI 是MOTOROLA 公司推出的一种同步串行外设接口,允许MCU 也各个厂家生产工具的标准外围设备直接接口,以串行方式交换信息。SPI 使用4条线与主机(MCU)连接:串行时钟SCK,主机输入/从机输出数据线SO,主机输出/从机输入数据线SI 和低电平有效的从机选择线CS。

SPI 串行扩展系统的主器件单片机,可以带有SPI 接口,也可以不带SPI 接口,但从器件必须具有SPI 接口。

AT89S51

ADC0832

P1.2P1.1P1.0CS

CLK

DO CH0CH1

DI P1.3ADC0832具有SPI 接口,图6.24为AT89S51与ADC0832的SPI 串行接口方式,将DO 和DI 分别连接于P1.0和P1.1。对CH0通道的模拟信号进行A/D 转换,转换结果存于累加器A 中。程序如下:CADB:CLR P1.3;CS=0

MOV A,#03H ;起始位和配置位为011MOV R7,#03H

LOOPB1:CLR P1.2;CLK=0

RRC A MOV P1.1,C NOP SETB P1.2;CLK=1DJNZ R7,LOOPB1CLR P1.2;通道稳定脉冲NOP SETB P1.2;CLK=1MOV R7,#08H

LOOPB2:CLR

P1.2;CLK=0

MOV C,P1.0;读入一位数据RLC A SETB P1.2;CLK=1DJNZ R7,LOOPB2SETB P1.3;CS=1

RET

基于51单片机的ADC0832数字电压表(仿真+程序)

仿真图: /*********************************包含头文件********************************/ #include #include /*********************************端口定义**********************************/ sbit CS = P3^5; sbit Clk = P3^3; sbit DATI = P3^4; sbit DATO = P3^4; sbit P20=P2^0 ; /*******************************定义全局变量********************************/ unsigned char dat = 0x00; //AD值 unsigned char count = 0x00; //定时器计数 unsigned char CH; //通道变量 unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值 /*******************************共阳LED段码表*******************************/ unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe }; /**************************************************************************** 函数功能:AD转换子程序 入口参数:CH 出口参数:dat ****************************************************************************/ unsigned char adc0832(unsigned char CH) {

AD转换器ADC0832程序

#include #include #define uchar unsigned char #define uint unsigned int sbit cs=P1^0; sbit clk=P1^3; sbit di=P1^4; sbit DO=P1^5; uint adval; uchar temp; uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; void delayms(uint ms) { uchar j; while(ms--) { for(j=0;j<120;j++); } } void ADC_start() { cs=1; _nop_(); clk=0; _nop_(); cs=0; _nop_(); di=1; _nop_(); clk=1; _nop_(); di=0; _nop_(); clk=0; _nop_(); } void ADC_read(uint ch) { uchar i; ADC_start(); if(ch==0) { clk=0; di=1; _nop_(); _nop_(); clk=1; _nop_();

_nop_(); clk=0; _nop_(); di=0; _nop_(); _nop_(); clk=1; _nop_(); _nop_(); } else { clk=0; di=1; _nop_(); _nop_(); clk=1; _nop_(); _nop_(); clk=0; _nop_(); di=1; _nop_(); _nop_(); clk=1; _nop_(); _nop_(); } clk=1; _nop_(); clk=0; for(i=0;i<8;i++) { di=1; if(DO) { temp=(temp|0x01); } else { temp=(temp&0xfe); } clk=0; _nop_(); clk=1; temp=temp<<1; } adval=temp;

51单片机驱动ADC0832模数转换程序lcd1602显示

51单片机驱动ADC0832模数转换程序 -lcd1602显示 /*这个芯应用不多*/ #include ; #define uchar unsigned char #define uint unsigned int uchar Chan0Value,Chan1Value; sbit RS=P1^0; //1602各控制脚 sbit RW=P1^1; sbit EN=P1^2; sbit Cs0832= P2^0; //0832各控制脚 sbit Clk0832= P3^6; sbit Di0832= P3^7; sbit Do0832= P3^7; void delay1ms(unsigned int ms)//延时1毫秒(不够精确的) { int i,j; for(i=0;i;>;i; }

for(i=0;i<8;i++) //从低到高取一次数 { if(Do0832) Dat2|=0x01<

基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言)

基于单片机的数字电压表制作——ADC0832模数转换应用程序(C语言) 主要部件:AT89S51 ADC0832 八段数码管 关键字:ADC0832程序C语言数字电压表 本文所描述的数字电压表是利用ADC0832模数转换芯片完成的。该芯片能将0~5V的模拟电压量转换为0~255级的数字量,所以本文描述的数字电压表的量程为0~5V。 说实在话,量程只有5V的电压表没有什么实际的意义,而且也没有人无聊到自己会去做一个没有意义的电压表。但是通过这个简易电压表的制作你可以对模数转换芯片有一定的了解,对以后做真正有用的电路打下基础。而且,对于那些做毕业设计的同学也是一种参考。这也就是本文的意义所在。 ADC0832的资料百度一下可以找到一大堆,我就不在这里赘述了。这里只给出连接图。 以下是程序部分: 该程序是本人自编的,经测试可用,但不保证程序的可靠性及稳定性。若有转载请标明出处。 如果有同学将本程序烧写到单片机里却不能正常工作的,请注意以下三点: 1、是否将端口重新定义。每个单片机开发板的引脚连接都是不一样的,若不加修改直接把程序烧写到单片机里,那是绝对不能正常工作的。 2、是否正确选择通道值。ADC0832有两个模拟输入端口(也就是我说的通道),你要先弄清楚你用的

是那个通道,并在main函数中设置相应的通道值(以CH命名的那个变量)。本程序默认使用0通道,如果0通道不行就改成1通道,反正不是0通道就是1通道。 3、如果你做的电压表在保证电路连接正确且没有以上两点问题的情况下,还是不能正常工作,请将程序中的“if (adval == test)”这一行删掉。其实这一点我个人也不清楚到底有没有问题。我有两个单片机开发板,其中一个必须要把那一行删掉才能工作。这说明ADC0832读出的前8位与后8位数值不一样(确切的说应该是后8位反转的数值),这有悖于ADC0832的原理。我不知道到底是硬件还是软件出了问题,特此把这种现象标明。若有哪位同学知道其原因的还请多多指教。 /***********************************************************************************/ /*简易数字电压表制作——ADC0832模数转换应用程序(C语言版)*/ /*目标器件:AT89S51 */ /*晶 振:12.000MHZ */ /*编译环境:Keil uVision2 V2.12 */ /***********************************************************************************/ /*********************************包含头文件********************************/ #include #include /*********************************端口定义**********************************/ sbit CS = P3^5; sbit Clk = P3^4; sbit DATI = P3^3; sbit DATO = P3^3; /*******************************定义全局变量********************************/ unsigned char dat = 0x00; //AD值 unsigned char count = 0x00; //定时器计数 unsigned char CH; //通道变量

实验十ADC0832数模转换的显示

实验报告十 实验名称:ADC0832数模转换的显示 目的:ADC0832是8脚双列直插式双通道A/D转换器,能分别对两路模拟信号实现模—数转换,可以用在单端输入方式和差分方式下工作。ADC0832采用串行通信方式,通过DI 数据输入端进行通道选择、数据采集及数据传送。8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。 ADC0832的工作原理: 正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时使用并与单片机的接口是双向的,所以在I/O口资源紧张时可以将DO和DI并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟(CLK)输入端输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第一个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第二、三个脉冲下沉之前DI端应输入两位数据用于选择通道功能。 通道地址通道 工作方式说明 SGL/DIF ODD/SIGN 0 1 0 0 + - 差分方式 0 1 - + 1 0 + 单端输入方式 1 1 + 表1:通道地址设置表 如表1所示,当此两位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当两位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当两位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第三个脉冲的下降之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下降沿开始由DO端输出转换数据最高位Data7,随后每一个脉冲的下降沿DO端输出下一位数据。直到第11个脉冲时发出最低位数据Data0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下降沿输出Data0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D 转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。时序说明请参照图4。

ADC0832

https://www.wendangku.net/doc/291107386.html, 电子技术—创造独立资源! AD转换芯片ADC0832的应用 https://www.wendangku.net/doc/291107386.html, 原创(本文曾刊载于《电子制作》第 142期) V2.0 2007.2.11 目录 1. 概要 (1) 1.1 简介 (1) 1.2 接口示意图 (1) 1.3 芯片接口说明 (1) 2. 单片机对ADC0832的控制原理 (2) 2.1 ADC0832与单片机的接口电路 (2) 3. ADC0832芯片接口程序的编写 (4) 3.1 ADC0832数据读取程序流程 (4) 3.2 ADC0832芯片接口程序[汇编] (4) 版本信息 (6)

https://www.wendangku.net/doc/291107386.html, 原创 1. 概要 1.1 简介 ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用 ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。 ADC0832具有以下特点: 8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在0~5V之间; 工作频率为250KHZ,转换时间为32μS; 一般功耗仅为15mW; 8P、14P—DIP(双列直插)、PICC多种封装; 商用级芯片温宽为0°C to +70°C? ,工业级芯片温宽为40°C to +85°C; 1.2 接口示意图 1.3 芯片接口说明 CS_ 片选使能,低电平芯片使能。 CH0 模拟输入通道0,或作为IN+/-使用。 CH1 模拟输入通道1,或作为IN+/-使用。 GND 芯片参考0电位(地)。 DI 数据信号输入,选择通道控制。 DO 数据信号输出,转换数据输出。 CLK 芯片时钟输入。 Vcc/REF 电源输入及参考电压输入(复用)。

ADC0832应用

ADC0832应用 这一课我们来学习ADC0832芯片的应用。模-数(AD)和数-模(DA)转换是模拟电路和数字电路进行沟通的渠道,从前面的课程我们知道,数字电路里,电平只有高和低两种状态,比如5V和0V,对应着1和0;模拟电路里,电平则理论上有无数个状态,比如0V、0.1V、0.2V…等等。如何将模拟电平值在数字电路里表达出来呢?这就需要AD转换过程,同理的,也有DA转换过程。这一课,我们就利用实验板上的ADC0832芯片来实AD转换这一过程。ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。ADC0832具有以下特点:● 8位分辨率;● 双通道A/D转换;● 输入输出电平与TTL/CMOS相兼容;● 5V电源供电时输入电压在0~5V之间;● 工作频率为250KHZ,转换时间为32μS;● 一般功耗仅为15mW;● 8P、14P—DIP(双列直插)、PICC多种封装;● 商用级芯片温宽为0°C to +70°C?,工业级芯片温宽为40℃ to +85℃ 下面看看它的引脚及功能。

图一ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。我们看看在实验板上它是怎么连接的。

adc0832数字电压表(程序+仿真图)

adc0832数字电压表(程序+仿真图)

仿真图: /*********************************包含头文件********************************/ #include #include /*********************************端口定义**********************************/ sbit CS = P3^5;

sbit Clk = P3^3; sbit DATI = P3^4; sbit DATO = P3^4; sbit P20=P2^0 ; /*******************************定义全局变量********************************/ unsigned char dat = 0x00; //AD值 unsigned char count = 0x00; //定时器计数 unsigned char CH; //通道变量 unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值 /*******************************共阳LED 段码表*******************************/

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90}; char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe }; /**************************************** ************************************ 函数功能:AD转换子程序 入口参数:CH 出口参数:dat ***************************************** ***********************************/ unsigned char adc0832(unsigned char CH) {

ADC0832中文数据手册

A/D转换芯片ADC0832的应用 2005年10月11日 ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。 ADC0832具有以下特点: ·8位分辨率; ·双通道A/D转换; ·输入输出电平与TTL/CMOS相兼容; ·5V电源供电时输入电压在0~5V之间; ·工作频率为250KHZ,转换时间为32μS; ·一般功耗仅为15mW; ·8P、14P—DIP(双列直插)、PICC多种封装; ·商用级芯片温宽为0°C to +70°C,工业级芯片温宽为?40°C to +85°C; 芯片顶视图:(图1、图2) 图1图2

芯片接口说明: · CS_ 片选使能,低电平芯片使能。 · CH0 模拟输入通道0,或作为IN+/-使用。 · CH1 模拟输入通道1,或作为IN+/-使用。 · GND 芯片参考0电位(地)。 · DI 数据信号输入,选择通道控制。 · DO 数据信号输出,转换数据输出。 · CLK 芯片时钟输入。 · Vcc/REF 电源输入及参考电压输入(复用)。 ADC0832与单片机的接口电路: 图3 w w w .t a i -y a n .c o m /b b s 电子工程技术论坛: IC资料查询网站:电子器件采购平台:https://www.wendangku.net/doc/291107386.html, https://www.wendangku.net/doc/291107386.html, https://www.wendangku.net/doc/291107386.html,/bbs

ADC0832为8位分辨率A/D 转换芯片,其最高分辨可达256级,可以适应 一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V 之间。芯片转换时间仅为32μS ,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。 单片机对ADC0832的控制原理: 正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS 、CLK 、DO 、DI 。但由于DO 端与DI 端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和DI 并联在一根数据线上使用。(见图3) 当ADC0832未工作时其CS 输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D 转换时,须先将CS 使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI 端则使用DI 端输入通道功能选择的数据信号。在第1个时钟脉冲的下沉之前DI 端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI 端应输入2位数据用于选择通道功能,其功能项见表1。 表1 w w w .t a i -y a n .c o m /b b s 电子工程技术论坛: IC资料查询网站:电子器件采购平台:https://www.wendangku.net/doc/291107386.html, https://www.wendangku.net/doc/291107386.html, https://www.wendangku.net/doc/291107386.html,/bbs

ADC0832驱动子程序

1.A D C0832驱动子程序#include #include //常用汇编指令引用。 unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98}; //共阳代码 //接口电路 sbit AD0832_CS = P3^5 ; //片选信号 sbit AD0832_CLK = P3^6; //时钟接口 sbit AD0832_DI = P3^7; //数据接口 void main( void) { unsigned char i=0 , x =0 , y = 0 ; unsigned int temp=0; while(1) { //时钟12Mhz,整个转换时间为224us //使用芯片准备(参考PDF时序图) AD0832_CLK = 0 ; //时钟置低平 AD0832_DI = 1 ; //开始信号为高电平 AD0832_CS = 0 ; //片选信号置低,启动AD转换芯片 //输入开始信号(构成一个正脉冲) _nop_(); AD0832_CLK = 1 ; //时钟上升沿,输入开始信号 _nop_(); AD0832_CLK = 0 ; //时钟下降沿

//模拟信号输入模式选择(1:单模信号,0:双模差分信号) AD0832_DI = 1 ; _nop_(); AD0832_CLK = 1 ; //时钟上升沿,输入开始信号 _nop_(); AD0832_CLK = 0 ; //时钟下降沿 //模拟信号输入通道选择(1:通道CH1,0:通道CH0) AD0832_DI = 0 ; //选择通道0 _nop_(); AD0832_CLK = 1 ; //时钟上升沿,输入开始信号 _nop_(); AD0832_CLK = 0 ; //时钟下降沿 /////////////////////////////////////////// AD0832_DI = 1 ; //数据线置高,准备接收数据 for(i = 0 ; i<8 ; i++) //从高位移入数据 { AD0832_CLK = 1 ; _nop_(); AD0832_CLK = 0 ; //时钟下降沿,AD0832输出数据,高位(MSB)先x = x<<1; //数据左移位,补0 if(AD0832_DI ==1) x = x | 0x01; //如果数据为“1”,移入1, } //如果数据为“0”,移入0, for(i = 0 ; i<8 ; i++) //从低位移入数据

单片机和ADC0832的AD模数转换

单片机和ADC0832的AD模数转换 在工业控制和智能化仪表中,通常由微型计算机进行实时控制及实时数据处理。计算机所加工的信息总是数字量,而被控制或被测量的有关参量往往是连续变化的模拟量,如温度、速度、压力等等,与此对应的电信号是模拟信号。模拟量的存储和处理比较困难,不适合作为远距离传输且易受干扰。在一般的工业应用系统中传感器把非电量的模拟信号变成与之对应的模拟信号,然后经模拟(Analog)到数字(Digital)转换电路将模拟信号转成对应的数字信号送微机处理。这就是一个完整的信号链,模拟到数字的转换过程就是我们经常接触到的ADC(Analog to Digital Convert)电路。 模-数转换(ADC)简介 模-数转换原理 ADC的转换原理根据ADC的电路形式有所不同。ADC电路通常由两部分组成,它们是:采样、保持电路和量化、编码电路。其中量化、编码电路是最核心的部件,任何ADC转换电路都必须包含这种电路。ADC电路的形式很多,通常可以并为两类:间接法:它是将采样-保持的模拟信号先转换成与模拟量成正比的时间或频率,然后再把它转换为数字量。这种通常是采用时钟脉冲计数器,它又被称为计数器式。它的工作特点是:工作速度低,转换精度高,抗干扰能力强。 直接法:通过基准电压与采样-保持信号进行比较,从而转换为数字量。它的工作特点是:工作速度高,转换精度容易保证。 模—数转换的过程有四个阶段,即采样、保持、量化和编码。 采样是将连续时间信号变成离散时间信号的过程。经过采样,时间连续、数 值连续的模拟信号就变成了时间离散、数值连续的信号,称为采样信号。采样电路相当于一个模拟开关,模拟开关周期性地工作。理论上,每个周期内,模拟开关的闭合时间趋近于0。在模拟开关闭合的时刻(采样时刻),我们就“采”到模拟信号的一个“样本”。 量化是将连续数值信号变成离散数值信号的过程。理论上,经过量化,我们 就可以将时间离散、数值连续的采样信号变成时间离散、数值离散的数字信号。 我们知道,在电路中,数字量通常用二进制代码表示。因此,量化电路的后 面有一个编码电路,将数字信号的数值转换成二进制代码。 然而,量化和编码总是需要一定时间才能完成,所以,量化电路的前面还要 有一个保持电路。保持是将时间离散、数值连续的信号变成时间连续、数值离散信号的过程。在量化和编码期间,保持电路相当于一个恒压源,它将采样时刻的信号电压“保持”在量化器的输入端。虽然逻辑上保持器是一个独立的单元,但是,工程上保持器总是与采样器做在一起。两者合称采样保持器。 八位串行A/D转换器ADC0832简介 — ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。ADC083X是市面上常见的串行模—数转换器件系列。ADC0831、ADC0832、ADC0834、ADC0838是具有多路转换开关的8位串行I/O模—数转换器,转换速度较高(转换时间32uS),单电源供电,功耗低(15mW),适用于各种便携式智能仪表。本章以ADC0832为例,介绍其使用方法。

单片机驱动ADC0832模数转换程序

单片机驱动ADC0832模数转换程序 ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。 ADC0832具有以下特点: 8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在0~5V之间; 工作频率为250KHZ,转换时间为32μS; 一般功耗仅为15mW; 8P、14P—DIP(双列直插)、PICC多种封装; 商用级芯片温宽为0°C to +70°C?,工业级芯片温宽为40℃ to +85℃ 模数转换芯片是用来模拟信号转为数字信号以便电脑处理的,可以用来对传感器的数据进行收集分析。本来想买ADC0809的,它可以对8个模拟量进行采集,假如是一个脚用三个压力传感器,那就正好够用了。这个ADC0832是跟单片机开发板一个淘宝店买的,因为那个淘宝店没有ADC0809。网上搜了个ADC0832的转换函数,拼了个程序在开发板的四位数码管上显示转换过来的数据,要注意的是那个显示函数是调一次只显示四位数码

管的一位的,所以不能转换显示转换显示这样,要转换,显示一次二次三次四次,转换,显示一次二次三次四次 这样。ADC0832引脚及代码如下:(一晚没睡,等下准备回家过清明扫墓去。归去来兮!问西楼禁烟何处好?绿 野晴天道。马穿杨柳嘶,人倚秋千笑,探莺花总教春醉倒。)

//头文件: #include ; #include ;

//变量定义: unsigned char ly_dis[4]; //定义显示缓冲区 code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};//表:共阳数码管 0-9 unsigned char l_posit=0; //显示位置 //引脚定义: sbit SMG_q = P3^4; //定义数码管阳级控制脚(千位)sbit SMG_b = P3^5; //定义数码管阳级控制脚(百位)sbit SMG_s = P3^7; //定义数码管阳级控制脚(十位)sbit SMG_g = P3^6; //定义数码管阳级控制脚(个位) sbit CS = P0^5; sbit Clk = P0^6; sbit DATI = P0^4; sbit DATO = P0^4; unsigned char dat = 0x00; //AD值 unsigned char count = 0x00;

ADC0832驱动程序

#include #include #define uchar unsigned char sbit AD_clk=P3^4; sbit AD_cs=P3^5; sbit AD_do=P3^3; sbit AD_di=P3^3; void delay(unsigned int ms) { unsigned int i ,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } uchar AD(bit dao) { uchar i; uchar ad0,ad1; ad_change: ad0=0x00; ad1=0x00; AD_cs=0; _nop_(); AD_clk=0; _nop_(); AD_di=1; _nop_(); AD_clk=1; //1 //单通道0~10. 1~11 双通道0+~00 。0—~01 AD_clk=0; //1.5 AD_di=1; //选择dif AD_clk=1; //2 _nop_(); AD_clk=0; //2.5 AD_di=dao; //选择ood //通道选择完毕 AD_clk=1; //3 _nop_(); AD_clk=0; //3.5 _nop_(); // AD_di=1;

for(i=8;i>0;i--) { AD_clk=1; //4 ad0<<=1; AD_clk=0; //4.5 if(AD_do) ad0|=0x01; else ad0|=0x00; } for(i=8;i>0;i--) { ad1>>=1; //从低位向高位读取八位AD值 if(AD_do) ad1|=0x80; else ad1|=0x00; AD_clk=1; _nop_(); AD_clk=0; } if(ad0!=ad1) goto ad_change; else { AD_cs=1; AD_do=1; AD_clk=1; return ad0; } } void main() { uchar a; delay(2000); while(1) { a=AD(0); P2=a; delay(200); }

ADC0832的应用电路与源程序

A D C0832具有以下特点: ·8位分辨率; ·双通道A/D转换; ·输入输出电平与T T L/C M O S相兼容; ·5V电源供电时输入电压在0~5V之间; ·工作频率为250K H Z,转换时间为32μS; ·一般功耗仅为15m W; ·8P、14P—D I P(双列直插)、P I C C多种封装; ·商用级芯片温宽为0°C t o+70°C,工业级芯片温宽为?40°C t o+85°C; A D C0832芯片接口说明: ·C S_片选使能,低电平芯片使能。 ·C H0模拟输入通道0,或作为I N+/-使用。 ·C H1模拟输入通道1,或作为I N+/-使用。 ·G N D芯片参考0电位(地)。 ·D I数据信号输入,选择通道控制。 ·D O数据信号输出,转换数据输出。 ·C L K芯片时钟输入。 ·V c c/R E F电源输入及参考电压输入(复用)。 A D C0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片

使能输入,使多器件挂接和处理器控制变的更加方便。通过D I数据输入端,可以轻易的实现通道功能的选择。 单片机对A D C0832的控制原理: 正常情况下A D C0832与单片机的接口应为4条数据线,分别是C S、C L K、D O、D I。但由于D O端与D I端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将D O和D I并联在一根数据线上使用。当A D C0832未工作时其C S输入端应为高电平,此时芯片禁用,C L K和D O/D I 的电平可任意。当要进行A/D转换时,须先将C S使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端C L K输入时钟脉冲,D O/D I端则使用D I端输入通道功能选择的数据信号。在第1个时钟脉冲的下沉之前D I端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前D I端应输入2位数据用于选择通道功能,其功能项见下图。 当此2位数据为“1”、“0”时,只对C H0进行单通道转换。当2位数据为“1”、“1”时,只对C H1进行单通道转换。当2位数据为“0”、“0”时,将C H0作为正输入端I N+,C H1作为负输入端I N-进行输入。当2位数据为“0”、“1”时,将C H0作为负输入端I N-,C H1作为正输入端I N+进行输入。到第3个脉冲的下沉之后D I端的输入电平就失去输入作用,此后D O/D I端则开始利用数据输出D O进行转换数据的读取。从第4个脉冲下沉开始由D O端输出转换数据最高位D ATA7,随后每一个脉冲下沉D O端输出下一位数据。直到第11个脉冲时发出最低位数据D ATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出D AT D0。随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将C S置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 A D C0832具体时序图如下:

ADC0832程序完整版 源码+Proteus仿真

前段时间一直在为ADC0832的程序感到疑惑,从网上找了很多的代码,用Proteus仿真,最后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。 当参考电压为5V时,如果把输入电压从0一直调到5V,读取的数据应该是从0到255,2.5V时应该是128。但是我发现一些源码在输入0~2.5V时读取出来的是0~255,到2.5V时读取的数据为0,从2.5到5V,读出的值又从0增加到255,始终不正确。今天下午特地查阅的ADC0832英文原版的DataSheet,又参考了一篇中文文档,终于写出了其完整的程序,并且先后读取了MSB FIRST DATA和LSB FIRST DATA,进行比较,如果两个数据相等,返回读取的数据,否则返回0,这样可以避免读取发生错误,更稳定可靠。并通过了Proteus 仿真。 下图是ADC0832的时序图: 其中T-SetUp为250ns,由于使用的是51单片机,晶振11.0592MHz,机器周期比这个值大,可以不考虑,但为了防止出现异常,还是延时了两个机器周期。注意在第11个时钟下降沿之后,DO上的电平既是MSB FIRST 输出的最后一位,又是LSB FIRST输出的第一位。以下是读取ADC0832的代码。 [cpp] view plaincopysbit CS_0832 = P1^0; sbit CLK_0832 = P1^1; sbit DO_0832 = P1^2; // DI、DO不同时有效,可共用一个接口 sbit DI_0832 = P1^2; extern void _nop_ ( void ); #define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0 //把模拟电压值转换成8位二进制数并返回 unsigned char read0832()

ADC0832程序完整版 源码

ADC0832程序完整版源码+Proteus仿真 来源:互联网作者: 前段时间一直在为ADC0832的程序感到疑惑,从网上找了很多的代码,用Proteus 仿真,最后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。 当参考电压为5V时,如果把输入电压从0一直调到5V,读取的数据应该是从0到255,2.5V时应该是128。但是我发现一些源码在输入0~2.5V时读取出来的是0~255,到2.5V时读取的数据为0,从2.5到5V,读出的值又从0增加到255,始终不正确。今天下午特地查阅的ADC0832英文原版的DataSheet,又参考了一篇中文文档,终于写出了其完整的程序,并且先后读取了MSB FIRST DATA和LSB FIRST DATA,进行比较,如果两个数据相等,返回读取的数据,否则返回0,这样可以避免读取发生错误,更稳定可靠。并通过了Proteus仿真。 下图是ADC0832的时序图: 其中T-SetUp为250ns,由于使用的是51单片机,晶振11.0592MHz,机器周期比这个值大,可以不考虑,但为了防止出现异常,还是延时了两个机器周期。注意在第11个时钟下降沿之后,DO上的电平既是MSB FIRST输出的最后一位,又是LSB FIRST 输出的第一位。以下是读取ADC0832的代码。 [cpp] view plaincopysbit CS_0832 = P1^0; sbit CLK_0832 = P1^1; sbit DO_0832 = P1^2; // DI、DO不同时有效,可共用一个接口

sbit DI_0832 = P1^2; extern void _nop_ ( void ); #define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0 //把模拟电压值转换成8位二进制数并返回 unsigned char read0832() { unsigned char i, ch = 0, ch1 = 0; CS_0832=0; // 片选,DO为高阻态 DI_0832=1; // 此处暂停T-SetUp: 250ns (由pulse0832完成) pulse0832(); // 第一个脉冲,起始位,DI置高 DI_0832=1; pulse0832(); // 第二个脉冲,DI=1表示双通道单极性输入DI_0832=1; pulse0832(); // 第三个脉冲,DI=1表示选择通道1(CH2) // 51单片机为准双向IO口:应先写入1再读取 DI_0832=1; // MSB FIRST DATA for(i = 0; i < 8; ++i) { pulse0832(); ch<<= 1; if(DO_0832==1) ch |= 0x01; }

adc0832模块程序

/* ADC0832差分00工作方式*/ #include #include"adc0832.h" #include"1602.h" sbit ADC_CS =P2^0; sbit ADC_CLK=P2^1; sbit ADC_DO =P2^2; sbit ADC_DI =P2^3; unsigned char adval; unsigned char ReadADC(void) //把模拟电压值转换成8位二进制数并返回{ unsigned char i,ch,bb,cc,dd; ch=0; ADC_CS=0; ADC_DO=0;//片选,DO为高阻态 for(i=0;i<10;i++) {;} ADC_CLK=0; delay(2); ADC_DI=1; ADC_CLK=1; delay(2); //第一个脉冲,起始位 ADC_CLK=0; delay(2); ADC_DI=1; ADC_CLK=1; delay(2); //第二个脉冲,DI=1表示双通道单极性输入 ADC_CLK=0; delay(2); ADC_DI=1; ADC_CLK=1; delay(2); //第三个脉冲,DI=1表示选择通道1(CH2) ADC_DI=0; ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备 ADC_CLK=1; delay(2); ADC_CLK=0; delay(2);//经实验,这里加一个脉冲AD便能正确读出数据, //不加的话读出的数据少一位(最低位d0读不出?

for(i=0;i<8;i++) { ADC_CLK=1; delay(2); ADC_CLK=0; delay(2); ch=(ch<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数 } ADC_CS=1;//取消片选,一个转换周期结束 adval=ch; returnadval; }

相关文档