搜索
bottom↓
回复: 159

在掉电时怎样保护数据到EEPROM中

  [复制链接]

出0入0汤圆

发表于 2007-8-14 19:00:53 | 显示全部楼层 |阅读模式
我想在掉电时保存数据(3个字节)到EEPROM中,用BOD掉电检测,不知怎样使用。望高手指点:

1。在BOOT区设置好BODEN,BODLEVEL,后软件还要怎样设置?

2。掉电中断是否是产生复位?我的写EEPROM程序应该放在什么地方?他和其他复位怎样区别?

3。设置了BOOT区后,硬件上是否要加电源到一个管脚比较后才产生中断??

===================================================================================

掉电检测BOD的误解

AVR自带的BOD(Brown-out Detection)电路,作用是在电压过低(低于设定值)时产生复位信号,防止CPU意外动作.

对EEPROM的保护作用是当电压过低时保持RESET信号为低,防止CPU意外动作,错误修改了EEPROM的内容



而我们所理解的掉电检测功能是指 具有预测功能的可以进行软件处理的功能。

例如,用户想在电源掉电时把SRAM数据转存到EEPROM,可行的方法是

外接一个在4.5V翻转的电压比较器(VCC=5.0V,BOD=2.7V),输出接到外部中断引脚(或其他中断)

一但电压低于4.5V,马上触发中断,在中断服务程序中把数据写到EEPROM中保护起来

注意: 写一个字节的EEPROM时间长达8mS,所以不能写入太多数据,电源滤波电容也要选大一些

====================================================================================

将AVR的BOD设为2.7V,从4.5v到2.7这段时间写EEPROM。AVR的供电采用14楼方案,掉电检测使用IMP809。

软件编写思路请参考我的《M128》书是第5章,或10月出版的书的第7章。参考电路如下:









在图中,外部9V电源通过7805稳压到5V,作为系统电源使用。而AVR的工作电源则是单独提供的,由5v系统电源通过低压差肖特基二极管1N5817后得到。IN5817的正向压降为0.3v,因此,AVR的工作电压为4.7v。电源监控芯片IMP809-L的监控电压为4.63V,当系统电源的电压低于4.63V时,在R脚上产生由高电平到低电平的变化,使AVR进入INT0中断。

     

    该电路的工作原理为:首先通过配置AVR的熔丝位,设置BOD掉电检测电压门限为2.7V,并允许BOD检测。因此,当AVR的Vcc电压掉到2.7v以下时,AVR就停止工作(掉电检测功能是AVR片内的功能之一,见第二章的2.6.2 AVR的复位源和复位方式)。电源监控芯片IMP809-L检测电压门限为4.63v,用于检测系统电源的电压。当系统电源大于4.63v时,IMP809-L的R端输出高电平,整个系统正常工作。当系统电源的电压跌到4.63v以下时,IMP809-L的R脚输出低电平,作为AVR外部中断INT0的申请。INT0设计为掉电处理中断,其主要任务是备份系统运行的重要数据到EEPROM中。



    在提供AVR工作的电源系统中,大容量的电解电容C5作为储能电容,一旦系统电源电压下降,二极管1N5817截止,此时AVR可以靠C5提供的电储可以继续工作一段时间。C5容量应足够大,在系统电源掉电过程中,IMP809-L的R端输出低电平(下降到4.63v)时,要能够保证维持AVR的工作电压Vcc从4.7v降到2.7V的时间超过300ms,使AVR有时间做紧急处理和备份数据。AVR写EEPROM大约需要50-100mA的电流,所以电容C5的值应该在1000u~4700u,需要保存的数据越多,C5的容量应该越大。



    INT0是AVR优先级最高的中断,采用外部电平变化的下降沿触发方式。一旦IMP809-L的R脚电平由正常的高电平变为低电平时,将触发INT0中断,进入INT0掉电中断服务程序。

在INT0掉电保护中断服务程序中,应按以下的步骤和过程处理:

A)紧急处理,关闭所有外部器件的工作,或将外部状态设置到安全模式,如关闭马达、开关等,保证系统不出事故。

B)将AVR所有I/O设置为输入方式,最大程度的减少AVR芯片对电源的消耗。

C)将重要数据写入到EEPROM中。

D)循环检测INT0引脚是否恢复高电平。如为高电平则转到下一步E执行;如果INT0电平一直为低,程序将在此循环,直到完全停止运行(因为储能电容C5的电压低于2.7v后,AVR的BOD起作用,产生内部复位,AVR停止运行程序)。

E)软件延时一段时间。

F)再次检测INT0引脚电平。为低电平时转回D再次循环检测;为高电平时继续向下执行(这种情况表示系统电源受到干扰或短时掉电,现已经恢复正常)。

G)恢复外部器件工作(此时尽管进入了掉电保护程序,但AVR在C5的维持下,一直正常工作,所有的数据并没有破坏,可以继续进行工作);

H)中断返回。

在实际应用中,系统断电保护的设计是一个比较难的问题,实现的方法和手段也有不同。这个设计主要是作为一个使用外部中断的例子,让读者可以从中体会到如何合理和正确的使用外部中断。

出0入0汤圆

发表于 2020-5-19 23:41:28 | 显示全部楼层
马老师,掉电后完成存储后,进去休眠。来电后改电路可以稳定的唤醒吗?

出0入0汤圆

发表于 2016-8-8 11:04:52 | 显示全部楼层
07年发表的帖子,16年还在回复。留名学习!

出0入0汤圆

发表于 2015-1-10 22:17:45 | 显示全部楼层
马老师的这种检测方法在实际中,电容较多或者容量较大,在掉电的时候 电压降到某个值 不是突降的 需要一定的时间 当检测到电压低于某个值时候  实际上已经掉电一段时间了 消耗了 不少电量  

出0入0汤圆

发表于 2015-1-8 14:26:58 | 显示全部楼层
xuexile ~~~~~~~~~~~~

出0入0汤圆

发表于 2015-1-4 16:41:50 | 显示全部楼层
MARK 顶了再说

出0入0汤圆

发表于 2013-7-31 15:55:36 | 显示全部楼层
MARK 在掉电时怎样保护数据到EEPROM中

出0入0汤圆

发表于 2013-7-31 14:15:33 | 显示全部楼层
学习         

出0入0汤圆

发表于 2013-4-14 09:27:50 | 显示全部楼层
记录一下

出0入0汤圆

发表于 2013-4-14 09:14:22 | 显示全部楼层
记录一下

出0入0汤圆

发表于 2013-3-31 21:05:51 | 显示全部楼层
来学习了 mark!

出0入0汤圆

发表于 2013-3-19 08:53:43 | 显示全部楼层
marK……

出0入0汤圆

发表于 2012-6-21 11:58:52 | 显示全部楼层
同意老师的说法,以前也是这个思路做的掉电。受益匪浅!

出0入0汤圆

发表于 2012-3-27 19:46:01 | 显示全部楼层
电解电容取那么大的话,对于一些便携式产品的空间就显得不够了吧。
掉电时间的确依赖于外围储能元件。
个人觉得如果有重要数据必须在掉电时进行保存,可以在外部加一个超级电容(小锂电池也可),这样电路的体积就可以变得轻巧,而且供处理的时间也更加充裕。

出0入0汤圆

发表于 2012-2-22 21:39:58 | 显示全部楼层
备用,嘿嘿

出0入0汤圆

发表于 2012-2-17 11:33:58 | 显示全部楼层
我之有也碰到边掉电丢失数据的情况,最后在熔丝位中设置好BODEN就解决了

出0入0汤圆

发表于 2012-1-23 19:48:20 | 显示全部楼层
回复【楼主位】machao  
-----------------------------------------------------------------------
换铁电,如果你这电路这么复杂,估计换个铁电的价格也差不多了。

出0入0汤圆

发表于 2012-1-13 15:12:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-13 15:06:36 | 显示全部楼层
二极管D1(压降为0.3V)选的很巧妙,把单片机电源和系统电源正好分开,掉电时保证单片机的供电正常。

出0入24汤圆

发表于 2011-12-23 19:15:24 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2011-12-23 18:04:52 | 显示全部楼层
学习了。。

出0入0汤圆

发表于 2011-12-21 22:31:55 | 显示全部楼层
回复【10楼】qkj1575 齐开军
-----------------------------------------------------------------------

我也想用这个做掉电检测
头像被屏蔽

出0入0汤圆

发表于 2011-12-19 08:37:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-15 17:27:48 | 显示全部楼层
回复【21楼】machao
-----------------------------------------------------------------------

马老师,我感觉51也可以用这样的电路,只要是在掉电后把重要参数保存起来就可以了,至于高于或者低于2.7V对于参数的保存没有影响。
不知道我想的对不对。

出50入0汤圆

发表于 2011-12-15 17:20:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-15 16:33:12 | 显示全部楼层
G00D

出0入0汤圆

发表于 2011-12-13 16:28:28 | 显示全部楼层
MARK!

出0入0汤圆

发表于 2011-12-13 15:50:05 | 显示全部楼层
收藏……

出0入0汤圆

发表于 2011-12-13 11:13:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-13 14:18:53 | 显示全部楼层
AVR好像有上电复位  c3和c5要求好像都不高

出0入0汤圆

发表于 2011-11-9 14:48:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 22:44:09 | 显示全部楼层
后悔没早看到这个贴子

出0入0汤圆

发表于 2011-10-28 15:11:51 | 显示全部楼层
如果只是简单应用。
可以不使用7805吗?
RESET可以不接吗(以及与它相连的3个元件)?这个电路是干什么的看不懂~~~
C3和C5取0.1u行不?
如果要求不高,用ad采样,或采用内部比较器取代809应该都可以吧?
本人新手~~~~求指点

出0入0汤圆

发表于 2011-10-24 20:30:55 | 显示全部楼层
我也来Mark

出0入0汤圆

发表于 2011-8-31 21:15:35 | 显示全部楼层
学习。

出0入0汤圆

发表于 2011-8-27 14:05:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-7 20:55:29 | 显示全部楼层
关注,正好也需要用到这个

出0入0汤圆

发表于 2011-7-21 10:30:20 | 显示全部楼层
路过,需要是有用啊,哈哈

出0入0汤圆

发表于 2011-7-14 19:10:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-5 21:49:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-18 20:03:03 | 显示全部楼层
remind

出0入0汤圆

发表于 2011-6-18 17:27:52 | 显示全部楼层
MARK  回去看看

出0入0汤圆

发表于 2011-6-17 16:58:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-15 17:23:49 | 显示全部楼层
好贴,又学到了好东西!

出0入0汤圆

发表于 2011-6-15 12:33:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-15 11:22:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-12 20:58:08 | 显示全部楼层
MARK 学习了

出0入0汤圆

发表于 2011-4-18 21:52:38 | 显示全部楼层
掉电保护

出0入0汤圆

发表于 2011-4-18 18:10:43 | 显示全部楼层
收藏了,以后研究一下!

出0入0汤圆

发表于 2011-4-15 18:58:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-15 18:12:34 | 显示全部楼层
以后可能用的到,学习了。掉电保护。

出0入0汤圆

发表于 2011-4-15 17:26:21 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-4-14 19:59:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-9 17:04:34 | 显示全部楼层
mark

出675入8汤圆

发表于 2011-4-8 09:07:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-2 10:37:06 | 显示全部楼层
好贴,收藏。

出0入0汤圆

发表于 2011-3-10 14:16:47 | 显示全部楼层
回复【3楼】machao
回1楼:
1。可以使用法拉电容,价格是高一点,但体积小;同时容量大,可以保护更多的数据,也提高了掉电保护的可靠性。
2。用ad检测不如使用imp809可靠,因为imp809是硬件的。使用ad检测,增加了avr的系统程序的复杂性,而且ad检测的响应也慢,不提倡。因为掉电保护是要求绝对可靠的。
回2楼:
理论上可以,但实际当中实现比较困难:
1。输入的9v电压一般不是稳定,电压波动大。而经过7805会稳定的多。
2。检测7.5v的电压监测芯片比较少。
-----------------------------------------------------------------------
我觉得2楼的建议不错。
虽然没有7.5V的电压检测芯片,但是IMP809的Icc(typ.)仅为10uA,最大值也只是25uA,所以使用电阻分压是完全可以做得到的!
9V输入波动大正好可以得到比较真实的电源数据,只要在IMP809电源端稍加处理,纹波问题应该不大。而检测稳压后的则没有实际的意义,因为这时电压已经下降,系统已经开始掉电......

一点拙见。

出0入0汤圆

发表于 2011-1-29 13:17:59 | 显示全部楼层
你好,马老师,向你请教一下,C4那个电容的容量大小是否有公式参考呢?谢谢。

出0入0汤圆

发表于 2011-1-29 12:38:11 | 显示全部楼层
26楼的方法也不错。

出0入0汤圆

发表于 2011-1-29 11:39:03 | 显示全部楼层
mark掉电保护

出0入0汤圆

发表于 2011-1-29 11:28:29 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-29 09:10:13 | 显示全部楼层
mark e2

出0入0汤圆

发表于 2011-1-28 21:01:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-28 17:57:18 | 显示全部楼层
mark下!谢谢了,这么好的资料!

出0入0汤圆

发表于 2011-1-28 16:27:46 | 显示全部楼层
来学习的,谢谢。

出0入0汤圆

发表于 2010-12-4 00:25:40 | 显示全部楼层
收藏了 谢谢 日后可能用到

出0入0汤圆

发表于 2010-10-7 15:53:47 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2010-9-24 17:04:34 | 显示全部楼层
谢谢马潮老师!

出0入0汤圆

发表于 2010-9-24 17:04:17 | 显示全部楼层
谢谢马潮老师!

出0入0汤圆

发表于 2010-8-16 13:47:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-10 16:31:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-29 21:59:07 | 显示全部楼层
ddddd

出0入0汤圆

发表于 2010-7-22 14:38:30 | 显示全部楼层
学习 学习 学习 学习

出0入0汤圆

发表于 2010-7-14 11:17:35 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-7-14 09:25:10 | 显示全部楼层
mark~~

出0入0汤圆

发表于 2010-7-14 08:47:45 | 显示全部楼层
能不能直接将5V接到INT0脚,省掉电压比较器

出0入0汤圆

发表于 2010-7-14 08:39:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-9 21:06:01 | 显示全部楼层
MARK 掉电保护数据

出0入0汤圆

发表于 2010-5-13 14:57:06 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-5-13 13:56:22 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-5-13 12:57:27 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2010-5-6 19:54:34 | 显示全部楼层
ji

出0入0汤圆

发表于 2010-4-26 22:16:45 | 显示全部楼层
学习了。。。

出0入0汤圆

发表于 2010-4-23 13:02:03 | 显示全部楼层
dig

出0入0汤圆

发表于 2010-4-23 09:47:33 | 显示全部楼层
26 33 楼 改进

出0入0汤圆

发表于 2010-4-22 16:22:36 | 显示全部楼层
我试验的是使用DS1302,这样写入数据的速度快的多,或者是PCF8583,有240字节的空间。

出0入59汤圆

发表于 2010-4-14 20:56:15 | 显示全部楼层
不错~

出0入0汤圆

发表于 2010-4-14 18:01:33 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2010-3-26 12:41:24 | 显示全部楼层
hao

出0入0汤圆

发表于 2010-3-20 14:12:21 | 显示全部楼层
不好意思,马潮老师,我对你这个方案看了后还是不明白,能不能帮忙解答一下?
这个掉电保护功能是针对哪个电压掉电保护呢?是9V的还是5V的?为什么要用两个分开的电源供电呢?AVR的5V不能从7805出来吗?
谢谢~~~~

出0入0汤圆

发表于 2010-3-16 22:28:59 | 显示全部楼层
mark。

出0入0汤圆

发表于 2010-3-8 16:31:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-8 11:18:09 | 显示全部楼层
好贴

出0入0汤圆

发表于 2010-2-2 23:46:14 | 显示全部楼层
留着 后用

出0入0汤圆

发表于 2010-2-2 20:09:48 | 显示全部楼层
收藏

出0入0汤圆

发表于 2010-1-29 13:32:05 | 显示全部楼层
收藏.

出0入0汤圆

发表于 2010-1-27 18:52:26 | 显示全部楼层
太好了,收藏了,以后绝对能用到的!

出0入0汤圆

发表于 2010-1-24 20:14:39 | 显示全部楼层
正需要用呢

出0入0汤圆

发表于 2010-1-24 20:08:02 | 显示全部楼层
受教了!!!

出0入0汤圆

发表于 2010-1-4 19:40:40 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-1-4 18:12:06 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 22:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表