xia_yangchun 发表于 2012-6-25 16:45:01

关于更换DS1302芯片后总是初始化的问题

我有一个电路板,使用到DS1302S芯片,我想更换新的芯片,更换为DS1302Z的芯片,这两个芯片应该是一样的,可是换上以后发现每次断电开机都会时间变为初始时间,只要电源供电,时钟就能一直工作,断电后,在开机,就变为初始时间了,
但是换上以前的DS1302芯片后,我设定时间,断电重启后,时钟可以继续保持原有的时间计时,断电在开机时间也不会变,有知道的朋友帮帮忙啊!

mook_dj 发表于 2012-6-25 18:05:45

一般很多人编程的时候都会用到这个方法,在时间设定时会在DS1302内部的RAM写一个记号,只要DS1302的电源和它的后备电源都不同时断电,这个记号一直都存在,如果这两个电源都同时没电了,那这个记号就没有了,当然这时DS1302的时间也因没电而掉失.
所以程序编写时会这样写.每次DS1302上电开机时,都先检查一下这个记号,如果记号存在,那就不对DS1302进行初次化;如果记号没了,就会对DS1302进行初次化.

你说你出现的现象,我猜原因是在设置时间时那个记号没有成功写进DS1302的内部RAM,所以你每次上电开机,程序检查不到那个记号就会对DS1302进行初次化.

为什么那个记号没有被成功写进DS1302内部的RAM呢.我猜可能DS1302真的跟DS1302Z是有点区别的,最好自己上网查证一下.

PS:以上只是个人猜想,不一定正确,不过确实很多人都是用这样的方法避免每一次上电都对DS1302进行初次化.

BXAK 发表于 2012-6-25 20:05:03

1、电路图要正确


2、初始化1302时要注意:
如果时钟已经在走动,就不要再写入默认时间;
如果时钟没启动,才写入设定的默认时间。

比如
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函数:初始化
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void DS1302_Init(void)      
{                              //秒,分,时,日,月,星期,年
   uint8c TIME_INIT[]={ 0, 0, 0, 18, 5,5, 12 };
                           
   CE_1302= 0;
   CLK_1302 = 0;
   DS1302_W( 0x8E, 0x00 );          //关写保护
   DS1302_W( 0x90, 0xA7 );          //充电(1个二极管 + 8K电阻)
   DS1302_W( 0x8E, 0x80 );          //开写保护
   if( DS1302_R(0x81) & 0x80 )      //查询1302时钟是否已经启动:如果时钟停止走动,则启动时钟 + 初始化时间;否则跳过。
   {
          DS1302_SetTime( TIME_INIT );   //时间初始化2012年5月18日星期五 00:00:00
   }
}

zyyn123 发表于 2012-6-25 20:53:52

正如三楼所讲,看看你的程序里有没有对1302时钟是否启动的检测。

mook_dj 发表于 2012-6-25 21:11:30

请问3楼4楼,那为什么楼主旧的DS1302在断电后,重新上电时间能接着走,换上DS1302Z后,这个就不灵了呢?

xia_yangchun 发表于 2012-7-2 15:46:45

BXAK 发表于 2012-6-25 20:05 static/image/common/back.gif
1、电路图要正确




没有源程序,只是修板子的,想替换ds1302始终芯片

yihui184 发表于 2012-11-8 00:22:10

BXAK 发表于 2012-6-25 20:05 static/image/common/back.gif
1、电路图要正确




BXAK大哥,你好,又看到你的留言了,我最近遇到一个DS1302的问题,我也用到纽扣电池了,我现在的问题是,读取DS1302的各个时间值,大多数情况下都正确,但是偶尔会读出错的时间值,这是什么问题呢?

yihui184 发表于 2012-11-8 00:22:56

BXAK 发表于 2012-6-25 20:05 static/image/common/back.gif
1、电路图要正确




电路图没有上拉电阻会有影响么?

BXAK 发表于 2012-11-8 12:31:04

yihui184 发表于 2012-11-8 00:22 static/image/common/back.gif
电路图没有上拉电阻会有影响么?

最好加10K左右的上拉,
我做的万年历 1302与单片机走线很近就省掉上拉,结果很容易读错,后来加了上拉电阻就没问题了

yihui184 发表于 2012-11-8 13:32:14

BXAK 发表于 2012-11-8 12:31 static/image/common/back.gif
最好加10K左右的上拉,
我做的万年历 1302与单片机走线很近就省掉上拉,结果很容易读错,后来加了上拉电 ...

BXAK大哥,我加了上拉电阻还是会偶尔读出错误的数据,错误的数据每次都显示2018年,好奇怪哇,我设置了纽扣电池寄存器,我每设置一次,再从新读一次数据,
差不多到了10次左右,数据就会出错一次,读出的数据错误年份为2018年,而且月和时都是17和35.就这三个值每次都同样,不知道这是什么问题?

彼岸花开 发表于 2012-11-8 13:41:57

二三楼都是正确的,再问下,我有时遇到系统里的蜂鸣器叫时,读出的时间是错误的,此时把DS1302的地线断开就正常了。求解释。
我是这么做的:
/*****************************************************
        函数功能:判断秒寄存器的最高位是否为1,
        若为1 ,说明DS1302断电,晶振已停止工作,则需进行初始化
        若为0 ,说明DS1302有电,晶振还在工作,则不进行初始化
        ***************************************************/
        if(ReadSet1302(0x81)>>7)
                Init_DS1302();
页: [1]
查看完整版本: 关于更换DS1302芯片后总是初始化的问题