找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6793|回复: 0
打印 上一主题 下一主题
收起左侧

ADC&&触摸屏实验及心得体会

[复制链接]
跳转到指定楼层
楼主
ID:3721 发表于 2015-1-5 01:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
概述:
ADC通过把输入的模拟信号进行采集,经过量化和编码后转换为对应的二进制数值,并输出。主要参数有:分辨率(位数)、量程、采样速率。通常高档单片机、嵌入式处理器都会把ADC集成在芯片内部。但是集成在芯片内部的ADC一般采样速率会比较低,高速ADC一般都是自己做一片芯片。用到过的有ADC9288可达到100MSa/S、ADC8D1010可达到1GSa/S的采样率【这里两款ADC都已经把采样和转换集成在一起】。
触摸屏是一张和屏幕大小一样透明的东西,和显示屏是分开的。通常有电阻屏、电容屏、红外屏和超声屏。电阻屏触摸需要按下,使得屏的上下短接,检测电压求坐标。电容屏是靠人体感应到静电的流通,电流由屏的四个角落提供,各个角所提供的电流和距离成正比,可依此计算坐标。红外屏和超声屏是靠障碍物的遮挡计算出障碍物的坐标。
S3C2440A ADC和触摸屏的概述:
S3C2440A的触摸屏是电阻式。
ADC功能框图如下:

可选作为ADC的输入信号有A[3:0]共8个模拟信号输入。
也可以用几个输入脚分时复用做触摸屏接口,具体看电路图设计部分。

寄存器简单描述
ADC控制寄存器ADCCON:
转换结束标志;
预分频允许与否,以及预分频数值;
输入通道选择;
模式选择;
读开始下一次ADC允许与否;
开始ADC转换;
ADC触摸屏控制寄存器ADCTSC:
YP、YM、XP、XM输出设置;
X/Y位置自动连续转换与否;
上拉开关允许与否(XP);
手动测量X/Y位置;
ADC开始或区间延时寄存器ADCDLY:
ADC从触针向下动作到开始转换的时间长(X转换时长、Y转换时长)=DELAY*时钟;【时钟为1/EXTCLK or 1/PCLK】
ADC转换数据寄存器ADCDAT0、ADCDAT1:
等待中断模式:触针向下还是抬起;
自动连续X位置和Y位置转换;
手动X位置和Y位置测量;
X位置转换值(包括普通ADC转换值)、Y位置转换值;

电路图设计
AIN0作为ADC的模拟输入,最简单的功能:

触摸屏接口:

TSXM、TSXP接触摸屏的X极,TSYM、TSYP接触摸屏的Y极。当X极两端TSXM、TSXP接电压值时,检测TSYM或者TSYP(此时两个管脚做ADC输入用)的电压,计算出X的坐标;换过来,当Y极两端TSYM、TSYP接电压值时,检测TSXM或者TSXP(此时两个管脚做ADC输入用)的电压,计算出Y的坐标。

实验程序设计及分析
设定ADC转换速率,之后启用ADC功能,判断转换是否开始并转换结束,返回ADC采集到的数据。
int ReadAdc(int ch)
{
    int i;
    static int prevCh=-1;

    rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);   //setup channel

    if(prevCh!=ch)
    {
       rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);   //setup channel
       for(i=0;i<LOOP;i++);    //delay to set up the next channel
       prevCh=ch;
    }
    rADCCON|=0x1;   //start ADC

    while(rADCCON & 0x1);      //check if Enable_start is low
    while(!(rADCCON & 0x8000));    //check if EC(End of Conversion) flag is high

    return ( (int)rADCDAT0 & 0x3ff );
}

ADC实现触摸屏接口功能:
设定转换时间、设定转换速率、设定触摸屏控制寄存器;剩下的功能是实现触摸屏中断,暂不分析。
void Test_Touchpanel(void)
{  
    rADCDLY=50000;   //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
    rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value
    rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
    pISR_ADC = (int)AdcTsAuto;
       rINTMSK=~BIT_ADC;       //ADC Touch Screen Mask bit clear
       rINTSUBMSK=~(BIT_SUB_TC);
              rINTSUBMSK|=BIT_SUB_TC;
       rINTMSK|=BIT_ADC;  
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表