【CH554】评测:触摸按键,亮点还是槽点?
<div class='showpostmsg'> 本帖最后由 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......
楼主怀疑楼主拿到了一个假的开发板,一个假的例程......
老老实实自己撸码吧
这官方例程,实在是靠不住
硬杠,胡乱撸了几行
void key_value_get(unsigned char flag)
{
TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x03; //ÉèÖòÉÑùͨµÀ
while((TKEY_CTRL&bTKC_IF) == 0); //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
if(flag)
{key_value_14_com = TKEY_DAT&0x07F0;}//printf("key_value_14_com = %d\r\n", key_value_14_com);}
else {key_value_14 = TKEY_DAT&0x07F0 ;}// printf("key_value_14 = %d \r\n", key_value_14); } //±£´æ²ÉÑùÖµ
TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x04; //ÉèÖòÉÑùͨµÀ
while((TKEY_CTRL&bTKC_IF) == 0); //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
if(flag)
{key_value_15_com = TKEY_DAT&0x07F0;}//printf("key_value_15_com = %d \r\n", key_value_15_com);}
else {key_value_15 = TKEY_DAT&0x07F0 ;}//printf("key_value_15 = %d \r\n", key_value_15);} //±£´æ²ÉÑùÖµ
TKEY_CTRL = TKEY_CTRL & 0xF8 | 0x05; //ÉèÖòÉÑùͨµÀ
while((TKEY_CTRL&bTKC_IF) == 0); //bTKC_IF±äΪ1ʱ£¬±¾ÖÜÆÚ²ÉÑùÍê³É //²ÉÑùÖµÎȶ¨£¬È¡µÍ4λ¾Í¹»ÁË
if(flag)
{key_value_16_com = TKEY_DAT&0x07F0;}//printf("key_value_16_com = %d \r\n", key_value_16_com); }
else {key_value_16 = TKEY_DAT&0x07F0 ;}//printf("key_value_16 = %d \r\n", key_value_16);} //±£´æ²ÉÑùÖµ
}
void key_check()
{
if((key_value_14 > key_value_14_com + KEY_ACT) && (key_value_15 > key_value_15_com + KEY_ACT))
{key_stat = 0x01;}
else if((key_value_14 > key_value_14_com + KEY_ACT) && (key_value_16 > key_value_16_com - KEY_ACT))
{key_stat = 0x02;}
else if(key_value_14 > key_value_14_com + KEY_ACT)
{key_stat = 0x03;}
else if(key_value_15 > key_value_15_com + KEY_ACT)
{key_stat = 0x04;}
else{;}
switch(key_stat)
{
case 0x01 :
printf("s1 pressed...\r\n");
T0 = ~T0;
break;
case 0x02 :
printf("s2 pressed...\r\n");
T1 = ~T1;
break;
case 0x03 :
printf("s3 pressed...\r\n");
AIN3 = ~AIN3;
break;
case 0x04 :
printf("s4 pressed...\r\n");
INT1 = ~INT1;
break;
default :
break;
}
key_stat = 0x00;
}
main( )
{
UINT8 i,j;UINT8 TmpSum = 0;
CfgFsys( ); //CH554ʱÖÓÑ¡ÔñÅäÖÃ
mDelaymS(5); //ÐÞ¸ÄÖ÷Ƶ½¨ÒéÉÔ¼ÓÑÓʱµÈ´ýоƬ¹©µçÎȶ¨
mInitSTDIO( ); //´®¿Ú0³õʼ»¯
printf("start ...\n");
Port3Cfg(3,5);Port3Cfg(3,4);Port3Cfg(3,2);Port3Cfg(3,3);
P1_DIR_PU &= 0x0C; //ËùÓд¥ÃþͨµÀÉèÖÃΪ¸¡¿ÕÊäÈ룬Óò»µ½µÄͨµÀ¿ÉÒÔ²»ÉèÖÃ
TouchKeyQueryCyl2ms(); //TouchKey²éѯÖÜÆÚ2ms
key_value_get(0xFF);
while(1){
key_value_get(0x00);
key_check();
mDelaymS(500);
}
}
楼主已经不敢相信打印出来的数据
东西再便宜,也要把资料整对啊
这不坑人呢嘛
不知道该说啥好了.....
此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处
</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> ??? 没看懂what》》》
@ljj3166例程不对应是有这问题,KEY1,KEY2是互容的,KEY3,KEY4是自容的,P16确实是被LED占用了,板子确实有不到位的地方,
51单片机的printf位宽要一致,如果8位位你用
printf(“%d”,(UINT16)cnt);
就不会出现printf乱码这个问题了。 REMY 发表于 2017-10-16 10:05
@ljj3166例程不对应是有这问题,KEY1,KEY2是互容的,KEY3,KEY4是自容的,P16确实是被LED占用了,板子确 ...
got
这种价优量足的东西
资料却让人吐血
实在是可惜 ljj3166 发表于 2017-10-16 10:36
got
这种价优量足的东西
资料却让人吐血
实在是可惜
你好,首先十分抱歉给测试带来不便。、
关于触摸按键例程和实际硬件未吻合情况是这样的:板子上四个按键分别使用了自感和互感的方式来布线,但实际使用中基本不会用到互感式的,一般都是使用自感式的。(自感式的使用上更稳定可靠,应用兼容性好)所以我们的例程上都是提供的自感的方式。所以未能跟板子对应起来。
针对这个问题我们已经在新版的测试板中有修正,新版的测试板刚做PCB板,大概还需要几天才收到,如果你有需求,我们后面可以发一块新的板子给你。:)十分抱歉。 其实沁恒出的DEMO程序是通用程序,要测试按键确实需要动手改程序,否则叫什么评测。虽然有个按键不能正确识别,但其他3个按键识别是没有问题的 分析的很清楚,对后面使用的人有很大帮助。 {:1_103:}{:1_103:}{:1_103:} 好。:time::time::time: 沁恒USB单片机 发表于 2017-10-16 11:35
你好,首先十分抱歉给测试带来不便。、
关于触摸按键例程和实际硬件未吻合情况是这样的:板子上四个按键 ...
感谢回复
芯片触摸配置十分简便,没有例程按照手册也能轻松解决
不过,好马配好鞍,好芯片配好资料
希望能完善配套,提升体验
{:1_123:} 本帖最后由 ljj3166 于 2017-10-16 14:08 编辑
ltbytyn 发表于 2017-10-16 12:26
其实沁恒出的DEMO程序是通用程序,要测试按键确实需要动手改程序,否则叫什么评测。虽然有个按键不能正确识 ...
摘自百度百科:
DEMO是demonstration的缩写。DEMO的中文含意为“示范”、“展示”、“样片”、“样稿”、“原型”,常被用来称呼具有示范或展示功能及意味的事物。
层主细读一下例程,或许和楼主观点一致也说不定呢:)
至于那个按键,表象上是有3个在响应,其实只是一个端口在响应。
dcexpert 发表于 2017-10-16 13:26
分析的很清楚,对后面使用的人有很大帮助。
感谢D大帮顶 ljj3166 发表于 2017-10-16 13:55
摘自百度百科:
DEMO是demonstration的缩写。DEMO的中文含意为“示范”、“展示”、“样片”、“样稿” ...
其实你可以去看一下我的帖子,咋两的相似度80%,我的仅仅是没有贴程序而已。既然做过例程肯定是拜读过的 ljj3166 发表于 2017-10-16 13:54
感谢回复
芯片触摸配置十分简便,没有例程按照手册也能轻松解决
不过,好马配好鞍,好芯片配好资料
希 ...
嗯,你说得对,应用不方便的地方我们会改进的。谢谢!:congratulate:
页:
[1]