受不了!!!PIC断电EEPROM保存数据。

[复制链接]
8857|9
 楼主| endload 发表于 2011-12-15 16:32 | 显示全部楼层 |阅读模式
为什么,我写的EEPROM断电保存数据,在测试过程中有的时候数据是好的,有的时候是错的,纠结,请大侠门指指门路吧。

断电检测程序:if(ADGO==0)              //判断转换是否结束
         {
              AdcValue=ADRESH;
              AdcValue=AdcValue<<8;
              AdcValue=AdcValue|ADRESL;      //读取AD转换结果
              AdcResult=AdcResult+AdcValue;
              AdcCounter++;
              
              if(AdcValue <0x01E0)
              {  
             AdcResult1=AdcResult1+AdcValue;
               AdcCounter1++;
               if(AdcCounter1==2)
               {
                if(AdcResult>2*AdcValue )
                {
          AdcResult1=0;
          AdcCounter1=0;
          RC2=1;
          RA6=1;
          RC0=1;
          CCP2IE=0;
          TMR0IE=0;
          TMR2IE=0;
          TMR6IE=0;
          WDate(ODO);     //写EEPROM数据   
                }
asspeed 发表于 2011-12-15 21:10 | 显示全部楼层
这个真是老生常谈了
ocon 发表于 2011-12-16 00:04 | 显示全部楼层
需要保证EEPROM写入完成前VCC电压足够稳定,几点建议:
1、加大VCC稳压器前端储能电容的容量;
2、尽快检测到断电事件;
3、尽快切断消耗储能电容能量的通路;
4、尽快进入保存参数的流程。
yewuyi 发表于 2011-12-16 11:07 | 显示全部楼层
1、EEPROM的写入是需要时间的,一般在4~10ms吧
2、如果在这个时间内发生断电,则写入就可能出错
3、解决办法就是检测到断电后用电容维持一段写入时间
xwhua188 发表于 2011-12-16 16:01 | 显示全部楼层
为什么我用690的,直接调函数应写啦,没这么麻烦啊。
 楼主| endload 发表于 2011-12-16 21:39 | 显示全部楼层
3# ocon
今天被我调可以工作了,也没误写,误取,只是自己写的程序都有点理解不通
 楼主| endload 发表于 2011-12-16 21:41 | 显示全部楼层
4# yewuyi
对的,由于unsigned long型变量,写分四字写入,所以误写率比较高。
 楼主| endload 发表于 2011-12-16 21:42 | 显示全部楼层
5# xwhua188
因为是一个实时变量,考虑到EEPROM寿命,采取断电保存。
NE5532 发表于 2011-12-17 22:02 | 显示全部楼层
5# xwhua188  
因为是一个实时变量,考虑到EEPROM寿命,采取断电保存。
endload 发表于 2011-12-16 21:42


硬件上掉电信号和掉电后延迟供电解决不了,软件写得再好都是错的,原理上都错了,怎么可能做对?
 楼主| endload 发表于 2011-12-29 21:28 | 显示全部楼层
9# NE5532
恩硬件是前提,就是因为硬件做到理论的可能才会去考虑软件,软件的优化是为了尽快时间内关闭各种功耗较大的模块。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

40

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部