在线情况
楼主
  • 头像
  • 级别
    • 积分7
    • 经验505
    • 文章12
    • 注册2007-05-29
    430F5418的RTC能够用吗?
    设计了一个产品,本来用F247的,后来看到新出来的5418,RAM大了好多,程序也可以多4倍,特别看中的竟然有个硬件实时钟,所以毫不犹豫的就选它了,可是一用下来,却发现有很多毛病,也许是TI公司受到ARM挤压,匆忙弄了一个上去的吧,下面是我发现的问题:1,RTC的读出没有问题,但是它的写入却有非常大的问题,在计数器状态下写入还可以,但是在实时时钟状态下写入非常难,我试验了多次,写分和秒没有问题,写小时却经常写不进去!或者你写了个07H,读出来就是06H,但是有时又可以写进去,开始可以写进去几次,后来就难了!还有日也是这样的,都是要不写错,要不根本写不进去,我后来想,干脆写完就读,只要读出来不对就继续写,这样总行了吧?可是有时没有问题,但是有时就死在里面了,就是说,不管你怎么写,也写不进去,那只能是死循环了!这个先不谈,另外还有一个根本问题:它的复位是计数器状态,如果你要把它改变成实时时钟,那就会把时间值年月日全部清除的!试问,我们要实时时间干嘛,不就是为了关机状态下它能够继续走,能够准确的记录时间吗?如果我们用的电脑每天开机都要做设置时间的工作,那不是太好笑了吗?不知道TI的设计工程师怎么想的,你要不开机复位不要默认计数器状态,要不就不要画蛇添足的在改变状态时把它清0,也许有人会说,你不会把它复位前保存起来,复位后再写进去吗?但是这样一是会造成时间不准确,二是许多情况下复位是不能预先知道的!比如看门狗复位,当碰到干扰时自动恢复了,可是时间没有了!你说这样的RTC能够用吗?所以我说它只是为了竞争勉强凑进去的。
        请看我们这个论坛翻译的比较雷人的关于RTC的读法:为了安全的读取计数器数据,多次读取RTCRDY位取平均值和同步读取操作等上述方法都可以被使用,可以多次读去计数器寄存器,由软件多次读取来确定正确的数据。取平均值?显然不是指RTCRDY位了,那么时间是可以取平均值的吗?如果读一次10点,读一次8点,那么正确的时间应该是9点?真是太可笑了,后面那句“由软件多次读取来确定正确的数据”其实也是不对的,软件怎么能够判断时间啊?除非是不可能发生的时间,比如32号61分钟!否则就不可能判断那个是正确的时间,只能是多次读,取多的那钟,但是前提是不能读出来有很多不一样的数值。但是我用了多年的实时时钟芯片,从来就没有这样读的,也不可能在MCU复位时就需要重新设置把时间值写进去,这样启不是变成玩具了?
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
      • 积分7
      • 经验505
      • 文章12
      • 注册2007-05-29
      很高兴看到DC的回答,但是我上面写的很清楚了,很多情况下复位是不能够避免的,比如看门狗复位,如果一个系统仅仅指望它开机或者电池工作时只复位一次是不可能的。
      微控网感谢您的参与
      在线情况
      3
      • 头像
      • 级别
        • 积分7
        • 经验505
        • 文章12
        • 注册2007-05-29
        其实430的芯片确实有很多问题,我们公司是它的大用户,我也用F427,F135,F435做过几款产品,它的IO口复位是不可靠的,就是说,进入低功耗状态时,你按中断有时它是醒不过来的,这个毛病我和TI的技术支持也反映过,一百次有几次会死了,得把电池拆下来过一回重新装回去才行,这样有时我们在客户面前很难堪,我做的系统都是断电进入低功耗的,但是用其他公司的芯片就没有这个问题,后来我把它的IO口和复位连在一起了,开机进入非屏蔽状态,关机进入复位状态,才解决这个问题。另外它的12位AD也是总出事情,会莫名其妙的坏了,就是数据大了好多,其他正常,如果换了新的就好了,我做设计时就坏了好几片,435,135都是,就是AD坏,没有任何原因。我后来吓的手都不敢碰,怕静电把它弄坏了,这一点PIC比它好的多,焊反了,烫下来重新装回去也没有事情,我手里其他美国的芯片没有碰到坏过的,就是碰到430会,感觉它好象是美国的乡镇企业,哈哈
        微控网感谢您的参与
        在线情况
        4
        • 头像
        • 级别
          • 积分7
          • 经验505
          • 文章12
          • 注册2007-05-29
          DC:不好意思,工作忙,没有很多时间上网,所以回答晚了,以前我向FAE反应过的问题,一般都是态度很热情,然后回点资料,如果真的问题,那还是要问总部的,在等待的过程中就忘记问题了。
              因为在进入睡眠时,用外部IO口中断换醒不可靠,所以我后来把要换醒的IO口和复位连接在一起了,这样按了这个键肯定能够醒来,但是这样正常工作时会产生问题,如果在存取数据时按这个键,会立即复位,造成有可能数据出错,所以在刚上电时把复位口设置成非屏蔽中断口,这样当按下键时进入非屏蔽中断,在中断程序中设一个关机标志位,然后返回到正常程序中做完所有工作后再关机进入睡眠,也可以做成象手机关机那样在中断程序中判断这个IO口是否一直按着超过2秒,不超过就返回什么也不要做,超过了就设置的关机标志(这在手持仪表中经常会用到,防止意外关机),由主程序进入睡眠。进入睡眠前,必须把它还设置成复位口,这样按一下肯定百分之百能够醒过来。
          微控网感谢您的参与
          在线情况
          5
          • 头像
          • 级别
            • 积分7
            • 经验505
            • 文章12
            • 注册2007-05-29
            自己问题的结果:RTC在看门狗复位时是不改变状态的,这样也就勉强可以用了
            微控网感谢您的参与
            在线情况
            6
            • 头像
            • 级别
              • 积分7
              • 经验505
              • 文章12
              • 注册2007-05-29
              PUC的确不会影响RTC的工作模式,POR会,但是PUC会影响它的RTCHOLD位,也就是说,每次复位以后它是停止的,要启动它才能工作,这样时间就会有误差,我前面说过它是个匆忙凑上去的一个器件,所以根本没有考虑它是否能够实际运用,严格来说,其实就是一个废器件,因为我做了好多实验,它的写入的确有很大的问题,可以说经常写进去要丢位或者写不进去,它的时,和日这个单元经常出这样的事情,一般复位以后可以写几次正确的,以后就不行了,我一怒之间下用了条:LOOP:MOV.B R8,RTCDAY / CMP.B R8,RTCDAY  /JNZ LOOP ;这样你不让我写正确我就不走了!但是最终就死机了,就是说不管你写多长时间,就是写不进,这样的RTC怎么能够用呢?后来我想,不就是个万年历吗,我编个软件就行了,就把RTC当个秒中断使用,每秒我自己在RAM做时间,但是也不行!因为它会在PUC以后多几秒出来,我另外用个TA1做个秒中断,那就时间很正确,PUC对它一点没有影响,所以只能不用这个RTC了,除非我手里这个5418正好有问题(我有5颗样片,懒的再贴了),否则这RTC就是个废品了
              微控网感谢您的参与
              Powered by LeadBBS 9.2 .
              Page created in 0.0781 seconds with 6 queries.