找回密码
 立即注册
查看: 50|回复: 4

触摸按键休眠后无法唤醒

[复制链接]
  • TA的每日心情
    开心
    2024-5-10 12:30
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
    发表于 2024-5-1 09:28:05 | 显示全部楼层 |阅读模式
    现象:触摸按键功能正常,根据案例增加  休眠部分
    {                TSCHEN1 = 0xff;                //TK0~TK7        仅仅允许K0唤醒
                    TSCHEN2 = 0x0f;                //TK8~TK15
                    TSCTRL = (1<<3) + (1<<2) + 0;        //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP

                    NOP(2);
                    PCON |= 0x02;        //睡眠
                    NOP(5);

        PrintString1("STC8H4K64TLR 唤醒后\r\n");
                    TSCHEN1 = 0xff;                //TK0~TK7        允许所有16个键
                    TSCHEN2 = 0x0f;                //TK8~TK15
                    TSCTRL = (1<<7) + (1<<3) + (1<<2) + 0;}
    就无法唤醒了,
    扫描函数如下,

    void Touch_Init(void)
    {
    //        u8 i;
    //  TSRT = 0x00;                  //没有LED分时扫描
            TSCHEN1 = 0xff;                //TK0~TK7
            TSCHEN2 = 0x0f;                //TK8~TK12 1111
            TSCFG1  = (7<<4) + 6;        //开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1)), 放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
            TSCFG2  = 1;                //配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4)  1(1/2)  2(5/8)  3(3/4)
    //        TSCTRL = (1<<7) + (1<<6) +3;        //开始扫描, B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
            TSRT = 0x00;                //没有LED分时扫描
            TSCTRL =0xa0; //0xa0
    //B7:TSGO=1使能触摸按键 1011 0100
    //B6:SINGLE=1单次扫描模式、=0自动重复扫描
    //B5:TSWAIT=1完成一轮扫描后、TSIF 被硬件置 1,此时触摸按键控制器会暂停扫描,直到 TSIF 标志位被清 0后才开始下一轮的扫描
    //B4:TSWUCS=0使用内部32K晶振
    //B3:TSDCEN=0不使能16位比较器
    //B2:TSWUEN=1使能低功耗唤醒功能
    //B1B0:TSSAMP=11单次按键扫描4次
      TSWUTC = 20;                        //唤醒
            IE2 |= 0x80;                //允许触摸按键中断
            EA = 1;
            ReadZeroData();
    }
    void Touch_Scan()
    {
            u8 i;
            if(B_1ms)
            {
                            B_1ms = 0;
                            for(i=0;i<12;i++)          //#
                            {
                                    JudgeKey(i);        //判断键值
                            }

                            B = (u8)tpFlag;
                            if(B0)           //触摸按键被触发后,对应的指示灯信号进行翻转
                            {
                                    beep(10);
                                    key_value=3;
                                    LED3 = !LED3;
                                    TX1_write2buff(key_value);
                            }
                            if(B1)       
                            {
                                    beep(10);
                                    key_value=6;
                                    LED6 = !LED6;
                                    TX1_write2buff(key_value);
                            }
                            if(B2)       
                            {
                                    beep(10);
                                    key_value=1;
                                    LED1 = !LED1;
                                    TX1_write2buff(key_value);
                            }
                            if(B3)       
                            {
                                    beep(10);
                                    key_value=4;
                                    LED4 = !LED4;
                                    TX1_write2buff(key_value);
                            }
                            if(B4)       
                            {
                                    beep(10);
                                    key_value=8;
                                    LED8 = !LED8;
                                    TX1_write2buff(key_value);
                            }
                            if(B5)       
                            {
                                    beep(10);
                                    key_value=10;         
                                    LED12 = !LED12;
                                    TX1_write2buff(key_value);
                            }
                            if(B6)       
                            {
                                    beep(10);
                                    key_value=11;              //*
                                    LED11 = !LED11;
                                    TX1_write2buff(key_value);
                            }
                            if(B7)       
                            {
                                    beep(10);
                                    key_value=7;
                                    LED7 = !LED7;
                                    TX1_write2buff(key_value);
                            }
                           
                            B = (u8)(tpFlag >> 8);
                            if(B0)       
                            {
                                    beep(10);
                                    key_value=12;
                                    LED13 = !LED13;
                                    TX1_write2buff(key_value);
                            }
                            if(B1)       
                            {
                                    beep(10);
                                    key_value=9;
                                    LED9 = !LED9;
                                    TX1_write2buff(key_value);
                            }
                            if(B2)       
                            {
                                    beep(10);
                                    key_value=5;
                                    LED5 = !LED5;
                                    TX1_write2buff(key_value);
                            }
                            if(B3)       
                            {
                                    beep(10);
                                    key_value=2;
                                    LED2 = !LED2;
                                    TX1_write2buff(key_value);                               
                            }                       
                            tpFlag = 0;       
                           
                    TSCHEN1 = 0xff;                //TK0~TK7        仅仅允许K0唤醒
                    TSCHEN2 = 0x0f;                //TK8~TK15
                    TSCTRL = (1<<3) + (1<<2) + 0;        //关闭触摸模块, 允许16位数字比较器, 允许低功耗唤醒。 B7: TSGO,  B6: SINGLE,  B5: TSWAIT, B4: TSWUCS, B3: TSDCEN, B2: TSWUEN, B1 B0: TSSAMP
                   
                    NOP(2);
                    PCON |= 0x02;        //睡眠
                    NOP(5);
                           
        PrintString1("STC8H4K64TLR 唤醒后\r\n");
                    TSCHEN1 = 0xff;                //TK0~TK7        允许所有16个键
                    TSCHEN2 = 0x0f;                //TK8~TK15
                    TSCTRL = (1<<7) + (1<<3) + (1<<2) + 0;
            }
    }

    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2024-5-1 11:06:23 | 显示全部楼层
    用这个帖子提供的例程试试:
    触摸按键唤醒,1uA/1个键/1秒唤醒,STC触摸MCU, 唤醒【主时钟停振/省电模式】
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5167
    (出处: 国芯技术交流网站)
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-10 12:30
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
     楼主| 发表于 2024-5-1 13:38:36 | 显示全部楼层
    就是参考的例程
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2024-5-2 09:54:17 来自手机 | 显示全部楼层
    lier378912453 发表于 2024-5-1 13:38
    就是参考的例程

    先直接用例子测试,功能测试正常后再进行修改或者移植。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-10 12:30
  • 签到天数: 19 天

    [LV.4]偶尔看看III

    3

    主题

    13

    回帖

    123

    积分

    注册会员

    积分
    123
     楼主| 发表于 2024-5-8 18:11:35 | 显示全部楼层
    大家好  请教下两个问题
    一:12个触摸按键(亚克力覆盖在PCB上),多次触摸时,有时候会有串扰的问题(触摸按键时 间隔时间长一点 也会时不时出现串扰),这个应该从哪方面来分析呢
    二:根据手册中的流程 触摸唤醒掉电流程  一步一步操作下来,发现可以进入掉电模式 但是唤醒不起来了(待机功耗550uA 进入掉电模式时70UA左右,但是唤醒不起来)TSWUTC从128改到15 也不管
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-19 07:08 , Processed in 0.058739 second(s), 45 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表