单片机对adc0832的控制原理

合集下载

单片机驱动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 chartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};//表:共阳数码管 0-9unsigned 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;//定时器计数unsigned char CH;//通道变量//函数声明:void display(void);//显示函数,显示缓冲区内容void delay(void);//unsigned char GetValue0832(bit Channel); unsigned char adc0832(unsigned char CH);//主函数,C语言的入口函数:void main(){unsigned int i=0;int ltemp;while(1){if(i==100){ltemp=adc0832(1);//隔时取模数转换(0~255对应0.00-5.00的电压) ly_dis[0]=ltemp/100;//显示百位值ltemp=ltemp%100;ly_dis[1]=ltemp/10; //显示十位值ltemp=ltemp%10;ly_dis[2]=ltemp/1; //显示个位值ly_dis[3]=0; //显示小数点后一位0}i++;if(i==3000)i=0;display(); //调用显示调一次只显示一位轮流显示四位delay();}}//显示函数,参数为显示内容void display(){P0=0XFF;//switch(l_posit){case 0: //选择千位数码管,关闭其它位SMG_q=0;SMG_b=1;SMG_g=1;P0=table[ly_dis[0]]; //输出显示内容 break;case 1: //选择百位数码管,关闭其它位 SMG_q=1;SMG_b=0;SMG_s=1;SMG_g=1;P0=table[ly_dis[1]];break;case 2: //选择十位数码管,关闭其它位 SMG_q=1;SMG_b=1;SMG_s=0;SMG_g=1;P0=table[ly_dis[2]]&0x7f;break;case 3: //选择个位数码管,关闭其它位 SMG_q=1;SMG_b=1;SMG_s=1;P0=table[ly_dis[3]];break;}l_posit++; //每调用一次将轮流显示一位if(l_posit>;3)l_posit=0;}//延时子函数,短暂延时void delay(void){unsigned char i=10;while(i--);}/************************************************ ****************************函数功能:AD转换子程序入口参数:CH出口参数:dat************************************************* ***************************/unsigned char adc0832(unsigned char CH) {unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0;//初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 )//通道选择{Clk = 0;DATI = 1;//通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0;//通道0的第二位 _nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1;//通道1的第一位 _nop_();Clk = 1;_nop_();Clk = 0;DATI = 1;//通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i ;>;= 1; if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test)//比较前8位与后8位的值,如果不相同舍去。

简易数字电压表课程设计

简易数字电压表课程设计

电子测量结课作业简易数字电压表指导教师:学院:专业班级:姓名:学号:摘要本文介绍了一种基于单片机的简易数字电压表的设计。

该设计主要由三个模块组成:A/D转换模块,数据处理模块及显示模块。

A/D转换主要由芯片ADC0832来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯片AT89C52来完成,其负责把ADC0832传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外,它还控制着ADC0832芯片工作。

该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。

此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个LCD1602液晶屏显示出来。

关键词: 单片机;数字电压表;A/D转换;AT89C52;ADC0832目录1 数字电压表的简介 01.1数字电压表简介 01.2数字电压表的的背景与意义 02 设计总体方案 (2)2.1 设计要求 (2)2.2 设计思路 (2)2.3 设计方案 (2)3 硬件电路设计 (4)3.1 A/D转换模块 (4)3.2 单片机系统 (6)3.3 复位电路和时钟电路 (9)3.4 LCD显示系统设计 (10)3.5 总体电路设计 (12)4 程序设计 (13)4.1 程序设计总方案 (13)4.2 系统子程序设计 (13)5 仿真 (15)5.1软件调试 (15)5.2显示结果及误差分析 (15)5.2.1 显示结果 (15)5.2.2 误差分析 (17)结论 (19)参考文献 (20)附录............................................................................................... 错误!未定义书签。

1 数字电压表的简介1.1数字电压表简介在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。

单片机课件(ADC0809和DAC0832)

单片机课件(ADC0809和DAC0832)

解:
MAIN: MOV R1,#40H
;置数据区首址
MOV R7,#8
;置通道数
SETB P1.0
;置P1.0输入态
MOV DPTR,#0FEF8H ;置0809通道0地址
LOOP: MOVX @DPTR,A
;启动A/D
JNB P1.0,$
;查询A/D转换结束否?未完继续查询等待
MOVX A,@DPTR
2021/7/13
14
2、硬件电路设计
该芯片既可用于A/D转换(模拟信号从AIN0~AIN3输 入),又可用于D/A转换(D/A转换模拟量从AOUT输出), 器件地址为1001,若A2A1A0接地,D/A转换写寻址字节 SLAW=90H,A/D转换读寻址字节SLAR=91H。
2021/7/13
15
MOV NUMB,#1
;置发送字节数
LCALL WRNB
;发送控制命令字
MOV R0,#50H
;置A/D数据区首址
VADC0: MOV SLA,#91H
;置接收寻址字节
MOV NUMB,#2
;置接收字节数
LCALL RDNB
;读A/D转换数据
MOV @R0,41H
;存A/D转换数据(存在50H~53H)
2021/7/13
12
ADC3: JNB RI,ADC3
;接收第二字节
CLR RI
;清接收中断标志
MOV A,SBUF
;读第二字节数据
ANL A,#0FH
;第二字节屏蔽高4位
ANL B,#0FOH
;第一字节屏蔽低4位
ORL A,B
;组合
SWAP A
;高低4位互换,组成正确的A/D数据

测控电路课程设计 光照强度测量显示电路

测控电路课程设计 光照强度测量显示电路

审查意见 系(教研室)主任签字:
年 月日
课程设计
引言
照度与人们的生活有着密切的关系。充足的光照,可防止人们免遭意外事故 的发生。反之,过暗的光线可引起人体疲劳的程度远远超过眼睛的本身。因此, 不适或较差的照明条件是造成事故和疲劳的主要原因之一。现有统计资料表明, 在所有职业劳动的事故中约有 30%是直接或间接因光线不足所造成的。对体育场 (馆)的光照要求是非常严格的,光照过强或过暗都会影响比赛的效果。
作为单通道模拟信号输入时 ADC0832 的输入电压是 0~5V 且 8 位分辨率时 的电压精度为 19.53mV。如果作为由 IN+与 IN-输入的输入时,可是将电压值设 定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行 IN+ 与 IN-的输入时,如果 IN-的电压大于 IN+的电压则转换后的数据结果始终为 00H。 四、ADC0832 芯片接口程序的编写:
P0 口接排阻:P0 口开漏结构,使用时一般接排阻拉高电平。
图 4 数码管显示电路
第三部分
设计任务:
将调整后的模拟信号转化为数字信号,以送入单片机进行处理。
设计目的:
通过本实验,熟悉 A/D 转换的原理以及单片机与 A/D 转换芯片的联调,熟悉 逐次比较型 A/D 转换的方法和过程。
设计原因:
送入单片机的信号必须是数字信号,单片机是对二进制代码进行处理的,所 以我们必须对实时采样的模拟信号进行 A/D 转换处理,只有这样信号才能被计算 机识别,进而对数据进行处理,从而在数码管上即时显示出当前的光照强度的值。
图 6 逐次比较型 A/D 转换器框图
逐次逼近 ADC 包括 n 位逐次比较型 A/D 转换器如图 6 所示。它由控制逻辑电 路、时序产生器、移位寄存器、D/A 转换器及电压比较器组成。

基于ADC0832数字电压表

基于ADC0832数字电压表

阿坝师范高等专科学校电子信息工程系课程设计基于ADC0832数字电压表学生姓名任银鹏专业名称电子信息工程技术班级电信班学号20113026基于ADC0832数字电压表一、设计要求设计一个在单片机AT89S52作用下基于ADC0832数字电压表.二、系统设计方案1. 模块图2. 模块作用该电压表由单片A/D转换器构成,在很大的电压情况下,电压表去测量时会对其并联很大的电阻分掉高压,然后再进行测量,这本来很大的电压,到后来测出来的电压就会很小,这就是A/D转换实现低压电压表测量高压三、硬件原理1.LCD1602图3.1 LCD1602外观如图3.1 LCD1602外观,从LCD1602参数手册知道芯片工作电压为4.5~5.5V,工作电流20mA。

模块最佳工作电压为5V。

引脚作用说明如下表3.1:表3.1引脚作用说明从参数手册知道LCD1602与单片机8051系列连接方式如图3.2所示,LCD1602引用电路如图3.3:图3.2 LCD1602与单片机8051系列连接方式图3.3 LCD1602引用电路如图3.3 LCD1602引用电路,单片机P2口与LCD1602的7-14脚连接,单片机14脚与LCD1602的6脚连接,单片机15脚与LCD1602的4脚连接。

2. ADC0832ADC0832具有8位分辨率;双通道A/D转换;输入输出电平与TTL/CMOS相兼容;5V电源供电时输入电压在0-5V之间,工作频率为250KHz,转换时间为32us;一般功耗仅为15Mw的特点。

ADC0832芯片引脚说明如图3.4:图3.4ADC0832芯片引脚说明:cs:片选使能,低电平芯片使能;cho:模拟输入通道0,或作为IN+/-使用;ch1:模拟输入通道:1,或作为IN+/-使用;GND:芯片参考0电位;DI:数据信号输入,悬着通道控制;DO:数据信号输出,转换数据输出;CLK:芯片时钟输入;Vcc/REF:电源输入及参考电压输入。

ADC0832模数转换与显示.详述

ADC0832模数转换与显示.详述
置 • i=0; • while(Line1[i]!='\0') • LCD_Write_Data(Line1[i++]);
符串 • Set_Disp_Pos(0x46);
置显示位置 • i=0; • while(Display_Buffer[i]!='\0') • LCD_Write_Data(Display_Buffer[i++]) ;

• while(1)
•{
• //获取AD转换值,最大值255对应于最高电压5.00v
• //本例中设计为显示三个数位,故使用500
• d=Get_AD_Result()*500.0/255;
//设置显示位置
//将AD转换后得到数据分解为三个数位 • Display_Buffer[0]=d/100+'0'; • Display_Buffer[2]=d/10%10+'0'; • Display_Buffer[3]=d%10+'0'; • Set_Disp_Pos(0x01);
程序总流程图
2、A/D转换子程序
A/D转换子程序用来控制对输入模块电压信号 的采集测量,并将对应的数值存入相应的 内存单元。
A/D转换子程序流程图
3、LCD显示子程序
LCD显示程序的设计一般先要确定LCD的初 始化、光标定位、确定显示字符。
实物图
总结
• 本次设计即基于A/D转换器原理,通过一个A/D( ADC0832模拟数字转换)芯片采集外界信息后, 将外侧电压信号转换成数字型号,再由AT89C51 单片机分析并进行处理信号,最终输出信号,由 1602液晶曲线显示。

实验ADC0832数模转换的显示

实验ADC0832数模转换的显示
பைடு நூலகம்实验操作步骤
硬件连接
将ADC0832的VCC和GND连接 到数字电源和地线
将ADC0832的OUT引脚连接到微 控制器的模拟输入引脚
将ADC0832的 S TA R T / C O N V S T 和 C / D 连 接 到 微 控 制 器 的 S TA R T / C O N V S T 和 C/D引脚
实验ADC0832数模转换 的显示
XX,a click to unlimited possibilities
汇报人:XX
目录
01 添 加 目 录 项 标 题 03 实 验 操 作 步 骤
02 A D C 0 8 3 2 数 模 转 换器介绍
04 实 验 结 果 分 析
05 A D C 0 8 3 2 的 优 缺 点
实验结果:通 过显示器观察 到数字信号转 换为模拟信号 的过程,以及 模拟信号的波

结果分析:分 析实验结果, 验证数模转换 的正确性和精

实验结论:得 出实验结论, 总结数模转换 在现实应用中 的意义和价值
Part Four
实验结果分析
实验数据展示
输入信号的频率和幅度
数模转换器的分辨率和精 度
集成更多的功能和接口
Part Six
数模转换器的发展 趋势
数模转换器技术发展历程
早期数模转换器: 精度低,速度慢, 应用范围有限
8位数模转换器: 精度提高,速度 加快,广泛应用 于消费电子产品
高精度数模转换 器:12位、16位 甚至更高精度, 满足高精度测量 和控制系统需求
高速数模转换器: 高采样率,低失 真,适用于宽带 信号处理和雷达 系统等
Part Five
ADC0832的优缺 点

单片机中ADC接口的原理及其精度调节方法研究

单片机中ADC接口的原理及其精度调节方法研究

单片机中ADC接口的原理及其精度调节方法研究一、引言在单片机应用中,模拟信号的采集和处理是一项重要任务。

电压信号是常见的模拟信号之一,而模数转换器(ADC)则是将模拟信号转换为数字信号的关键部件。

本文将研究单片机中ADC接口的原理以及精度调节方法。

二、单片机中的ADC接口原理ADC(Analog-to-Digital Converter)即模数转换器,将连续变化的模拟信号转换成数字信号。

在单片机中,ADC接口负责对模拟信号进行采样和转换,然后传输给处理器进行处理。

1.采样采样是指获取模拟信号的离散样本。

单片机中的ADC在每次转换之前,需要对模拟信号进行采样。

采样的方式有多种,其中比较常见的有保持采样和逐次逼近采样。

- 保持采样:在保持阶段,将模拟信号的样本保持在一个电容中,并通过一个开关将其与ADC输入端相连。

然后,ADC通过激活采样保持电路,将电容中的电压记录并保持不变,作为采样值。

- 逐次逼近采样:逐次逼近采样是通过逼近法根据已知的数字比较结果逐步逼近输入的模拟电压。

在每一次逼近步骤中,ADC将一个时钟周期内的数字量与对应的模拟量进行比较,根据比较结果来调整逼近的方向,并最终得到一个相对精确的数字输出。

2.转换采样完成后,ADC开始进行模拟信号到数字信号的转换。

转换过程中,ADC将采样到的模拟信号与参考电压进行比较,并将其转化为对应的数字表示。

转换的精度受到ADC的位数以及参考电压的稳定性等因素的影响。

3.传输转换完成后,ADC将数字信号传输给处理器进行后续处理。

传输方式可以是并行传输,也可以是串行传输,具体取决于单片机的设计架构。

三、ADC精度调节方法1.参考电压校准参考电压的稳定性对ADC的精度具有重要影响。

因此,在设计中,需要对参考电压进行校准,以确保其稳定性和准确性。

- 内部参考电压校准:一些单片机具有内部参考电压源,可以利用该源提供的稳定参考电压进行校准。

在实际应用中,可以通过测量内部参考电压并与已知的参考电压进行比较来进行校准。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机对adc0832的控制原理
1. 介绍
ADC0832是一种8位串行输出模数转换器,常用于单片机系统中进行模拟信号的数字化转换。

本文将详细介绍单片机对ADC0832的控制原理。

2. ADC0832的基本特性
ADC0832具有以下几个基本特性:
•输入通道:ADC0832有8个模拟输入通道,可以选择其中一个通道进行模数转换。

•分辨率:ADC0832是一个8位的模数转换器,输出的数字范围为0-255。

•时钟信号:ADC0832需要外部提供时钟信号,以控制数据的转换和输出。

•串行输出:ADC0832的输出是串行的,需要通过SCL(串行时钟线)和SDA (串行数据线)进行传输。

3. 接口连接
在单片机系统中,要使用ADC0832进行模数转换,需要将其与单片机连接起来。

连接方式如下:
•SCL连接:将ADC0832的SCL引脚连接到单片机的某个GPIO引脚,用于提供时钟信号。

•SDA连接:将ADC0832的SDA引脚连接到单片机的某个GPIO引脚,用于传输数据。

•输入通道选择:将ADC0832的A0、A1、A2引脚连接到单片机的某个GPIO引脚,用于选择输入通道。

•VCC和GND连接:将ADC0832的VCC引脚连接到单片机供电的正电源,将GND引脚连接到单片机供电的地线。

4. 控制流程
使用单片机对ADC0832进行控制的流程一般如下:
1.配置GPIO引脚:将SCL、SDA和输入通道引脚配置为输出模式。

2.选择输入通道:通过将A0、A1、A2引脚设置为逻辑高或逻辑低,选择要进
行模数转换的输入通道。

3.发送启动信号:将SCL引脚设置为高电平,然后将SDA引脚设置为低电平,
发送启动信号。

4.控制时钟信号:通过控制SCL引脚的电平,提供时钟信号给ADC0832,控制
数据的转换和输出。

5.读取数据:根据ADC0832的时序要求,在时钟信号控制下,读取ADC0832的
输出数据。

5. 控制程序
以下是一个使用C语言编写的单片机控制ADC0832的示例程序:
// 定义GPIO引脚号
#define SCL_PIN 1
#define SDA_PIN 2
#define A0_PIN 3
#define A1_PIN 4
#define A2_PIN 5
// 初始化ADC0832控制引脚
void initADC0832Pins() {
// 配置为输出模式
GPIO_SetPinDirection(SCL_PIN, OUTPUT);
GPIO_SetPinDirection(SDA_PIN, OUTPUT);
GPIO_SetPinDirection(A0_PIN, OUTPUT);
GPIO_SetPinDirection(A1_PIN, OUTPUT);
GPIO_SetPinDirection(A2_PIN, OUTPUT);
}
// 选择输入通道
void selectInputChannel(int channel) {
// 设置A0、A1、A2引脚的电平
GPIO_WritePin(A0_PIN, (channel & 0x01) == 0x01 ? HIGH : LOW);
GPIO_WritePin(A1_PIN, (channel & 0x02) == 0x02 ? HIGH : LOW);
GPIO_WritePin(A2_PIN, (channel & 0x04) == 0x04 ? HIGH : LOW);
}
// 发送启动信号
void sendStartSignal() {
GPIO_WritePin(SCL_PIN, HIGH);
GPIO_WritePin(SDA_PIN, LOW);
delay(1);
GPIO_WritePin(SCL_PIN, LOW);
delay(1);
}
// 控制时钟信号
void controlClockSignal() {
// 根据时序要求控制SCL引脚的电平
// ...
}
// 读取数据
int readData() {
int data = 0;
// 读取ADC0832的输出数据
// ...
return data;
}
// 主程序
int main() {
initADC0832Pins();
while (1) {
int channel = 0; // 选择通道0进行模数转换
selectInputChannel(channel);
sendStartSignal();
controlClockSignal();
int data = readData();
// 处理模数转换结果
// ...
delay(1000); // 延迟一段时间后进行下一次模数转换
}
}
6. 总结
本文介绍了单片机对ADC0832的控制原理,包括ADC0832的基本特性、接口连接、控制流程和控制程序。

通过了解这些内容,可以在单片机系统中成功使用ADC0832进行模拟信号的数字化转换。

相关文档
最新文档