实验题目: A/D转换实验
附:实验报告
一、 实验目的
1. 掌握Keil软件的基本使用
2. 学习和掌握C语言编写程序的一般格式
3. 学习单片机简单的I/O口的控制方法
4. 学习数码管的控制方法
5. 学会看时序图,简单的SPI协议的使用
6. 掌握XPT2046把模拟信号转化为数字信号输出的方式
二、 实验内容
使用XPT2046芯片把光敏电阻采集的信号转化为数字信号,再使用数码管显示出亮度值(随光敏电阻的受光照程度不同,值也不一样)
三、 实验原理
(1) 光敏电阻的电路图
2
(2) 基础知识介绍
光敏电阻的工作原理
光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体及梳状欧姆电极,接出引线,封装在具有透光镜的密封壳体内,以免受潮影响其灵敏度。
入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。
光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。随着的光照强度的增加,光敏电阻的阻值开始迅速下降。若进一步增大光照强度,则电阻值变化减小,然后逐渐趋向平缓。在大多数情况下,该特性为非线性。
3
XPT2046是一款4线电阻式触摸屏控制器,采用12位125 kHz采样SAR型A / D转换器。
XPT2046工作电压低至2.2V,支持1.5V至VCC的数字I / O接口电压,以连接低压uP。 XPT2046可以通过执行两次A / D转换来检测按下的屏幕位置。 除了定位,XPT2046还可测量触摸屏压力。片上VREF可用于模拟辅助输入,温度测量和电池监控,能够测量0V至5V的电压。
XPT2046还具有片上温度传感器XPT2046采用16引脚QFN薄封装(高度0.75mm),工作温度范围宽:-40°C至+ 85°
(3) XPT2046芯片引脚图
4
(4) 芯片时序图
四、 实验过程
1. 这次实验需要用到xpt2046芯片,光敏电阻和数码管相关知识,首先对数据类型进行声明定义,定义共阴数码管0-F对应编码
Unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
定义P2两个端口,定义xpt2046芯片控制字输入端口、使能端(为低电平有效)、时钟输入端(在时钟时钟上升沿或下降沿进行数据输入或输出)、ad转换后,数字量输出口(串行输出)。代码如下:
5
sbit DIN=P3^4; sbit CS=P3^5; sbit CLK=P3^6; sbit DOUT=P3^7;
2. 主函数中while循环中开启模块使能,输入控制字0xD4 1101 0100,再延迟一些,等待下一个转换结果,结合时序图需要延迟一个时钟周期。SPI读取数据,再关闭模块使能
while(1) { CLK=0; CS=0;
SPI_write(0XD4); for(i=6;i>0;i--); CLK=1;_nop_();_nop_(); CLK=0;_nop_();_nop_(); SPI_read(); CS=1;
display(number); }
3. 接下来设置数码管显示的数字,也是电压值在光敏电阻作用下的变化值。结合for循环来对四位数字进行动态显示
void display(uint number1) {
6
int i=0;
number1=100-(number1/33); qian=number1/1000; bai=number1%1000/100; shi=number1%100/10; ge=number1%10; for(i=0;i<100;i++) {
AIN=0,BIN=0; P0=table[ge]; delayms(5); P0=0; AIN=1,BIN=0; P0=table[shi]; delayms(5); P0=0; AIN=0,BIN=1; P0=table[bai]; delayms(5); P0=0; AIN=1;BIN=1; P0=table[qian]; delayms(5); } }
7
4. 然后定义控制信号,控制位最高位赋给DIN输入口,接着串行输入,时钟上升沿将会控制字一位一位的输入
void SPI_write(uchar controlword) { uchar m; CLK=0;
for (m=0;m<8;m++) {
DIN=controlword>>7; controlword=controlword<<1; CLK=0; CLK=1; } }
5. 最后要注意清零,,number是全局变量,如果不清零下次再进行移位时运算的结果得不到所需要的number,number不赋初值的话全局变量默认初值为0。时钟下降沿,把一位数据从DOUT口输出,每次循环把DOUT输出的数字放在number最低位,同时number进行左移一位,十二个周期后,ad转换的12位数字量全部赋给了number=数字信号,实现ad转换完整过程。
void SPI_read(void) { uchar n; CLK=0;
8
number=0; for(n=0;n<12;n++) {
number=number<<1; CLK=1; CLK=0;
number = number | DOUT; } }
四、思考并回答以下问题
1、XPT2046芯片使用的数据传输协议是什么?请大概介绍一下这个协议。
XPT2046内部包含了一个多路选择器,能够测量电池电压、AUX电压、芯片温度。一个12位的ADC用于对选择的模拟输入通道进行模数转换,得到数字量,然后送入控制逻辑电路,供主控CPU进行读取,同时,具体选择哪个通道进行转换,也是由主控CPU发送命令给控制逻辑来设置的。同时支持笔触中断,即当触摸屏检测到触摸被按下时,可以立即产生笔触中断,通知主控制器可以控制开始转换并读取数据。在转换过程中,通过busy信号指示当前忙状态,以避免主控发出新的命令中断之前的命令,通过SPI接口与主控制器进行通信。
XPT2046可以单电源供电,电源电压范围为2.7V~5.5V。参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)。X、Y、Z、VBAT、Temp和AUX模拟信
9
号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端或差分模式。选择VBAT、Temp和AUX时可以配置为单端模式;作为触摸屏应用时,可以配置为差分模式。
2、为什么这个芯片的编程需要根据时序图来进行编写?
因为要想正确的读到X、Y坐标,需要按照芯片规定的控制协议进行数据的读写。XPT2046实现一次X、Y坐标的读取需要完成两次转换,单一一次转换只能得到单一X或Y的坐标,因此,我们必须通过两次控制才能到到结果。至于每一次转换的对象为X或Y坐标,由控制器发出的控制字决定。ADC在转换时能够被配置为单端或差分模式,具体的控制字在每次传输开始的时候,由主控MCU驱动DIN信号传输。
XPT2046数据接口是串行接口,其典型工作时序如下图所示,图中展示的信号来自带有基本串行接口的单片机或数据信号处理器。处理器和转换器之间的的通信需要8个时钟周期,可采用SPI、SSI和Microwire等同步串行接口。一次完整的转换需要24个串行同步时钟(DCLK)来完成。
前8个时钟用来通过DIN引脚输入控制字节。当转换器获取有关下一次转换的足够信息后,接着根据获得的信息设置输入多路选择器和参考源输入,并进入采样模式,如果需要,将启动触摸面板驱动器。3个多时钟周期后,控制字节设置完成,转换器进入转换状
10
态。这时,输入采样-保持器进入保持状态,触摸面板驱动器停止工作(单端工作模式)。接着的12个时钟周期将完成真正的模数转换。
3、大概介绍一下模数转换应用于哪些领域?主要做什么?(列出三点以上)
应用到我们能量化的数据,广泛应用在多媒体、通讯、自动化、仪器仪表、医疗仪器、电子测量。军事、航天系统等领域,采用脉动型和折叠型等结构的高速模数转换,可应用于广播卫星中的基带解调等方面。
1、测温计:使用热敏电阻测温,将热敏电阻测得的温度转换为电压值,经AD转换后显示温度
2、电机控制应用:电机的转速和位置可以通过监控电机每个相位的电流来判断。A/D转换器能非常精确地监控电流,因而对电机控制应用十分理想
3、智能手机:cpu通过各种传感器(如摄像头)才能够与外界互动,A/D转换器就是一种不可或缺的桥梁。
五、实验总结和体会
在完成A/D转换实验的过程中我了解了spt2046芯片相关的原理和内部功能,虽然只接触这个典型的逐次逼近型模数转换器,但是觉着要学习的还是蛮多的,重点是要根据时序图来对其操作程序,这个还是有很多不懂的地方,对程序除了原先接触过的可以理解外,新学到的串行接口和控制字这些还需要花时间去学习,光敏电阻以前学过相关知识还好理解,总的来说就是看到懂若是自己编写还是不能写的好,不过要学号这些还是要多练,
11
多记一些相关代码功能。
12
因篇幅问题不能全部显示,请点此查看更多更全内容