打印

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

[复制链接]
7347|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、解决办法就是检测到断电后用电容维持一段写入时间

使用特权

评论回复
5
xwhua188| | 2011-12-16 16:01 | 只看该作者
为什么我用690的,直接调函数应写啦,没这么麻烦啊。

使用特权

评论回复
6
endload|  楼主 | 2011-12-16 21:39 | 只看该作者
3# ocon
今天被我调可以工作了,也没误写,误取,只是自己写的程序都有点理解不通

使用特权

评论回复
7
endload|  楼主 | 2011-12-16 21:41 | 只看该作者
4# yewuyi
对的,由于unsigned long型变量,写分四字写入,所以误写率比较高。

使用特权

评论回复
8
endload|  楼主 | 2011-12-16 21:42 | 只看该作者
5# xwhua188
因为是一个实时变量,考虑到EEPROM寿命,采取断电保存。

使用特权

评论回复
9
NE5532| | 2011-12-17 22:02 | 只看该作者
5# xwhua188  
因为是一个实时变量,考虑到EEPROM寿命,采取断电保存。
endload 发表于 2011-12-16 21:42


硬件上掉电信号和掉电后延迟供电解决不了,软件写得再好都是错的,原理上都错了,怎么可能做对?

使用特权

评论回复
10
endload|  楼主 | 2011-12-29 21:28 | 只看该作者
9# NE5532
恩硬件是前提,就是因为硬件做到理论的可能才会去考虑软件,软件的优化是为了尽快时间内关闭各种功耗较大的模块。

使用特权

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

本版积分规则

0

主题

40

帖子

1

粉丝