搜索
bottom↓
回复: 69

请教:在掉电时怎样保护数据到EEPROM中……

[复制链接]

出0入0汤圆

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

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

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

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






-----此内容被bbtr于2005-12-05,16:46:04编辑过

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2005-12-5 14:44:17 | 显示全部楼层
掉电检测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,所以不能写入太多数据,电源滤波电容也要选大一些

出0入0汤圆

发表于 2006-8-18 10:20:56 | 显示全部楼层
1楼正解:

我刚帮别人做了一个马达驱动信号转换的冬冬,要求控制马达转动过程中,若突然断电,要能掉电保存运动信息,待重新上电后完成未完的动作。

使用的M16(多个马达,信号较多,控制逻辑不复杂),马达转动过程中,若停电,则用电压比较器产生一个外部中断,进入中断后,把当前各个马达的运动参数写入EEPROM,并写入校验信息,然后等待掉电。

系统重新上电后,检测EEPROM中的数据,若符合一定的校验规则,则提取马达运动控制信息,并完成相应的动作。

其中电压比较器输出下降沿到M16电源电压完全跌落到无法操作EEPROM的时间差要足够,以保证备份数据能可靠完成!

出0入0汤圆

发表于 2006-10-24 17:35:09 | 显示全部楼层
这是一种很好用的方法,有机会我会试一下的。谢谢楼上两位!

出0入0汤圆

发表于 2006-11-9 18:45:29 | 显示全部楼层
feiyue

传"电压比较器"上来,我参考一下.

出0入0汤圆

发表于 2006-11-9 19:00:28 | 显示全部楼层
要是需要保护的字节较多要另外供电吧?

用电池和电容各有什么利弊,大家啥看法?

或者有更好的主意

出0入0汤圆

发表于 2006-11-10 11:19:31 | 显示全部楼层
我认为用电容更好一点!

出0入0汤圆

发表于 2006-11-10 12:53:56 | 显示全部楼层
有些复位芯片可以输出掉电信号可以用来产生一个中断,将电源滤波电容取大一点,就可以将数据保存下来了

出0入0汤圆

发表于 2006-12-8 16:46:53 | 显示全部楼层
我做过掉电存EEPROM,但我的系统是通过工频变压器把220V变到14V,14V交流经过光耦产生中断,系统一旦检测不到中断,就去写EEPROM,能写20几个字节,但电源的电解电容要大一些。

出0入0汤圆

发表于 2006-12-9 17:19:52 | 显示全部楼层
听了HJJourAVR的说明对BOD中断有了真确认识,本也是认为可以产生中断和直接复位两种功能。

出0入0汤圆

发表于 2006-12-11 17:03:39 | 显示全部楼层
其实AVR应该把低压检测做成中断/复位可选的就好了!ATMEL设计思想有点?

出0入0汤圆

发表于 2007-7-20 01:24:59 | 显示全部楼层
那样的话电量不足以完成写操作,还是要外加电路才可以完成。

出0入0汤圆

发表于 2007-7-20 07:46:07 | 显示全部楼层
如果只有一个INT的数据我用这个方法很好,缺点是必须用带V的CPU,我在M48V-10PU上试了,很好用,是因为开始没有这个功能,在不改变PCB的情况下增加功能。如果数据太长了,就不敢用了,因为这个中断几乎和电源下降同步产生的。

  oVCC

  |

  |

---

/ \  2.7V

-----

  |

  |---------INT0

  |

---

| |

| |

| |

---

  |

  |

  |

===   GND

  -

出0入0汤圆

发表于 2007-7-20 09:17:53 | 显示全部楼层
2楼:feiyue,想和你交流一下



我现在也在搞马达控制这块,控制的对象是自整角机对中的同步接收机(也就是说做个成品,该成品可以替换同步发送器),感觉有点偏.网上的这方面的资料好少,我自己已经摸索了很长时间,到现在还是灰头灰脑的,有思绪但实验起来却又是完全另外一回事!

出0入0汤圆

发表于 2007-7-20 23:35:36 | 显示全部楼层
这样:不管你再多的数据也够时间了。大不了 C 用法拉电容。

出0入0汤圆

发表于 2007-8-8 20:38:12 | 显示全部楼层
能不能添加特殊的芯片,让系统供电延续几秒,然后在这几秒之内保存数据?

出0入0汤圆

发表于 2007-8-14 14:57:48 | 显示全部楼层
比较器的参考电压是由谁提供啊?是电池呢还是芯片内部产生?

出0入0汤圆

发表于 2007-8-14 15:40:51 | 显示全部楼层
基准电源可以由内部提供,我以前用的方法是直接检测整流后的电压,因为整流后的电压会经过稳压后再给单片机供电,这样电容上电压下降检测出来以后,其实芯片还可以工作一段时间的。完全能够将参数完整进行保存的。

出0入0汤圆

发表于 2007-8-14 16:43:32 | 显示全部楼层
不带电压比较器的MCU可以用专用的电源监控芯片:



出0入0汤圆

发表于 2007-8-14 17:10:44 | 显示全部楼层
1楼的介绍是正确的。



将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汤圆

发表于 2007-9-22 00:19:29 | 显示全部楼层
14楼的参考电压,可以用MCU内部ADC参考电压提供。

出100入0汤圆

发表于 2007-11-21 08:51:36 | 显示全部楼层
偶然看到,回一下。
回19楼:从19楼的电路可以看出,在掉电处理上确实花费了不少心思。但是有一个问题,按照图上的参数,如果50MA的电流,4700UF的电容,从4.7降到2.7,在理想状态下也不到200MS,即使算上前边的2个100UF电容,也不超过250MS。不知道这300MS以上的时间需要1000-4700uf是怎么算出来的。
对于掉电处理,我个人的看法,完全不必这么复杂,用2楼的方法,在掉电的时候监测到掉电信号(被监测点要在稳压前,便于及时处理),CPU就关闭所有的功率器件,然后紧接着处理存储程序。
而在稳压前使用大电容,这才是最好的选择,至少成本上是最少的,效果也是最好的。当然稳压后也可以同时用大电容。另外,用开关稳压并提高输入电压当然可以持续更长的时间。
当然了,AVR的EEPROM速度真是出奇的慢,用外部IIC存储器,8MS可以写几十到上百字节。所以,如果掉电存储需要较多的数据,用AVR的内部EEPROM,的确是不可靠的。

出0入0汤圆

发表于 2007-11-21 20:32:17 | 显示全部楼层
machao  老师的电路有点复杂,兴许是计算也可能是经过了调试后的参数

个人支持22楼的观点,建议将掉电检测的被测试点放到稳压前.这样电路能大大简化,也能提供足够的时间来存储参数

出0入0汤圆

发表于 2007-11-21 23:26:47 | 显示全部楼层
请教一下【22楼】 wqsjob  哪一种外部IIC存储器,8mS可以写几十到上百字节(EEPROM)?

出0入0汤圆

发表于 2007-11-22 08:47:39 | 显示全部楼层
楼上可看一下24LC512,一页能写128字节,以400K/S速度计算,写128字节用时3.x mS,加上写等待4~5ms,每写一页基本上就是8mS

出0入0汤圆

发表于 2007-11-22 09:04:11 | 显示全部楼层
用三脚的7027检测,类似三极管封装的,,体积小,也挺方便的

出0入0汤圆

发表于 2007-11-22 09:55:14 | 显示全部楼层
前几天帮别人布一块板,因为只要保存2个字节,所以就是简单的用AD测量7805前的电压,低于6V就保存数据,经过通断电测试100次,成功率高达100%,

出0入0汤圆

发表于 2007-11-22 16:12:06 | 显示全部楼层
我在19楼贴的方案,是目前批量生产的一个产品中的设计,针对一些网友的问题,做如下解释.

1.关于电容量的问题
    仔细查看AVR器件书册,可以发现AVR自己正常工作需要的典型电流是12mA,写一个EEPROM字节的时间是8.5ms.我的电路AVR是单独供电,并且特别强调了在掉电中断进入后,必须马上关闭所有I/O对外的输出(所有输出I/O脚输出0),停止一切其它的工作.这样AVR只消耗12mA电流.
    按恒流充放电的简化计算:Q = CV = IT.Q是电量,C是电容量,V是电压,I是电流,T是时间.
    那么T=CV/I,在本例中可以估算时间为 T= 0.0022f*(4.7v-2.7v) / 0.012A = 0.367s,即367ms.
    367/8.5 = 43,即最多可以保存43字节数据到EEPROM中.

2.可靠性的证明
    关于这个电路,上个学期一个本科生的毕业设计就是对本电路的研究可测试.实际数据是AVR工作电流为10mA.电容使用2200uF,电压从4.7降到2.8,时间约450ms.另外该设计被应用在目前的一个产品中(3K/月),非常可靠.因此,理论和实践都证明了此设计的正确性.

3.关于使用AVR的模拟比较器
    有人提出不使用外部的电压监测芯片,使用AVR的模拟比较功能.这当然是能节省成本的.但对于批量的产品,我认为还是使用专用的电压检测芯片,其优点是:减轻了AVR的负担和程序编写的复杂性;电压监测可靠,稳定(有抗尖峰功能),不用调节.如果使用模拟比较,由于AVR的参考电源的离散和分压电阻的离散,需要每个产品进行调节.人工过程复杂.因此做少量的产品可以考虑使用模拟比较器.

4.关于将电源监测端从稳压源前端接入的问题
    监测点在稳压源前端回有以下2个问题.1.前端电压波动性太大,如果还有其它的功率控制(如开马达,继电器),稳压前端抖动干扰大,容易造成误动作.尽管不会出现故障,但设备会间歇的停顿.2.前端电压离散性更大,而且在7V以上,不能直接接电压检测,需要分压,产生第3点的问题.

5.关于EEPROM写操作时间问题.
    EEPROM写一个字节和写一页的时间是一样的,约8-10ms.AVR内部的EEPROM是按字节写的,不提供按页写.实际外部的EEPROM写一个字节和一页也是这样的时间,不是AVR的"软肋".别忘了ATMEL是以EEPROM起家的.如果AVR内部的EEPROM不够,可以使用外加EEPROM,但要提供2块芯片的供电,电源消耗增加是一个矛盾.那还不如使用铁电存储器呢.

出0入0汤圆

发表于 2007-11-22 20:57:34 | 显示全部楼层
“3.关于使用AVR的模拟比较器
    有人提出不使用外部的电压监测芯片,使用AVR的模拟比较功能.这当然是能节省成本的.但对于批量的产品,我认为还是使用专用的电压检测芯片,其优点是:减轻了AVR的负担和程序编写的复杂性;电压监测可靠,稳定(有抗尖峰功能),不用调节.如果使用模拟比较,由于AVR的参考电源的离散和分压电阻的离散,需要每个产品进行调节.人工过程复杂.因此做少量的产品可以考虑使用模拟比较器. ”


可以不用内部参考啊,用2个电阻降压后给参考电压,然后通过比较产生中断,也能很好实现BOD,这里比较灵活就是,参考电压和掉电比较电压可以自己定义,个人觉得可以,不知道可行不?

出0入0汤圆

发表于 2007-11-22 20:59:33 | 显示全部楼层
“前几天帮别人布一块板,因为只要保存2个字节,所以就是简单的用AD测量7805前的电压,低于6V就保存数据,经过通断电测试100次,成功率高达100%, ”

这样的话可能有问题哦,这要看你程序执行时间了,如果一次循环时间短就好,长了,就麻烦了。

出0入0汤圆

发表于 2007-11-23 00:33:54 | 显示全部楼层
29 楼,电阻的零散性如何解决?每快板都测试调整?批量就麻烦了.

出0入0汤圆

发表于 2007-11-23 09:33:55 | 显示全部楼层
3.  如果这种场合都给"AVR的参考电源的离散和分压电阻的离散"否定的话,那么ADC和比较器就不要考虑用片内参考电源了,这样的话片内基准源基本上就是个摆设!

4.  前端电压波动性太大,前端电压离散性更大,可以用电容及软件滤波,程序编写也简单(相对AD滤波)。分压电阻的离散基本不用考虑,这种场合用1%误差的电阻完全可以了。

5.  AVR内部的EEPROM不提供按页写也算是AVR的"软肋"了.对于少量字节可能影响不大,如果要保存512或1K字节的话需要4秒或8秒就够呛了,这种情况只能使用外加EEPROM了。

出100入0汤圆

发表于 2007-11-23 10:45:53 | 显示全部楼层
1.关于电容量的问题
    仔细查看AVR器件书册,可以发现AVR自己正常工作需要的典型电流是12mA,写一个EEPROM字节的时间是8.5ms.我的电路AVR是单独供电,并且特别强调了在掉电中断进入后,必须马上关闭所有I/O对外的输出(所有输出I/O脚输出0),停止一切其它的工作.这样AVR只消耗12mA电流.
    按恒流充放电的简化计算:Q = CV = IT.Q是电量,C是电容量,V是电压,I是电流,T是时间.
    那么T=CV/I,在本例中可以估算时间为 T= 0.0022f*(4.7v-2.7v) / 0.012A = 0.367s,即367ms.
    367/8.5 = 43,即最多可以保存43字节数据到EEPROM中.

可以看出,你以前的帖子是随手写出来的,没计算过,不过能回复我们这些菜鸟这么详细,我觉得值得尊敬.就因为这一点,我觉得有必要稍深入的讨论,我和同事讨论时也经常争吵,习惯了,请见谅。

2.可靠性的证明
    关于这个电路,上个学期一个本科生的毕业设计就是对本电路的研究可测试.实际数据是AVR工作电流为10mA.电容使用2200uF,电压从4.7降到2.8,时间约450ms.另外该设计被应用在目前的一个产品中(3K/月),非常可靠.因此,理论和实践都证明了此设计的正确性.

没有人说这个产品或设计不可靠,只是提出比较好的检测方法,从成本和实用性角度,这个设计并不是最好的.

3.关于使用AVR的模拟比较器
    有人提出不使用外部的电压监测芯片,使用AVR的模拟比较功能.这当然是能节省成本的.但对于批量的产品,我认为还是使用专用的电压检测芯片,其优点是:减轻了AVR的负担和程序编写的复杂性;电压监测可靠,稳定(有抗尖峰功能),不用调节.如果使用模拟比较,由于AVR的参考电源的离散和分压电阻的离散,需要每个产品进行调节.人工过程复杂.因此做少量的产品可以考虑使用模拟比较器.

对于使用比较器,随便用一个比如LM393,就可以实现了,至于LM393的价格,不会比IMP809贵,功耗增加实测不到2MA.面积相对二极管和一个电容的减少,反而小了些,即使多换一个大电容,并且加上参考,也不过相当于多加一个IMP809的面积.

4.关于将电源监测端从稳压源前端接入的问题
    监测点在稳压源前端回有以下2个问题.1.前端电压波动性太大,如果还有其它的功率控制(如开马达,继电器),稳压前端抖动干扰大,容易造成误动作.尽管不会出现故障,但设备会间歇的停顿.2.前端电压离散性更大,而且在7V以上,不能直接接电压检测,需要分压,产生第3点的问题.

前端电压波动性是比较大,考虑电网电压的±20%,如果你的前端电压波动再超过10%,那你的设计本身就不很合理了.
如果电网电压低于176V,一般不是我设计的范围内应用的场合,除非事先提出该设计是针对该场合应用的,我们就会在设计上考虑这些问题.
如果存在这种情况,大部分的时候不检测掉电本身也会工作不正常.一般电源的电压提高一些就能解决问题,但这种情况是比较少见的,即使出现这种情况也是事先知道的,而不是后来某种不可预知的原因引起的,设计的时候就可以避免这种问题。

如果说大功率继电器和马达等元件与CPU用同一路电源的话,也许只能在家里用用,拿出去不出问题也难.

当然功率的大小是相对的,你的电源首先要考虑能提供大功率器件工作时所需要的功率(另外与电源器件也有关系,比如稳压管之类的),这样电压就不会突降.实际我也测试过GR64模块启动时的一些参数,手册上说瞬间有2A的电流,实际工作实测210MA左右,而我提供的270MA的电源同时供50MA的CPU等电路供电,在我设计的电路中,电压波动在11V的基础上最大的波动也就是0.44V(TDS1200示波器),这些本身在设计上降低检测点0.44V就可以避免了。

7V以上电阻分压,是很麻烦,会产生很多问题。只要解决最主要的问题就可以了。设计时你要确定你检测的掉电位置并不是一个点,即使用马老师的电路,检测的也不是一个点。所以,你只要确认这个范围能够在你的容忍范围之内。其实完全没有必要拿几K的产量来吓人,我说一下我的测试数据:我的检测点设定在8V(用的也是5V电路:),原先没掉电存储功能,只有掉电检测,主要考虑到切换电池,但是要防止电池失效,后来需要掉电存储了,只好将7805改成2940)。我的方案是参考使用TL431,我们量大,TL431加上
LM393价格不过是0.7元。前端采用电阻分压,将8V分到2.5v,使用E96系列电阻。我在1000个里分两匹,一匹300个取70个,另一批700个取230个,实测检测点的范围在7.86-8.18V ,算起来分压的小电阻相对偏大,但是范围在容忍的范围之内,这个范围,也许相比专用检测芯片,并不会差多少吧?毕竟还有个分压倍数的关系。这说明现在贴片电阻的工艺已经做到了同一批电阻误差基本上可以忽略了,不同批次的(两个分压电阻两次买的)也不会误差太大。

后来为节约成本,把TL431也换掉了,电压检测点下调了0.6V,误差范围没多测试,测试了20个电压的范围基本上为
6.96-7.25之间,算起来比TL431范围还窄,但是和LM2940的精度有关系,这时LM2940的电压大概是
4.85V。一般稳压输出带负载的,不会电压偏大,就按偏差4.75-5.25V,检测点应该在6.7V-8.4V之间,
这个范围就比较大了。但是在我的范围内,呵呵。

把我的方法和马老师的比较一下,就知道,如果我用2.7-5.5V供电的CPU,我的掉电处理时间比马老师的长的多,但是价格上并不贵,占用面积也不多。如果说前端检测不可靠的话,那很多的复位芯片应该也不会把这个功能加进去吧。

5.关于EEPROM写操作时间问题.
    EEPROM写一个字节和写一页的时间是一样的,约8-10ms.AVR内部的EEPROM是按字节写的,不提供按页写.实际外部的EEPROM写一个字节和一页也是这样的时间,不是AVR的"软肋".别忘了ATMEL是以EEPROM起家的.如果AVR内部的EEPROM不够,可以使用外加EEPROM,但要提供2块芯片的供电,电源消耗增加是一个矛盾.那还不如使用铁电存储器呢.

如果用铁电,只要检测掉电就可以了,基本不需要存储操作,另外针对功耗,EEPROM最多也就是多3-4个MA,如果还需要掉电存储操作,那干脆把马老师电容换成3300UF,红宝石的电容也就是多几毛钱,何必要花几倍价钱的铁电呢?

另外,马老师在另一个帖子说我是高手,在此声明一下,我是菜鸟,一般高手不会和马老师较劲的:),因为他们已经知道了,就用不着麻烦。菜鸟谈谈自己的做法和看法,这样至少会起到抛砖引玉的作用吧。还有写这么多的,除了老师和菜鸟,高手可没有这个时间。

出0入0汤圆

发表于 2007-11-23 18:13:04 | 显示全部楼层
to【33楼】 wqsjob:
   非常好的帖子,这里是讨论技术问题,很多人在设计中积累了好的经验,到这里讨论和交流一下是好的事情.针对你的回答,我想做几个简单解释.

1.能否上张原理图,供大家参考学习.

2.我在19楼的帖子并不是随手写的,在2004年出版的<M128>书中就有了.书中只是给出电路和参考值,放了余量.没有给出理论的计算.但我在设计使用这个电路时,自己是经过计算的.

3.关于在稳压源的前端还是后端取样,各有利弊.个人根据实际情况处理.我只是给出一个参考的设计,并说明该设计的可靠情况,并不是说这就是最好的.

出0入0汤圆

发表于 2007-11-23 21:44:17 | 显示全部楼层
to 25楼 哇,一直用24c08没用过24LC512所以还不知道24LC512一页是128不错,不过24LC512应该有64KB吧,为了存几十个字节用这个不适合吧

出0入0汤圆

发表于 2007-11-24 00:36:54 | 显示全部楼层
我保存3个字节,忘了焊二极管后的电容器,居然也能保存,为了可靠在220至1000之间随便选择一个焊上了。

出0入0汤圆

发表于 2007-11-24 01:02:36 | 显示全部楼层
为了可靠,电容需要留足余量.

因为中断的响应,执行需要时间,另外如果AVR有多个I/O输出比较大的电流,是否在中断中马上关掉,都会影响到保护是否可靠.

我在测试的时候,是让LED显示"8",也就是8个段都亮,A口输出驱动达50mA,在大的负荷下进行测试,而不是按AVR本身的12mA理论值使用(只能是作为参考的起点).所以从掉电到中断中关闭A口的输出,尽管时间不长,但这段时间要消耗60mA的电流,全部要靠电容提供.

出100入0汤圆

发表于 2007-11-30 12:57:04 | 显示全部楼层
点击此处打开ourdev_184089.pdf(文件大小:47K)
电路发一下,不过感觉没大的必要,因为每个人都用过这样的电路:)。

TO 24楼
请教一下【22楼】 wqsjob  哪一种外部IIC存储器,8mS可以写几十到上百字节(EEPROM)?


ATMEL本身是做存储器起家的,不知道做的这么慢是何居心。但一点可以肯定,EEP在AVR里占的成本比重应该特低,按我的理解,应该与成本无关了,呵呵。
随便找一个现在还在生产的,都可以超过几十了。
ATMEL的老EEP,一般是100K的,可以算算应该不会低于30字节8MS吧,你用的24c08不管是哪家做的,一般都可以。新的一般都可以达到M级了,目前400K的存储器多的是。

出0入0汤圆

发表于 2007-11-30 19:29:51 | 显示全部楼层
谢谢38楼的参考图.有2点提一下.

1.在38楼的图中,2940输出的电源是提供整个系统使用的吧.那么需要当心,当你的系统中有大电流消耗,或还有许多其它器件消耗电流的话,掉电维持时间就不能保证了,或估计起来就比较麻烦了.而我的电路MCU单独供电,电流消耗比较容易控制.

2.关于EEPROM写入时间的问题,38楼可能在概念上有些混淆.下面是M公司24C256中的一段:

Microchip Technology Inc.

&#8226; Fast write cycle time in byte or page mode
- 5 ms max for 24LC256 and 24C256
- 10 ms max for 24AA256

估计38楼把I2C的速率与EEPROM的写入时间混在一起了.400K是指I2C的速率,是标准.是指在I2C上脉冲CLK的频率(数据传送速度).但你将要写的数据传入24Cxx中后(实际是写入芯片内部的缓冲区),24Cxx内部开始进行将缓冲区数据写进EEPROM中.不管是写一个字节,还是一页都需要5-10ms的时间!

实际上,许多EEPROM内部是页结构的,一个缓冲区的大小就是一页的大小.写EEPROM,就是将该缓冲区整个的内容写到EEPROM的页中,哪怕一个字节,也是写一页.这个操作时间5-10ms.

AVR为了方便,内部的EEPROM是字节为单位的,或者理解成它内部的一页的大小就是一个字节.写操作时间为8ms.也是标准时间,并不慢多少.所以这不是ATMEL的EEPROM慢,是结构的问题.

当然,对于写批量的数据,一页的字节数越大,相对也就快一些.这点没错.可是如果对于掉电保护,仅需要写十几\几十字节的话,到底是使用AVR内部的EEPROM,还是外面加一片24Cxx,就需要综合的考虑问题了.

如果AVR内部的EEPROM采用32个字节是一页的话,那么写32个字节也就只需要8ms.但在其它方面使用可能就比较麻烦.(参考AVR中的FLASH,就是按页写的)

出100入0汤圆

发表于 2007-12-1 10:22:50 | 显示全部楼层
呵呵,2940提供CPU 电源, 2576提供GPRS电源,共地.
另外谢谢马老师提醒,不过我存储的数据块一般不用完一页,对于我来说,应该全是页写.我的最小字节是4字节,也占用一页,的确是浪费了点.

出100入0汤圆

发表于 2007-12-1 10:39:26 | 显示全部楼层
呵呵,其实方向搞错了,应该是它不支持页写不太好.
另外,我有点想当然了,我用的24C64,是32B/P,刚查下24C08是16B,当然8MS写不到30B了.(我写驱动的时候没搞错,现在的确是搞错了概念)
对于电源,掉电电平持续80US,就切断GPRS电源(实际上可能超过100US,主要取决于系统中一些与掉电处理中断具有互斥条件的函数执行的时间)。

出0入0汤圆

发表于 2007-12-3 21:07:24 | 显示全部楼层
用内部比较器的方法:
使用内部基准电压:是1.23V吗?还是像ADC一样可以选2.56V或5V


出0入0汤圆

发表于 2007-12-4 09:32:56 | 显示全部楼层
我也想知道

出0入0汤圆

发表于 2007-12-4 10:30:39 | 显示全部楼层
各位高手:

电压从4.5V降到2.7V一般要多少时间?

出0入0汤圆

发表于 2007-12-4 10:34:41 | 显示全部楼层
收下。

出100入0汤圆

发表于 2007-12-4 10:53:20 | 显示全部楼层
【44楼】 feitian215  

马老师在帖子里已经告诉你计算方法了.如果看不懂,把高中物理翻开看看,就知道了.

出0入0汤圆

发表于 2008-4-9 11:39:19 | 显示全部楼层
正遇到这样的问题,帖子保留研究下。

出0入0汤圆

发表于 2008-4-9 17:37:06 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2008-7-31 10:59:19 | 显示全部楼层
machao老师的方法中 为什么不采用sleep函数呢?而要用循环不断检查呢?
datasheet说 “唤醒时不会改变寄存器文件和SRAM 的内容。”意思时说不用保存这些数据吗?老师不用这个功能
是不是它不可靠啊?
顺便请问下老师,掉电模式下, 看门狗不用喂也能自动运行吗?不会产生溢出复位吗?

出0入0汤圆

发表于 2009-5-27 22:33:40 | 显示全部楼层
顶贴学习!

出0入0汤圆

发表于 2010-6-13 08:56:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-13 09:17:16 | 显示全部楼层
好贴,学习

出0入0汤圆

发表于 2010-6-13 10:02:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-2 10:49:39 | 显示全部楼层
好贴。

出0入0汤圆

发表于 2010-11-2 12:37:54 | 显示全部楼层
学习一下,防以后用到

出0入0汤圆

发表于 2011-6-1 11:29:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-1 20:13:47 | 显示全部楼层
remind

出0入0汤圆

发表于 2011-6-2 08:31:40 | 显示全部楼层
很好的掉电保持EEPROM帖子

出0入0汤圆

发表于 2011-6-2 17:19:03 | 显示全部楼层
留名

出0入0汤圆

发表于 2011-9-22 13:28:48 | 显示全部楼层
掉电保持的号帖子啊

出0入0汤圆

发表于 2011-9-22 13:52:03 | 显示全部楼层
回复【60楼】kihell 红舞林檬浩
掉电保持的号帖子啊
-----------------------------------------------------------------------

这么好的贴子怎么被告你淘上来的,呵呵。

出0入0汤圆

发表于 2013-7-16 12:04:38 | 显示全部楼层
很好的掉电保持EEPROM帖子

出0入0汤圆

发表于 2013-10-4 16:58:02 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2013-10-11 00:02:57 | 显示全部楼层
好帖子,学习了

出0入0汤圆

发表于 2013-10-22 17:12:48 来自手机 | 显示全部楼层
非常好的帖子,学到了不少

出0入0汤圆

发表于 2013-10-23 22:28:14 | 显示全部楼层
MARK~! 以后会用到的 ~!!

出0入0汤圆

发表于 2013-10-23 22:49:16 来自手机 | 显示全部楼层
很好的贴子,实践中的经验,难得。

出0入0汤圆

发表于 2014-2-8 20:11:51 | 显示全部楼层
mark                        

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-3-29 13:15

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

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