完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文所演示的平台来自于Toradex Colibri iMX6嵌入式平台,其支持的最大矩阵键盘为5*5,而Toradex另一个产品系列Apalis系列则最大支持7*6。
|
|
相关推荐
4个回答
|
|
触摸屏,无论是电阻式还是电容式,在嵌入式领域有着广泛的使用。配合设计优秀的 GUI,能够给用户带来很好的体验。很多时候,触摸屏在使用之前都需要进行校准,并且当外界的温度发生变化时,可能需要重新校准。对于电容屏还会受到静电的干扰。因此在工业设备上,为了保证输入的准确性,矩阵键盘仍被广泛地使用。
控制器通过轮询矩阵键盘的行列GPIO获取按键的情况。Linux 是一种多任务非实时操作系统,其他任务的执行会影响到矩阵键盘轮询,从而导致按键识别出现错误。本文所演示的嵌入式平台基于NXP iMX6 SoC,带有一个键盘控制器KPP,除了能够实现轮询矩阵键盘外,还支持自带上拉电阻、消抖、多按键识别、长按等功能。用户可以直接GPIO连接到按键上,无需添加电阻和二极管。如果使用二极管,还可以支持更多的按键组合。默认的KPP 最大支持8*8矩阵键盘。 Toradex 的 iMX6计算机模块,根据不同的系列支持部分按键,Colibri iMX6 为 5*5,Apalis iMX6为7*6。 |
|
|
|
准备
a).Colibri iMX6 arm核心版配合Colibri Evaluation Board载板,连接调试串口到开发主机,具体操作方法可以参考这里。 b).Colibri iMX6操作系统使用Toradex Linux Release V2.7b3,下载和更新方法请参考这里。 |
|
|
|
配置KPP驱动并测试
a). 默认配置下,KPP 驱动并没有开启,需要修改imx6dl-colibri-eval-v3.dts和imx6qdl-colibri.dtsi device tree 文件。你可以直接使用下面的补丁,修改矩阵键盘的配置。 ftp://ftp.toradex.cn/Documents/ApplicationNote/resources/matrix_keypad.patch b). 然后重新生成dtb文件,并更新到Colibri iMX6后重启。 -------------------------------- $ make imx6dl-colibri-eval-v3.dtb -------------------------------- c). 在启动日志中可以看到 KPP 驱动被加载 -------------------------------- root@colibri-imx6:/dev/input# dmesg|grepkpp [ 1.551426] input: 20b8000.kpp as /devices/soc0/soc/2000000.AIps-bus/20b8000.kpp/input/input0 -------------------------------- d). Linux输入设备识别KPP -------------------------------- root@colibri-imx6:~# xinput ? Virtual core pointer id=2 [master pointer (3)] ?? Virtual core XTEST pointer id=4 [slave pointer (2)] ??stmpe-ts id=8 [slave pointer (2)] ? Virtual core keyboard id=3 [master keyboard (2)] ? Virtual core XTEST keyboard id=5 [slave keyboard (3)] ?gpio-keys id=6 [slave keyboard (3)] ?20b8000.kpp id=7 [slave keyboard (3)] -------------------------------- e). 根据在 device tree 中的GPIO 配置,短接任一对 ROW 和 KEY 的引脚,即可模拟按键。 -------------------------------- pinctrl_kpp: kppgrp { fsl,pins = < MX6QDL_PAD_KEY_ROW2__KEY_ROW2 0x1b010 /*SODIMM 186*/ MX6QDL_PAD_KEY_ROW4__KEY_ROW4 0x1b010 /*SODIMM188*/ MX6QDL_PAD_CSI0_DAT5__KEY_ROW5 0x1b010 /*SODIMM155*/ MX6QDL_PAD_GPIO_2__KEY_ROW6 0x1b010 /*SODIMM180*/ MX6QDL_PAD_GPIO_5__KEY_ROW7 0x1b010/*SODIMM176*/ MX6QDL_PAD_KEY_COL2__KEY_COL2 0x110b0/*SODIMM184*/ MX6QDL_PAD_KEY_COL4__KEY_COL4 0x110b0/*SODIMM178*/ MX6QDL_PAD_GPIO_19__KEY_COL5 0x110b0/*SODIMM168*/ MX6QDL_PAD_CSI0_DAT6__KEY_COL6 0x110b0/*SODIMM157*/ MX6QDL_PAD_GPIO_4__KEY_COL7 0x110b0/*SODIMM174*/ >; -------------------------------- f). 通过evtest命令,查看按下的键值,以及是否属于长按等信息。 -------------------------------- root@colibri-imx6:~# evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: 20b8000.kpp /dev/input/event1: stmpe-ts /dev/input/event2: gpio-keys Select the device event number [0-2]: 0 Input driver version is 1.0.1 Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0 Input device name: "20b8000.kpp" ...... Testing ... (interrupt to exit) Event: time 1502961213.623148, type 4 (EV_MSC), code 4 (MSC_SCAN), value 12 Event: time 1502961213.623148, type 1 (EV_KEY), code 2 (KEY_1), value 1 Event: time 1502961213.623148, -------------- SYN_REPORT ------------ Event: time 1502961213.873096, type 1 (EV_KEY), code 2 (KEY_1), value 2 Event: time 1502961213.873096, -------------- SYN_REPORT ------------ Event: time 1502961213.913117, type 1 (EV_KEY), code 2 (KEY_1), value 2 Event: time 1502961213.913117, -------------- SYN_REPORT ------------ Event: time 1502961213.953088, type 1 (EV_KEY), code 2 (KEY_1), value 2 Event: time 1502961213.953088, -------------- SYN_REPORT ------------ Event: time 1502961213.963156, type 4 (EV_MSC), code 4 (MSC_SCAN), value 12 Event: time 1502961213.963156, type 1 (EV_KEY), code 2 (KEY_1), value 0 -------------------------------- |
|
|
|
KPP应用程序开发示例
a). 在应用程序中,用structinput_event读取按键的信息。 -------------------------------- structinput_event { structtimeval time; __u16 type;//类型 __u16 code;//键值 __s32 value;//按下还是释放 }; -------------------------------- b). 具体请参考下面的源码 ftp://ftp.toradex.cn/Documents/ApplicationNote/resources/maxtrix_keypad_test.c // input_event中读取按下键值以及按下、保持、释放动作。 -------------------------------- root@colibri-imx6:~# ./maxtrix_keypad_test 25 keys. Press any key. Key press Code: 7 Key release Code: 7 Key press Code: 7 Key hold Code: 7 Key hold Code: 7 Key hold Code: 7 Key hold Code: 7 Key hold Code: 7 Key release Code: 7 -------------------------------- |
|
|
|
只有小组成员才能发言,加入小组>>
【爱芯派 Pro 开发板试用体验】人体姿态估计模型部署后期尝试
1684 浏览 0 评论
1168 浏览 0 评论
【爱芯派 Pro 开发板试用体验】人体姿态估计模型部署后期尝试
1218 浏览 0 评论
【爱芯派 Pro 开发板试用体验】在爱芯派 Pro上部署坐姿检测
1229 浏览 0 评论
【爱芯派 Pro 开发板试用体验】利用爱芯派 Pro部署USB摄像头
1390 浏览 0 评论
【爱芯派 Pro 开发板试用体验】爱芯元智AX650N部署yolov5s 自定义模型
855浏览 1评论
1881浏览 1评论
【爱芯派 Pro 开发板试用体验】+ 利用TF卡进行系统更新
1521浏览 1评论
1477浏览 1评论
777浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 02:42 , Processed in 0.861844 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号
|