[原创] 【CH554评测】第二篇 测试一下触摸按键

damiaa   2017-10-3 12:53 楼主
【CH554评测】第二篇 测试一下触摸按键 知识准备:触摸按键 Touch-Key CH554 芯片提供了电容检测模块及相关的定时器,具有 6 个输入通道,支持电容量范围 5pF~ 150pF。自电容方式可以支持最多 6 个触摸按键,互电容方式可以支持最多 15 个触摸按键。 TKEY_CTRL C3h Touch-Key 控制寄存器 x0h TKEY_DATH C5h Touch-Key 数据高字节(只读) 00h TKEY_DATL C4h Touch-Key 数据低字节(只读) xxh TKEY_DAT C4h TKEY_DATL 和 TKEY_DATH 组成 16 位 SFR 00xxh 就是从这里读出触摸按键数据 Touch-Key 控制寄存器(TKEY_CTRL) 位7 bTKC_IF RO定时中断标志。 位[6:5] 保留 RO 保留 00b 位4 bTKC_2MS RW电容检测定时器的周期选择:0-1mS;1-2mS。每周期的前 87uS 为准备阶段,剩余时间检测阶段。 上述时间是基于 Fosc=24MHz 时的时间0 3 保留 RO 保留 0 2 bTKC_CHAN2 RW 触摸按键电容检测输入选择高位 0 1 bTKC_CHAN1 RW 触摸按键电容检测输入选择中位 0 0 bTKC_CHAN0 RW 触摸按键电容检测输入选择低位 0 由 bTKC_CHAN2~bTKC_CHAN0 选择触摸按键电容检测输入通道。 0 0 1 TIN0(P1.0) 0 1 0 TIN1(P1.1) 0 1 1 TIN2(P1.4) 1 0 0 TIN3(P1.5) 1 0 1 TIN4(P1.6) 1 1 0 TIN5(P1.7) 1 1 1 开启电容检测模块的电源但不连接任何通道 总结一下,就是有触摸按键数据寄存器和控制寄存器,一个是读数据,一个是控制哪个按键,开启采样等,这些寄存器都在CH554.H中有定义,在CH554手册中50页开始有详细说明。 1,先准备一下:把JP1的跳线跳到3--5 4--6相连。也就是从上往下左边4和5 右边4和5。 这里是串口0.到时触摸的数据提示从这里出来。 2,选择USB烧录。(下面的那个USB口) 3,把触摸目录的程序烧录进去。 4,重新把线插到上面USB口。打开串口调试器,把串口选上面的那个刚生成的串口。波特率57600,N,8,1 5,按下触摸。不灵敏啊。一起按。啊出来了。提示03触摸通道 Query TouchKey Channel 03 捕获1.PNG 不灵敏啊 是我没试好? 板子? 程序? 后面再试。 程序采用查询方式好些了:去掉Touchkey.h中的宏定义://#define INTERRUPT_TouchKey 0 就是查询方式了。结果好点了。 捕获2.PNG 看来程序要改进一下才好。 触摸程序简介:程序有 main.c TouchKey.c Debug.c CH554.H Debug.H stdio.h TouchKey.h 这里只介绍一下相关的部分: CH554.H中: /* Touch-key timer Registers */ sfr TKEY_CTRL = 0xC3; // touch-key control #define bTKC_IF 0x80 // ReadOnly: interrupt flag for touch-key timer, cleared by writing touch-key control or auto cleared when start touch-key checking #define bTKC_2MS 0x10 // touch-key timer cycle selection: 0=1mS, 1=2mS #define bTKC_CHAN2 0x04 // touch-key channel selection high bit #define bTKC_CHAN1 0x02 // touch-key channel selection middle bit #define bTKC_CHAN0 0x01 // touch-key channel selection low bit // bTKC_CHAN2 & bTKC_CHAN1 & bTKC_CHAN0: touch-key channel selection // 000: disable touch-key // 001: TIN0(P1.0) // 010: TIN1(P1.1) // 011: TIN2(P1.4) // 100: TIN3(P1.5) // 101: TIN4(P1.6) // 110: TIN5(P1.7) // 111: enable touch-key but disable all channel sfr16 TKEY_DAT = 0xC4; // ReadOnly: touch-key data, little-endian sfr TKEY_DATL = 0xC4; // ReadOnly: low byte of touch-key data sfr TKEY_DATH = 0xC5; // ReadOnly: high byte of touch-key data #define bTKD_CHG 0x80 // ReadOnly: indicate control changed, current data maybe invalid 这里对理解程序有帮助。 IE_TKEY:触摸按键检查定时器的中断允许位,该位为1 允许定时中断。 INT_NO_TKEY:触摸按键定时器中断 Touch Key.h#define INTERRUPT_TouchKey 0 //开启TouchKey中断方式 #define KEY_FIRST 0 //采样起始通道 #define KEY_LAST 3 //采样结束通道 #define KEY_ACT 16 //20 //按键按下,通道采样值减小,该值减小,灵敏度高,该值增大,灵敏度低 #define KEY_BASE_SAMPLE_TIME 5 //采样基准值采样次数,为了取到稳定的通道基准值 中主要声明了与触摸相关寄存器和函数。还有几个宏定义INTERRUPT_TouchKey 0/1 是否采用中断形式采用触摸按键。 KEY_ACT 这个值是采样灵敏度调节的。特别注意。 Touch Key.c中有两种采样触摸方式的函数。 main.c中根据采用方式采样的结果进行串口打印输出。 测试结果:中断方式,在KEY_ACT 为16时中断方式稍微好些 。
CH554DEMO_TOUCH.hex (5.68 KB)
(下载次数: 2, 2017-10-8 11:33 上传)
问题:目前老是第三通道被测试到。其他的没看 到 。程序后续要改动试下。 此内容由EEWORLD论坛网友damiaa原创,如需转载或用于商业用途需征得作者同意并注明出处 本帖最后由 damiaa 于 2017-10-9 15:16 编辑

回复评论 (7)

哈哈,慢慢来,要对国产有信心
点赞  2017-10-3 14:07
引用: strong161 发表于 2017-10-3 14:07
哈哈,慢慢来,要对国产有信心

是啊。芯片应该还是不错的。只是使用好才行。
点赞  2017-10-3 20:12
楼主把您的经验总结一下,写个比较详细的学习教程,带大家学习。
点赞  2017-10-3 21:19
引用: dontium 发表于 2017-10-3 21:19
楼主把您的经验总结一下,写个比较详细的学习教程,带大家学习。

嗯,有时间再细化一下。
点赞  2017-10-3 22:19
有疑问可直接发帖或联系我。
单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
点赞  2017-10-9 09:55
引用: 沁恒USB单片机 发表于 2017-10-9 09:55
有疑问可直接发帖或联系我。

谢谢
点赞  2017-10-9 10:02
可以把测试的结果贴出来,看看串口打印的内容,建议把keydata内容打印出来看看,触摸是否发生变化,变化阈值是否在可检测范围之内
点赞  2017-10-9 10:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复