社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 329|回复: 7

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

[复制链接]

2439

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2017-10-3 12:53:48 | 显示全部楼层 |阅读模式
本帖最后由 damiaa 于 2017-10-9 15:16 编辑

【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, 下载次数: 0)

回复

使用道具 举报

2308

TA的帖子

8

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-10-3 14:07:30 | 显示全部楼层
哈哈,慢慢来,要对国产有信心

点评

是啊。芯片应该还是不错的。只是使用好才行。  详情 回复 发表于 2017-10-3 20:12

回复

使用道具 举报

2439

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-10-3 20:12:47 | 显示全部楼层
strong161 发表于 2017-10-3 14:07
哈哈,慢慢来,要对国产有信心

是啊。芯片应该还是不错的。只是使用好才行。

回复

使用道具 举报

1万

TA的帖子

33

TA的资源

版主

Rank: 6Rank: 6

发表于 2017-10-3 21:19:26 | 显示全部楼层
楼主把您的经验总结一下,写个比较详细的学习教程,带大家学习。

点评

嗯,有时间再细化一下。  详情 回复 发表于 2017-10-3 22:19

回复

使用道具 举报

2439

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-10-3 22:19:59 | 显示全部楼层
dontium 发表于 2017-10-3 21:19
楼主把您的经验总结一下,写个比较详细的学习教程,带大家学习。

嗯,有时间再细化一下。

回复

使用道具 举报

73

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-10-9 09:55:58 | 显示全部楼层
有疑问可直接发帖或联系我。

点评

谢谢  详情 回复 发表于 2017-10-9 10:02
单价1.3元的USB和Touchkey单片机CH552G已全面供货,试样QQ:1258305301

回复

使用道具 举报

2439

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-10-9 10:02:09 | 显示全部楼层
沁恒USB单片机 发表于 2017-10-9 09:55
有疑问可直接发帖或联系我。

谢谢

回复

使用道具 举报

176

TA的帖子

3

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-10-9 10:13:45 | 显示全部楼层
可以把测试的结果贴出来,看看串口打印的内容,建议把keydata内容打印出来看看,触摸是否发生变化,变化阈值是否在可检测范围之内

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2017-10-20 05:45 , Processed in 0.270432 second(s), 17 queries , Redis On.

快速回复 返回顶部 返回列表