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

news2024/11/7 11:05:46

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.coloradmin.cn/o/2234963.html

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

相关文章

计算机体系结构之多级缓存、缓存miss及缓存hit(二)

前面章节《计算机体系结构之缓存机制原理及其应用(一)》讲了关于缓存机制的原理及其应用,其中提出了多级缓存、缓存miss以及缓存hit的疑问。故,本章将进行展开讲解, 多级缓存、缓存miss以及缓存hit存在的意义是为了保持…

scala set训练

Set实训内容: 1.创建一个可变Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示),初始化为包含几本你喜欢的书籍 2.添加两本新的书籍到图书馆集合中,使用操作符 3.删除一本图书馆集合中的书籍&…

linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述: 可以将上面这一 I2C 子系统划分为三个层次,分别为用户空间、内核空间和硬件层,内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层, 本篇主要内容就是介绍 I2C 子系统框架中…

鸿蒙系统崛起:开发者如何把握机遇、应对挑战并打造卓越应用体验?

在当今科技发展的浪潮中,鸿蒙系统(HarmonyOS)如一颗璀璨之星,正以迅猛之势崛起。随着其持续发展,鸿蒙系统在全球操作系统市场中已然崭露头角,呈现出与安卓(Android)和iOS分庭抗礼的态…

Scala入门基础(17)Set集

Set的定义Set的代码结构不可变与可变Set的区别Set常见操作 一.Set的定义 Set:集合 Set的特点:唯一(元素不相同) 二.Set的代码结构 val 变量名 Set[类型](元素1,元素2...) (演示&#xff09…

基于单片机的燃气报警阀门系统

本设计基于单片机的燃气报警阀门系统,燃气报警阀门系统采用STM32主控制器为核心芯片,外围电路由燃气传感器、OLED液晶显示模块、按键模块、蜂鸣器报警模块、电磁阀以及SIM800模块等模块组成。燃气传感器模块负责采集燃气浓度数据,采集完成由S…

揭秘云计算 | 2、业务需求推动IT发展

揭秘云计算 | 1、云从哪里来?-CSDN博客https://blog.csdn.net/Ultipa/article/details/143430941?spm1001.2014.3001.5502 书接上文: 过去几十年间IT行业从大型主机过渡到客户端/服务器,再过渡到现如今的万物互联,IT可把控的资…

qt QItemSelectionModel详解

1、概述 QItemSelectionModel是Qt框架中提供的一个功能强大且灵活的项选择模型类。它主要用于在用户界面中管理和操作用户选定的项,是实现交互式和响应式应用程序的重要组件。QItemSelectionModel能够帮助开发者创建用户友好和高效的多选列表、表格数据选择等应用场…

SAP ABAP开发学习——WDA 七 使用文本与消息

目录 从数据字典读取文本 使用OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的使用 T100 消息的使用 OTR消息实例 消息内容修改 从数据字典读取文本 使用OTR文本 可以自己创建OTR文本 从程序中调用OTR文本 消息分类 定义消息显示位置 text类消息的…

实习作假:阿里健康实习做了RABC中台,还优化了短信发送流程

最近有二本同学说:“大拿老师,能帮忙看下简历吗?” 如果是从面试官的角度来看,这个同学的实习简历是很虚假的。 但是我们一直强调的是:校招的实习简历是不能出现明显的虚假。 首先,你去公司做事情&#…

mqtt 传递和推送 温湿度计消息 js

mqtt 传递和推送 温湿度计消息 做了一个mqtt的小网站 包括设备管理,订阅管理,连接认证订阅授权 这里我新增了一个设备 订阅组温湿度里面有两个订阅 设备详情授权给设备使用 设备连接 和之前的wifi连接一样 温湿度也和之前的使用一样 require(u…

基于Jeecgboot3.6.3vue3的flowable流程增加online表单的审批支持(一)整体思路

更多技术支持与服务请加入我的知识星球或加我微信,名称:亿事达nbcio技术交流社区https://t.zsxq.com/iPi8F 今天讲一下流程审批支持online表单,我们知道,之前的VForm3表单不支持数据库存储,自定义业务表单要求又比较高,需要自己写一些前后端的代码,那online就不需要,可以…

Git超详细笔记包含IDEA整合操作

git超详细笔记 文章目录 git超详细笔记第1章Git概述1.1、何为版本控制1.2、为什么需要版本控制1.3、版本控制工具1.4 、Git简史1.5、Git工作机制1.6 、Git和代码托管中心 第2章Git安装第3章Git常用命令3.1、设置用户签名3.2、初始化本地库本地库(Local Repository&a…

HTML 基础标签——多媒体标签<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

flutter 项目初建碰到的控制台报错无法启动问题

在第一次运行flutter时&#xff0c;会碰见一直卡在Runing Gradle task assembleDebug的问题。其实出现这个问题的原因有两个。 一&#xff1a;如果你flutter -doctor 检测都很ok&#xff0c;而且环境配置都很正确&#xff0c;那么大概率就是需要多等一会&#xff0c;少则几十分…

使用ssh-key免密登录服务器或免密连接git代码仓库网站

ssh登录服务器场景 假设有两台机器&#xff0c;分别是&#xff1a; 源机器&#xff1a;主机A&#xff08;hostA&#xff09;&#xff0c;ip&#xff1a;198.168.0.1 目标机器&#xff1a;主机B&#xff08;hostB&#xff09;&#xff0c;ip&#xff1a;192.168.0.2 ssh-key免…

初识Electron 进程通信

概述 Electron chromium nodejs native API&#xff0c;也就是将node环境和浏览器环境整合到了一起&#xff0c;这样就构成了桌面端&#xff08;chromium负责渲染、node负责操作系统API等&#xff09; 流程模型 预加载脚本&#xff1a;运行在浏览器环境下&#xff0c;但是…

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能&#xff0c;今天继续进行开发&#xff0c;创作不易&#xff0c;请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

小新学习k8s第六天之pod详解

一、资源限制 Pod是k8s中的最小的资源管理组件&#xff0c;pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。k8s中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的StatefulSet和Deployment等…

戴尔电脑 Bios 如何进入?Dell Bios 进入 Bios 快捷键是什么?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机启动时运行的第一个程序&#xff0c;它负责初始化硬件并加载操作系统。对于戴尔电脑用户来说&#xff0c;有时可能需要进入 BIOS 进行一些特定的设置调整&#xff0c;比如更改启动顺序、调整性能选项或解决硬件兼容性问题…