打印

[有奖征文活动]MCU上电复位不良--差点杀公**祭拜~~

[复制链接]
5772|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
benladn911|  楼主 | 2009-8-21 12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很早以前写在博客上的,还是有点分享价值的。转过来和大家分享下。

正文
-------------------------------------------------
昨晚在调试AVR 单片机时又有一些心得体会,虽然结论是一个很小的问题造成的,但在此还是写出来给大家参考,避免走弯路。


事件描述:
       以前用AVR的芯片也做过好几个设计,从来没有怀疑过ATMEL的芯片的稳定性,以前的几个方案都是很稳定的,当然这跟PCB的设计有很大的关系,如果大家需要PCB相关参考资料的话可以到本站的PCB技术专栏里查找,那里有很多前辈的PCB布板心得。
        这次用的ATmega48制作的串口电压表就出现一个很奇怪的现象,电路板是用万能板焊接的,程序里用到ADC功能和串口通讯功能,用的AVR下载工具是STK500,每次下载程序后芯片总是不能正常复位工作,还要读取下芯片的特征字或熔丝位让芯片重新复位下才能工作,这时候复位后工作都稳定,没出现什么不正常。刚开始不在意这个问题,因为在开发的初期用AVR DRAGON仿真调试部分功能时复位脚不能接任何器件,所以也就把复位脚悬着不接复位电路,以为是没接阻容复位而造成不稳定。在此还是没有怀疑过芯片的问题。
         直到后来这个程序都开发完毕了,给ATMEGA48加上 一个10K的上拉电阻和0.1uF的电容做复位,把ISP线拔掉,独立给串口电压表上电(因为当时都是用几个电路模块连接做实验,串口电平转换电路也是独立的,初期串口调试已经都通过了,所以我把这个串口电平转换模块的连线都拔掉了),问题来了,上电不工作,手动把复位脚接地后放开可以工作,但过了一会后还是死了,加看门狗后还是老样,没有任何改善,每次手动复位正常工作后,把手指头放在ATMEGA48的1、2、3脚上方慢慢靠近,手指头还没碰到芯片就死机了~~~不会吧,没这么脆弱吧。以前用AVR Tiny26做的控制器,把手机放在芯片上方然后拨打10086都不会死机。不会中奖了吧,又不是第一次搞单片机,难道真要像以前论坛里的朋友开玩笑说:要杀只大公鸡祭拜下~~~
        奇怪啊~~~实在没招,把串口电平转换电路给接上继续调试下,这时候再上电每次都是正常工作,而如果再把串口电平转换电路断开则又不能正常复位工作~~~手动复位后把手再靠近芯片的1、2、3脚上方就又马上死机~~~狂晕~~~~不是吧~~~ATMEGA48的第一脚是RST,2、3两脚刚好是RXD、TXD串行引脚,难道真的是这个串口干扰引脚影响到复位电路?不可能吧,ATMEGA48芯片用得人多的是,各方面的应用都有,不可能是芯片的缺陷,还是多怀疑下自己吧...重新再好好看看自己的程序吧...
        程序里开始首先是对IO做初始化,TXD配置为输出,还有其他相关IO配置。然后是对定时器的一些初始化,再就是对串口的一些初始化了。看了下程序,在初始化的时候就把串口中断发送、接收允许都使能了,难道是这里的问题?串口电压表在实际工作的时候串口其实不是在一直工作的,是通过一个开关选择接地才发送数据,平时是不发送的,而在不接串口电平转换电路的时候RXD、TXD都是是悬空的,只有TXD为输出有上拉,RXD没有使能上拉,这时候RXD是最容易被外部干扰的,这就是问题的所在了。当然如果串口电平转换电路都连接着,那就没这个问题,因为串口电平转换电路已经把RXD的电平给钳住了。解决的方法很简单:在初始化串口的时候关闭串口中断使能,在主程序里需要发送数据的时候再使能串口,发送完马上关闭就可以。至此问题解决,这时候看你再怎么去“摸”ATMEGA48的引脚或封装都没有再出现任何的死机情况,每次上电复位都是非常的稳定。(把AVR的BOD熔丝打开可增加复位的可靠性,BOD LEVEL根据实际的电源电压进行选择,这里的电源是5V,所以BOD LEVEL选4.3V)


总结教训:
        这是自己的粗心大意、芯片内部功能的没有合理性利用的表现。在此引以为戒!告诉自己:不要以为自己做过一些小项目就飘飘然起来,不要动不动就去怀疑人家半导体厂家芯片的稳定性,要多怀疑自己才是。往往可能最基本的问题没注意而花费了很多的时间,自己做着玩的东西那都无所谓了,如果你是给别人打工呢?那性质就完全不一样了!

下图为AVR单片机 典型外部复位电路:
        AVR单片机已经内置了上电复位设计。并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路在上电时,可以设计得很简单:直接拉一只10K的电阻到VCC即可。


        为了可靠,再加上一只0.1uF的电容以消除干扰、杂波。


        二极管1N4148的作用有两个:作用一是将复位输入的最高电压钳在Vcc+0.5V 左右,另一作用是系统断电时,将10K电阻短路,让0.1uF的电容快速放电,让下一次来电时,能产生有效的复位。


        当AVR在工作时,按下开关S 时,复位脚变成低电平,触发AVR芯片复位。


评分
参与人数 1威望 +1 收起 理由
触觉的爱 + 1

相关帖子

沙发
程序匠人| | 2009-8-21 13:07 | 只看该作者
谢谢楼主分享经验,裤之!

使用特权

评论回复
板凳
gtw| | 2009-8-21 13:07 | 只看该作者
哈哈,这不算什么,以前做的样机,通电ok,结果过一段时间自动关机。最后一看,复位脚的电阻电容让那帮马虎给焊颠倒了。

使用特权

评论回复
地板
古道热肠| | 2009-8-21 15:01 | 只看该作者
哈哈,中断开放了,如果做好了中断服务程序,应该也不会死机的呀!
俺前阵子因为中断程序把堆栈搞溢出了,有时复位,有时不复位,那才叫防不胜防呢.

使用特权

评论回复
5
aweyfan| | 2009-8-21 15:34 | 只看该作者
这个问题解决的很山寨,很混乱

使用特权

评论回复
6
mohanwei| | 2009-8-21 15:51 | 只看该作者
多次说过调试阶段99%的疑难杂症在于电源,但是好像真正重视的还是不多。现在的大学教学跟实践完全脱节了……

使用特权

评论回复
7
5880527| | 2009-8-21 16:07 | 只看该作者
这程序也是的,一上电就开中断干嘛啊,怕有什么好事情给错过了啊,不过也见过某产品,上电十几秒都还在初始化,把人都急死了,一个XP启动还没这么长时间

使用特权

评论回复
8
benladn911|  楼主 | 2009-8-21 21:30 | 只看该作者
开串口接收中断是可以。主要是开了串口中断,而RXD脚却是悬空,那就出现了如上的一堆奇怪问题。

只要RXD有接着电平转换电路,那就不会有这个问题了。

使用特权

评论回复
9
cx3333| | 2009-8-22 12:58 | 只看该作者
本帖最后由 cx3333 于 2009-8-22 13:00 编辑

不是死机,而是进入中断状态没有退出来

使用特权

评论回复
10
xwj| | 2009-8-22 13:02 | 只看该作者
哈哈,杀公**祭拜~~;P

使用特权

评论回复
11
mytempid| | 2009-8-25 15:11 | 只看该作者
1、对于uart来说,0是有效信号(起始位),一般设计时在CPU的rxd引脚上加上拉电阻。
2、若没有加上拉电阻,又开了uart中断,很容易看到死机的现象。

使用特权

评论回复
12
xnwxq| | 2009-8-30 11:01 | 只看该作者
本帖最后由 xnwxq 于 2009-8-30 11:08 编辑

其实一上电就复位的现象还是比较好处理的,我个人最怕的是上电后可以工作,但是运行过程中的复位和假死现象是最让人头痛的!这种情况的问题最多,对于做产品更是如此!
        4楼热肠的现象我原来也是遇到过的,当时我是开发电力载波通信的通信程序,出现复位现象后我第一个想的的是电源的电路设计问题,在电源的问题上我花的时间可是好久哦,但是问题还是没有解决,不过电源确实存在问题,但是是产品在公司的测试平台测试通信非常的好,但是到了现场,电力载波信号一点都收不到,这个现象也是通过修改电源后解决的(当需要电力载波痛心时,整个模块的功率一下子就上了了,当时处理器的供电和载波的供电没有很好的隔离造成)。言归正传,说道向4楼所说“中断开放了,如果做好了中断服务程序,应该也不会死机的呀!俺前阵子因为中断程序把堆栈搞溢出了,有时复位,有时不复位,那才叫防不胜防呢.”是因为中断服务程序没有搞好造成的,我的是数据接收缓冲区没有处理好造成的,当我连续的发送测试命令帧的时候,就会发生死机的现象!后来经过检查,原来是缓冲区没有管理好造成的,其实就是我的指针没有控制好!

所以遇到上电复位的状况可以归纳如下:
1、电源隔离不是很好
2、复位电路参数不合理
3、复位脚存在干扰
4、项4楼所说,中断服务程序没有控制好
5、有通信的话,缓冲区管理不当

使用特权

评论回复
13
NE5532| | 2009-8-30 11:07 | 只看该作者
要是不缺那两毛钱的话,还是上个复位芯片好了。

使用特权

评论回复
14
liuyuxiier| | 2012-3-14 20:03 | 只看该作者
碰到过类似问题,是因为串口的RXD没有加上拉,导致板子经常死机。

使用特权

评论回复
15
xubx83| | 2012-5-11 16:49 | 只看该作者
打个mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

119

帖子

2

粉丝