roger 发表于 2024-10-7 19:38:17

Ai8H4KTLCD 触摸按键有两个通道的按键扫描数据溢出问题 | TCAP 引脚焊接的电容太大了

配置了 TK0/TK1/TK3/TK4/TK5 5个触摸按键,打印扫描的按键值

有两个通道的值溢出了,在中断里查询 TSDOV 确实置位了,
手册上说,如果出现溢出,可以修改软件配置或者系统硬件以避免发生溢出

目前我也修改了 TSVR,但是没啥作用,不知道还有哪些配置是关联扫描数据溢出的?
能请大佬详细讲讲吗?另外手册上说可以调整系统硬件,请问具体是调整哪一块呢?

附上触摸按键的相关配置代码:
void bsp_StcTouchkeyInit(void)
{
    IE2 &= ~(1 << 7);                //停止触摸中断
    TSCTRL = 0;                        //停止自动扫描
    TSSTA2 |= 0xC0;      //清除标志位
    /* 根据实际使用到的 GPIO 将其配置为高阻 */
    P1_MODE_IN_HIZ(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5); // P1.5/P1.4/P1.3/P1.1/P1.0 设置为高阻输入

    /*
    根据实际使用的触摸按键,使能对应的即可
    此处使能了 TK00、TK01、TK03、TK04、TK05 共 5 个触摸按键
    */
    TSCHEN1 = BV(0) | BV(1) | BV(3) | BV(4) | BV(5); // TK00~TK07
    TSCHEN2 = 0x00;                                  // TK08~TK15

    /* TSRT 寄存器用于配置触摸按键控制器和 LED 驱动器分时多工 */
    TSRT = 0x00; // 没有LED分时扫描
   
    /*
    触摸按键配置寄存器
    TSCFG1:
    bit6~bit4: 开关频率配置率(频率越高充电时间越短) 开关电容工作频率 = fosc/(2*(TSCFG1+1))
    bit2~bit0: 配置触摸按键控制器内部的Cref的起始对地放电时间 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3

    TSCFG2:
    bit1~bit0: 配置触摸按键控制器内部的参考电压0(1/4 AVcc)1(1/2 AVcc)2(5/8 AVcc)3(3/4 AVcc)
    */
    TSCFG1 = 0x7F;
    TSCFG2 = 0x00;
    /*
    触摸按键控制寄存器(TSCTRL)
    bit7(TSGO): 正常工作模式下触摸按键控制器启动控制 0:停振扫描 1:正常模式下启动扫描
    bit6(SINGLE):单次扫描模式控制(TSGO为1时此寄存器位写入无效,TSGO为0时才可写入) 0:重复扫描模式 1:单次扫描模式
    bit5(TSWAIT):触摸按键控制器等待控制(TSGO为1时此寄存器位写入无效,TSGO为0时才可写入)0:触摸按键控制器自动重复扫描 1:触摸按键控制器等待TSIF状态为1后才重复扫描
    bit4(TSWUCS):低功耗模式下触摸按键控制器时钟源选择(TSGO为1时此寄存器位写入无效,TSGO为0时
    才可写入)
    bit3(TSDCEN):触摸按键控制器内部16位数字比较器控制位(TSGO为1时此寄存器位写入无效,TSGO为0
    时才可写入)
    bit2(TSWUEN):触摸按键控制器低功耗唤醒使能位(TSGO为1时此寄存器位写入无效,TSGO为0时才可写
    入)
    bit1~bit0(TSSAMP):单一触摸通道重复扫描次 0:1次 1:2次 2:3次 3:4次
    */   
    TSCTRL = 0xA0 & 0x7F; // 配置其他项时,确保 TSGO 为 0

    TSCTRL |= 0x80; // 其他项配置完成时,设置 TSGO 为 1
   
    IE2 |= (1 << 7); // 使能触摸中断
    EA = 1;      // 开总中断


    bsp_StcTouchkeyVarInit();
}




DebugLab 发表于 2024-10-7 20:07:53

其他的通道也接近65535了
检查TCAP的值是不是不对,或者按键电容值是不是不合理(触摸按键硬件结构)

DebugLab 发表于 2024-10-7 20:10:20

DebugLab 发表于 2024-10-7 20:07
其他的通道也接近65535了
检查TCAP的值是不是不对,或者按键电容值是不是不合理(触摸按键硬件结构) ...

还有
触摸按键频率SCR
放电时间DT
触摸按键参考电压TSVR

DebugLab 发表于 2024-10-7 20:11:59

        TSCHEN1=0xFC;        //TK00~TK07
        TSCHEN2=0xFC;        //TK08~TK15
        TSRT=0x00;                //没有LED分时扫描
        TSCFG1=0x73;        //开关电容工作频率 = fosc/(2*(TSCFG1+1)),放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
        TSCFG2=0x03;        //配置触摸按键控制器的内部参考电压(AVCC的分压比),0(1/4)1(1/2)2(5/8)3(3/4)
        TSCTRL=0x33;        //重复扫描模式,完成一轮扫描暂停,低功耗模式时钟为外部32768晶振,关闭数字比较器,关闭低功耗唤醒,4次平均,B7: TSGO,B6: SINGLE,B5: TSWAIT,B4: TSWUCS,B3: TSDCEN,B2: TSWUEN,B1 B0: TSSAMP
        TSCTRL|=0x80;        //开始扫描
        IE2|=0x80;                //启用触摸中断

DebugLab 发表于 2024-10-7 20:13:31

应该是你TSCFG1、TSCFG2参数设置不合理导致的

DebugLab 发表于 2024-10-7 20:16:29

DebugLab 发表于 2024-10-7 20:11
TSCHEN1=0xFC;        //TK00~TK07
        TSCHEN2=0xFC;        //TK08~TK15
        TSRT=0x00;                //没有LED分时扫描


按照这个参数修改一下试试

roger 发表于 2024-10-7 21:26:57

DebugLab 发表于 2024-10-7 20:16
按照这个参数修改一下试试
感谢您的回复,实际测试修改参数后有作用但是不大;
查了原理图后发现 TCAP 引脚焊接的电容太大了,
修改为10nF之后在调节软件上面的参数就比较有效了,
再次感谢
{:handshake:}

DebugLab 发表于 2024-10-7 22:36:50

roger 发表于 2024-10-7 21:26
感谢您的回复,实际测试修改参数后有作用但是不大;
查了原理图后发现 TCAP 引脚焊接的电容太大了,
修改 ...

{:handshake:}
页: [1]
查看完整版本: Ai8H4KTLCD 触摸按键有两个通道的按键扫描数据溢出问题 | TCAP 引脚焊接的电容太大了