[51单片机] 单片机的一个输入IO的电平总是莫名被拉低,求解决方法

[复制链接]
12027|21
 楼主| popeye021 发表于 2013-9-27 16:58 | 显示全部楼层 |阅读模式
C8051F340单片机,有一个IO设置成漏极开路,弱上拉模式。
程序都没有问题的,不是第一块板了。
现在这块板的问题是:这个输入IO总是为低,万用表测量为0.45V,正常应该是3.3V。
开始以为是焊油污染,因为这个管脚相邻的管脚通常状态为低电平,于是用**蘸香蕉水擦了一下,还是不行。
后来,用烙铁把这几个管脚又焊了一下。重新上电后,变正常了,但是过了一会,这个管脚又变为低电平了。

这会是什么原因呢?焊接的问题??
ayb_ice 发表于 2013-9-27 17:02 | 显示全部楼层
99.9999%程序问题
写个最简单的程序
测试一下
void main(void)
{
    init();
    while(1)
    {
    }
}
wangyy608 发表于 2013-9-27 17:36 | 显示全部楼层
上图
没用过该芯片
一般设为开漏模式的引脚状态由外部电路决定
 楼主| popeye021 发表于 2013-9-27 18:29 来自手机 | 显示全部楼层
wangyy608 发表于 2013-9-27 17:36
上图
没用过该芯片
一般设为开漏模式的引脚状态由外部电路决定

这个管脚是悬空的
wangyy608 发表于 2013-9-27 18:53 | 显示全部楼层
1.悬空?没用?那为什么要刻意设为开漏模式;
2.悬空?没用?那这个脚的高低会对你的程序有什么影响?
3.开漏模式下悬空当然没法高了
 楼主| popeye021 发表于 2013-9-27 19:45 | 显示全部楼层
wangyy608 发表于 2013-9-27 18:53
1.悬空?没用?那为什么要刻意设为开漏模式;
2.悬空?没用?那这个脚的高低会对你的程序有什么影响?
3.开漏 ...

这个管脚是用来接收外部的一个低电平信号,测试的时候还没有插上那部分的排针。
以前同样的板子并不会出现这种情况。此外,同样的电路在其他板子上也是正常的。
设置为漏极开路后,芯片内部是有弱上拉的,这样的话,悬空测电压也应该是3.3V吧。
程序是轮询这个管脚的状态,为低时,则执行相应的操作。
我个人倾向于焊接原因。
 楼主| popeye021 发表于 2013-9-27 19:55 | 显示全部楼层
ayb_ice 发表于 2013-9-27 17:02
99.9999%程序问题
写个最简单的程序
测试一下

程序轮询这个设为漏极开路的端口,当检测到低电平时,执行相关操作。
如果是程序原因,不会上电以后,开始还是正常的,过了一会就出问题了吧。
再说,已经焊了好几块板了,程序在之前的板子上都正常运行的。
之前也出现过类似的现象:这个端口相邻的一个管脚是接近开关的输入,正常状态下,接近开关输入管脚是低电平,我也是发现漏极开路的端口总是为低,后来断开接近开关,电平就正常了。当时也问过论坛,有人说焊油污染可能会出现这种现象,我就用**蘸香蕉水擦了一下单片机管脚,问题就解决了。
这次不是因为接近开关输入管脚和这个管脚之间焊油污染的问题,断开接近开关后,此管脚仍然为低。
不过相邻的另一边的管脚正常状态也是低,要说也是焊油污染,我都用香蕉水擦过了,不管用。
用烙铁把这几个脚重新刮了一下,就正常了一小会。
我打算先把单片机这边的管脚的锡都用吸锡带去掉,然后重新焊一下,怎么样??
cjseng 发表于 2013-9-27 23:46 | 显示全部楼层
再加个上拉电阻好了。
受不了了 发表于 2013-9-28 00:20 | 显示全部楼层
wangyy608 发表于 2013-9-28 08:15 | 显示全部楼层
popeye021 发表于 2013-9-27 19:45
这个管脚是用来接收外部的一个低电平信号,测试的时候还没有插上那部分的排针。
以前同样的板子并不会出 ...

既然是检测外部信号,为什么不设为输入?
开漏模式下弱上拉是可能被禁止的
ayb_ice 发表于 2013-9-28 09:11 | 显示全部楼层
硬件也可能引起这个问题

检查是否有IO是负压(外部硬件引起的)
 楼主| popeye021 发表于 2013-9-28 09:32 | 显示全部楼层
wangyy608 发表于 2013-9-28 08:15
既然是检测外部信号,为什么不设为输入?
开漏模式下弱上拉是可能被禁止的 ...

这个单片机的IO模式只有推挽和漏极开路两种模式啊,作为输入时就是设为漏极开路,而此时内部的弱上拉也是使能的。上次记得chunyang说,漏极开路时,一般单片机都有弱上拉。
wangyy608 发表于 2013-9-28 10:18 | 显示全部楼层
外接上拉电阻能不能正常检测?
设为推挽能不能正常输出0/1?
检查软件?
ayb_ice 发表于 2013-9-28 13:54 | 显示全部楼层
C8051F有个整体弱上拉使能位,不要禁止了
ecoren 发表于 2013-9-28 17:20 | 显示全部楼层
我们有一块板子,当然处理器和你的不一样,弱上拉工作起来老出错,换成强上拉就好了。
 楼主| popeye021 发表于 2013-9-29 11:07 | 显示全部楼层
wangyy608 发表于 2013-9-28 10:18
外接上拉电阻能不能正常检测?
设为推挽能不能正常输出0/1?
检查软件?

这个输入IO的一个相邻管脚也是输入,且接了下拉电阻,如果把相邻管脚的下拉电阻去掉,就不会有问题。
看起来的现象就是:上电以后,由于相邻的一个管脚总是处于低电平,影响了这个IO,使其电平被拉低,但是两个管脚并没有直通,万用表测没有导通;去掉相邻管脚的下拉电阻后,这个IO就为高电平了。
这可能是什么原因?之前怀疑是焊油污染,反复用香蕉水擦过这两个管脚,也不管用。不过擦过后,重新上电一开始正常,过了一会,这个IO又被拉低了。
 楼主| popeye021 发表于 2013-9-29 11:09 | 显示全部楼层
ayb_ice 发表于 2013-9-28 13:54
C8051F有个整体弱上拉使能位,不要禁止了

没有禁止弱上拉使能位。

这个输入IO的一个相邻管脚也是输入,且接了下拉电阻,如果把相邻管脚的下拉电阻去掉,就不会有问题。
看起来的现象就是:上电以后,由于相邻的一个管脚总是处于低电平,影响了这个IO,使其电平被拉低,但是两个管脚并没有直通,万用表测没有导通;去掉相邻管脚的下拉电阻后,这个IO就为高电平了。
这可能是什么原因?之前怀疑是焊油污染,反复用香蕉水擦过这两个管脚,也不管用。不过擦过后,重新上电一开始正常,过了一会,这个IO又被拉低了。
ayb_ice 发表于 2013-9-29 11:14 | 显示全部楼层
还是硬件有问题,应该是有GPIO被嵌位了
 楼主| popeye021 发表于 2013-9-29 12:07 | 显示全部楼层
ayb_ice 发表于 2013-9-29 11:14
还是硬件有问题,应该是有GPIO被嵌位了

我又重新焊了一块板,新焊的这块板没有问题,一切正常。况且之前都有三块正常的板子了。
之前也发生过类似的情况,也是这个管脚上电后被拉低,不过拉低它的是相邻的另一个管脚,我用香蕉水擦了后就正常了。这次也是被拉低,但是和以前不是同一个管脚。
这几个相关管脚的硬件电路很简单。直接外部电平输入的,一个直接接单片机,一个管脚上有个下拉。
箝位的话,周围也没什么相关电路啊,只有那个相邻管脚。难道是PCB缺陷??
macbook 发表于 2017-12-20 18:37 | 显示全部楼层
你好,我最近调试STM32单片机也遇到同样的问题,有两个IO配置为上拉输入,工作一会儿后电压就被拉低了,用烙铁把几个管脚焊一下又可以工作一会儿,电路上也不存在干扰,焊了两块板都这样,相同的引脚有问题。请问大神有什么解决办法?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

455

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部