tag 标签: 触摸屏

相关帖子
相关博文
  • 热度 1
    2022-7-20 10:33
    207 次阅读|
    0 个评论
    触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏的异常分析。 1.1 测试环境 处理器:AM335x 内核版本:Linux-3.2 硬件条件:四线电阻屏、五线电阻屏 1.2 驱动组成部分 触摸屏的处理流程离不开,响应中断上报事件,对于电容屏同样有效的。所以对于触摸屏,只需仅仅把握中响应中断上报事件的流程,即可定位是软件还是硬件故障。 以AM335x的电阻屏为例,涉及的驱动子系统列表如表1.1所示。触摸子系统是对触摸屏的抽象层,输入子系统提供符合上层应用使用的接口,中断子系统负责接收外设的中断信号,ADC子系统负责提供电场信号以及采集电压值。 表1.1 电阻屏相关驱动 1.3 AM335x电阻屏驱动 相关代码位置如表1.2所示。 表1.2 电阻屏代码路径 板级文件记录下ADC模组中哪些通道用作触摸功能,哪些通道用作模数转换功能,如代码清单1.1所示。 代码清单1.1 板级描述文件 路径:arch/arm/mach-omap2/board-am335xevm.c ADC模块驱动是对ADC通道的抽象整理,会涉及部分触摸的寄存器。例如《【应用技术】触摸屏技术之二:原理分析》中提到CTRL Register的AFE_Pen_Ctrl Bits用于选择中断触发信号输入脚,如代码清单1.2所示。 代码清单1.2 ADC模块驱动 路径:drivers/mfd/ti_tscadc.c 最后就来介绍负责抽象整个触摸设备的触摸屏驱动文件,触摸驱动内封装了中断、ADC模组的寄存器操作、输入事件的上报工作。 设置X轴采集时的配置如代码清单1.3所示。结合《【应用技术】触摸屏技术之二:原理分析》的《四线屏寄存器配置》和《五线屏寄存器配置》内容可知,stepconfigx为X轴采集时的通用配置,当系统设备为四线模式时,开启XPP、XNN形成电场,INP值代表采集引脚为AN2。当系统设备为五线模式时,开启XPP、YNN、XNN、YPP形成电场,INP_5代表采集引脚为AN4。 代码清单1.3 X轴ADC配置 路径:drivers/input/touchscreen/ti_tsc.c 设置Y轴采集时的配置如代码清单1.4所示,stepconfigy为Y轴采集时的通用配置,当系统设备为四线模式时,开启YPP、YNN形成电场,INP值没有设置,默认使用AN0。当系统设备为五线模式时,开启XPP、YNN、XNP、YPN形成电场,INP_5代表采集引脚为AN4。 代码清单1.4 Y轴ADC配置 路径:drivers/input/touchscreen/ti_tsc.c 处理器完成ADC采集后,需要触发一个中断,中断处理函数的注册代码如代码清单1.5所示。对于用户层来说,最直观的就是查看此中断在系统中触发几次,所以此时的中断名就是request_irq内传入的中断名参数。 代码清单1.5 中断函数设计 路径:drivers/input/touchscreen/ti_tsc.c 最后一点就是对输入子系统的封装,在触摸屏代码内必不可少的就是input子系统的调用,代码如代码清单1.6所示,input_report即为输入子系统上报函数族,上报事件包括:按键按下、按键弹起、绝对坐标、相对坐标等。所以对于系统来说,最终只要input_report能顺利执行,那么触摸信号就能正常获取。 代码清单1.6 输入子系统设计 路径:drivers/input/touchscreen/ti_tsc.c 1.4 用户空间的排查方法 此处整理了电阻屏的问题定位方法,如表1.3所示。 表1.3 用户空间排查方法 接下来我们结合一些具体案例来具体看看如何排查触摸问题。 1.4.1 触摸没反应 问题:接上触摸屏没反应。 分析步骤: 1. 查看dmesg | grep touch,查看系统是否有加载触摸驱动;此部分有内核配置选择,没有信息则定位为驱动异常,查看内核配置或初始化函数。 2. 查看/proc/interrupts文件,看中断计数是否有变化。若点击屏幕,中断计数没变化,根据之前所说的中断输入引脚,说明此情况下中断引脚没有接到对应引脚上。 1.4.2 触摸抖动 问题:使用ts_test查看,发现光标在不停闪烁。 分析思路:通过cat /proc/interrupts,查看中断计数,若一直有增加,再用hexdump命令查看输出信息,一般这种不规则情况,是由于中断信号输入引脚接到错误位置,例如五线屏的感应引脚,接到地之后,相当于屏幕一直被按下,所以会不断上报错误事件。也有可能是感应引脚接到不稳定的电平,一直产生高低变化的扰动,系统把这种高低变化的扰动当作触摸屏被按下的信号。 1.4.3 触摸不准 问题:使用五线屏时,四个边角总有一个无法触摸得到。 分析思路:ADC模组有一个输入的参考电压,一般接1.8V,但有些意外情况,将其接到GND,相当于采集点一直无法采集到正常数据。 1.4.4 触摸异常 问题:使用五线屏时,数据乱跳。 分析思路:由上篇文章“【应用技术】触摸屏技术之原理分析”分析可知,五线屏的正常四个角如图1.1所示,(H,H)与(L,L)形成对角分布,在这样X、Y轴的电场才能形成相互垂直的分布,但如果出现图1.2中(H,H)与(L,L)在同一个方向时,就无法形成相互垂直的电场,此时采集出来的感应点数据就是紊乱的。 图1.1 正常五线屏电极分布 图1.2 异常五线屏电极分布
  • 热度 4
    2022-7-5 09:20
    358 次阅读|
    0 个评论
    触摸屏作为嵌入式产品中常用的交互设备,具有交互直观,编程简易等特点,本系列文章将以多种角度分析如何选择合适的触摸屏方案及常见的故障解决方法。本文主题为电阻屏的驱动组成以及多数触摸屏的异常分析。 1.1 测试环境 处理器:AM335x 内核版本:Linux-3.2 硬件条件:四线电阻屏、五线电阻屏 1.2 驱动组成部分 触摸屏的处理流程离不开,响应中断上报事件,对于电容屏同样有效的。所以对于触摸屏,只需仅仅把握中响应中断上报事件的流程,即可定位是软件还是硬件故障。 以AM335x的电阻屏为例,涉及的驱动子系统列表如表1.1所示。触摸子系统是对触摸屏的抽象层,输入子系统提供符合上层应用使用的接口,中断子系统负责接收外设的中断信号,ADC子系统负责提供电场信号以及采集电压值。 表1.1 电阻屏相关驱动 1.3 AM335x电阻屏驱动 相关代码位置如表1.2所示。 表1.2 电阻屏代码路径 板级文件记录下ADC模组中哪些通道用作触摸功能,哪些通道用作模数转换功能,如代码清单1.1所示。 代码清单1.1 板级描述文件 路径:arch/arm/mach-omap2/board-am335xevm.c ADC模块驱动是对ADC通道的抽象整理,会涉及部分触摸的寄存器。例如《【应用技术】触摸屏技术之二:原理分析》中提到CTRL Register的AFE_Pen_Ctrl Bits用于选择中断触发信号输入脚,如代码清单1.2所示。 代码清单1.2 ADC模块驱动 路径:drivers/mfd/ti_tscadc.c 最后就来介绍负责抽象整个触摸设备的触摸屏驱动文件,触摸驱动内封装了中断、ADC模组的寄存器操作、输入事件的上报工作。 设置X轴采集时的配置如代码清单1.3所示。结合《【应用技术】触摸屏技术之二:原理分析》的《四线屏寄存器配置》和《五线屏寄存器配置》内容可知,stepconfigx为X轴采集时的通用配置,当系统设备为四线模式时,开启XPP、XNN形成电场,INP值代表采集引脚为AN2。当系统设备为五线模式时,开启XPP、YNN、XNN、YPP形成电场,INP_5代表采集引脚为AN4。 代码清单1.3 X轴ADC配置 路径:drivers/input/touchscreen/ti_tsc.c 设置Y轴采集时的配置如代码清单1.4所示,stepconfigy为Y轴采集时的通用配置,当系统设备为四线模式时,开启YPP、YNN形成电场,INP值没有设置,默认使用AN0。当系统设备为五线模式时,开启XPP、YNN、XNP、YPN形成电场,INP_5代表采集引脚为AN4。 代码清单1.4 Y轴ADC配置 路径:drivers/input/touchscreen/ti_tsc.c 处理器完成ADC采集后,需要触发一个中断,中断处理函数的注册代码如代码清单1.5所示。对于用户层来说,最直观的就是查看此中断在系统中触发几次,所以此时的中断名就是request_irq内传入的中断名参数。 代码清单1.5 中断函数设计 路径:drivers/input/touchscreen/ti_tsc.c 最后一点就是对输入子系统的封装,在触摸屏代码内必不可少的就是input子系统的调用,代码如代码清单1.6所示,input_report即为输入子系统上报函数族,上报事件包括:按键按下、按键弹起、绝对坐标、相对坐标等。所以对于系统来说,最终只要input_report能顺利执行,那么触摸信号就能正常获取。 代码清单1.6 输入子系统设计 路径:drivers/input/touchscreen/ti_tsc.c 1.4 用户空间的排查方法 此处整理了电阻屏的问题定位方法,如表1.3所示。 表1.3 用户空间排查方法 接下来我们结合一些具体案例来具体看看如何排查触摸问题。 1.4.1 触摸没反应 问题:接上触摸屏没反应。 分析步骤: 1. 查看dmesg | grep touch,查看系统是否有加载触摸驱动;此部分有内核配置选择,没有信息则定位为驱动异常,查看内核配置或初始化函数。 2. 查看/proc/interrupts文件,看中断计数是否有变化。若点击屏幕,中断计数没变化,根据之前所说的中断输入引脚,说明此情况下中断引脚没有接到对应引脚上。 1.4.2 触摸抖动 问题:使用ts_test查看,发现光标在不停闪烁。 分析思路:通过cat /proc/interrupts,查看中断计数,若一直有增加,再用hexdump命令查看输出信息,一般这种不规则情况,是由于中断信号输入引脚接到错误位置,例如五线屏的感应引脚,接到地之后,相当于屏幕一直被按下,所以会不断上报错误事件。也有可能是感应引脚接到不稳定的电平,一直产生高低变化的扰动,系统把这种高低变化的扰动当作触摸屏被按下的信号。 1.4.3 触摸不准 问题:使用五线屏时,四个边角总有一个无法触摸得到。 分析思路:ADC模组有一个输入的参考电压,一般接1.8V,但有些意外情况,将其接到GND,相当于采集点一直无法采集到正常数据。 1.4.4 触摸异常 问题:使用五线屏时,数据乱跳。 分析思路:由上篇文章“【应用技术】触摸屏技术之原理分析”分析可知,五线屏的正常四个角如图1.1所示,(H,H)与(L,L)形成对角分布,在这样X、Y轴的电场才能形成相互垂直的分布,但如果出现图1.2中(H,H)与(L,L)在同一个方向时,就无法形成相互垂直的电场,此时采集出来的感应点数据就是紊乱的。 图1.1 正常五线屏电极分布 图1.2 异常五线屏电极分布
  • 热度 5
    2022-4-26 11:04
    1393 次阅读|
    2 个评论
    电容式触摸屏(CTP)模组工厂中的静电损坏实例启示
    1. 专业术语名词: TP:Touch Panel,触控屏或触摸屏。 CTP:Capacitive Touch Panel,电容式触控面板(俗称“电容式触摸屏”),当前触摸屏触控识别技术最常用的一种。 FA:Failure Analysis,失效分析,电子制造工厂的一个必备职能部门,跟进解决工厂生产中产品的各种不良品的分析解决。 “防静电”:国内电子行业内最具代表性的一个静电防护的传统认知概念,即“防静电”物料通过其表面呈现导电型或静电耗散性(表面电阻<1E11 ohm),在其表面接地时,实现其表面的低静电带电(静电压足够低,如小于100V)。 2. 触摸屏模组工厂中的静电损坏案例 2018年,一触摸屏生产工厂TP模组段的生产线上检出异常多的不良品,经工程FA分析确认为静电导致的ITO sensor击穿炸伤,并将风险工序锁定于TP的撕膜工序。 图1,CTP ITO sensor搭接处的静电损坏症状 该TP撕膜工序以手动的方式在一个真空吸附的机台上完成。该撕膜工序基于过往的静电防护的一些认知,当时已经采取的主要技术措施包括: 1.TP撕膜平台TP方式的区域贴附“防静电胶带”(表面电阻:1E8-2E9 ohm); 2.TP撕膜平台上方安装离子棒(Keyence),用于消除TP撕膜过程中产生的大量静电; 3.使用常规的Electrostatic Field Meter(静电场测试仪),在TP撕膜后检测TP的静电带电,确认离子化的静电消除是否有效(当时的检测数据|U|<200V/inch); 4.手动撕膜操作员佩戴静电手腕带接地,并佩戴“防静电手套”。 图2,CTP撕膜机台上实测TP撕膜过程中的静电带电风险 然而,尽管该撕膜工序采取了以上的“防静电”措施,该工序导致的静电损坏不良率仍然很高( 1%左右 )。 此后,经过专业机构的技术分析后提供了区别于业内以往所有的静电防护技术性方案( 基于静电场敏感型微电子的静电防护技术原则 ),将其撕膜平台进行改造,在此后的小批量生产验证已经长时间的正常量产,该工序导致的静电损坏不良率始终 低于0.01% 。 3. 电子工厂静电防护实践启示 该触摸屏工厂撕膜工序的静电导致的TP产品损坏案例,揭示了当前业内一类非常普遍极具代表性的静电防护技术性认知: 操作人员只要可靠接地(佩戴静电手腕带),操作电子产品边不会发生静电导致的产品损坏( 事实上本案例的主要静电风险来自于产品的撕膜过程,而非人体 ); 接触电子产品的机台表面,必须满足表面导电性或静电耗散性,并接地(机台表面对地电阻<1E11 ohms)(事实上本案例的最终解决技术方案恰恰相反) 撕膜过程产生的大量静电,只要安装高效的离子化静电中和措施(Keyence的离子棒静电消除性能业内几乎属于第一梯队),便可以避免产生静电不良(而事实上,最终的技术性分析结论表明该撕膜工序 原有的机台设计,安装离子化并没有达到有效消除撕膜过程累积大量静电的目标 )。 微电子器件、产品在生产制造阶段的静电防护,要根据微电子器件不同的静电敏感特性及其静电失效机理,相适应制订(差异化)的静电防护技术方案,同时在工厂生产线中评价现场静电防护措施有效性的检测方法,也要依据不同生产工序的静电条件通过做进一步的纠错、容错分析后,最终得到可以正确指导工厂静电防护措施不断改进的目标。 换句话说,如果对微电子器件、产品的生产工厂不加任何甄别地制定“一刀切式”的通用型静电防护方案,那么一定有些微电子器件的工厂生产中的静电导致的不良损失不能得到有效解决。
  • 热度 9
    2020-12-2 16:42
    4811 次阅读|
    1 个评论
    触摸屏数字键盘的实现方法
    基本思路是使用一个图片,定义图片上各个按键的相对位置以及文本框的相对位置。定义键盘的尺寸 当需要显示键盘时,将图片画出来。 当触屏按下时,计算按下的位置,进行相应操作。 所有按键的尺寸一致,定义按键结构,包含左上相对位置,定义数字框,包含上下左右相对位置。 定义所有键值枚举类型 typedef enum { kc,k1,k2,k3,k4,k5,k6,k7,k8,k9,k0,kd,ko} Keyval; 定义一个四边型尺寸结构,长宽数据可以计算得到。这个结构用于定义边框,数字框,按键的外形尺寸。 typedef{ uint16_t left; uint16_t top; uint16_t right; uint16_t down; }stRectPosTypeDef; 定义外边框尺寸数据,这些数据需要与按键图片对应,且使用相对位置。 const stRectPosTypeDef stKeyBoardFrame = {0,0,417,171}; 定义数字框尺寸数据 const stRectPosTypeDef stDigitalBox = {7,6,71,54}; 定义单个按键的尺寸信息及键值 typedef{ stRectPos keypos; Keyval key; }stKeyTypeDef; 定义实体按键数量及实体按键信息,所有参数都是像素相对值 #define TOTLEKEY 13 const stKeyTypeDef stDigitalKey ={ {{347,5,411,53},kc}, {{5,62,69,110},k1}, {{73,62,137,110},k2}, {{142,62,206,110},k3}, {{210,62,274,110},k4}, {{279,62,343,110},k5}, {{5,117,69,165},k6}, {{73,117,137,165},k7}, {{142,117,206,165},k8}, {{210,117,274,165},k9}, {{279,117,343,165},k0}, {{347,62,411,110},kd}, {{347,117,411,165},ko} }; 使用一个字符串保存键入的数值。返回时使用文本到数值的转换,当调用 KeyScan 函数时,首先在合适位置,画出键盘的图片。然后等待触摸动作,当得到触摸值后,顺序使用 RangeCheck 检查触摸值是否在按键的范围里。遍历各个按键位置,一旦为直,即进入 UpdataDigital ,依据键值,改变用于保存数值的字符串。当检测到为回车时,返回数据值。 float KeyScan(uint16_t lcdx,uint16_t lcdy,stKeyBoardTypeDef *pkb){ uint16_t Ax,Ay; uint8_t i,tempstr ; float fltemp; stRectPosTypeDef hpos; fltemp = 0; tempstr = '\0'; pbmp,lcdx,lcdy); GUI_SetBkColor(GUI_BLACK); GUI_SetColor(GUI_WHITE); down); pfont); // wait for key for(;;){ GetTp(&Ax,&Ay); // 获取 TP 的触摸信息 ConvertTp(&Ax,&Ay); Ax -= lcdx; Ay -= lcdy; for(i = 0;i totlekey;i++){ pkey .keypos.down; pkey .keypos.top; pkey .keypos.left; pkey .keypos.right; if(RangeCheck(Ax,Ay,&hpos)) // 检查是否在范围内 break; } if(i totlekey){ // 检测到按键位置 pkey .key == ko){ if(strlen(tempstr) != 0){ fltemp = atof(tempstr); return fltemp; } } if((tempstr =='0')&&(tempstr =='\0')) tempstr ='\0'; pkey .key); down); right - GUI_GetStringDistX(tempstr), down )/2 - GUI_GetFontSizeY()/2); } } } /* 以字符串表示的数据,依据输入按键改变 */ void UpdataDigital(uint8_t *pstr,KeyvalTypeDef key){ uint16_t temp; if(key == ko) return; if(key == kc){ pstr ='\0'; return; } if(key == kd){ if(strchr(pstr,'.')!=NULL) return; else{ if(pstr =='\0') strcpy(pstr,"0."); else strcat(pstr,"."); } return; } switch(key){ case k1: strcat(pstr,"1"); break; case k2: strcat(pstr,"2"); break; case k3: strcat(pstr,"3"); break; case k4: strcat(pstr,"4"); break; case k5: strcat(pstr,"5"); break; case k6: strcat(pstr,"6"); break; case k7: strcat(pstr,"7"); break; case k8: strcat(pstr,"8"); break; case k9: strcat(pstr,"9"); break; case k0: if((pstr =='0')&&(pstr =='\0')) break; else{ strcat(pstr,"0"); break; } default: break; } } 程序初始化GUI 后,在需要改变数值的地方,调用KeyScan,就能获得键入的数据。
  • 热度 12
    2013-9-10 17:28
    558 次阅读|
    0 个评论
    18823790239收购三星N9002摄像头 触摸屏 收购三星手机液晶屏,触摸屏,电池,尾插排线,液晶总成,按键排线,感应排线,主板,CPU,字库,手机IC,充电器,耳机线,振铃,中框,盖板,功放,显示屏,主板,排线、摄像头、液晶、镜面,外壳等配件 大量回收IPhone4,iPhone5,iPhone5s手机中框,支架,触摸屏,液晶总成,机壳,液晶屏、主板、排线,镜面,后盖,卡槽,按键,电池,摄像头,充电器,数据线等 诚信合作、互惠互利、实现双赢的目标.热诚欢迎广大客户来电咨询和洽谈合作联系电话 18823790239 QQ1901177137  
相关资源