发新帖我要提问
12
返回列表
打印

大家有没有遇到过PIC内部E2PROM失效啊?

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
21
yewuyi| | 2008-9-4 08:41 | 只看该作者 回帖奖励 |倒序浏览

加到VCC电容,然后把BOD的电压尽量开高一点

这样在电压不稳定的时候,MCU会被复位,已经发出的写EE操作将有相对长一点的电压下降时间

使用特权

评论回复
22
yewuyi| | 2008-9-4 08:43 | 只看该作者

奇怪,俺用PIC从来都是只写一次,校验都省了,还真没发现

xieyuanbin 发表于 2008-9-4 08:40 PIC 单片机 ←返回版面    

20楼: 问一下匠人电源如何得来? 

貌似周期性失败?
不知道你校验失败后如何处理?重写还是跳过?没看到你重写的程序.只写一次遇到写失败的可能性比较大.我一般的处理是写-校验-错-重写-校验-错-报错.

 
 

使用特权

评论回复
23
yewuyi| | 2008-9-4 08:46 | 只看该作者

俺一般把BOD开的最高

直接写一次,不校验,从来没发现出错(主要是PIC16F91X系列)。

用AVR的时候到是搞了写两次,因为AVR的E2PROM比较的。。。

使用特权

评论回复
24
程序匠人|  楼主 | 2008-9-4 10:00 | 只看该作者

回 xieyuanbin


 xieyuanbin 发表于 2008-9-4 08:40 PIC 单片机 ←返回版面    

20楼: 问一下匠人电源如何得来? 

貌似周期性失败?
不知道你校验失败后如何处理?重写还是跳过?没看到你重写的程序.只写一次遇到写失败的可能性比较大.我一般的处理是写-校验-错-重写-校验-错-报错. 

-----------------------------------------------
第1个问题:电源是靠滑环和电刷传导的,虽然有电容稳压,不过,还是会有接触不良导致的波动。另外,由于LED显示切换,也可能导致波动。这些都是猜测,因为板子在旋转,无法用示波器去观察板子上的电压波动情况。

第2个问题:为了满足实时性,我在写E2PROM的等待周期里,不会空等待,而是把系统控制权交回给系统。待到下次再进入程序时再去做校验。如果写入失败,我会再写,连续三次校验失败,则跳过。我的处理是(先读-校验-错-写-再读-校验-再错-再写-连续错-跳过)。程序我前面已经给出了,现在再摘录并说明如下:


   if ( EEP_SAVE_ID <= 180 )        
        //保存自定义点阵图片下部
        {
            //读出校验
            EEADR = PICTURE2_ADR + EEP_SAVE_ID - 90 ; //地址
            read_eeprom() ;                //EEPROM字节读程序
                    
            if ( EEDATA == DISP_QUEUE2[EEP_SAVE_ID - 90] ) //如果校验一致(代表写成功,切换到下一单元)
            {
                EEPROM_ERR_JSQ = 0 ;            //EPPROM写失败计数器=0
                EEP_SAVE_ID ++ ;            //EEPROM存储指针+1    (切换到下一单元)
            } 
            else if ( ++EEPROM_ERR_JSQ > 3 )    //如果连续n次写入失败(代表写失败,放弃当前单元,切换到下一单元)

            {
                EEPROM_ERR_JSQ = 0 ;            //EPPROM写失败计数器=0
                EEPROM_ERR_FLAG = 1 ;                      //EPPROM写失败标志=1
                EEP_SAVE_ID ++ ;            //EEPROM存储指针+1    (放弃当前单元,切换到下一单元)
            }
            else                    //否则,更新数据
            {            
                EEDATA = DISP_QUEUE2[EEP_SAVE_ID - 90] ; //数据
                write_eeprom() ;            //EEPROM字节写程序(这里是真正的写入操作,一般来说,第一次读校验后,会执行这里)
            }

使用特权

评论回复
25
ddb_21ic| | 2008-9-4 10:51 | 只看该作者

匠人的注释写的那么好,累不累啊

有中文编程的样子了

使用特权

评论回复
26
程序匠人|  楼主 | 2008-9-4 12:49 | 只看该作者

回楼上,好记性不如烂笔头

与其以后想破头,不如顺手写注释。

经常有人说:“项目赶得太急,我只能写程序,没时间写注释”——匠人不以为然。

根据匠人的推算,我们即使是在全神贯注编程的时候,写程序的平均速度也不过每分钟一两行。

一天8个工作小时,即480分钟,如果真的每分钟一条,那就要写480条语句,实际上我们一天写不了那么多代码。

更多的时候是大脑在思考,而手上却闲着。

而我们的打字速度,实际上可以达到每分中200个键以上。因此,速度的瓶颈不在打字上。

我们完全可以做到一边思考,一边打字。不会额外浪费多少时间。

不但不会浪费时间,还会节约日后程序升级维护的时间。

因此,写注释是件划算的买卖。

使用特权

评论回复
27
xieyuanbin| | 2008-9-4 22:17 | 只看该作者

你可以增加校验错重写的次数,来判断是否电源失效.另一个问题是,是否复位呢?可以将BOD开低点试试.

使用特权

评论回复
28
xieyuanbin| | 2008-9-4 22:19 | 只看该作者

22楼

显然应该预见到他的电源靠电刷馈电,所以电源不稳的情况是经常发生的,这种情况就要校验EEPROM是否写成功.

使用特权

评论回复
29
程序匠人|  楼主 | 2008-9-4 23:34 | 只看该作者

基本可以确定是电源的问题了

现在改为在指针板静止时发送数据,电源不再波动,成功。

秀张图片:

这是传递后的图片实际效果。由于相机曝光时间不够,没有拍全

使用特权

评论回复
30
程序匠人|  楼主 | 2008-9-4 23:36 | 只看该作者

再秀一张

这是后台软件的截图。现在修改显示图片很简单了,串口就可以搞定,不再需要每次都重新改程序了。呵呵。

使用特权

评论回复
31
xieyuanbin| | 2008-9-5 19:16 | 只看该作者

指针静止??

指针什么时候静止啊?

使用特权

评论回复
32
程序匠人|  楼主 | 2008-9-5 21:13 | 只看该作者

呵呵,指针不转的时候就是静止的

俺这个旋转时钟,大多数时候都是静止的。在需要的时候,拍一下手,就转起来了。转个20S,不搭理它,它就又消停了。消停归消停,电照样通着,这个时候去通讯的话,就不用担心电源的波动了。

使用特权

评论回复
33
xieyuanbin| | 2008-9-6 10:06 | 只看该作者

你内部EE记录什么东西?不是上面的图形吧?

使用特权

评论回复
34
程序匠人|  楼主 | 2008-9-6 21:59 | 只看该作者

就是记录上面的图片啊,呵呵

当然,还有一些其它东西,比如闹钟时间等

使用特权

评论回复
35
xieyuanbin| | 2008-9-7 12:05 | 只看该作者

呵呵,我算错字节数了.

使用特权

评论回复
36
foxmax| | 2008-9-8 11:22 | 只看该作者

没有遇到过

使用特权

评论回复
37
NE5532| | 2008-9-9 21:00 | 只看该作者

16F系遇到过,莫名其妙被改。

概率10万分之1左右,很奇怪。

使用特权

评论回复
38
hch| | 2008-9-20 02:39 | 只看该作者

这样有没有问题?

EEPROM_WRITE(5,ldata);
Delay1mS(100);
ldata=EEPROM_READ(5);
Delay1mS(100);

用自带的  仿真没有问题 烧片 不行  郁闷  12f629

使用特权

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

本版积分规则