AVR 自行解编程

电器工程 avr 闪光 Arduino
2022-01-12 05:17:38

有没有其他人遇到过 AVR 在几个月后神秘地停止工作的情况,但重新编程会使其恢复正常?

我在无线传感器网络中运行了一堆 atmega328。我现在有 3 次(大约一年内),其中一个刚刚停止工作。我将重新刻录程序,它会再次开始工作。它并不总是同一个单元,所以它看起来不像是有缺陷的芯片。

这似乎是一件相当灾难性的事情,会阻止人们使用 AVR,所以这显然与我的特殊情况有关。我只是想知道是否有其他人遇到过它并且可能有一些指示。

我用 3.3V 的电池运行,所以电压会下降太低而无法每几个月运行一次,我必须更换可充电电池。模块使用休眠模式和看门狗定时器休眠 60 秒,读取读数,将其无线电回基站,然后再次休眠。这些模块与 arduino 兼容,所以我没有翻转“不要让我重新烧这个”位。

4个回答

你用的是BOD吗?如果芯片变褐,偶尔会发生令人讨厌的事情。

可能欠压检测是正确的方法,但是...

我有一个软件问题,它导致了非常相似的症状,但速度要快得多。我相信一些糟糕的 C++(编译?)导致堆栈损坏,并且函数在真实程序之外返回,执行随机指令。我不确定接下来会发生什么,但修复它的唯一方法是重新烧录程序(显然其中一些随机指令包括写入程序内存)。

该错误只是在错误的时间调用了一个析构函数。使变量成为全局变量(因此它永远不会被破坏)解决了这个问题。这个问题很容易重现(触发大约需要一分钟),并且电源非常稳定。特定的设置是使用 WaveHC 库的 Arduino+WaveShield,但我认为这可能发生在任何使用 C++ 的人身上。

如果您更喜欢低级语言,我不小心在汇编中做了同样的事情,但奇迹般地这除了零星的计时问题之外没有引起任何其他问题:大多数指令长 2 个字节,但有些更长,我自己愚蠢地计算了跳转距离并跳转了进入 4 字节指令的中间。它很快就得到了重新调整,但不难想象在很少使用的代码路径上会发生这样的事情会导致精神错乱。

我还看到 Vcc 去耦电容不足/放置不当/缺失会导致类似的效果。您是否有尽可能靠近 IC 的本地去耦?(100nF - 1uF 陶瓷型优先)

另一个可能导致设备丢失记忆的因素是静电放电 (ESD)。

在所有暴露在外的连接器上放置一些压敏电阻可以缓解这个问题。我之前在一些基于 Microchip PIC 单片机的商业产品中看到过,因此并非闻所未闻。

有一些方便的压敏电阻也可以兼作滤波电容器(大约 10-150 pF)。看看这些http://www.tdk.co.jp/tefe02/e9c11_avr.pdf

它们体积小、价格便宜,可以保护您的设备。将它们尽可能靠近将外部信号带到板上的连接器,并将所有走线立即远离连接器引脚。