STC8H4K64TLCD触摸按键触摸后键值有时无变化
本帖最后由 pantech 于 2024-4-30 12:10 编辑我用STC8H4K64TLCD芯片设计的16通道触摸按电路,连续读按键值,触摸后读到的键值非常不稳定;有时反应挺快的触摸后键值发上变小了,有时需要按住不动停几秒后才会发生变化。感觉是芯片触摸中断没读出实时数据,找扁了STC8H.PDF资料中也没发现有触摸中断的用法介绍,只有在例程有中断程序。我想实现串口发送读某个按键的命令后再启动扫描,直接读出固定按键的实时感应值,请问楼主或哪位高手能提供下帮助,万分感谢!
亚克力玻璃经过弹簧到PCB上的按键
触摸按键效果演示-功能演示-STC单片机教学视频 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
STC8H4K64TLCD驱动段码LCD屏教程(二)触摸按键 - 触摸按键/80mA大电流LED数码管自动刷新显示/段码LCD/RTC实时时钟/低功耗 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
STC的触摸按键外设的读数更新跟你的设置有关,一般设置在20~100ms之间,不存在几秒钟的情形,可以参考我发的例程和视频。
触摸按键都是硬件完成的,不存在反映迟钝的说法,在设定的扫描周期内就会更新一次读数,如果发现反映缓慢都是软件处理的问题,硬件都会忠实于感应电容的变化而提供读数。
可以用STC的串口绘图功能配合监控触摸读数的变化。 梁工 发表于 2024-5-6 11:34
STC的触摸按键外设的读数更新跟你的设置有关,一般设置在20~100ms之间,不存在几秒钟的情形,可以参考我发 ...
梁工,触摸按键扫描一次的时间怎么计算的? 本帖最后由 梁工 于 2024-6-13 23:07 编辑
嵌入式开发 发表于 2024-6-13 17:51
梁工,触摸按键扫描一次的时间怎么计算的?
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)
检测原理:先对参考电容Co放电至0V,然后对被检测电容Cx按一定的频率fs充电至Vcc,接着将Cx与Co连接,Cx对Co放电,不断重复上述过程,直到参考电容Co上的电压达到设定的参考值。
本例放电时间为5000个主频时钟,即5000/24=208us。
参考电压选择 Vcc*1/2,在开关频率fs时Cx等效电阻为1/(fs*Cx),则根据RC充电公式简单计算可得 t = 0.693*Co/(fs*Cx)。
fs = fosc/(2*(TSCFG1+1)),本例TSCFG1=7,则fs=24/16=1.5MHz,这个就是开关电容的频率。当这个频率越快,则充电时间就越短。
比如某个键读数为24000,即1000us,如果TSCFG1=3,则fs=3MHz,则读数变为12000,即500us,如果TSCFG1=1,则fs=6MHz,则读数变为6000,即250us,如果TSCFG1=0,则fs=12MHz,则读数变为3000,即125us。
fs低一些为好。
假设Co=22nF,fs=1.5MHz,某个键无触摸时读数24000,即1000us,此时电容Cx = 0.693*22nF/1.5MHz/1000us = 10.164pF。
假设触摸时读数变小了8%,即读数为22080,时间为920us,则此时电容Cx = 0.693*22nF/1.5MHz/920us = 11.048pF,手指触摸增加电容0.884pF。
可见,手指触摸时电容改变通常不到1pF,所以设计电路一定要尽量减小分布电容,使触摸电容变化在5%以上,达到10%则会非常优秀。
看不懂上述描述不要紧,直接示波器看参考电容的波形即可知道检测一个键的时间(放电+充电时间)。 梁工 发表于 2024-6-13 22:54
TSCFG1= (7
好的,谢谢!
页:
[1]