最近在做触摸开关时,用到了一款带触摸功能的芯片。因为只用触摸功能,所以PIN脚选得很少,24PIN就够了。我们选择了ATMEL的tiny1617,
其引脚功能定义如下,
芯片虽然小,但功能还是很齐全的,单片机该有的功能它基本都有。我们这里主要用到了它的触摸功能,至于其他功能则由另外一个主芯片来处理,tiny1617只是作为一个触摸专用芯片,它通过UART与主芯片通信,用来做双方的信息交互。
如上面原理图设计所示,除了电源和地以及串口的TX/RX外,剩下的基本上都设计成了触摸检测端口,而且都串联了一个4.7k的限流电阻,起到一定的降噪功能。就是这样一个简单的设计,调试过程中发现,这个芯片根本不能进入重启复位状态。为了避免产生累积误差,我们会对触摸芯片不定期的做某些复位操作。
为了进一步增强产品的静态功耗,我们在设计的时候,还专门增加了VDD电源的控制,这个触摸芯片的工作状态完全由主芯片控制,主芯片直接控制VDD上电和掉电。但是,就算当主芯片控制VDD掉电时,发现tiny1617还是可以正常工作,就像没有掉电一样。
其实,问题就出在串口的RX上。由于串口RS232的常态都是高电平,也就是说主芯片一直在通过串口将电源灌到了tiny1617里。具体来说,就是主芯片的TX是高电平,将这里触摸芯片的RX拉高,RX端口又是和芯片电源的5V网络串在一起的,从而实现了对芯片的间接供电,虽然这里的VDD一直没有供电,芯片也能保持持续工作。其实,这不是这颗芯片的所独有的特性,一般的芯片的UART端口都是需要上拉的,只要上拉就会和芯片电源的5V网络串在一起。
基于此,我们要解决这个问题,就是只能在关掉VDD电源的同时,再关掉主芯片的串口输出,才能将触摸芯片完全断电,进而重新上电后,才能进入重启复位状态。