02- 模块化编程-006 ADC0808数码显示对比

1、ADC0808 芯片介绍

        ADC0808是一款集成的CMOS设备,包含8位模拟至数字转换器、8通道多路复用器和与微处理器兼容的控制逻辑。8位A/D转换器采用逐次逼近作为转换技术。转换器特点包括高阻抗斩波稳定比较器、256R电压分压器、模拟开关树和逐次逼近寄存器。8通道多路复用器可以直接访问8个单端模拟信号。

        该设备消除了外部零点和满量程调整的需要。通过锁存和解码的多路复用器地址输入以及锁存的TTL TRI-STATE®输出,提供了与微处理器的简易接口。

        ADC0808的设计通过结合几种A/D转换技术的最理想方面进行了优化。ADC0808和ADC0809提供高速、高精度、温度依赖性小、长期精度和重复性极佳,并且功耗极低。这些特点使得该设备非常适合从过程和机器控制到消费和汽车应用的应用。 

特点
  • 易于与所有微处理器接口

  • 可以比率计量操作或使用5 Vpc或模拟跨度调整的电压参考

  • 不需要零点或满量程调整

  • 8通道多路复用器,带地址逻辑

  • 输入范围0V至5V,单5V电源供电

引脚定义

IN0~IN7:8路模拟量输入端。

D0~D7:8位数字量输出端。

ADDA、ADDB、ADDC:3位地址输入线,用于选择8路模拟通道中的一路,选择情况见表。

ALE:地址锁存允许信号,输入,高电平有效。

START:A/D转换启动信号,输入,高电平有效。

EOC:A/D转换结束信号,输出。当启动转换时,该引脚为低电平,当A/D转换结束时,该线脚输出高电平。

OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。

CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ. REF+、REF-:基准电压输入端。

 时序图

典型电路 

 2、仿真电路

电路中,12位的max1241和adc0808电压采样结果形成对比,红色数码管显示的是 adc0808,蓝色数码管显示的是max1241的采样结果,结果表明,两者误差相差10倍以上。

3、软件代码

ADC0808.c
/********************************************************************** 模块名称: Adc0808.h* 模块名:ADC0808控制模块* 功能描述: 该模块定义了与ADC0808进行通信所需的宏和函数原型* 创 建 人:bianjingyuan * 日期:2024-10-30* 编译环境:Windows XP + MPLAB IDE 8.83 + Picc 9.60* 版本号:1.0* 修改记录:*********************************************************************/
// 数据类型定义
#define 	uchar 	unsigned char
#define 	uint  	unsigned int
#define 	ulong 	unsigned long
#define 	nop		asm("NOP")
#define 	sleep  	asm("sleep")
//**************************新增模块的相关定义**********************************/
// 定义0808通信端口
/*解析:
START、EOC 和 OE 是用于0808通信的端口信号。
TRISD3 = 0 配置RD3为输出,表示在代码中START信号将由微控制器驱动。
TRISD4 = 1 配置RD4为输入,表示在代码中EOC信号为微控制器从外部设备读取的信号。
TRISA0 = 0 配置RA0为输出,表示在代码中OE信号将由微控制器驱动。
*/
#define START   RD3   	// RD3作为输出
#define EOC     RD4   	// RD4作为输入
#define OE      RA0   		// RA0作为输出// 宏定义 - 这里定义了PORTC为某个特定的硬件寄存器
#define ADC_DATA_PORT PORTC//**************************本模块的函数定义**********************************/
uchar ad_result=0;
extern void delayus(uchar a);// 延时10us最准
/********************************************************************** 函数名: Adc0808_Read* 功能描述: 读取ADC0808的转换结果* 调用函数: delayus()* 全局变量: ad_result, START, EOC, OE* 输    入: 无* 返    回: ADC转换结果(无符号字符)*********************************************************************/
uchar Adc0808_Read(void)
{// 首先是START信号,由低变高再变低START = 0;START = 1; // 清空ADC0808的内部寄存器值delayus(10);START = 0; // 下降沿开始AD转换// 然后看EOC信号,由高到低while (EOC == 0); // 等待EOC信号为0,表示转换完成// OUTPUT ENABLE(OE)信号变高,然后读取输出信号OE = 1;           // 使能输出ad_result = ADC_DATA_PORT; // 使用宏定义来读取数据OE = 0;           // 关闭输出return ad_result; // 返回ADC转换结果
}
main.c
//********************************************************************
//*  文件名:main.c
//*  文件描述:单片机主程序,负责系统初始化和电压显示
//*  编译环境: Windows XP + MPLAB IDE 8.83 + Picc 9.60
//*  编程者: bianjingyuan
//*  编程日期: 2024-11-06
//*  版本号:1.0
//*  修改记录:无
//********************************************************************
void main()
{Initial_System();     // 初始化系统设置ad_init();            // 初始化AD转换功能Set_Port_IO();        // 设置端口IO方向max7219_int();        // 初始化MAX7219显示驱动di();                 // 禁用全局中断TRISD0 = 1;           // RD0为转换结果输入TRISD4 = 1;           // 配置RD4为输入TRISC = 0b11111111;   // 配置RC端口为输入max1241_init_io();    // 初始化MAX1241模块add3 = 0; add2 = 0;  // 清除显示数据add1 = 0; add0 = 0;redo:counter = 0;for (k = 10; k > 0; k--)  // 进行10次采样,以获得5.115V电压基准{max1241_read_io();    // 读取MAX1241转换结果counter = counter + adre_1241; // 累加转换结果}cal_hex(counter >> 3);   // 计算结果并转为十六进制send(0x05, add3 + 128);  // 发送小数点相关数据,用于显示电压send(0x06, add2);send(0x07, add1);send(0x08, add0);counter = 0;for (k = 20; k > 0; k--)  // 进行20次采样,以获得ADC0808转换结果{Adc0808_Read();       // 读取ADC0808的转换结果counter = counter + ad_result; // 累加ADC转换结果}cal_hex(counter);        // 计算并转为十六进制send(0x01, add3 + 128); // 发送ADC结果send(0x02, add2);send(0x03, add1);send(0x04, add0);delay1s();              // 延时1秒delayms(100);           // 延时100毫秒delayus(10);            // 延时10微秒delay1s();              // 再次延时1秒goto redo;              // 循环返回到redo标签
}

4、代码解析

        该代码实现了对 ADC0808 的控制与数据读取。ADC0808 是一种8位模数转换器,具有8通道的多路复用输入。代码通过定义宏、设置引脚以及实现读取函数,实现与 ADC0808 的通信。模块的主要功能包括:

  1. 定义数据类型及控制信号

    • 使用宏定义了一些常用的数据类型缩写及控制信号,如 STARTEOC 和 OE,分别用于启动转换、检测转换结束和使能数据输出。
    • 定义 ADC_DATA_PORT 为数据读取端口。
  2. 读取转换结果

    • Adc0808_Read() 函数用于执行模数转换并读取转换结果。通过控制引脚信号顺序,实现对 ADC0808 的启动、转换完成检测,以及数据读取。

 5、硬件资源分配表 

序号引脚类别方向功能定义功能内容相关寄存器及配置
1RD3数字IO输出START启动信号TRISD3 = 0
2RD4数字IO输入EOC转换完成信号TRISD4 = 1
3RA0数字IO输出OE输出使能信号TRISA0 = 0
4PORTC数据端口输入ADC_DATA_PORT读取ADC数据数据端口(PORTC)

6、软件流程图


        在这个流程图中:

  • 启动ADC转换过程:流程的起点,开始ADC的转换过程。
  • 设置START信号由低变高再变低:设置ADC的START信号,通常是一个脉冲信号,用于启动ADC转换。
  • 等待EOC信号变高:等待转换结束信号EOC(End of Conversion)变为高电平,表示转换完成。
  • 使能输出(OE)读取转换结果:使能输出使能信号(OE),准备读取转换结果。

7、仿真运行结果

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6510.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【自动化测试】APP UI 自动化(安卓)-本地环境搭建

一、软件准备及版本介绍 软件版本JAVA-SDK1.8.0_181 python 3.10.10 Android SDK Tools 下最新版本即可,无特殊要求 PyCharm 2023.3.5(下最新版本即可,无特殊要求) 二、安装步骤及环境变量配置 2.1 Java安装及配置 1&am…

leetcode912.排序数组的题解

题目描述: 题目要求在不使用任何内置函数的情况下解决问题,时间复杂度为 O(nlog(n))。 笔者使用了快速排序,但是直接使用最原始的快速排序,有些特殊的测试用例会超时。 1)如果数组本身基本有序,则使用原始…

安装Blender并使用

前言 该系列记录了如何用Blenderpro来构建自己的场景数据集,从环境搭建到后期构建数据集的整个流程 本文章是第一部分,BlenderPrc2的安装以及环境配置 部分参考https://blog.csdn.net/weixin_49521551/article/details/121573334 官方文档https://dlr…

json-server的使用(根据json数据一键生成接口)

一.使用目的 在前端开发初期,后端 API 可能还未完成,json-server 可以快速创建模拟的 RESTful API,帮助前端开发者进行开发和测试。 二.安装 npm install json-server //局部安装npm i json-server -g //全局安装 三.使用教程 1.准备一…

MySQL详细安装教程

一、从MySQL官网安装 可以翻译成中文看起来就舒服多了 下载并打开安装包,能看到版本是8.0.36,双击运行或者右键选择打开,打开后是一个安装向导,这个安装向导会先帮我们安装一个 mysql-installer 的程序,再通过该程序安…

qt QErrorMessage详解

1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框,用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中,当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…

Vue3安装、创建到使用

vue安装 npm install vuenext # 全局安装 vue-cli npm install -g vue/cli #更新插件 项目中运行 vue upgrade --nextvue create 命令 vue create [options] <app-name> options 选项可以是&#xff1a; -p, --preset <presetName>&#xff1a; 忽略提示符并使用已…

Linux 下执行定时任务之 Systemd Timers

不知道 ECS 因为什么缘故&#xff0c;上面安装的 MySQL 服务老是不定期挂掉&#xff0c;本来想通过 Linux 得 Cron 配置个半小时的定时检测任务&#xff0c;结果一直没有执行&#xff0c;因此又尝试使用了 Systemd Timers 进行了重新配置&#xff0c;简要做个记录。 Systemd Ti…

计算机网络:网络层 —— IP 多播技术

文章目录 基本概念IP多播地址和多播组 IP多播的类型硬件多播将IPv4多播地址映射为多播MAC地址 基本概念 多播&#xff08;Multicast&#xff0c;也称为组播&#xff09;是一种实现“一对多”通信的技术&#xff0c;允许一台或多台主机&#xff08;多播源&#xff09;发送单一数…

OuteTTS:基于纯语言建模的开源文本到语音合成项目,支持语音克隆等多种语音合成任务

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

C语言 | Leetcode C语言题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; int singleNonDuplicate(int* nums, int numsSize) {int low 0, high numsSize - 1;while (low < high) {int mid (high - low) / 2 low;mid - mid & 1;if (nums[mid] nums[mid 1]) {low mid 2;} else {high mid;}}return …

【学习笔记】SAP ABAP——数据类型

SAP ABAP——数据类型 SAP模块介绍数据类型内涵数据类型分类预定义数据类型数据字典数据类型用户自定义数据类型 SAP模块介绍 模块模块名称FI财务会计CO管理会计SD销售分销MM物料管理PM工厂维护HR人力资源PS项目管理BW数据仓库BC系统相关PP生产制造 数据类型内涵 ​ 数据类型…

国产服务器平台离线部署k8s和kubesphere(含离线部署新方式)

"信创&#xff1a;鲲鹏麒麟&#xff0c;ARM64架构&#xff0c;实现K8s和Kubesphere的离线部署&#xff0c;全新方式助力企业高效运维。" 本文将深入探讨如何借助鲲鹏CPU(arm64)和操作系统Kylin V10 SP2/SP3,通过KubeKey制作KubeSphere与Kubernetes的离线安装包&#…

SpringBoot在线教育系统:技术与实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

初始JavaEE篇——多线程(7):定时器、CAS

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 定时器的使用 定时器的原理 模拟实现定时器 CAS 介绍 CAS的应用场景 解析 AtomicInteger 类 实现自旋锁 CAS的缺陷…

【金融风控】相关业务介绍及代码详解

金融风控相关业务介绍 【了解】项目整体介绍 1.风控业务和风控报表</span> 零售金融产品 相关的指标 风控建模流程 ​ #2.特征工程 特征构造 特征筛选 ​ 3.评分卡模型构建 逻辑回归 集成学习 XGBoost LightGBM 模型评估 ​ #4.样本不均衡问题/异常点检测 【了解】今日…

Spring Bean的作用域和生命周期

在 Spring 框架中&#xff0c;Bean 是用于管理对象的核心组成部分。Spring 的 IoC 容器通过 Bean 的作用域来控制它们的生命周期。理解 Spring Bean 的作用域和生命周期对于开发灵活、高效的 Spring 应用至关重要。 Spring Bean 的五种作用域 Spring 提供了五种 Bean 作用域&a…

Linux 配置JDK

文章目录 一、下载Oracle-JDK1.1、如何正确的下载JDK二、配置JDK环境变量2.1 环境变量配置2.1.1、修改vim /etc/profile 添加jdk的路径一、下载Oracle-JDK 1.1、如何正确的下载JDK 首先我要安装的是oracle-jdk,这个时候什么地方都不要去,就去oracle的官网,然后找到,jdk的下…

adb 常用命令汇总

目录 adb 常用命令 1、显示已连接的设备列表 2、进入设备 3、安装 APK 文件到设备 4、卸载指定包名的应用 5、从设备中复制文件到本地 6、将本地文件复制到设备 7、查看设备日志信息 8、重启设备 9、截取设备屏幕截图 10、屏幕分辨率 11、屏幕密度 12、显示设备的…

人工智能技术:未来生活的“魔法师”

想象一下&#xff0c;未来的某一天&#xff0c;你醒来时&#xff0c;智能助手已经为你准备好了早餐&#xff0c;你的智能家居系统根据你的心情和日程安排调整了室内的光线和音乐&#xff0c;而你的自动驾驶汽车已经在门口等你。这不是科幻小说&#xff0c;这是人工智能技术为我…