damiaa 发表于 2017-10-3 12:53

【CH554评测】第二篇 测试一下触摸按键

<div class='showpostmsg'> 本帖最后由 damiaa 于 2017-10-9 15:16 编辑

【CH554评测】第二篇 测试一下触摸按键
知识准备:触摸按键 Touch-Key
CH554 芯片提供了电容检测模块及相关的定时器,具有 6 个输入通道,支持电容量范围 5pF~
150pF。自电容方式可以支持最多 6 个触摸按键,互电容方式可以支持最多 15 个触摸按键。
TKEY_CTRLC3hTouch-Key 控制寄存器x0h
TKEY_DATHC5hTouch-Key 数据高字节(只读)00h

TKEY_DATLC4hTouch-Key 数据低字节(只读)xxh
TKEY_DAT C4hTKEY_DATL 和 TKEY_DATH 组成 16 位 SFR00xxh就是从这里读出触摸按键数据

Touch-Key 控制寄存器(TKEY_CTRL):
位7bTKC_IFRO定时中断标志。
位保留RO保留00b
位4bTKC_2MSRW电容检测定时器的周期选择:0-1mS;1-2mS。每周期的前 87uS 为准备阶段,剩余时间检测阶段。
                     上述时间是基于 Fosc=24MHz 时的时间0
3保留RO保留0
2bTKC_CHAN2RW触摸按键电容检测输入选择高位0
1bTKC_CHAN1RW触摸按键电容检测输入选择中位0
0bTKC_CHAN0RW触摸按键电容检测输入选择低位0

由 bTKC_CHAN2~bTKC_CHAN0 选择触摸按键电容检测输入通道。
001TIN0(P1.0)
010TIN1(P1.1)
011TIN2(P1.4)
100TIN3(P1.5)
101TIN4(P1.6)
110TIN5(P1.7)
111开启电容检测模块的电源但不连接任何通道
总结一下,就是有触摸按键数据寄存器和控制寄存器,一个是读数据,一个是控制哪个按键,开启采样等,这些寄存器都在CH554.H中有定义,在CH554手册中50页开始有详细说明。

1,先准备一下:把JP1的跳线跳到3--54--6相连。也就是从上往下左边4和5 右边4和5。
   这里是串口0.到时触摸的数据提示从这里出来。
2,选择USB烧录。(下面的那个USB口)
3,把触摸目录的程序烧录进去。
4,重新把线插到上面USB口。打开串口调试器,把串口选上面的那个刚生成的串口。波特率57600,N,8,1
5,按下触摸。不灵敏啊。一起按。啊出来了。提示03触摸通道 Query TouchKey Channel 03

:loveliness:不灵敏啊 是我没试好?板子?程序?   后面再试。

程序采用查询方式好些了:去掉Touchkey.h中的宏定义://#define INTERRUPT_TouchKey   0   
就是查询方式了。结果好点了。

看来程序要改进一下才好。

触摸程序简介:程序有         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时中断方式稍微好些 。
               问题:目前老是第三通道被测试到。其他的没看 到 。程序后续要改动试下。
此内容由EEWORLD论坛网友damiaa原创,如需转载或用于商业用途需征得作者同意并注明出处












</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

strong161 发表于 2017-10-3 14:07

:time: 哈哈,慢慢来,要对国产有信心:Sad:

damiaa 发表于 2017-10-3 20:12

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

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

dontium 发表于 2017-10-3 21:19

楼主把您的经验总结一下,写个比较详细的学习教程,带大家学习。

damiaa 发表于 2017-10-3 22:19

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

嗯,有时间再细化一下。

沁恒USB单片机 发表于 2017-10-9 09:55

:):handshake有疑问可直接发帖或联系我。

damiaa 发表于 2017-10-9 10:02

沁恒USB单片机 发表于 2017-10-9 09:55
有疑问可直接发帖或联系我。

谢谢

REMY 发表于 2017-10-9 10:13

可以把测试的结果贴出来,看看串口打印的内容,建议把keydata内容打印出来看看,触摸是否发生变化,变化阈值是否在可检测范围之内
页: [1]
查看完整版本: 【CH554评测】第二篇 测试一下触摸按键