|
|
我最近在调试做的一个露营灯的代码,快给我搞吐了,同样的按键代码,在esp32上完美运行,在51单片机上却死活运行不了。
这个项目里用了一颗ETA9741充电宝芯片,这个芯片很便宜,参数也不错,6毛一片,可以双向输入输出5v2a,用在我这个项目上很合适。官方给的示范原理图在下面。
本来项目进行的挺顺利的,板子焊好了,外壳设计好了,代码写好了,直到我测试代码时,发现单片机始终无法从休眠唤醒,就检查了一遍又一遍,搬到arduino测试来测试去(我是用keil写的51单片机代码,arduino是用来调试的,很方便),都没有发现问题,我实在受不了了,就想用示波器打个按键引脚的波形看看。
你猜怎么着?
在长按之后,按键引脚波形是这样的。(应该在附件里)
当时我就直接蒙了,触摸芯片是开漏输出,单片机引脚是高阻,怎么会有这样的波形呢?
在输入按键测试之后,我发现这个波形在长按之后会出现/消失,说明这是受控的,因此不可能是触摸芯片受到干扰导致的。
检查后发现,在设计时我图省事,将ETA9741的按键引脚和单片机的按键引脚接在了一起,按手册来说,这没问题,按下按键之后,ETA9741会点亮他的4颗LED,指示当前电量状态。但是实际却不是如此。
经过测试之后,我发现,ETA9741的button引脚有一个手册中没有提到的功能,那就是长按之后,button会复用为推挽输出,连接到vbus,输出占空比为75%,高电平为vbus的方波。再次长按,button引脚恢复正常高阻状态。
这导致即使按键按下,触摸芯片下拉按键引脚,你这边eta9741又推挽输出高电平,给触摸芯片灌几十ma,直接短路了,搞个即使按键按下,电压也是3.7v左右,依然是高电平,这样子当然就无法正常检测按键了。
之后我将led接到了这引脚上,确实很亮。这确实是引脚复用,在长按之后,75%的时间,引脚推挽输出驱动led,25%的时间,引脚切换为高阻模式,检测按键。
手册中完全没有提到这个功能,导致我傻傻的调试好久,,现在也只能把电路板上这根线刮掉,希望能给用这个人的芯片提醒一下吧。
|
|