300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 电阻屏和电容屏

电阻屏和电容屏

时间:2018-10-02 04:16:30

相关推荐

电阻屏和电容屏

一、电阻屏

1. 电阻屏原理

电阻屏基于欧姆定律,它有上下两层薄膜,薄膜就是电阻。

当上下两层接触时,上下两层薄膜接触,这时可以测量触点电压。

X坐标:当xp、xm两端加3.3v电压,yp和ym不加电压时,yp相当于探针,测量yp的电压。电压和距离就成正比了。Y坐标:同理Y轴坐标也可求出

2. 电阻屏数据

Linux驱动程序中,会上报触电的X、Y数据。这不是LCD的坐标值,需要APP再此处理才能转换成坐标值。

对应的input_event结构体中,"type、code、value"如下:

//按下时EV_KEYBTN_TOUCH1/* 按下 */EV_ABSABS_PRESSURE1/* 压力值,可以上报,可以不报,可以是其他压力值 */EV_ABSABS_Xx_value/* X坐标 */EV_ABSABS_Yy_value/* Y坐标 */EV_SYNC00/* 同步事件 *///松开时EV_KEYBTN_TOUCH0/* 松开 */EV_ABSABS_PRESSURE0/* 压力值,可以上报,可以不报 */EV_SYNC00/* 同步事件 */

二、电容屏

2.1 原理

电容屏中有一个控制芯片,它周期性的产生驱动信号,接收电极收到信号,并可以测量电荷大小。

当电容屏被按下时,相当于引入了新的电容,从而影响了接收电极接收到的电荷大小。

根据电荷大小,主控芯片可以可以计算出触电位置,这类芯片一般是I2C接口。通过读取I2C芯片寄存器获得数据。

2.2 电容屏数据

参考文档:Documentation/input/multi-touch-protocol.txt

电容屏可以支持多点触摸,驱动程序区分多点触摸有两种方法:

TypeA:该类型的触摸屏不能分辨是哪一个触点,它只是把所有触点的坐标一股脑地上报,由软件来分辨这些数据分别属于哪个触电。已经过时,Linux内核中没有TypeA地源码了TypeB:该类型地触摸屏能分辨哪一个触点,上报数据时会先上报触点ID,再上报它的数据。例子:

/* 当有2个触点时 */EV_ABSABS_MT_SLOT0/* 表示我要上报一个触点信息了,用来分隔触点信息 */EV_ABSABS_MT_TRACKING_ID45/* 这个触点的ID是45 */EV_ABSABS_MT_POSITION_Xx[0]/* 触点X坐标 */EV_ABSABS_MT_POSITION_Yy[0]/* 触点Y坐标 */EV_ABSABS_MT_SLOT1/* 表示一个触点信息结束了 */EV_ABSABS_MT_TRACKING_ID45/* 触点ID是46 */EV_ABSABS_MT_POSITION_Xx[1]/* 触点X坐标 */EV_ABSABS_MT_POSITION_Yy[1]/* 触点Y坐标 */EV_SYNCSYN_REPORT0/* 全部数据上报完毕 *//* 当IO为45的触点正在移动时 */EV_ABSABS_MT_SLOT0/* 表示要上报触点信息了,之前报过ID了就不上报ID了 */EV_ABSABS_MT_POSITION_Xx[0]/* 触点X坐标 */EV_SYNCSYN_REPORT0/* 全部数据上报完毕 *//* 松开ID为45的触点时 */EV_ABSABS_MT_TRACKING_ID-1/* 刚刚设置了ABS_MT_SLOT为0,ID变成-1,说明松开了 */EV_SYNCSYN_REPORT0/* 全部数据上报完毕 *//* 最后松开ID为46的触点 */EV_ABSABS_MT_SLOT1/* 表示要上报触点信息了,之前报过ID了就不上报ID了 */EV_ABSABS_MT_TRACKING_ID-1/* ID为-1,表示slot 1被松开,即ID为46的触点被松开 */EV_SYNCSYN_REPORT/* 全部数据上报完毕 */

2.3 实验数据分析

用一个手指点击触摸屏,得到类似如下的数据:

root@npi:~# hexdump /dev/input/event20000000 d56e 6149 34d0 000c 0003 0039 0000 0000//type=ABS,code=ABS_MT_TRACKING_ID,value=00000010 d56e 6149 34d0 000c 0003 0035 01f7 0000//type=ABS,code=ABS_MT_POSITION_X,value=0x01f700000000020 d56e 6149 34d0 000c 0003 0036 00ce 0000//type=ABS,code=ABS_MT_POSITION_Y,value=0x00ce00000000030 d56e 6149 34d0 000c 0003 0030 0051 0000//type=ABS,code=ABS_MT_TOUCH_MAJOR,value=0x005100000000040 d56e 6149 34d0 000c 0003 0032 0051 0000//type=ABS,code=ABS_MT_WIDTH_MAJOR,value=0x005100000000050 d56e 6149 34d0 000c 0001 014a 0001 0000//type=KEY,code=BTN_TOUCH,value=0x000100000000060 d56e 6149 34d0 000c 0003 0000 01f7 0000//type=ABS,code=ABS_X,value=0x00ce00000000070 d56e 6149 34d0 000c 0003 0001 00ce 0000//type=ABS,code=ABS_Y,value=0x00ce00000000080 d56e 6149 34d0 000c 0000 0000 0000 0000//type=SYN,code=SYN_REPORT,value=0x000000000000090 d56e 6149 6373 000d 0003 0039 ffff ffff//type=ABS,code=ABS_MT_TRACKING_ID,value=0xffffffff00000a0 d56e 6149 6373 000d 0001 014a 0000 0000//type=KEY,code=BTN_TOUCH,value=0x0000000000000b0 d56e 6149 6373 000d 0000 0000 0000 0000//type=SYN,code=SYN_REPORT,value=0x00000000

在上面的数据中,为了兼容老程序,也上报了ABS_X、ABS_Y数据,电阻触摸屏就是使用这类数据。

基于电阻屏的程序,也可以用在电容屏上。

用两个手指点击触摸屏时,如下数据:

root@npi:~# hexdump /dev/input/event20000000 891e 614e 1348 0000 0003 0039 0001 0000//type=ABS,code=ABS_MT_TRACKING_ID,value=10000010 891e 614e 1348 0000 0003 0035 0187 0000//type=ABS,code=ABS_MT_POSITION_X,value=0x018700000000020 891e 614e 1348 0000 0003 0036 00b2 0000//type=ABS,code=ABS_MT_POSITION_Y,value=0x00b200000000030 891e 614e 1348 0000 0003 0030 0050 0000//type=ABS,code=ABS_MT_TOUCH_MAJOR,value=0x005000000000040 891e 614e 1348 0000 0003 0032 0050 0000//type=ABS,code=ABS_MT_WIDTH_MAJOR,value=0x005000000000050 891e 614e 1348 0000 0003 002f 0001 0000//type=ABS,code=ABS_MT_SLOT,value=0x000100000000060 891e 614e 1348 0000 0003 0039 0002 0000//type=ABS,code=ABS_MT_TRACKING_ID,value=0x000200000000070 891e 614e 1348 0000 0003 0035 024b 0000//type=ABS,code=ABS_MT_POSITION_X,value=0x024b00000000080 891e 614e 1348 0000 0003 0036 00a9 0000//type=ABS,code=ABS_MT_POSITION_Y,value=0x00a900000000090 891e 614e 1348 0000 0003 0030 005f 0000//type=ABS,code=ABS_MT_TOUCH_MAJOR,value=0x005f000000000a0 891e 614e 1348 0000 0003 0032 005f 0000//type=ABS,code=ABS_MT_WIDTH_MAJOR,value=0x005f000000000b0 891e 614e 1348 0000 0001 014a 0001 0000//type=KEY,code=BTN_TOUCH,value=0x0001000000000c0 891e 614e 1348 0000 0003 0000 0187 0000//type=ABS,code=ABS_X,value=0x0187000000000d0 891e 614e 1348 0000 0003 0001 00b2 0000//type=ABS,code=ABS_Y,value=0x00b2000000000e0 891e 614e 1348 0000 0000 0000 0000 0000//type=SYN,code=SYN_REPORT,value=0x0000000000000f0 891e 614e 0358 0006 0003 002f 0000 0000//type=ABS,code=ABS_MT_SLOT,value=0x000000000000100 891e 614e 0358 0006 0003 0039 ffff ffff//type=ABS,code=ABS_MT_TRACKING_ID,value=0xffffffff0000110 891e 614e 0358 0006 0003 002f 0001 0000//type=ABS,code=ABS_MT_SLOT,value=0x000100000000120 891e 614e 0358 0006 0003 0039 ffff ffff//type=ABS,code=ABS_MT_TRACKING_ID,value=0xffffffff0000130 891e 614e 0358 0006 0001 014a 0000 0000//type=KEY,code=BTN_TOUCH,value=0x000000000000140 891e 614e 0358 0006 0000 0000 0000 0000//type=SYN,code=SYN_REPORT,value=0x00000000

为了兼容老程序也上报了ABS_X、ABS_Y数据,但是只上报第1个触点的数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。