搜索

tag 标签: 触摸屏

相关帖子

版块 作者 回复/查看 最后发表
芯航线FPGA学习套件【4.3寸TFT触摸液晶组件】原理图文件 attach_img 【Altera SoC】 小梅哥 2020-2-12 1 270 郝旭帅 2020-2-12 21:56
一键式测量仪2次元测量仪的应用领域 attach_img 信息发布 jyzidkj 2017-6-26 0 606 jyzidkj 2017-6-26 10:53
【以拆会友】 拆拆拆,"全新库存" Nexus6水货机拆解 <I> attach_img 【以拆会友】 shinykongcn 2017-6-5 4 6945 shinykongcn 2017-6-5 09:43
镜片透过率,透过率测试仪,捷扬透光率检测仪器 attach_img 信息发布 jyzidkj 2017-6-1 0 404 jyzidkj 2017-6-1 11:47
初学KW41Z 控制彩色液晶屏 【NXP Kinetis MCU】 wolf11111 2017-5-31 1 902 nmg 2017-6-15 10:07
透过率测试仪,透光率检测仪,捷扬镜片透过率检测 attach_img 信息发布 jyzidkj 2017-5-20 0 606 jyzidkj 2017-5-20 11:26
智能仓储,智能SMD储柜,东莞国脉智能科技 attach_img 信息发布 guomai0011 2017-5-5 0 1515 guomai0011 2017-5-5 09:02
盈鹏飞嵌入式---AM335X定制电容式触摸屏接口 信息发布 szhebin 2017-4-19 2 807 peixiuhui 2017-5-19 15:39
PCB上板机的工作原理和技术特点 工控电子 xylianguang 2017-4-15 0 1616 xylianguang 2017-4-15 11:19
PCB上板机的应用 信息发布 allchips 2017-4-12 0 505 allchips 2017-4-12 10:39
分享关于嵌入式ARM下的触摸屏驱动设计问题 attach_img 【ARM技术】 Aguilera 2017-3-31 0 606 Aguilera 2017-3-31 21:31
出售E4990A E4990A 阻抗分析仪 attach_img 信息发布 xining123 2017-3-25 0 505 xining123 2017-3-25 09:39
透明显示屏新奇视觉震撼 attach_img 信息发布 SGL-0227 2017-3-24 2 632 SGL-0227 2017-3-24 17:31
新视觉、新技术的透明屏 信息发布 SGL-0227 2017-3-24 2 561 SGL-0227 2017-3-24 16:52
急!!!求推荐几款可以做触摸屏项目的开发板 attach_img 【ARM技术】 szypf2011 2017-3-22 15 4969 砂舞的玩笑 2018-7-9 09:40
新视觉、新技术的透明屏 信息发布 qwe28312041 2017-3-22 0 404 qwe28312041 2017-3-22 09:35
提供ZNB4罗德与施瓦茨ZNB4网络分析仪报价 信息发布 ch605577061 2017-3-6 0 595 ch605577061 2017-3-6 20:29
如何使用modbus协议使PLC与触摸屏(TP2507)通信 工控电子 工控小学徒 2017-3-15 6 4395 ayrz2010 2017-3-22 10:51
如何实现51单片机和触摸屏,以及plc的通讯? 【51单片机】 ehszt 2017-3-18 5 2346 zxq6 2017-3-19 21:17
飞凌6410板子包好160元包快 attach_img 淘e淘 ylyfxzsx 2017-5-31 5 1929 sxdahss 2017-6-11 10:09

相关日志

分享 【嵌入式分享】触摸屏驱动编写——TQ335x技术分享
小小宇宙 2015-5-6 11:46
  我们现在去解决TQ335x的触摸驱动问题,本文由资深博主girlkoo编写。由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱动源码,单纯的配置DTS是无法完成TQ335x的触摸驱动移植工作的,因此,本文参考内核中原有的pixcir_i2c_ts驱动编写TQ335x的触摸屏(TN92)驱动。   在之前移植TQ210时,我已经编写过TQ210的触摸屏驱动,我的TQ335x还是使用的TQ210的屏,因此,难度不是很大。这里需要说明一点,在TQ210驱动移植时对多点触摸协议的理解还不够深入,当时编写的驱动单点触摸是可以正常使用的,但是多点触摸不对(这次编写TQ335x的触摸驱动是才意识到的)。但是编写的TQ210驱动多点触摸实际上使用的多点触摸的A协议,但是用错了一些地方,本文基于TQ335x的重新编写的触摸驱动是按照多点触摸B协议编写,使用tslib测试正常,文章末尾有效果图。   TN92触摸屏使用的触控芯片是GT811,下面我们来分析下触摸屏驱动的编写。    (1) 查看原理图   从触摸屏原理图中可以看到,GT811与开发板相连的引脚有四条,分别是SDA、SDL、INT和RESET。其中,I2C_SDA和I2C_SDL是连接到AM335x的I2C1端口上的,用来与SoC通信;INT引脚是连接在GPIO1的27号引脚上的,在检测到触摸时GT811通过该引脚向SoC发起中断请求;RESET引脚接到SoC的GPIO1的26号引脚上的,是用来接收SoC复位操作,对于本文,SoC就是AM335x。   其中,GT811与SoC的管脚连接信息可以从底板原理图中找到,SDA和SCL的我就不往外贴了,INT和RESET的连接关系如下:   YP连接到了GT811的RESET脚上,然后通过短路帽与GPIO1_26链接,YM连接到GT811的INT脚上,通过短路帽与GPIO1_27链接,因此,需要将GPIO1_27配置为终端输入引脚,GPIO1_26配置为输出引脚。此外,查看GT811的芯片手册可获得INT和RESET的操作信息: 1.GT811检测到触摸时会拉低中断引脚,因此,GPIO1_27需要配置为下降沿触发。 2.GT811的RESET脚为低电平有效,因此,上电时需要拉低RESET引脚。 3.GT811的RESET引脚自带上拉,因此,使用GPIO1_26将GT811的RESET拉低复位后切换为悬浮输入太即可。   了解这些信息后我们就可以开始分析驱动结构了。   (2) DTS配置Platform信息   通过前面的分析,我们知道需要配置AM335x的四条引脚才能使GT811正常工作。其中,GT811通过I2C接口连接到AM335x的I2C1上,因此,需要配置AM335x的I2C1的两条引脚为I2C功能;GPIO1_27需要配置为中断输入、下降沿触发,中断号也可以确定下来了,就是GPIO1的27号角(内核能将引脚转换为中断号);最后就是RESET脚,驱动初始化GT811时需要操作RESET引脚,且GT811为拉低复位,故可将GPIO1的26角设为输出电平状态。通过前面几篇文章的学习,我们知道DTS可以配置pinmux,然后分析内核自带的DTS文件可以,DTS也可以将连接信息传递给内核。经过分析及参考,我最TQ335x.dts文件做了如下修改:   Step1. 检查I2C引脚的pinmux配置   查找i2c1可以找到i2c1节点,该节点的pinctrl-0只想的phandler对i2c1的两个引脚进行了相关的配置,因此,不需任何修改。   Step2. 配置INT和RESET引脚   在am33xx_pinmux节点内添加引脚配置信息,具体内容如下: gt811_ts_pins:gt811_ts_pins{ pinctrl-single,pins= 0x68(PIN_INPUT_PULLUP|MUX_MODE7) 0x6c(PIN_INPUT_PULLUP|MUX_MODE7) ; };   Step3. 在i2c1节点内添加GT811设备信息   GT811的设备节点内需要提供以下信息,i2c设备地址、pinmux配置、中断信息、屏幕大小等,具体如下(这里就不细说了,有什么不清楚的可以留言讨论)。 gt811_ts@5d{ compatible= "gt811,gt811_ts" ; pinctrl-names= "default" ; pinctrl-0=gt811_ts_pins; reg=0x5d; interrupt-parent=gpio1; interrupts=272; gpios=gpio1260; touchscreen-size-x=800; touchscreen-size-y=480; touchscreen-swap=1; touchscreen-revert-x=1; touchscreen-revert-y=1; };   至此,DTS的配置工作就完成了,下面就是GT811的驱动编写。   (3)驱动编写   驱动编写根之前TQ210相比,没有多少变化,都是采用的新式I2C设备驱动架构,重要的区别在于支持了多点触摸,驱动的详细分析我就不多说了,具体可以参考韦东山老师的视频教程(绝对物有所值)。下面是GT811的多点触摸驱动源码。从GT811设备节点中获取坐标信息的部分我直接贴出来了,完整的代码还是请到资源里下载,还是有点贵哈,不过这个驱动可以直接拿去使用了,不需要任何修改。下面是不完整的代码,可以打印出触摸点坐标,该代码已经把本驱动的核心的部分都写出来了。其实很多朋友不需要下载源码就可以补充完善这个驱动了,而且我真心的希望阅读本文的朋友不需要下载源码就能自己写出触摸驱动。 驱动代码地址 http://pan.baidu.com/s/1hqnIrmk   (4) 使用tslib工具测试   tslib的编译方法请参考本博客的另一片文章,链接如下:   S5PV210(TQ210)学习笔记——触摸屏驱动编写   本文就不再重复tslib的配置方法。   (5)效果展示   (6) 完整驱动代码   请到本人的资源中下载TQ335x的触摸屏驱动源码,链接如下:   http://download.csdn.net/download/girlkoo/8202177
个人分类: 技术分享|804 次阅读|0 个评论
分享 像操作智能手机那样简便的OTDR
天灿灿 2014-12-5 14:54
像操作智能手机那样简便的OTDR
智能手机的普及让人们已经习惯了触屏式简便操作的人机界面。对于光通信行业的工程师而言,日常工作必备的测试工具 OTDR( 光时域反射仪 ) 能否像智能手机的使用那样简便随心? 目前业界常见几个品牌的 OTDR 基本都是触摸式显示屏,但是彼此之间还是有很大区别的。严格说来触摸屏分两种,电阻屏与电容屏。电阻屏是一种定位精度比较高的触摸屏,需要一定的压强才能触动,要求触摸的精度比较精确,相应的使用起来也不很快捷,需要用专门的触屏笔来点击,单点触摸每次只能点击一个比较小的区域。而电容屏,能够用手指触摸比较大的面积,对多个点进行触摸操作,对触摸的定位没有那么严格的要求,所以反应更灵敏快捷。当前流行的智能手机触摸屏就是这种电容屏。横河( YOKOGAWA )、 EXFO 、 JDSU 的 OTDR 都是触摸式显示屏,目前只有横河( YOKOGAWA )的 OTDR 是电容式触摸屏。 笔者试用了横河新推出的 AQ7280 ,最深刻的体会是操作便捷随心,就像使用智能手机一样。这种电容式触摸屏又称多点触屏,使用两 点或两点以上不同态势介质触摸屏幕表面,可以完美实现图片缩放、旋转等各种多点触摸应用。 其反应速度快、对触点的精度要求低,从而对于工程操作人员的要求也会比较低,使用中当然更方便,完成操作的时间更短。 多点触屏技术是开启智能手机时代的关键技术,相信同样也能使 OTDR 的易用性和人性化上升到一个新的境界,是 OTDR 操作模式的必然趋势。 下面上几个操作图,大家先睹为快! 1 、进行曲线的放大 2 、击屏幕,进行曲线的移动 3 、在屏幕上进行标记点的设置
个人分类: 日志|551 次阅读|0 个评论
分享 AVR单片机开发-单片机与PLC通信
wyh0012 2014-8-7 23:40
在我们的开发中,要给PLC配显示设备我们首先想到的是触摸屏。但是我们仅仅要显示某个寄存器的数值时,用触摸屏是不是有点浪费?!这时我们采用一片单片机+一只数码管是不是性价比更高些。 单片机和PLC通信我们要遵循一定的协议,如:松下(Panasonic)PLC的MEWTOCO协议、欧姆龙(OMRON)PLC的HOSTLINK协议、三菱(MITSUBISHI)PLC的CCLINK协议、西门子(SIEMENS)PLC的UUS协议以及通用的Modbus协议。这些协议可以方便的和PLC之间通信,而且不用编写PLC程序,由PLC自行完成。 以下是基于于行科技开发的DMS64单片机控制板编写的单片机与松下PLC的通信程序,仅供设计参考。 /*------------MEWTOCOL.h---------------*/ #ifndef MEWTOCOL_H #define MEWTOCOL_H #include"UART_Init.h" #define StartChar '%' #define EndChar '\r' void inttoasc(unsigned long _data,unsigned char *p); unsigned char asciitohex(unsigned char _ascii); unsigned char dectohex(unsigned char _dec); void MTXORCheck(unsigned char *checkresult,unsigned char *checkdata,unsigned char _length); //异或求和 unsigned char MTCheck(); //接收数据有效性检查 unsigned char MTRCS(unsigned char _code ,unsigned int _address);//读取单触点状态 unsigned char MTWCS(unsigned char _code ,unsigned int _address,unsigned char _staus);//写入单触点状态 unsigned char MTRD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length); //读取寄存器 unsigned char MTWD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length); //写寄存器 #endif /*---------------MEWTOCOL.h-----------------*/ #include"MEWTOCOL.h" #include"AllHardFile.h" #include"yhdelay.h" unsigned char Maddress = 0x01; void inttoasc(unsigned long _data,unsigned char *p) { unsigned char data ; unsigned char i; for(i=0;i5;i++) { data = (unsigned char)(_data % 10) + '0'; _data = _data /10; } for(i=0;i5;i++) { *p = data ; p++; } } unsigned char asciitohex(unsigned char _ascii) { unsigned char _hex = 0; switch(_ascii) { case 0x30: _hex = 0x0; break; case 0x31: _hex = 0x1; break; case 0x32: _hex = 0x2; break; case 0x33: _hex = 0x3; break; case 0x34: _hex = 0x4; break; case 0x35: _hex = 0x5; break; case 0x36: _hex = 0x6; break; case 0x37: _hex = 0x7; break; case 0x38: _hex = 0x8; break; case 0x39: _hex = 0x9; break; case 0x41: _hex = 0xA; break; case 0x42: _hex = 0xB; break; case 0x43: _hex = 0xC; break; case 0x44: _hex = 0xD; break; case 0x45: _hex = 0xE; break; case 0x46: _hex = 0xF; break; } return _hex; } unsigned char dectohex(unsigned char _dec) { unsigned char hex; hex = _dec + '0'; if(hex0x39) hex = hex + 0x7; return hex; } void MTXORCheck(unsigned char *checkresult,unsigned char *checkdata,unsigned char _length) //接收数据有效性检查 { unsigned char i; unsigned char xorsum = 0; for(i=0;i_length;i++) { xorsum = xorsum ^(*checkdata); checkdata++; } *checkresult = dectohex(xorsum/16); checkresult++; *checkresult = dectohex(xorsum%16); } unsigned char MTCheck() //接收数据有效性检查 { unsigned char xorsum ; unsigned char errcode = 0x00; unsigned char address = 0; MTXORCheck(xorsum,rxbuf,rxcount-3); if((xorsum ==rxbuf )(xorsum ==rxbuf )) // 异或求和 校验 { address = asciitohex(rxbuf ); address = address4; address |= asciitohex(rxbuf ); if(address==Maddress) // 地址校验 { if(rxbuf =='$') // 返回数据正确/错误代码校验 errcode = 0xFF; if(rxbuf =='!') { errcode = asciitohex(rxbuf ); errcode = errcode4; errcode |= asciitohex(rxbuf ); } } } return errcode; } unsigned char MTRCS(unsigned char _code ,unsigned int _address) { unsigned int address; unsigned char xorsum ; unsigned char rxendi; unsigned char isnormal; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'R'; txbuf = 'C'; txbuf = 'S'; txbuf = _code; address = _address4; txbuf = (address/100) + '0'; address = address % 100; txbuf = address/10 + '0'; txbuf = address%10 + '0'; txbuf = dectohex((unsigned char)(_address0x000F)); //txbuf = _staus + '0'; MTXORCheck(xorsum,txbuf,12); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,15); delay_ms(50); rxendi = 0; while((rxendi100))// 接收超时处理 { if(rxstaus==rxend) { rxendi = 101; } else { delay_ms(50); rxendi++; } } rxstaus = rxwait; isnormal = MTCheck(); if(isnormal==0xFF) return rxbuf ; else return isnormal; } unsigned char MTWCS(unsigned char _code ,unsigned int _address,unsigned char _staus) { unsigned int address; unsigned char xorsum ; unsigned char rxendi; unsigned char isnormal; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'W'; txbuf = 'C'; txbuf = 'S'; txbuf = _code; address = _address4; txbuf = (address/100) + '0'; address = address % 100; txbuf = address/10 + '0'; txbuf = address%10 + '0'; txbuf = dectohex((unsigned char)(_address0x000F)); txbuf = _staus + '0'; MTXORCheck(xorsum,txbuf,13); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,16); delay_ms(50); rxendi = 0; while((rxendi100))// 接收超时处理 { if(rxstaus==rxend) { rxendi = 101; } else { delay_ms(50); rxendi++; } } rxstaus = rxwait; isnormal = MTCheck(); return isnormal; } unsigned char MTRD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length) { unsigned char add ; unsigned char xorsum ; unsigned int rxdata; unsigned char i; unsigned char isnormal; unsigned char base=0; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'R'; txbuf = 'D'; txbuf = _code; inttoasc(_address,add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; inttoasc((_address+_length-1),add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; MTXORCheck(xorsum,txbuf,17); txbuf = xorsum ; txbuf = xorsum ; txbuf = EndChar; Uart0_Send(txbuf,20); delay_ms(50); i = 0; while((i100))// 接收超时处理 { if(rxstaus==rxend) { i = 101; } else { delay_ms(50); i++; } } rxstaus = rxwait; isnormal = MTCheck(); if(isnormal==0xFF)//(isnormal) { for(i=0;i_length;i++) { base = i*4 + 6; rxdata = asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); rxdata = rxdata 4; rxdata |= asciitohex(rxbuf ); //p = p + i; *(p+i) = rxdata; } } else { for(i=0;i_length;i++) { *(p+i) = 0; } } return isnormal; } unsigned char MTWD(unsigned int *p,unsigned char _code ,unsigned long _address,unsigned char _length) { unsigned char add ; unsigned char data ; unsigned char xorsum ; unsigned int txdata; unsigned char i; unsigned char isnormal; unsigned char base=0; unsigned char arraylength; txbuf = StartChar; txbuf = '0'; txbuf = '1'; txbuf = '#'; txbuf = 'W'; txbuf = 'D'; txbuf = _code; inttoasc(_address,add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; inttoasc((_address+_length-1),add); txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; txbuf = add ; arraylength = 17; for(i=0;i_length;i++) { txdata = *(p+i); // 取值 data = dectohex(txdata0x000F); // 转换为HEX ASCII txdata = txdata 4; data = dectohex(txdata0x000F); txdata = txdata 4; data = dectohex(txdata0x000F); txdata = txdata 4; data = dectohex(txdata0x000F); txbuf = data ; // 存放到发送数组 arraylength++; txbuf = data ; arraylength++; txbuf = data ; arraylength++; txbuf = data ; arraylength++; } MTXORCheck(xorsum,txbuf,arraylength); // 异或和校验 txbuf = xorsum ; arraylength++; txbuf = xorsum ; arraylength++; txbuf = EndChar; // 结束符 arraylength++; Uart0_Send(txbuf,arraylength); delay_ms(50); i = 0; while((i100))// 接收超时处理 { if(rxstaus==rxend) { i = 101; } else { delay_ms(50); i++; } } rxstaus = rxwait; isnormal = MTCheck(); return isnormal; } 以上代码来源:http://www.yh-gk.com/article.php?id=14
个人分类: AVR|1490 次阅读|0 个评论
分享 OK335xS-Ⅱ在智能串口触摸屏显示终端上的应用(ZT)
jameswangsynnex 2014-6-24 14:05
随着信息技术的发展,现代工业控制和民用控制越来越面向高端发展趋势,对于人机界面的要求也越来越高,要求液晶能显示更多的信息和更丰富的色彩等元素,甚至动画和视频等。普通液晶单色显示屏已经不能满足现代工业控制等的需求,对于这一技术问题可以通过带有操作系统的真彩液晶屏可以实现。 一、适用范围 目前对于大部分的电器设备公司开发所使用的人机界面采用的是单色液晶屏,通过单片机进行驱动显示,而对于这些公司来说他们很想提高自己设备的档次,通过更好人机界面,而且方便的嵌入到设备当中,稳定运行。对于他们的这种需求我们可以研发一款显示终端产品,通过简单的串口和简便的通讯协议,方便用户快速进行链接,缩短研发周期。 二、功能分析 实现这种丰富的液晶显示,最好的解决办法是通过操作系统驱动真彩色液晶来实现此功能。目前单片机移植操作系统也可以实现但不现实,因为普通单片机的架构不适合操作系统,这对于一般的电器设备公司等的硬件和软件研发难度都相当大,而且风险也大,其次是开发周期会更长。但是选用基于Cortex-A8架构的工业级开发板OK335xS-Ⅱ就可轻松实现,该开发板是飞凌嵌入式基于美国德州仪器(TI)公司的工业级Cortex-A8 MPU AM335x系列处理器研发的一款工业级开发平台,该板采用全工业级设计支持WinCE6.0、Linux3.2等高级嵌入式操作系统,并且其运行温度范围宽达-40℃~+85℃。因此在产品设计上完全可以满足一般用户要求的是操作简便快捷、串口连接、SD卡支持对液晶参数下载等需求。 1、基本方案框图 2、配套图形界面集成开发环境IDE 3、主要功能特点: 1)CPU采用TI工业级AM335X系列,工作温度范围-40℃~+85℃。 2)操作系统采用Linux操作系统。 3)电磁兼容4级。 4)1路LCD接口,1路触摸屏接口,1路SD卡,1路串口,1路RTC,1路拔码开关。 5)提供规范的串口指令集,用户方便易懂。 6)机械尺寸:根据用户需求设计。 4、难点分析 1)PC机图形界面集成开发环境是一个应用在PC机上的应用软件,为用户提供方便的图形界面开发工具,需要一个软件团队去开发维护和升级。飞凌嵌入式的OK335xS-Ⅱ开发板支持WinCE6.0和Linux3.2等多种嵌入式操作系统,并提供基于以上操作系统的大部分接口驱动支持,用户仅需考虑产品应用层面的研发即可,大大节省了用户的产品研发周期和研发难度。 2)核心板软件运行稳定性可靠。飞凌嵌入式的OK335xS-Ⅱ核心板采用全工业级设计满足宽泛的运行温度,并通过了CE、FCC等认证,具备可靠的工业级品质。 3)电磁兼容测试标准符合工业4级,硬件稳定性可靠。
个人分类: 产业动态|646 次阅读|0 个评论
分享 电容式触摸屏原理及故障处理
terjin 2014-4-15 13:55
  电容式触摸屏概念   电容式触摸屏技术是利用人体的电流感应进行工作的。电容式触摸屏是一块四层复合玻璃屏,玻璃屏的内表面和夹层各涂有一层ITO,最外层是一薄层矽土玻璃保护层,夹层ITO涂层作为工作面,四个角上引出四个电极 ,内层ITO为屏蔽层以保证良好的工作环境。 当手指触摸在金属层上时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流 来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。   电容式触摸屏工作原理   电容屏要实现多点触控,靠的就是增加互电容的电极,简单地说,就是将屏幕分块,在每一个区域里设置一组互电容模块都是独立工作,所以电容屏就可以独立检测到各区域的触控情况,进行处理后,简单地实现多点触控。   电容式触摸屏原理   电容技术触摸屏CTP(Capacity Touch Panel)是利用人体的电流感应进行工作的。电容屏是一块四层复合玻璃屏,玻璃屏的内表面和夹层各涂一层ITO(纳米铟锡金属氧化物),最外层是只有0.0015mm厚的矽土玻璃保护层,夹层ITO涂层作工作面,四个角引出四个电极,内层ITO为屏层以保证工作环境。   当用户触摸电容屏时,由于人体电场,用户手指和工作面形成一个耦合电容,因为工作面上接有高频信号,于是手指吸收走一个很小的电流,这个电流分别从屏的四个角上的电极中流出,且理论上流经四个电极的电流与手指头到四角的距离成比例,控制器通过对四个电流比例的精密计算,得出位置。可以达到99%的精确度,具备小于3ms的响应速度。   投射式电容面板的触控技术投射电容式触摸屏是在两层ITO导电玻璃涂层上蚀刻出不同的ITO导电线路模块.两个模块上蚀刻的图形相互垂直,可以把它们看作是X和Y方向 连续变化的滑条。由于X、Y架构在不同表面,其相交处形成一电容节点。一个滑条可以当成驱动线,另外一个滑条当成是侦测线。当电流经过驱动线中的一条导线时,如果外界有电容变化的信号,那么就会引起另一层导线上电容节点的变化。侦测电容值的变化可以通过与之相连的电子回路测量得到,再经由A/D控制器转为数字讯号让计算机做运算处理取得(X,Y) 轴位置,进而达到定位的目地。   三、电容触摸屏的缺陷   电容触摸屏的透光率和清晰度优于四线电阻屏,当然还不能和表面声波屏和五线电阻屏相比。电容屏反光严重,而且,电容技术的四层复合触摸屏对各波长光的透光率不均匀,存在色彩失真的问题,由于光线在各层间的反射,还造成图像字符的模糊。   电容屏在原理上把人体当作一个电容器元件的一个电极使用,当有导体靠近与夹层ITO工作面之间耦合出足够量的电容时,流走的电流就足够引起电容屏的误动作。我们知道,电容值虽然与极间距离成反比,却与相对面积成正比,并且还与介质的绝缘系数有关。因此,当较大面积的手掌或手持的导体物靠近电容屏而不是触摸时就能引起电容屏的误动作,在潮湿的天气,这种情况尤为严重,手扶住显示器、手掌靠近显示器7厘米以内或身体靠近显示器15厘米以内就能引起电容屏的误动作。   电容屏的另一个缺点用戴手套的手或手持不导电的物体触摸时没有反应,这是因为增加了更为绝缘的介质。   电容屏更主要的缺点是漂移:当环境温度、湿度改变时,环境电场发生改变时,都会引起电容屏的漂移,造成不准确。   电容触摸屏最外面的矽土保护玻璃防刮擦性很好,但是怕指甲或硬物的敲击,敲出一个小洞就会伤及夹层ITO,不管是伤及夹层ITO还是安装运输过程中伤及内表面ITO层,电容屏就不能正常工作了。   四、电容式触摸屏故障处理   1、如果使用者使用的是电容式触摸屏,那么建议使用者在第一次使用时,首先先按照相关说明书的要求正确安装好电容触摸屏所需要的驱动程序,然后用手指依次单击屏幕上的“开始”/“程序”/“Microtouch Touchware”来运行屏幕校准程序,校准完成以后,系统自动将校准后的数据存放在控制器的寄存器内,以后再重新启动系统后就无需再校准屏幕了。   2、如果在中途操作电容触摸屏时,重新改变了触摸屏的显示器分辨率或显示模式,或者是自行调整了触摸屏控制器的刷新频率后,感觉到光标与触摸点不能对应时,都必须重新对触摸屏系统进行校准操作。   3、为了保证触摸屏系统的正常工作,除了要保证系统软件的正确安装之外,还必须记得在一台主机上不要安装两种或两种以上的触摸屏驱动程序,这样会容易导致系统运行时发生冲突,从而使触摸屏系统无法正常使用。   4、在使用电阻式触摸屏时,如果发现光标不动或者只能在局部区域移动时,使用者可以查看一下触摸屏的触摸区域是否被其他触摸物始终压住,例如一旦触摸屏被显示器外壳或机柜外壳压住了,就相当于某一点一直被触摸,那么反馈给控制器的坐标位置就不准确。   5、前面曾经提到,一旦系统在更换显示分辨率、调整屏幕大小和第一次安装时都有会出现单击不准或漂移,需启动应用程序中自带的定位程序重新定位,不过在定位时,最好要使用比较细的笔或指尖进行定位,这样比较准。   6、表面声波触摸屏的工作环境要求较高,它必须要求工作在一个干净、没有灰尘污染的环境中,而且还要定期清洁触摸屏表面上的灰尘,不然的话,空气中的灰尘覆盖在触摸屏四周的反射条纹或换能器上时,就会影响系统的正确定位。   7、不要让触摸屏表面有水滴或其它软的东西粘在表面,否则触摸屏很容易错误认为有手触摸造成表面声波屏不准。另外在清除触摸屏表面上的污物时,使用者可以用柔软的干布或者清洁剂小心地从屏幕中心向外擦拭,或者用一块干的软布蘸工业酒精或玻璃清洗液清洁触摸屏表面。   8、如果用手或者其他触摸物来触摸表面声波触摸屏时,触摸屏反应很迟钝,这说明很有可能是触摸屏系统已经陈旧,内部时钟频率太低,或者是由于触摸屏表面有水珠在移动,要想让触摸屏恢复快速响应,必须重新更换或者升级系统,或者用抹布擦干触摸屏表面的水珠。   9、触摸屏一般用串口进行信号的传输,从PS/2端口取信号,而TPS屏幕是从主机电源直接取电。如果指示灯不亮,说明没有取到信号,控制盒上的PS/2线可能坏了。如果灯亮着,但依旧不闪,说明控制盒坏了,因此使用者们必须更换控制盒。如果更换控制盒还是不行,有可能是屏幕被压得太紧,需要将四周的螺丝稍微松一下,因为触摸屏是由特殊材料组成,它该身不太容易损坏。如果串口是坏的或被禁用,将导致驱动程序无法安装,因为安装驱动时,会自动寻找串口。即使能够安装,也会出现鼠标不动或无法定位。最好不要用串口鼠标来判断串口的好坏,可能串口9根针对它们来说各自用的方式不一样。如果屏幕被压着,或者地线没有接好,会导致无法定位。如果出现有些区域无法点击或反应迟缓,有可能是灰尘影响,需拆开外壳来除去灰尘。   10、当用手指触摸电容触摸屏的某一位置时,触摸屏没有任何反应时,这很有可能是对应该触摸位不准确,光标当然也就不能正确定位了。如果是机柜外壳压住触摸区域使用者可以将机柜和显示器屏幕之间的距离调大一点,如果是显示器外壳压住触摸区域,使用者可以试着将显示器外壳的螺丝拧松一点试一下。本文由专业研发生产频谱分析仪(http://www.terjin.cn/)的公司整理发布
个人分类: 行业最新资讯|820 次阅读|0 个评论
分享 【K70例程】004触摸屏触摸(SPI)
mcuzone1 2014-1-11 14:29
By Mcuzone 使用J-LinkV8 MDKKeil版本4.71 调试串口波特率:115200 基于MDKK70-EK_T43硬件平台 实验现象: 串口输出: Mcuzone_K70 FW_Version:100 External Pin Reset Family:K70 PinCnt:256 SiliconRevID:1.0 PFlash Size: 1024KB FlexNVM Size: 0KB RAM Size :128KB CoreClock: 120000000Hz BusClock: 60000000Hz FlexBusClock: 30000000Hz FlashClock: 20000000Hz Touch Test Phy:X:0 Y:2047 Phy:X:0 Y:2047 Phy:X:0 Y:2047 Phy:X:597 Y:1301 Phy:X:974 Y:1638 Phy:X:1373 Y:1292 Phy:X:1453 Y:698 Phy:X:1108 Y:545 Phy:X:583 Y:713 Phy:X:398 Y:1114 Phy:X:733 Y:1511 Phy:X:1184 Y:1479 Phy:X:1467 Y:1166 Phy:X:1268 Y:742 Phy:X:806 Y:635 Phy:X:422 Y:824 Phy:X:0 Y:0 Phy:X:1099 Y:1492 Phy:X:1424 Y:1195 Phy:X:1194 Y:673 Phy:X:727 Y:649 Phy:X:440 Y:931 Phy:X:0 Y:2047 循环显示触点坐标值。 源码及示例: 链接: http://pan.baidu.com/s/1jG8zdae 密码: dpef
个人分类: K70示例|148 次阅读|0 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-4-5 17:57 , Processed in 0.049977 second(s), 12 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2020 http://bbs.eeworld.com.cn/

返回顶部