7544|12

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【CH554】评测:触摸按键,亮点还是槽点? [复制链接]

 
本帖最后由 ljj3166 于 2017-10-16 00:18 编辑

开始撸CH554的卖点之一
就是触摸按键
第一次玩触摸,有点小小的紧张
先看看原理图

其实PCB板上的按键有两种方式
自感和互感
第一次了解触摸,不知道理解对不对
自感触摸按键可能就是端口对某个固定点的电容值
譬如K3和K4,就是检测P14和P15单独端口的对地或者对哪里感应电容
互感就像K1和K2了
检测P14和P15或者P14和P16之间的感应电容

先看看触摸检测的基本步骤
1、配置触摸端口的P1_DIR_PU 位为 0
2、配置触摸检测的周期,1MS或者2MS
3、配置检测端口
4、等待中断或者直接查询中断
5、读取检测值
然后就是反复执行3-5步了
原理图上使用了P1.4,P1.5和P1.6三个端口
但是例程中检测的通道却是0-3
对应的是P1.0,P1.1,P1.4

因为P1.4在原理图中被K1,K2,K3占用
SO,无论你怎么撸按键
K4永远是没有反应的
再加上P1.6还TM被LED占用

所以,你撸出翔来
也只能是通道3,也就是P1.4(TIN2)在响应
准备简单做个测试,却发现:

WTF......
楼主怀疑楼主拿到了一个假的开发板,一个假的例程......

老老实实自己撸码吧
这官方例程,实在是靠不住
硬杠,胡乱撸了几行
  1. void key_value_get(unsigned char flag)
  2. {
  3.                   TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x03;                                     //ÉèÖòÉÑùͨµÀ

  4.         while((TKEY_CTRL&bTKC_IF) == 0);                                      //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É                                             //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
  5.     if(flag)
  6.                 {key_value_14_com = TKEY_DAT&0x07F0;}//printf("key_value_14_com = %d\r\n", key_value_14_com);}
  7.         else {key_value_14 = TKEY_DAT&0x07F0       ;}// printf("key_value_14 = %d \r\n", key_value_14); }                        //±£´æ²ÉÑùÖµ
  8.                
  9.         
  10.         TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x04;                                     //ÉèÖòÉÑùͨµÀ

  11.         while((TKEY_CTRL&bTKC_IF) == 0);                                      //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É                                             //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
  12.     if(flag)
  13.                 {key_value_15_com = TKEY_DAT&0x07F0;}//printf("key_value_15_com = %d \r\n", key_value_15_com);}
  14.         else {key_value_15 = TKEY_DAT&0x07F0       ;}//  printf("key_value_15 = %d \r\n", key_value_15);}                        //±£´æ²ÉÑùÖµ
  15.                
  16.         
  17.         TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x05;                                     //ÉèÖòÉÑùͨµÀ

  18.         while((TKEY_CTRL&bTKC_IF) == 0);                                      //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É                                             //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
  19.    if(flag)
  20.                 {key_value_16_com = TKEY_DAT&0x07F0;}//printf("key_value_16_com = %d \r\n", key_value_16_com); }
  21.         else {key_value_16 = TKEY_DAT&0x07F0       ;}//printf("key_value_16 = %d \r\n", key_value_16);  }                        //±£´æ²ÉÑùÖµ
  22.                
  23. }

  24. void key_check()
  25. {
  26.         if((key_value_14 > key_value_14_com + KEY_ACT) && (key_value_15 > key_value_15_com + KEY_ACT))
  27.         {key_stat = 0x01;}
  28.                 else if((key_value_14 > key_value_14_com + KEY_ACT) && (key_value_16 > key_value_16_com - KEY_ACT))
  29.                         {key_stat = 0x02;}
  30.                         else if(key_value_14 > key_value_14_com + KEY_ACT)
  31.                         {key_stat = 0x03;}
  32.                                 else if(key_value_15 > key_value_15_com + KEY_ACT)
  33.                                 {key_stat = 0x04;}
  34.                                                 else{;}
  35.         switch(key_stat)
  36.         {
  37.                 case 0x01 :
  38.                                 printf("s1 pressed...\r\n");
  39.                                 T0 = ~T0;
  40.                         break;
  41.                 case 0x02 :
  42.                                 printf("s2 pressed...\r\n");
  43.                                 T1 = ~T1;
  44.                         break;
  45.                 case 0x03 :
  46.                                 printf("s3 pressed...\r\n");
  47.                                 AIN3 = ~AIN3;
  48.                         break;
  49.                 case 0x04 :
  50.                                 printf("s4 pressed...\r\n");
  51.                                 INT1 = ~INT1;
  52.                         break;
  53.                 default :
  54.                         break;
  55.         }               
  56.                 key_stat = 0x00;
  57. }
复制代码


  1. main( )
  2. {
  3.     UINT8 i,j;UINT8 TmpSum = 0;
  4.     CfgFsys( );                                                                //CH554ʱÖÓÑ¡ÔñÅäÖà  
  5.     mDelaymS(5);                                                               //ÐÞ¸ÄÖ÷Ƶ½¨ÒéÉÔ¼ÓÑÓʱµÈ´ýоƬ¹©µçÎȶ¨        
  6.     mInitSTDIO( );                                                             //´®¿Ú0³õʼ»¯
  7.     printf("start ...\n");
  8.                 Port3Cfg(3,5);Port3Cfg(3,4);Port3Cfg(3,2);Port3Cfg(3,3);
  9.           P1_DIR_PU &= 0x0C;                                                         //ËùÓд¥ÃþͨµÀÉèÖÃΪ¸¡¿ÕÊäÈ룬Óò»µ½µÄͨµÀ¿ÉÒÔ²»ÉèÖÃ
  10.     TouchKeyQueryCyl2ms();                                                     //TouchKey²éѯÖÜÆÚ2ms        
  11.                 key_value_get(0xFF);
  12. while(1){

  13.                 key_value_get(0x00);
  14.                 key_check();
  15.                 mDelaymS(500);
  16.         }
  17. }
复制代码


楼主已经不敢相信打印出来的数据

东西再便宜,也要把资料整对啊
这不坑人呢嘛
不知道该说啥好了.....

此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自单片机论坛

最新回复

嗯,你说得对,应用不方便的地方我们会改进的。谢谢!  详情 回复 发表于 2017-10-16 16:23

赞赏

1

查看全部赞赏

点赞 关注
个人签名

So TM what......?

 

回复
举报

10

帖子

1

TA的资源

一粒金砂(初级)

沙发
 
??? 没看懂  what》》》
此帖出自单片机论坛
 
 

回复

168

帖子

3

TA的资源

一粒金砂(中级)

板凳
 
@ljj3166  例程不对应是有这问题,KEY1,KEY2是互容的,KEY3,KEY4是自容的,P16确实是被LED占用了,板子确实有不到位的地方,
51单片机的printf位宽要一致,如果8位位你用
  1. printf(“%d”,(UINT16)cnt);
复制代码

就不会出现printf乱码这个问题了。
此帖出自单片机论坛

点评

got 这种价优量足的东西 资料却让人吐血 实在是可惜  详情 回复 发表于 2017-10-16 10:36
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

4
 
REMY 发表于 2017-10-16 10:05
@ljj3166  例程不对应是有这问题,KEY1,KEY2是互容的,KEY3,KEY4是自容的,P16确实是被LED占用了,板子确 ...

got
这种价优量足的东西
资料却让人吐血
实在是可惜
此帖出自单片机论坛

点评

你好,首先十分抱歉给测试带来不便。、 关于触摸按键例程和实际硬件未吻合情况是这样的:板子上四个按键分别使用了自感和互感的方式来布线,但实际使用中基本不会用到互感式的,一般都是使用自感式的。(自感式的使  详情 回复 发表于 2017-10-16 11:35
 
个人签名

So TM what......?

 

 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

5
 
ljj3166 发表于 2017-10-16 10:36
got
这种价优量足的东西
资料却让人吐血
实在是可惜

你好,首先十分抱歉给测试带来不便。、
关于触摸按键例程和实际硬件未吻合情况是这样的:板子上四个按键分别使用了自感和互感的方式来布线,但实际使用中基本不会用到互感式的,一般都是使用自感式的。(自感式的使用上更稳定可靠,应用兼容性好)所以我们的例程上都是提供的自感的方式。所以未能跟板子对应起来。
针对这个问题我们已经在新版的测试板中有修正,新版的测试板刚做PCB板,大概还需要几天才收到,如果你有需求,我们后面可以发一块新的板子给你。十分抱歉。
此帖出自单片机论坛

点评

感谢回复 芯片触摸配置十分简便,没有例程按照手册也能轻松解决 不过,好马配好鞍,好芯片配好资料 希望能完善配套,提升体验  详情 回复 发表于 2017-10-16 13:54
 
个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

6
 
其实沁恒出的DEMO程序是通用程序,要测试按键确实需要动手改程序,否则叫什么评测。虽然有个按键不能正确识别,但其他3个按键识别是没有问题的
此帖出自单片机论坛

点评

摘自百度百科: DEMO是demonstration的缩写。DEMO的中文含意为“示范”、“展示”、“样片”、“样稿”、“原型”,常被用来称呼具有示范或展示功能及意味的事物。 层主细读一下例程,或许和楼主观点一致也说不  详情 回复 发表于 2017-10-16 13:55
 
 
 

回复

1万

帖子

25

TA的资源

版主

7
 
分析的很清楚,对后面使用的人有很大帮助。
此帖出自单片机论坛

点评

感谢D大帮顶  详情 回复 发表于 2017-10-16 13:55
 
 
 

回复

6107

帖子

4

TA的资源

版主

8
 
好。
此帖出自单片机论坛
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

9
 
沁恒USB单片机 发表于 2017-10-16 11:35
你好,首先十分抱歉给测试带来不便。、
关于触摸按键例程和实际硬件未吻合情况是这样的:板子上四个按键 ...

感谢回复
芯片触摸配置十分简便,没有例程按照手册也能轻松解决
不过,好马配好鞍,好芯片配好资料
希望能完善配套,提升体验
此帖出自单片机论坛

点评

嗯,你说得对,应用不方便的地方我们会改进的。  详情 回复 发表于 2017-10-16 16:23
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

10
 
本帖最后由 ljj3166 于 2017-10-16 14:08 编辑
ltbytyn 发表于 2017-10-16 12:26
其实沁恒出的DEMO程序是通用程序,要测试按键确实需要动手改程序,否则叫什么评测。虽然有个按键不能正确识 ...

摘自百度百科:
DEMO是demonstration的缩写。DEMO的中文含意为“示范”、“展示”、“样片”、“样稿”、“原型”,常被用来称呼具有示范或展示功能及意味的事物。

层主细读一下例程,或许和楼主观点一致也说不定呢
至于那个按键,表象上是有3个在响应,其实只是一个端口在响应。
此帖出自单片机论坛

点评

其实你可以去看一下我的帖子,咋两的相似度80%,我的仅仅是没有贴程序而已。既然做过例程肯定是拜读过的  详情 回复 发表于 2017-10-16 16:02
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

11
 
dcexpert 发表于 2017-10-16 13:26
分析的很清楚,对后面使用的人有很大帮助。

感谢D大帮顶
此帖出自单片机论坛
 
个人签名

So TM what......?

 

 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

12
 
ljj3166 发表于 2017-10-16 13:55
摘自百度百科:
DEMO是demonstration的缩写。DEMO的中文含意为“示范”、“展示”、“样片”、“样稿” ...

其实你可以去看一下我的帖子,咋两的相似度80%,我的仅仅是没有贴程序而已。既然做过例程肯定是拜读过的
此帖出自单片机论坛
 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

13
 
ljj3166 发表于 2017-10-16 13:54
感谢回复
芯片触摸配置十分简便,没有例程按照手册也能轻松解决
不过,好马配好鞍,好芯片配好资料
希 ...

嗯,你说得对,应用不方便的地方我们会改进的。谢谢!
此帖出自单片机论坛
 
个人签名单价1元含税的USB和Touchkey单片机CH551G已大批量出货,试样QQ:1258305301
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表