关于时钟芯片DS1302的问题

数采仪上一直使用的是pcf8563。但是在雨情主板(msp430)上却出现了问题:
问题1,延迟要特别长(甚至500ms)才能读出正确的数值。
问题2,IIC的sda线上会出现半个电平(不是低电平,也不是高电平,而是介于两者之间)的情况。
问题3,使用msp430 149时正常,但是使用msp430 1611时却读取不到时间。

这些问题无法解决,因此决定试用开发板上使用的时钟芯片DS1302。
该芯片很好用,用简单的飞线方式连接到msp430 1611主板上后,程序就可以跑起来,并可以正常读取和设置时间。

但是新的问题出现了:前1天跑的好好的主板,把纽扣电池卸掉后,时间不走了。
也怀疑是软件的问题,但是想不明白,在软件没有任何变化的情况下,为何结果会不一样,因此怀疑是DS1302芯片的问题,
感觉是假的DS1302在跑了几天后就不能用了,硬件工程师也很确定的说,DS1302假货特别多,网上的查询结果也验证了
这种说法,还有人说2元左右的DS1302都是假货,问过采购,我们的DS1302正是2元。把开发板上的DS1302换到新板子上,
新板子可以正常跑起来,把新板子上认为有问题的DS1302换到开发板上,开发板跑不起来。于是更加坚定了批次性DS1302
有问题的想法。可以这批DS1302是以前采油上用过的,用了几十片都是好的。
真的让人很迷惑。

怀疑是晶振坏了,也怀疑是匹配电容不对,还怀疑DS1302芯片是假货,总之大家忙活了1天,从硬件上去找问题。

不断的测试,终于发现了1个规律:用开发板的程序在新板子上跑一次,时钟正常,不断电,再用雨情的程序在新板子上
跑则时钟正常。终于确定是软件的问题。

同时也发现换到开发板上的那个DS1302,晶振虚焊着(郁闷死了,问题测试一定要细心,否则会害死人的),重新焊好后,
开发板正常。回想为何 把开发板上的DS1302换到新板子上,新板子可以正常跑起来 ,原因可能是先运行了开发板程序,
再运行了雨情程序,当然能跑起来了。

对比开发板程序和雨情程序的不同,最终发现,开发板程序在开始时设置了系统时间。修改雨情程序,把设置系统时间的
语句加到程序开始处,程序运行正常。
DS1302的手册上说明,要使得晶振起振,秒寄存器的最高位要置0,我以为开发板的Reset_DS1302已经做了这个事情,现在
看来我的想法错了。正是因为开发板程序每次运行都要设置系统时间,该操作会导致秒寄存器的最高位置0,所以开发板的
程序能正常跑。而雨情的程序到开发板上也能正常跑起来,是因为开发板上有备用电池,其能够保存住秒寄存器最高位的0。

总之,问题顺利的解决,虽然解决的历程比较艰辛。
出现问题的原因很复杂,有我的不够细心,也有硬件工程师的不够细心,还有各种的机缘巧合。没办法,这就是研发!!!

原文地址:https://www.cnblogs.com/gaotaozhaolei/p/1703606.html