触摸IC TTP229学习笔记

首先说明一下,网上资料真的有很多坑!!!请听我娓娓道来……算了不废话,直接上主题:

 

一、TTP229并不是芯片具体型号,该类芯片下面有多个具体型号,在开发之前,请一定要先确认你的芯片具体型号,

触摸IC TTP229学习笔记_第1张图片

我用的是TTP229BSF,这一款芯片其实是不带I2C功能的!

 

二、请确认使用对了文档

我刚开始用的文档是 TTP229_SPEC_V1.1(Simplified_Chinese).pdf,毕竟这个是中文文档,看起来方便,但是还是大错特错!因为这个根本不是TTP229BSF的对应文档,文档里描述到了I2C功能,我就埋头研究,结果撞墙两天。。。

 

三、别被网上的各种资料搞晕了,很多代码根本就不能运行就贴上来了,可恨呐!就拿如何读取触摸按键的键值这个来说吧,官方时序图如下(以16键为例):

触摸IC TTP229学习笔记_第2张图片

根据文档描述,16键模式只支持串行读取,并且需要短接TP2,另外,由于我习惯了数据高电平有效,所以根据文档描述,短接了TP1(等于0表示短接)

触摸IC TTP229学习笔记_第3张图片

重点来了!!!!网上很多参考代码都是貌似根据时序图,通过单片机先设置SDO=0,然后delay(),然后SDO=1,接着SCL=1,delay(),再读取SDO是否为1,delay()……,,,总之会通过单片机对SDO口发命令,其实根本不需要,而且我这样做这样反而读不了结果!!!!

具体原因有官方文档为证:

触摸IC TTP229学习笔记_第4张图片

也就是说,有2种方法可以读取TTP229触摸按键的数据,方法1是单片机一直查询SDO口的数据,这种方法显然效率较低;方法2是单片机可以通过判断SDO口上的DV信号来确认是否有按键按下,我采用的是方法2,部分代码如下:

触摸IC TTP229学习笔记_第5张图片

所以其实真的很简单,时序图上的DV信号是TTP229发出的,并不需要我们通过单片机给它发,因此,我们只要发现SDO口上有高电平(TP1短接接地的情况下,不接地默认就是低电平有效),我们再按照时序,在SCL引脚上发送对应时序就能读取数据了。

下图是我在16键模式、高电平有效条件下,按下11键,通过逻辑分析仪得到的时序图:

由上图可知,通道1的第一个高电平是我按下11键后,TTP发往SDO口上的高电平(时间很短,所以看起来很小),而后面的这个高电平就是11键的数据了(对应SCL时序下的第11个电平变化)。

另外,我用的是STM32,STM32接SDO口引脚配置成浮空输入即可。

如果用线程轮询SDO口,一次轮询后的延时不要太长,否则可能读不到数据。


2020-04-21添加:

有不少网友看到这篇文章后根据这个方法使用ttp229都达到了预期效果,但是有部分人还没有,甚至怀疑这种方法是错的,我觉得没什么好辩驳的,因为大家的硬件情况可能根本不一样!

每个人的评论、私信、邮件、甚至是代码我都认真阅读、回复,但是有些人的回应措辞真的令人心寒。帮人是情分,不帮也是本分,我又没得你什么好处。那些既然不相信我的人,那只能你自己再去花时间研究了,祝你好运。

你可能感兴趣的:(STM32,TTP229,触摸按键)