如何来看单片机外设A/D转换器ADC0804时序图
如图,为单片机AD转换器的一种:
ADC0804单片集成A/D转换器。它采用CMOS工艺20引脚集成芯片,分辩率为8位,转换时间为100µs,输入电压范围为0~5V。芯片内具有三态输出数据锁存器,可直接接在数据总线上。
各引脚名称及作用如下:
VIN(+),VIN(-)——两模拟信号输入端,用以接收单极性、双极性和差模输入信号。
DB7~DB0——具有三态特性数字信号输出口。
AGND——模拟信号地。
DGND——数字信号地。
CLK——时钟信号输入端。
CLKR——内部时钟发生器的外接电阻端,与CLK端配合可由芯片自身产生时钟脉冲,其频率为1/(1.1RC)。
CS#---片选信号输入端,低电平有效,一旦CS#有效,表明A/D转换器被选中,可启动工作。
WR#---写信号输入,低电平启动A/D转换。
RD#---读信号输入,低电平输出端有效。
INTR#---A/D转换结束信号,低电平有效表示本次转换已完成。
VREF/2---参考电平输入,决定量化单位。
VCC---芯片电源5V输入。
打开ADC0804的数据手册,我们可以看到以下典型的电路接法:
我们可以用仿真软件画出来:
接下来,我们分析一下上图的工作原理:
①ADC0804的片选端CS连接U2锁存哭的Q7输出端,我们可通过控制锁存器来控制CS,这样接的原因是TX-1C实验板扩展的外围太多,没有多余的I/O口独立控制ADC0804的CS端,所以选择U2。
② VIN(+)接电位器的中间滑动端,VIN(-)接地,因为这两端可以输入差分电压,即它可测量VIN(+)与VIN(-)之间的电压,当VIN(-)接地时,VIN(+)端的电压即为ADC0804的模拟输入电压。VIN(+)与电位器之间串联一个10kΩ电阻,目的是限制流入VIN(+)端的电流,防止电流过大而烧坏A/D芯片,当用短路帽短接插针ADIN后,电位器的中间滑动端便通过电阻R12与VIN(+)连接,此时调节电位器的旋钮,其中间滑动端的电压便在0~VCC变化,进而ADC0804的数字输出端也在0x00~0xFF变化。
③ CLKR,CLR,GND之间用电阻和电容组成RC振荡电路,用来给ADC0804提供工作所需的脉冲,其脉冲的频率为1/(1.1RC),按芯片手册上说明,R取10kΩ,C取150pF,TX-1C实验板上为了减少元件种类和焊接方便,C选用的是104磁片电容。大家在设计自己的电路时,可选择150pF电容,否则会影响A/D的转换速率。
④ VREF/2端用两个1kΩ的电阻分压得到VCC/2电压,即2.5V,将该电压作为A/D芯片工作时内部的参考电压。
⑤WR#、 RD#分别接单片机的P3.6和P3.7引脚,数字输出端接单片机的P1口。
⑥ 将AGND和DGND同时连接到实验板的GND上。我们在设计产品时,若用到A/D和D/A,一般这些芯片都提供独立的模拟地(AGND)和数字地(DGND)引脚,为了达到精度高,稳定性好的目的,最好将所有器件的模拟地和数字地分别连接,最后将模拟地与数字地仅在一点连接。
⑦ INTR#引脚未连接,TX-1C实验板上读取A/D数据未用中断法,因此可不接该引脚。数字芯片在操作时首先要分析它的操作时序图,图4.4.6是ADC0804的启动转换时序图。
ADC0804转换时序图:
分析图4.4.6可知,CS先为低电平,WR#随后置低,经过至少tW(WR#)L时间后,WR#拉高,随后A/D转换器被启动,并且在经过(1~8个A/D时钟周期+内部TC)时间后,模/数完成转换,转换结果存入数据锁存器,同时INTR自动变为低电平,通知单片机本次转换已结束。关于几个时间的大小在芯片手册中都有说明。
我在写单片机程序启动A/D转换时就要遵循上面的时序,由于TX-1C实验板未用中断读取A/D数据,因此我们在启动A/D转换后,稍等一会儿时间,然后直接读取A/D的数字输出口即可。读取结束启动一次A/D转换,如此循环下去。力4.4.7是ADC0804读取数据时序图。
分析上图可知,CS先为低电平,WR#随后置低,经过至少tW(WR#)L时间后,WR#拉高,随后A/D转换器被启动,并且在经过(1~8个A/D时钟周期+内部TC)时间后,模/数完成转换,转换结果存入数据锁存器,同时INTR自动变为低电平,通知单片机本次转换已结束。关于几个时间的大小在芯片手册中都有说明。
我在写单片机程序启动A/D转换时就要遵循上面的时序,由于TX-1C实验板未用中断读取A/D数据,因此我们在启动A/D转换后,稍等一会儿时间,然后直接读取A/D的数字输出口即可。读取结束启动一次A/D转换,如此循环下去。力下图是ADC0804读取数据时序图。
分析上图可知,当INTR#变为低电平后,将CS#先置低,在RD#置低至少经过tACC时间后,数字输出口上的数据达到稳定状态,此时直接读取数字输出端口数据便可得的数字信号,读走数据后,马上将RD#拉高,然后再将CS#拉高,INTR#是自动变化的,当RD#置低tR1时间后,INTR#自动拉高,我们不必人为去干涉。
图4.4.6和图4.4.7是ADC0804启动转换和读取数据的时序图,这是启动一次和读取一次数据的时序图,当我们要连续转换并且连续读取数据时,有没有必要每次都把CS#置低再位高,因为CS#是片选信号,置低表示该芯片可被操作或处于能够正常工作状态,所以在写程序时,只要一开始将CS#置低,以后当要启动转换和读取数据时只需操作WR#和RD#即可。
如何来看单片机外设A/D转换器ADC0804时序图的更多相关文章
- 80C51单片机指令的取指、执行时序
80C51单片机指令的取指.执行时序 现按4类指令介绍CPU时序.因为CPU工作的过程就是取指令与执行指令的过程,所以CPU必须先取出指令,然后才能执行指令. 1.双字节单周期指令 由于双字节单周期指 ...
- 51单片机 | 使用D/A转换器实现三角波发生器
———————————————————————————————————————————— D/A转换器 CS=0.ILE=1时,WR1信号有效时将数据总线上的信号写入8位输入锁存器 XFER=0时,W ...
- Python 开发轻量级爬虫03
Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...
- Android7.0 Phone应用源码分析(四) phone挂断流程分析
电话挂断分为本地挂断和远程挂断,下面我们就针对这两种情况各做分析 先来看下本地挂断电话的时序图: 步骤1:点击通话界面的挂断按钮,会调用到CallCardPresenter的endCallClicke ...
- 微信小程序支付简单小结与梳理
前言 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点. 当然在开发之前,我们需要有下面这些东 ...
- <转>浏览器缓存机制
本篇博客转载自github,原文地址:浏览器缓存篇 前言 在前端开发中,缓存有利于加快网页的加载速度,同时缓存能够被反复利用,所以可以减少流量和带宽的开销. 缓存的分类有很多种,CDN缓存.数据库缓存 ...
- [转]微信小程序支付简单小结与梳理
本文转自:https://www.cnblogs.com/onetwo/p/6667424.html 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物 ...
- 编写SDR SDRAM页突发模式控制器的注意点
网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...
- 微信小程序支付功能讲解(1)
前言:虽然小程序做过很多,但是一直觉得微信支付功能很是神秘,现在终于有机会接触心里还是有点小激动的,经过一番折腾发现支付也不过如此,在此记录下支付功能的实现过程 小程序的官方文档介绍到发起微信支付即调 ...
随机推荐
- 24 服务AIDL
AIDL远程访问服务的方法 创建一个接口类写上方法 然后修改后缀java为aidl 在服务中创建一个类继承Stub类 在远程访问服务的进程把AIDL文件复制(包名不能改变) XXXX.Stub.asI ...
- 【安卓开发】为什么不能往Android的Application对象里存储数据
在一个App里面总有一些数据需要在多个地方用到.这些数据可能是一个 session token,一次费时计算的结果等.通常为了避免activity之间传递对象的开销 ,这些数据一般都会保存到持久化存储 ...
- Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52532085 不知不觉到第九篇了,感觉还有 ...
- 六星经典CSAPP笔记(1)计算机系统巡游
CSAPP即<Computer System: A Programmer Perspective>的简称,中文名为<深入理解计算机系统>.相信很多程序员都拜读过,之前买的旧版没 ...
- [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用增加字体图标
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38458411本文作者:sushengmiyan-------------------- ...
- Android布局性能优化—从源码角度看ViewStub延迟加载技术
在项目中,难免会遇到这种需求,在程序运行时需要动态根据条件来决定显示哪个View或某个布局,最通常的想法就是把需要动态显示的View都先写在布局中,然后把它们的可见性设为View.GONE,最后在代码 ...
- 查看LOV对应查询语句的研究
一.获取当前会话id 1.方法一 tools: Help > About 2.方法二 打开个性化定义界面(如果没有权限,到系统配置文件设置中,查看是否是"隐藏诊断菜单"被设置 ...
- numpy教程:快速傅里叶变换模块numpy.fft
http://blog.csdn.net/pipisorry/article/details/51050297 快速傅里叶变换 NumPy中,fft模块提供了快速傅里叶变换的功能.在这个模块中,许多函 ...
- hive支持in用法是从0.3.2版本后
写hive 用in 如分时段,分类型,分平台统计点击量 select substr(createtime,12,2) hour,logtype,os_id,count(*) from wizad_ ...
- iOS开发xcode报错:"xxxxxx"has been modified since the precompiled header was built
最近做iOS开发,老是遇到这种问题,正好我有两个版本的Xcode,换了另一个,就正常了,所以也一直没解决. 今天又遇到这个问题,就查了一下资料,找到了解决办法,在次记录一下方便查找,就是在Xcode中 ...