haley 发表于 2024-3-19 16:21:24

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,也就是应该可以正常完成一个触摸扫描?
或者是当进行触摸按键唤醒扫描的时候,无法识别到其它外设电平变换(导致没有中断标志位)?







乘风飞扬 发表于 2024-3-19 16:34:36

参考这个帖子:
STC8H4K64TL主时钟停振省电模式唤醒:触摸按键唤醒 + 串口接收引脚唤醒 + 外部中断唤
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4628
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

haley 发表于 2024-3-19 16:45:25

乘风飞扬 发表于 2024-3-19 16:34
参考这个帖子:
STC8H4K64TL主时钟停振省电模式唤醒:触摸按键唤醒 + 串口接收引脚唤醒 + 外部中断唤
https ...

这篇帖子我也参考过,感觉现在的区别就是我现在的低电量唤醒时间快,大概7ms,然后在你的例程中是1s,当我替换成1s之后无法唤醒的这种情况确实没有出现(但也可能是我还没有测到)。我现在的怀疑就是当在扫描触摸的时候,是否就无法判断其他外设引脚变换了。然后替换成1s低电唤醒只是降低了出现这种概论,但任然存在

乘风飞扬 发表于 2024-3-19 17:24:25

haley 发表于 2024-3-19 16:45
这篇帖子我也参考过,感觉现在的区别就是我现在的低电量唤醒时间快,大概7ms,然后在你的例程中是1s,当 ...

这不是概率问题,你说的情况在2楼有介绍解决方法



haley 发表于 2024-3-19 17:31:35

乘风飞扬 发表于 2024-3-19 17:24
这不是概率问题,你说的情况在2楼有介绍解决方法

这个在我的程序中时候体现的,在睡眠之前将该位置为零

梁工 发表于 2024-4-2 16:21:31

我测试了1秒唤醒、200ms唤醒、100ms唤醒,手按按钮唤醒,或用2Hz信号唤醒(机器唤醒),均能正常唤醒。

miaoyahan 发表于 2024-5-18 16:40:12

楼主问题解决了吗? 也遇到了类似的情况,如果TSWUTC设置的越小,对其他中断唤醒的失败概率就越大

lier378912453 发表于 2024-9-4 09:38:43

我也遇到了这个问题 TSWUTC设置的越小,对其他中断唤醒的失败概率就越大,尤其是带着触摸唤醒
页: [1]
查看完整版本: STC8H触摸唤醒