触摸屏控制芯片ADS7843中文资料.docx

上传人:b****5 文档编号:2776249 上传时间:2022-11-15 格式:DOCX 页数:11 大小:377.87KB
下载 相关 举报
触摸屏控制芯片ADS7843中文资料.docx_第1页
第1页 / 共11页
触摸屏控制芯片ADS7843中文资料.docx_第2页
第2页 / 共11页
触摸屏控制芯片ADS7843中文资料.docx_第3页
第3页 / 共11页
触摸屏控制芯片ADS7843中文资料.docx_第4页
第4页 / 共11页
触摸屏控制芯片ADS7843中文资料.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

触摸屏控制芯片ADS7843中文资料.docx

《触摸屏控制芯片ADS7843中文资料.docx》由会员分享,可在线阅读,更多相关《触摸屏控制芯片ADS7843中文资料.docx(11页珍藏版)》请在冰豆网上搜索。

触摸屏控制芯片ADS7843中文资料.docx

触摸屏控制芯片ADS7843中文资料

触摸屏控制芯片ADS7843中文资料

当触笔触到屏上时,对应的位置就会产生相应大小的电压,输入到芯片,AD转换后得到一个数据。

而触摸校准就是将接受到的原始模数转换值转换成屏幕像素坐标。

再就是了解触摸芯片,知道他的工作方式,以及跟STM32的连线。

触摸实验中,我的实验板是用SPI口来实现数据的传输的,即SPI与xpt2046相连。

触摸屏控制芯片ADS7843中文资料

  ADS7843是一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片。

供电电压2.7~5V,参考电压VREF为1V~+VCC,转换电压的输入范围为0~VREF,最高转换速率为125kHz。

ADS7843引脚图及引脚功能说明了:

 

ADS7843的引脚配置如图3所示。

表1为引脚功能说明,图4为典型应用。

 

ADS7843典型应用电路

ADS7843之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极电压的切换,并能进行快速A/D转换。

图5所示为其内部结构,A2~A0和SER/为控制寄存器中的控制位,用来进行开关切换和参考电压的选择。

ADS7843之所以能实现对触摸屏的控制,是因为其内部结构很容易实现电极电压的切换,并能进行快速A/D转换。

图5所示为其内部结构,A2~A0和SER/为控制寄存器中的控制位,用来进行开关切换和参考电压的选择。

2.3ADS7843的控制字及数据传输格式

 

  ADS7843的控制字如表4所列,其中S为数据传输起始标志位,该位必为"1"。

A2~A0进行通道选择(见表2和3)。

 

  MODE用来选择A/D转换的精度,"1"选择8位,"0"选择12位。

 

SER/选择参考电压的输入模式(见表2和3)。

PD1、PD0选择省电模式:

 

  "00"省电模式允许,在两次A/D转换之间掉电,且中断允许;

 

  "01"同"00",只是不允许中断;

 

  "10"保留;

 

  "11"禁止省电模式。

 

  为了完成一次电极电压切换和A/D转换,需要先通过串口往ADS7843发送控制字,转换完成后再通过串口读出电压转换值。

标准的一次转换需要24个时钟周期,如图7所示。

由于串口支持双向同时进行传送,并且在一次读数与下一次发控制字之间可以重叠,所以转换速率可以提高到每次16个时钟周期,如图8所示。

如果条件允许,CPU可以产生15个CLK的话(比如FPGAs和ASICs),转换速率还可以提高到每次15个时钟周期,如图9所示。

 

 

触摸屏的校准通过voidTouch_Adjust(void)函数实现。

在这里,给大家介绍一下我们这里所使用的触摸屏校正原理:

我们传统的鼠标是一种相对定位系统,只和前一次鼠标的位置坐标有关。

而触摸屏则是一种绝对坐标系统,要选哪就直接点哪,与相对定位系统有着本质的区别。

绝对坐标系统的特点是每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。

不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:

漂移。

对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。

所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。

通常应用程序中使用的LCD坐标是以像素为单位的。

比如说:

左上角的坐标是一组非0的数值,比如(20,20),而右下角的坐标为(220,300)。

这些点的坐标都是以像素为单位的,而从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量都与LCD坐标不同,所以,可以在程序中使用一个函数(我们采用Convert_Pos函数)中把物理坐标首先转换为像素坐标,然后再赋给POS结构,达到坐标转换的目的。

校正思路:

在了解了校正原理之后,我们可以得出下面的一个从物理坐标到像素坐标的转换关系式:

LCDx=xfac*Px+xoff;

LCDy=yfac*Py+yoff;

其中(LCDx,LCDy)是在LCD上的像素坐标,(Px,Py)是从触摸屏读到的物理坐标。

xfac,yfac分别是X轴方向和Y轴方向的比例因子,而xoff和yoff则是这两个方向的偏移量。

这样我们只要事先在屏幕上面显示4个点(这四个点的坐标是已知的),分别按这四个点就可以从触摸屏读到4个物理坐标,这样就可以通过待定系数法求出xfac、yfac、xoff、yoff这四个参数。

我们保存好这四个参数,在以后的使用中,我们把所有得到的物理坐标都按照这个关系式来计算,得到的就是准确的屏幕坐标。

达到了触摸屏校准的目的。

以下是自己的校准程序(在正点原子上做了一些改变,没有用到中断):

//触摸屏校准代码

//得到四个校准参数

voidTouch_Adjust(void)

{        

 u16pos_temp[4][2];//坐标缓存值

 u8 cnt=0; 

 u16d1,d2;

 u32tem1,tem2;

 floatfac;   

 cnt=0;    

 TextColor=Blue;

 BackColor=White;     //TextColor=0x0000,BackColor=0xFFFF;

 LCD_Clear(White);//清屏  

// POINT_COLOR=RED;//红色

// LCD_Clear(WHITE);//清屏

 Drow_Touch_Point(20,20);//画点1

 delay_ms(1000);

// Pen_Point.Key_Sta=Key_Up;//消除触发信号

// Pen_Point.xfac=0;//xfac用来标记是否校准过,所以校准之前必须清掉!

以免错误 

 while

(1)

 {

  if(Read_ADS2(&x,&y))//按键按下了

  {

   //if(Read_TP_Once())//得到单次按键值

  // {           

    pos_temp[cnt][0]=x;

    pos_temp[cnt][1]=y;

    cnt++;

    delay_ms(100);

  // }   

   switch(cnt)

   {     

    case1:

     LCD_Clear(White);//清屏

     delay_ms(1000);

     Drow_Touch_Point(20,300);//画点2

     break;

    case2:

     LCD_Clear(White);//清屏

     delay_ms(1000);

     Drow_Touch_Point(220,20);//画点3

     break;

    case3:

     LCD_Clear(White);//清屏

     delay_ms(1000);

     Drow_Touch_Point(220,300);//画点4

     break;

    case4:

 //全部四个点已经得到

         //对边相等

     tem1=abs(pos_temp[0][0]-pos_temp[1][0]);//x1-x2

     tem2=abs(pos_temp[0][1]-pos_temp[1][1]);//y1-y2

     tem1*=tem1;

     tem2*=tem2;

     d1=sqrt(tem1+tem2);//得到1,2的距离

     

     tem1=abs(pos_temp[2][0]-pos_temp[3][0]);//x3-x4

     tem2=abs(pos_temp[2][1]-pos_temp[3][1]);//y3-y4

     tem1*=tem1;

     tem2*=tem2;

     d2=sqrt(tem1+tem2);//得到3,4的距离

     fac=(float)d1/d2;

     if(fac<0.95||fac>1.05||d1==0||d2==0)//不合格

     {

      cnt=0;

      LCD_Clear(White);//清屏

      Drow_Touch_Point(20,20);

      continue;

     }

     tem1=abs(pos_temp[0][0]-pos_temp[2][0]);//x1-x3

     tem2=abs(pos_temp[0][1]-pos_temp[2][1]);//y1-y3

     tem1*=tem1;

     tem2*=tem2;

     d1=sqrt(tem1+tem2);//得到1,3的距离

     

     tem1=abs(pos_temp[1][0]-pos_temp[3][0]);//x2-x4

     tem2=abs(pos_temp[1][1]-pos_temp[3][1]);//y2-y4

     tem1*=tem1;

     tem2*=tem2;

     d2=sqrt(tem1+tem2);//得到2,4的距离

     fac=(float)d1/d2;

     if(fac<0.95||fac>1.05)//不合格

     {

      cnt=0;

      LCD_Clear(White);//清屏

      Drow_Touch_Point(20,20);

      continue;

     }//正确了

          

     //对角线相等

     tem1=abs(pos_temp[1][0]-pos_temp[2][0]);//x1-x3

     tem2=abs(pos_temp[1][1]-pos_temp[2][1]);//y1-y3

     tem1*=tem1;

     tem2*=tem2;

     d1=sqrt(tem1+tem2);//得到1,4的距离

 

     tem1=abs(pos_temp[0][0]-pos_temp[3][0]);//x2-x4

     tem2=abs(pos_temp[0][1]-pos_temp[3][1]);//y2-y4

     tem1*=tem1;

     tem2*=tem2;

     d2=sqrt(tem1+tem2);//得到2,3的距离

     fac=(float)d1/d2;

     if(fac<0.95||fac>1.05)//不合格

     {

      cnt=0;

      LCD_Clear(White);//清屏

      Drow_Touch_Point(20,20);

      continue;

     }//正确了

     //计算结果

     x1=pos_temp[0][0];

     x2=pos_temp[1][0];

     x3=pos_temp[2][0];

     x4=pos_temp[3][0];

     y1=pos_temp[0][1];

     y2=pos_temp[1][1];

     y3=pos_temp[2][1];

     y4=pos_temp[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1