普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化

实验做完了,总结一下,这些都是做实验的时候自己收集整理总结的资料,下面分享一下

XPT2046芯片:
XPT2046的功能很多,这里只介绍怎么用该芯片来完成AD数模转换的实验。
XPT2046 是一种典型的逐次逼近型模数转换器(SAR ADC),包含了采样/保持、模数转换、串口数据输出等功能,因此我们可以用这个芯片来完成本次实验AD转换的内容。
本次实验使用的是XPT芯片的电压模式,首先看下面这个图,了解芯片的引脚和功能,我们要操作的引脚有DCLK 、CS非、DIN 、DOUT:
附上开发板ADC模块的原理图:

我们主要了解和使用红色圈圈的几个引脚:

了解完引脚之后,就要看怎么去使用和控制这些引脚来达成目标,
所以接下来要看的就是时序工作图,要了解芯片是如何工作,如何完成采样 保持 量化 编码这几个步骤的.。
一次完整的转换需要 24 个串行同步时钟(DCLK)来完成。(看DCLK时序那,一共出现了3次8, 3*8=24)

要想启动选中该芯片,首先得给CS和CLK置0 (因为单片机默认引脚输出1) ,然后开始写入数据

处理器和转换器之间的的通信需要 8 个时钟周期,可采用 SPI、SSI 和Microwire 等同步串行接口。前面8个时钟就在进行通信。

前8个时钟就是用来通过DIN引脚输入控制字节。

先看DIN的时序(图中有几个英文单词,Idle的意思是闲置的意思,aquire是获取的意思,conversion是转换的意思,个人理解是图中把DIN在24个时钟周期内的变化,分成了几个段,闲置段,获取段,转换段)DIN的控制位有8位,下面开始从最高位开始介绍:

控制字的首位必须是 1,即 S=1。在 XPT2046 的 DIN 引脚检测到起始位前,所有的输入将被忽略。

A2-A0的选择,由于我选择的是工作在单端模式,则要选中XP输入(至于为什么是XP输入下面解释),所以A2-A0是选择001或者011都可以(二者都能选中XP输入)。如下图:

我们可以看一下在单端模式下的原理图:(XP是接IN+输入的,所以我们要选中XP输入工作)

MODE:模式选择位,用于设置 ADC 的分辨率。MODE=0,下一次的转换将是 12 位模式;MODE=1,下一次的转换将是 8 位模式。我选择的是8位

SER/ DFR非 :控制参考源模式,选择单端模式(SER/ DFR非 =1),或者差分模式。在单端模式下,转换器的参考电压固定为VREF相对于GND引脚的电压

PD0和PD1:控制掉电和内部参考电压配置的关系。我选择PD1和PD0都为0(为低功率模式)如下图:

当DIN的控制字节处理完成之后,转换器进入转换状态,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式)接着的 12 个时钟周期将完成真正的模数转换。

这个芯片的AD是逐次逼近式AD,逐次逼近式AD转换器中有一个逐次逼近寄存器SAR,其数字量是由它产生的。
附上图片:
SAR使用对分搜索法产生数字量,以8位数字量为例,SAR首先产生8位数字量的一半,即b=1000000,试探模拟量Vi的大小。若Vo>Vi,清楚最高度位;反之,则保留最高位。在最高位确认后,SAR又以对分搜索法确定次高位,即以7位数字量的一半1000000(y由前面的过程已确回认)试探模拟量Vi的大小。依此类推,直到确定了bit0为止,转换结束。

上面的解释可能不是很形象,那就举个具体的例子:模拟量经过内部的DA转换得到一个数字量108 二进制转换就是01101100(暂时称为A),首先先用10000000与A相比,A小于10000000,则第一位为0,保留,开始比较次高位,A大于01000000,则次高位保留1;下一位继续比较,A大于01100000,次次高位保留1,继续比较下一位,A小于01110000,则第4位(从左往右数)保留为0,继续比较,以此类推,一直比较到最后一位。

下面介绍一下ADC0808/0809

ADC0808芯片介绍:
内部结构和外部引脚:
ADC0808/0809的内部结构和外部引脚分别如图11.19和图11.20所示。内部各部分的作用和工作原理在内部结构图中已一目了然,在此就不再赘述,下面仅对各引脚定义分述如下:

图11.19 ADC0808/0809内部结构框图

图11.20 ADC0808/0809外部引脚图
(1) IN0~IN7——8路模拟输入,通过3根地址译码线ADDA、ADDB、ADDC来选通一路。
(2)D7~D0——A/D转换后的数据输出端,为三态可控输出,故可直接和微处理器数据线连接。8位排列顺序是D7为最高位,D0为最低位。
(3)ADDA、ADDB、ADDC——模拟通道选择地址信号,ADDA为低位,ADDC为高位。地址信号与选中通道对应关系如表11.3所示。
(4)VR(+)、VR(-)——正、负参考电压输入端,用于提供片内DAC电阻网络的基准电压。在单极性输入时,VR(+)=5V,VR(-)=0V;双极性输入时,VR(+)、VR(-)分别接正、负极性的参考电压。
(5)ALE——地址锁存允许信号,高电平有效。当此信号有效时,A、B、C三位地址信号被锁存,译码选通对应模拟通道。在使用时,该信号常和START信号连在一起,以便同时锁存通道地址和启动A/D转换。
(6)START——A/D转换启动信号,正脉冲有效。加于该端的脉冲的上升沿使逐次逼近寄存器清零,下降沿开始A/D转换。如正在进行转换时又接到新的启动脉冲,则原来的转换进程被中止,重新从头开始转换。
(7)EOC——转换结束信号,高电平有效。该信号在A/D转换过程中为低电平,其余时间为高电平。该信号可作为被CPU查询的状态信号,也可作为对CPU的中断请求信号。在需要对某个模拟量不断采样、转换的情况下,EOC也可作为启动信号反馈接到START端,但在刚加电时需由外电路第一次启动。
(8)OE——输出允许信号,高电平有效。当微处理器送出该信号时,ADC0808/0809的输出三态门被打开,使转换结果通过数据总线被读走。在中断工作方式下,该信号往往是CPU发出的中断请求响应信号。

ADC 0808/0809工作时序:

ADC 0808/0809的工作时序如图11.21所示。
当通道选择地址有效时,ALE信号一出现,地址便马上被锁存,这时转换启动信号紧随ALE之后(或与ALE同时)出现。START的上升沿将逐次逼近寄存器SAR复位,在该上升沿之后的2μs加8个时钟周期内(不定),EOC信号将变低电平,以指示转换操作正在进行中,直到转换完成后EOC再变高电平。微处理器收到变为高电平的EOC信号后,便立即送出OE信号,打开三态门,读取转换结果。

END

有什么地方不对的地方,欢迎指出。

开发板实验代码:

/******************************************************************
功能:
数码管前2位显示AD字符,后三位电位器的数字量,最后三位显示对应电压值实体机接线:
1,单片机-->AD/DAC模块P34-->DIP35-->CSP36-->CLP37-->DO
2,单片机-->动态数码管模块(P0端口)J22-->J6(动态数码管段选)P20-->J9(A)P21-->J9(B)P22-->J9(C)
******************************************************************/
#include "reg52.h"             //单片机头文件
#include<intrins.h>            //含_nop_()函数
#define uchar unsigned char
#define uint unsigned intsbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;sbit DIN=P3^4;    //串口输入
sbit CS=P3^5;    //片选
sbit CLK=P3^6;   //时钟脉冲
sbit DOUT=P3^7;      //串口输出uchar disp[8];    //储存读取的数据的每个位数,由数码管输出
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(uint i)//延时子程序,因为本程序的延时不需要到ms级别,所以没有用之前的用法
{while(i--);
}void SPI_Write(uchar dat)  //dat传输的是9C这个控制指令
{uchar i;CLK = 0;for(i=0;i<8;i++)        //DIN是串行数据输入口,需要一位位读取数据{DIN = dat >> 7;   //这里DIN取dat的最高位dat <<= 1;            //次高位左移一位变为最高位,方便下一次DIN读取数据CLK = 0;         //软件给予一个上升沿时序,用来放置数据_nop_();CLK = 1;}
}
uint SPI_Read()
{uint i, dat=0;             //dat用来存放读取的数据CLK = 0;for(i=0; i<8; i++)        //接收8位数据,DOUT是串行数据输出,也是需要一个个读取{dat <<= 1;          //左移一位CLK = 1;         //软件给予一个下降沿时序,因为数据是在CLK为下降沿的时候移出_nop_();CLK = 0;dat |= DOUT;       //与DOUT相或,读取数据}return dat;               //返回数据
}
uint Read_AD_Data(uchar cmd)
{uchar i;uint AD_Value;CLK = 0; //默认引脚输出1,这里要先软件置0   CS  = 0; //置0选中,启动ADSPI_Write(cmd);//写入数据for(i=6;i>0;i--); //延时等待转换结果CLK=0;_nop_();CLK = 1; //发送一个正脉冲,清除BUSY ,表示可以开始转换了_nop_(); CLK = 0;_nop_();_nop_();AD_Value=SPI_Read();   //AD_Value存放数据CS = 1;    //CS拉高,读取完毕return AD_Value;
}void datapros()
{uint temp,val;uchar i;if(i==50){temp = Read_AD_Data(0x9c);/*0x9c是给DIN输入控制字节,9c=10011100,具体的每一位是什么作用可以看芯片手册*/val=temp*100/51;//原来式子是(((temp*5*100)/255)),把temp先扩大100倍然后乘以5除以255得到电压值;}i++;disp[0]=0x77;//显示Adisp[1]=0x5e;//显示Ddisp[2]=smgduan[temp/100];//百位disp[3]=smgduan[temp/10%10];//十位   disp[4]=smgduan[temp%10];//个位  disp[5]=smgduan[val/100] |0x80;    //与0x80相或来得到小数点disp[6]=smgduan[val/10%10];disp[7]=smgduan[val%10];
}
void DigDisplay()
{uchar i;for(i=0;i<8;i++){switch(i)    //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位case(4):LSA=0;LSB=0;LSC=1; break;//显示第4位case(5):LSA=1;LSB=0;LSC=1; break;//显示第5位case(6):LSA=0;LSB=1;LSC=1; break;//显示第6位case(7):LSA=1;LSB=1;LSC=1; break;//显示第7位}P0=disp[i];//发送数据delay(100); //间隔一段时间扫描 P0=0x00;//消隐}
}
void main()
{   while(1){datapros();     //数据处理函数DigDisplay();//数码管显示函数     }
}

普中51开发板,用XPT2046芯片实现AD数模转换。protues仿真用ADC0808实现AD数模转化相关推荐

  1. 普中51开发板利用1602LCD与1302时钟芯片来显示时间的程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 跟着B站江科大的单片机视频学了一段时间了,今天决定写一下学到的内容,方便与朋友们交流学习一下,有单片机学习群的朋友请留 ...

  2. #普中51开发板# 52单片机数码管显示5201314

    74HC138真值表(H高,L 低,倒着数) #include<reg52.h> #include<intrins.h> #define LED P0 typedef unsi ...

  3. 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记

    使用74HC595芯片驱动LED点阵屏的使用笔记 1.控制显示LED点阵屏的思路 2.74HC595芯片的学习 2.1.74HC595芯片是什么? 2.2.74HC595芯片各引脚解释以及分析 2.3 ...

  4. 普中PZ6808L-F4开发板TFTLCD显示屏使用笔记

    0x00 开发板介绍 这学期学的STM32开发,实验室里的开发板型号为PZ6808L-F4 整个板子是这样的 这块板子是F103和F407双核的,但我学的一直就是F407,所以本文所有问题只针对F40 ...

  5. 普中A2开发板红绿灯实验

    ```#include"reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit k3=P3^2; sbi ...

  6. 【51单片机】:关于51单片机仿真器(普中科技开发板STC89C51)的疑惑(做个记录)

    学习目标: 由于一些特殊原因,重学51单片机,真是无力吐槽,学把,认真学.         仿真器,最主要的作用是仿真调试,每次检查代码找不到任何问题比如说debug.先全速运行几秒后点击停止,看程序 ...

  7. 普中科技开发板使用说明书_普中科技单片机实验板使用操作说明.pdf

    普中科技单片机实验板使用操作说明 单片机学习的良师益友 好帮手单片机学习套件 -PRECHIN 用手册 普中科技有限公司 P R E C H I N - V 2 . 0 开发板 Version 1.2 ...

  8. 普中单片机开发板HC6800-EM3 v2.2 3.0无法烧录下载程序解决

    普中科技单片机在淘宝上买了很久了,一直没用,现在要做设计,就拿来看看.这一看不要紧,刚开始就坑死人了写不进程序.研究了一晚上.其实很简单就是短路帽没接对. l 开发板:普中Prechin HC6800 ...

  9. 普中stm32开发板tftlcd显示图片_STM32实例TFTLCD介绍

    以前我们用 51 单片机控制 TFTLCD(TFT 液晶屏)时,使用的是 IO 口模拟80 接口时序.这次我们来学习如何使用 STM32F1 的 FSMC(灵活的静态存储控制器)接口控制 TFTLCD ...

  10. 普中科技开发板使用说明书_百度大脑加持,米尔科技FZ3深度学习计算卡评测

    如果你要问我现在电子产业什么最热,那无疑是AI,而基于大数据训练的深度学习技术可以说是目前AI应用的最广,最成功的产品形态了,覆盖我们生活的方方面面,诸如购物.看病.新闻编辑等,在这高深技术的背后少不 ...

最新文章

  1. BestCoder Round #68 (div.2) 1002 tree
  2. hung-yi lee_p4_Bias And Variance
  3. 怎么样实现左侧页面点击后右边页面显示内容
  4. 高智商孩子14个独有的特点
  5. linux的驱动开发——内核模块的编译
  6. 教你配置安全的ProFTPD服务器(中)
  7. 使用Fiddler对iPhone手机进行数据抓包分析
  8. linux server 5.5下载地址,《红帽Linux 5.5 for x86 服务器版》(RedHat Enterprise Linux Server 5.5 for x86)...
  9. OpenShift免费空间绑定顶级域名(图文教程)
  10. Mongo, Express, Angular, Node-- MEAN Stack搭建
  11. 【NLP】Transformer框架原理详解-1
  12. 安卓键 adb shell input keyevent code
  13. mysql查询排序(asc,desc)
  14. IDEA 类中找不到main方法请将main方法定义为public static void main. 否则 JavaFX 应用程序类必须扩展javafx.application.Applicati
  15. 微商城搭建教程,手把手教你开通自己的线上/定制微商城!
  16. [小o地图-数据] - 获取全国行政区划轮廓数据(上)
  17. 微信公众号文章排版中,去掉图片和图片之间的空白
  18. 机器学习之PQ量化算法
  19. 软件开发获取客户需求的十大沟通技巧
  20. 球差透射电镜和透射电镜的测试能力区别在哪?

热门文章

  1. 即时网络通讯系统的设计与实现(QQ)
  2. 旧版sai笔刷_漂亮的sai笔刷大全(ps笔刷包) 简化中文版
  3. 苹果手用计算机解锁手机密码,苹果手机怎么强制解锁 iPhone强制解锁密码教程...
  4. 大学生创新创业实务 复习题(无答案)
  5. 你专属的程序员春节“大礼包”
  6. NB-ioT的工作状态和工作模式
  7. 三菱GXWorks2 CPU软元件存储器的全部清除
  8. MATLAB 2015B中文安装激活破解方法图文教程
  9. MySQL 官网下载各版本连接驱动
  10. PHP代码审计工具RIPS