打印
[AVR单片机]

用ATmega162遇到的一个现象,请教大家

[复制链接]
2997|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jjl3|  楼主 | 2009-9-12 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用ATmega162+SJA1000做CAN通讯。ATmega162用内部晶振。启用watchdog.但有时 上电时发现ATmega162好像运行了一段程序后就停住了(从现象上看),比如在LCD上已经有了最新信息的显示了,但ATmega162好象就突然停主了,后面程序就不执行了,watchdog也不能复位MCU,等一会,时间有长有短,ATmega162有正常运行了。这个现象只发生在上电时,而且不是每次上电都会发生。往往在相隔很长时间后,第一次上电时容易发生。在ATmega162停住时,我测电源都是正常的。我在程序开始加了100ms的延时以等待内部晶振稳定,还是没效果。不知大家碰到过吗?

相关帖子

沙发
宇容创行| | 2009-9-12 21:38 | 只看该作者
运行这么长时间出错,软件有bug的可能更大

建议逐步简化你的程序看看,能否重现

使用特权

评论回复
板凳
jjl3|  楼主 | 2009-9-14 22:03 | 只看该作者
顶起来

使用特权

评论回复
地板
ZRL700424| | 2009-9-16 09:03 | 只看该作者
嗯,程序有问题

使用特权

评论回复
5
tcc8073| | 2009-9-19 14:46 | 只看该作者
对时序有要求的尽量不要用内部晶振

使用特权

评论回复
6
dsb804| | 2009-9-20 03:21 | 只看该作者
有没可能你的程序还没完全跑起来,SJA1000就在那一直中断

使用特权

评论回复
7
Karlshen| | 2009-9-24 12:48 | 只看该作者
同意2#的看法

使用特权

评论回复
8
jjl3|  楼主 | 2009-9-24 21:49 | 只看该作者
如果是程序问题,那为什么看门狗没有把程序拉回来呢?

使用特权

评论回复
9
ZRL700424| | 2009-9-25 10:12 | 只看该作者
如果是程序问题,那为什么看门狗没有把程序拉回来呢?
jjl3 发表于 2009-9-24 21:49


举一个极端的例子,执行到下面这里,看门狗能拉回来吗?
while(1)
{
   asm("WDR");
}

使用特权

评论回复
10
lovelyegle| | 2009-9-25 13:02 | 只看该作者
那遇到这种情况怎么才能拉回来?

使用特权

评论回复
11
jjl3|  楼主 | 2009-9-28 22:59 | 只看该作者
我的意思是,不可能在主循环中只执行了喂狗指令而不执行其他语句。
比如在我主循环中:

display(...);                             //感觉程序运行到这了,因为在屏上可以看到最新信息了。

while(1)
{
   PORTC  |=    (1 << PC4);                 //但程序肯定没到这里,因为背光没打开。还有主循环中其他指令没执行。
   asm("WDR");                                //已经超过喂狗时间了,看门狗没有把程序拉回来,难道在主循环中只有这条语句被执行了??!!
}

使用特权

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

本版积分规则

43

主题

265

帖子

2

粉丝