赞
踩
上一小节,使用了内核驱动了 ili9341 ,但是上面的电阻屏并还没有驱动,查阅芯片数据手册,该芯片支持驱动四线触摸屏
且buildroot已经支持,官方设备树已经配置好。
rtp:rtp@2009c00 {
compatible = "allwinner,sun8i-ts";
reg = <0x0 0x02009c00 0x0 0x400>;
clocks = <&ccu CLK_TPADC>, <&ccu CLK_BUS_TPADC>;
clock-names = "mod", "bus";
clock-frequency = <1000000>;
resets = <&ccu RST_BUS_TPADC>;
interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
};
&rtp {
allwinner,tp-sensitive-adjust = <0xf>;
allwinner,filter-type = <0x1>;
allwinner,ts-attached;
status = "okay";
};
触摸屏设备就在 /dev/input/event1
hexdump测试一下
触摸屏没接当然没数据啦
那就手动把触摸屏的四根线焊上去吧(别接错了)
1、先把芯片拆下来把,这么小的引脚好像不好焊接。。。。。。(能画pcb的老老实实画,我这是贪玩)
然后把杜邦线焊上去
嗯,看起来没短路,然后接到核心板的对应引脚上
hexdump测试一下
此此时按下触摸屏就会有数据,但是这些数据似乎看不懂
以下图片来源于100ask
其中,如果type为0001,则为x轴,0003则为y轴,value为对应的值
#include "stdio.h"
#include "unistd.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "stdlib.h"
#include "string.h"
#include <linux/input.h>
/* 定义按键值 */
#define KEY0VALUE 0XF0
#define INVAKEY 0X00
typedef struct posi
{
int x;
int y;
};
int main(int argc, char *argv[])
{
struct input_event in_ev = {0};
int fd, ret;
int keyvalue;
struct posi xxyy = {0};
/* 打开key驱动 */
fd = open("/dev/input/event1", O_RDWR);
if (fd < 0)
{
perror("open /dev/input/event1");
return -1;
}
while (1) /* 循环读取数据 */
{
if (sizeof(struct input_event) != read(fd, &in_ev, sizeof(struct input_event)))
{
perror("read error");
exit(-1);
}
if (EV_ABS == in_ev.type) // 触摸屏事件
{
if (in_ev.code == 1)
xxyy.x = in_ev.value;
if (in_ev.code == 0)
xxyy.y = in_ev.value;
}
if (xxyy.x != 0 && xxyy.y != 0)
{
printf("x: %d y: %d\n", xxyy.x, xxyy.y);
xxyy.x = 0;
xxyy.y = 0;
}
}
ret = close(fd); /* 关闭文件 */
if (ret < 0)
{
printf("file %s close failed!\r\n", argv[1]);
return -1;
}
return 0;
}
采集的adc的值
,原则上我们需要将其转化为我们的坐标值
tslib
进行实验参考100ask
tslib的主要代码如图所示
记得在buildroot开启tslib
Target packages --->
Libraries --->
Hardware handling --->
[*] tslib
先配置环境
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
其中:
从一个角落滑到另一个角落,与[0,0]—>[240,320]非常接近!
1、感觉触摸屏input上报的时间很久,感觉很久才触发一次坐标值,是tpadc的配置有问题吗?
2、下次使用xpt2046或者ns2009/ns2016测试一下是否会流畅很多(可惜我的芯片拆掉不知道扔哪去了)
3、多动手折腾一下【狗头】
4、如何手写坐标校准呢?如何存储呢?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。