打印

DS1302后备电池断电后就不能初始化了吗?

[复制链接]
11111|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
5号工作室|  楼主 | 2010-10-11 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚做了个时钟,现在发现有个问题,在主电源断电后,如果有后备电池芯片就会继续行走,但是我把后备电池也拔了后再开机的话,时间就不能进行初始化了,这样又要重新下载有初始化时间的程序了,这样就很麻烦了,如果送给人的话后备电池没电了就用不了了,请问各位大哥,如何解决才能使没有后备电池的芯片不用再次下载也能初始化时间呢?有劳各位大哥帮助。。。。。

相关帖子

沙发
chunyang| | 2010-10-11 22:38 | 只看该作者
后备电池断电了就和新装首次使用没什么差别了,首次使用该怎么操作就只能怎么操作,这个完全可以通过程序来识别,不能使用只能说明你的程序有问题。

使用特权

评论回复
板凳
5号工作室|  楼主 | 2010-10-11 22:52 | 只看该作者
2# chunyang 你好,我说的是主电源和后备电源都断电的时候,当再次上电时由于程序中没有初始化时间的程序了,所以一上电就不再显示时间了,这时就要再下载一次有初始时间函数的程序后还要下载一次没有初始时间的程序后才能继续行走,总共两次呢,有没有方法能省去这些复杂步骤呢?

使用特权

评论回复
地板
Z赤心木QW| | 2010-10-12 00:55 | 只看该作者
一般电池都可以用很久的,这个问题我也遇到过,没解决……那次只是做课程设计……

使用特权

评论回复
5
cubasa| | 2010-10-12 09:20 | 只看该作者
用超级电容吧,两个月不开机时间照走。如果断电时间短,用普通的铝电解电容就OK,至少三五天没有问题。比用电池好,永远不用换,而且比可充电的要便宜。

使用特权

评论回复
6
zhaoyu2005| | 2010-10-12 10:20 | 只看该作者
那就是你的思路问题,为什么不加个时间初始化函数(是否运行,根据1302的状态决定)或者时间调整函数。
没事给自己挖坑,不知道咋想的

使用特权

评论回复
7
chunyang| | 2010-10-12 11:56 | 只看该作者
我在2楼不是已经说的很清楚了么?要么必需带上后备电源,电池、超级电容什么的都行,要么你的程序必需有初始化代码,判断时钟是否是首次使用以决定是否运行即可,时钟芯片完全失电就是首次使用的状态。

使用特权

评论回复
8
wangyy608| | 2010-10-12 11:56 | 只看该作者
初始化的程序要保留,但是要不要进行初始化程序根据条件判断

使用特权

评论回复
9
5号工作室|  楼主 | 2010-10-12 13:17 | 只看该作者
6# zhaoyu2005 请问大哥具体如何编程呢?在初始化时钟芯片函数中加上一个判断是否断电的语句????

使用特权

评论回复
10
LONGXIA| | 2010-10-12 17:10 | 只看该作者
在DS1302的RAM中写一个数据,开机的时候再读它,根据这个来判断是否执行初始化程序

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
5号工作室 + 1
11
5号工作室|  楼主 | 2010-10-12 20:31 | 只看该作者
11# LONGXIA
你好!我还是菜鸟呢,请问如何在RAM中写标志呢?

使用特权

评论回复
12
天雨粟| | 2010-10-12 21:10 | 只看该作者
彻底断电后重新上电时
时钟可能正常走时
也可能不走并显示乱码
何以解决?这是楼主的问题。

解决之道,
在你的程序里加一个可选的时钟设置功能
需要时启用这个功能
  设定好时间后
  启动走时,并进行写保护

做时钟,时间设置功能是基本要求
就算你不拔电池,一旦走时出现误差也要重新设置时间进行修正啊!

使用特权

评论回复
13
wangyy608| | 2010-10-12 22:01 | 只看该作者
仔细看DS1302的资料 写RAM与设置时间是一样的

使用特权

评论回复
14
zhaoyu2005| | 2010-10-13 10:51 | 只看该作者
回楼主
1302,上电数据应该是默认数据(就是芯片开始的年月日以及控制字,这个好像datasheet有说明),判断读出的是不是默认数据,是的话进行时间、日期初始化或者提示调整,不是的话就正常执行。
另外好像1302上电默认是时钟停止的
声明:我没玩过1302,是简单看了1302的datasheet后做出的回复,如果有错,请见谅,然后拍砖

使用特权

评论回复
15
apan| | 2010-10-13 12:22 | 只看该作者
你的时钟是需要调整的,所以按键是需要的,通过多按键组合重新初始化不就行了。

使用特权

评论回复
16
5号工作室|  楼主 | 2010-10-13 13:55 | 只看该作者
16# apan 刚刚写了个程序通过同时按下加减键来启动初始化函数了。
但是如果直接可以读ram标志的话就更好了,这样就不用任何操作就自动判断是否初始化了,不知道怎样写。

使用特权

评论回复
17
chunyang| | 2010-10-13 14:20 | 只看该作者
1302初始化后向其RAM中写入标志数据,具体方法见器件手册,每次上电后检测是否存在该数据,不存在则重新初始化。

使用特权

评论回复
18
wangyy608| | 2010-10-13 17:55 | 只看该作者
仔细看DS1302的资料 写RAM与设置时间是一样的
wangyy608 发表于 2010-10-12 22:01

地址不同而已

使用特权

评论回复
19
5号工作室|  楼主 | 2010-10-14 14:12 | 只看该作者
19# wangyy608 按照你的指示,我写了一个程序如下:
if(read_1302(0xc1)!=0xaa)//是否停振

{

write_1302(0x8e,0x00);//允许写,禁止写保护

/*以下部分为初始化时间12:00,如果停振了就要初始化时间*/

write_1302(0x80,0x00);//写入秒寄存器地址80H

write_1302(0x82,0x00);//写入分寄存器地址82H

write_1302(0x84,0x12);//写入时寄存器地址84H

write_1302(0xc0,0xaa);//写入初始化标志ram

//之后要打开保护,防止修改

write_1302(0x8e,0x80);//打开保护

}
把0xaa写入ram中用作标志,但是下载后不管是否有后备电池,一上电就是12:00,重新上电不保存时间

使用特权

评论回复
20
5号工作室|  楼主 | 2010-10-14 19:01 | 只看该作者
有请高人帮我查看一下哪里出错了。。。。

使用特权

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

本版积分规则

1

主题

144

帖子

1

粉丝