五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据上篇文章介绍了LCD的驱动显示,在工业仪表中,也常用七段数码管显示过程参数,尽管显示内容不如LCD丰富,但在光线较明亮的地方,LED数码管显示更

大家好,欢迎来到IT知识分享网。

上篇文章介绍了LCD的驱动显示,在工业仪表中,也常用七段数码管显示过程参数,尽管显示内容不如LCD丰富,但在光线较明亮的地方,LED数码管显示更清晰醒目。本文用五位一体共阳数码管,显示18位ADC采集转换的浮点数据。在位数比较多时,为减少对控制器I/O口的占用,都采用动态扫描显示。对五位集成数码管而言,各位数码管的相同段在内部是相连的;每位数码管的LED阳极是相连的,但各位相互独立,便于动态扫描轮显。器件内部原理如图一所示。

五位数码管显示18位ADC转换数据

图一 五位共阳数码管内部连接原理

采用单片机控制数码管显示ADC采集的数据,是一项软、硬件紧密结合的工作,这里使用Keil C51做编译软件,先简介一下建立简洁工程项目的步骤。

Step1:在E盘中建立一个名为ADC_TEST项目文件夹,在其中再建立四个名为Source、Header、Obj、Lis的二级文件夹。Source中专门存放工程所需的C语言程序模块,Header中存放相关头文件,包括单片机厂商提供的头文件、程序中用到的编译器内置头文件和用户自建的头文件;Obj、Lis中存放编译器产生的中间文件,以免项目文件夹内的文件太杂乱,其中Obj中存放有下载到单片机中的hex程序;

Step2:在Keil软件中,对Step1建立的项目文件目录进行对应的规划设置,按图二所示方法进行配置;

五位数码管显示18位ADC转换数据

图二 项目文件规划

Step3:对编译环境进行配置,将Keil编译器产生的中间文件存放到Obj和Lis文件夹;配置头文件路径为Header文件夹所在位置。按图三、图四及图五所示顺序进行配置即可。

五位数码管显示18位ADC转换数据

图三 工作环境配置1

五位数码管显示18位ADC转换数据

图四 工作环境配置2

五位数码管显示18位ADC转换数据

图五 工作环境配置3

软件框架搭好后,首先要设计单片机外围连接电路,选定外设器件,再根据引脚控制功能编写程序。

选择ADC 主要考虑分辨率、精度、数据接口、转换速率和是否能自我校正。分辨率是由ADC位数n决定的,它是数字量变化一个最小刻度时,对应模拟输入的变化量,即LSB对应的模拟输入电压。分辨率的实质是ADC所能感知的最小电压,位数n比较少的ADC,比较高的输入电压才能被感知,对微弱输入信号没反应,精度肯定是比较低的。高分辨率是高精度检测的前题条件,现在选用ADC,10位是起步位数,16位、18位ADC使用的较多。对于一个18位的ADC,共有2的18次方个刻度,当差分输入电压范围是±2.048V时,分辨率为4.096/即15.625微伏,能满足高精度检测要求。但精度是用来描述准确度的,它和分辨率没有必然的联系,ADC器件精度指标常用INL(积分非线性)和DNL(差分非线性)来表示。INL是指ADC在所有数值上对应的模拟值,和真实值误差最大的那一点的误差值,直接反映了器件测量数据的准确度和可信度;DNL表示ADC相邻两个刻度之间的最大差异,理想情况是两个相邻刻度之差为1LSB,当DNL等于或大于1LSB时,会造成刻度紊乱,使ADC测量结果在几个数值之间跳动。系统精度是个综合指标,除和器件本身精度有关外,还和外部电源、干扰情况及外接元件有关,需从整体上加以考量,并用软件加以补偿修正;

数据接口一般采用串行I2C接口和SPI接口,如要求转换速率较高时,选用SPI接口快速ADC。

本项目选用MCP3421A0作模数转换器件,其为18位Delta-Sigma型ADC,内置精密2.048V参考电压,无需外接基准源;片内含有时钟振荡器,无需外接晶振电路;内置PGA,输入微小信号时,仍可保持高分辨率。MCP3421以从机身份与主单片机进行2线I2C通信,为微型SOT-23-6封装,仅有六个引脚,每次转换都进行增益和失调的自校正,非常易于使用。MCP3421与单片机通信时,由单片机发串行时钟信号,每个数据位对应一个时钟脉冲,接收数据的一方使用应答脉冲作为通信的握手信号。由写入器件的配置字节的相应位,决定MCP3421的转换模式、分辨率及增益;单片机读取输出代码和配置字节时,可应答NAK,以终止MCP3421的输出。

本项目完成对不同电压等级的输入信号进行取样检测,经简化的电路图如图六所示。基于该硬件电路,进行软件的编写、下载调试及与电脑进行UART通信,UART用于电脑显示ADC的转换数据,以便于计算软件中的校正系数。在串口助手中显示情况如图七所示。

五位数码管显示18位ADC转换数据

图六 项目简化硬件电路

五位数码管显示18位ADC转换数据

图七 ADC转换数据在串口助手中显示

单片机C语言程序编写都遵循模块化编程思想,有三个层次的模块,即由语句块构成的单一功能函数;由功能函数构成,能实现一类功能的操作模块,并作为项目的一个.C源文件;最后是形成项目整体逻辑流程的上层操作模块,是包含程序入口主函数main()的.C文件。

MCP3421与单片机之间采用I2C协议进行数据交互,将所有对I2C总线进行底层操作的函数,均放在IIC.c源文件中,程序模块如图八所示。

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

图八 IIC.c程序模块

依据MCP3421的读写时序图要求,单片机将配置字节写入MCP3421,并将其转换结果和工作状态读到单片机中,这是本项目的关键工作,因此,将对器件的读写操作函数单独存放在MCP3421.c程序模块中,以便于调试和改进,该程序模块如图九所示。

五位数码管显示18位ADC转换数据

图九 MCP3421.c程序模块

对数码管动态扫描的要求是,眼睛感觉五个数码管是同时显示的,且无闪烁现象。为此,动态扫描频率需设置在100Hz左右,扫描周期为10ms左右,即数码管显示间隔时间为2ms,使用T0定时中断产生2ms的间隔时间,需要对T0的SFR进行配置,对初值进行计算;

要使用UART与电脑通信,需配置串口控制寄存器和指定波特率发生器;IO端口也要进行初始化配置。我们将这些配置函数均放在ConfigFun.c文件中,程序模块如图十所示。

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

图十 ConfigFun.c程序模块

完成项目整体逻辑流程,实现人机交互工作,是包含main()函数的.c文件应该实现的功能。通过对其他程序模块中函数的调用,最终实现项目的目标。在调用其他程序模块中函数和全局变量时,加extern关键字进行声明,这样做,对于小型项目,可不用编写很多头文件,使程序看起来比较整洁,便于阅读。将该程序模块命名为MAIN.c,如图十一所示。

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

五位数码管显示18位ADC转换数据

图十一 MAIN.c程序模块

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/73582.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信