STC8H触摸唤醒
问题:配置了触摸按键唤醒和其他中断唤醒的时候,当TSWUTC该寄存器的值配置较小的时候,发现触摸唤醒可以正常运行,但是其它唤醒方式出现了问题(如:外部中断唤醒),即有概率出现无法通过除触摸唤醒之外的其他唤醒源让单片机唤醒。void Touchkey_Init() //触摸配置函数
{
TSCHEN2 = 0x0c; //触摸按键使能P52 TK10 P53 TK11
TSCFG1= (7<<4) + 6; //B6~B4:开关电容工作频率 = fosc/(2*(TSCFG1+1)), B2~B0:放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最好大于等于3(1000)
TSCFG2= 1; //B1~B0:配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4)1(1/2)2(5/8)3(3/4)
TSRT = 0x00; //没有LED分时扫描
IE2 |= 0x80; //允许触摸按键中断
}
void main()
{
P_SW2 |= 0x80;
PORT_INTI();
Touchkey_Init();
EA = 1;
delay_ms(500);
Touchkey_Zero(); //获取按键0点
B_TK_Lowpass = 0;
main_state = 0;
while(1)
{
switch(main_state)
{
case 0:
ET0 = 0;
TSCTRL &= 0x73; //暂停扫描
TSWUTC = 0x01; //在睡眠模式下1s唤醒一次进行触摸按键扫描判断是否需要唤醒
TSTH10 = 0x0f00; //控制触摸唤醒灵敏度
TSTH11 = 0x0f00;
IRC32KCR |= 0X80; //开启内部低速IRC
while(!(IRC32KCR & 1)); //等待时钟稳定
TSCTRL |= 0x0c; //开启触摸按键唤醒
AUXINTIF &= ~0x20; //清除外中断3标志位
INTCLKO =EX3;
PCON = 0x02;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
// main_state = 1;
break;
case 1:
ET0 = 1;
light();
}
}
}
void INT3_Isr() interrupt 11//P37 时间设置按键唤醒??
{
P50 = ~P50;
}
上述代码设置了外部中断3唤醒和触摸按键唤醒,通过外部中断3唤醒的时候会有概论出现无法唤醒。于是在外部中断函数中加入了电平翻转来验证是否触发过中断
如上图所示,上面的信号为外部中断引脚信号,下面的为电平翻转验证信号
该图是在我未加入触摸唤醒时的逻辑分析图,可以看到每当有外部中断下降沿的时候,验证信号均发生了翻转,也就是可以正常唤醒
上图是我加入触摸唤醒之后,发现当外部中断下降沿产生的时候,会有概论出现未进入到中断函数进行验证信号电平翻转,也就是无法正常唤醒
我验证出来,当在唤醒的时候,在如上配置触摸按键一次执行时间大约为2ms,触摸按键低电模式唤醒时间为7ms,也就是应该可以正常完成一个触摸扫描?
或者是当进行触摸按键唤醒扫描的时候,无法识别到其它外设电平变换(导致没有中断标志位)?
参考这个帖子:
STC8H4K64TL主时钟停振省电模式唤醒:触摸按键唤醒 + 串口接收引脚唤醒 + 外部中断唤
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4628
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
乘风飞扬 发表于 2024-3-19 16:34
参考这个帖子:
STC8H4K64TL主时钟停振省电模式唤醒:触摸按键唤醒 + 串口接收引脚唤醒 + 外部中断唤
https ...
这篇帖子我也参考过,感觉现在的区别就是我现在的低电量唤醒时间快,大概7ms,然后在你的例程中是1s,当我替换成1s之后无法唤醒的这种情况确实没有出现(但也可能是我还没有测到)。我现在的怀疑就是当在扫描触摸的时候,是否就无法判断其他外设引脚变换了。然后替换成1s低电唤醒只是降低了出现这种概论,但任然存在
haley 发表于 2024-3-19 16:45
这篇帖子我也参考过,感觉现在的区别就是我现在的低电量唤醒时间快,大概7ms,然后在你的例程中是1s,当 ...
这不是概率问题,你说的情况在2楼有介绍解决方法
乘风飞扬 发表于 2024-3-19 17:24
这不是概率问题,你说的情况在2楼有介绍解决方法
这个在我的程序中时候体现的,在睡眠之前将该位置为零 我测试了1秒唤醒、200ms唤醒、100ms唤醒,手按按钮唤醒,或用2Hz信号唤醒(机器唤醒),均能正常唤醒。 楼主问题解决了吗? 也遇到了类似的情况,如果TSWUTC设置的越小,对其他中断唤醒的失败概率就越大 我也遇到了这个问题 TSWUTC设置的越小,对其他中断唤醒的失败概率就越大,尤其是带着触摸唤醒
页:
[1]