极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 45841|回复: 9

DS1302模块整合贴

[复制链接]
发表于 2013-6-2 21:58:34 | 显示全部楼层 |阅读模式
本帖最后由 zjyylj 于 2013-6-3 10:39 编辑

新入了个DS1302实时时钟模块。搜索了论坛里的相关资源,帖子各有千秋。下面我将内容整合一下,并作出自己的一些修改和补充。

**************************************概述****************************************
DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW
DS1302 是由DS1202 改进而来增加了以下的特性:双电源管脚用于主电源和备份电源供应,Vcc1 为可编程涓流充电电源,附加七个字节存储器。它广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等产品领域下面。将主要的性能指标作一综合:
★ 实时时钟具有能计算2100 年之前的秒、分、时、日、星期、月、年的能力,还有闰年调整的能力
★ 31 8 位暂存数据存储RAM
★ 串行 I/O 口方式使得管脚数量最少
★ 宽范围工作电压2.0 5.5V
★ 工作电流 2.0V 时,小于300nA
★ 读/写时钟或RAM 数据时有两种传送方式单字节传送和多字节传送字符组方式
★ 8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配
★ 简单 3 线接口
★ 与 TTL 兼容Vcc=5V
★ 可选工业级温度范围-40 +85
★ 双电源管用于主电源和备份电源供应
以上是DS1302的一些全面的预览,以下为DS1302管脚图:

我们看到:
1、 VCC为主电源接5V,C1为滤波电容。C11和C13为芯片内置电容。
2、 X1、X2外接32.768K的晶振
3、 5、6、7脚分别与控制器相联,注意外部4.7K上拉电阻
4、 备用电源脚,注意是3.3V,DS1302要求备用电源电压稍微低于主用电源
5.    RST/CE: RST是CE的旧称,在有些芯片上可能会看到。

***********************************设置与操作**************************************
操作DS1302的大致过程,就是将各种数据写入DS1302的寄存器,以设置它当前的时间已经格式。然后使DS1302开始运作,DS1302时钟会按照设置情况运转,再用单片机将其寄存器内的数据读出。再用液晶显示,就是我们常说的简易电子钟。
所以总的来说DS1302的操作分2步(显示部分属于液晶显示的内容,不属于DS1302本身的内容)但是在讲述操作时序之前,我们要先看看寄存器:

上图是DS1302的寄存器样式,我们看到:
1、 第7位永远都是1
2、 第6位,1表示RAM,寻址内部存储器地址;0表示CK,寻址内部寄存器;
第5到第1位,为RAM或者寄存器的地址;最低位,高电平表示RD:即下一步操作将要“读”;低电平表示W:即下一步操作将要“写”。(与AT24C02寄存器类似,这点要理解好)。下面是DS1302的内部寄存器和RAM:

上图左边为寄存器和RAM的地址,右边为具体内容。各个寄存器的最高位都是1,最低位都是“RD/W”,比如要读秒寄存器则命令为1000 0101,反之写为1000 0100,要注意其含义。(图片不是很清楚,看不清楚的朋友用软件放大)我们一个一个看:
SEC:秒寄存器,注意具体右边内容:低四位为SEC,高的次三位为10SEC。最高位CH为DS1302的运行标志,当CH=0时,DS1302内部时钟运行,反之CH=1时停止;
MIN:分寄存器;
HR:时寄存器,最高位为12/24小时的格式选择位,该位为1时表示12小时格式。当设置为12小时显示格式时,第5位的高电平表示下午(PM);而当设置为24小时格式时,第5位位具体的时间数据。
DATE:日寄存器;
MONTH:月寄存器;
DAY:周寄存器,注意一周只有7天,所以该寄存器只有低三位有效;
YEAR:年寄存器;
CONTROL:写保护寄存器,当该寄存器最高位WP为1时,DS1302只读不写,所以要在往DS1302写数据之前确保WP为0;
TRICKLE CHARGE REGISTER:涓细电流充电设置寄存器,我们知道,当DS1302掉电时,可以马上调用外部电源保护时间数据。该寄存器就是配置备用电源的充电选项的。其中高四位(4个TCS)只有在1010的情况下才能使用充电选项;低四位的情况,与DS1302内部电路有关,有点意思,下文详细讲述。
CLOCK BURST:批量读写操作设置寄存器,设置该寄存器后,可以对DS1302的各个寄存器进行连续写入。DS1302的另外一种读写方式。笔者还没用过,感兴趣的朋友可以尝试。
最后还有一点,前文说过,DS1302有31个字节的存储空间,但是大家要看到的是,这31个存储空间,最后一个是RAM BURST的寄存器,设置该寄存器可以达到对RAM连续读写的作用。所以DS1302的可用存储空间实际上为30个字节。

************************************涓流充电**************************************
TCS意为涓流充电选择。DS1302上电时,TCS默认为禁用。为了防止意外产生,只当TCS位(四位)为1010时涓细电流充电功能才会生效”所以刚才提到“其中高四位(4个TCS)只有在1010的情况下才能使用充电选项。DS和RS位分别表示串在主电源和备用电源之间的二极管个数和电阻阻值,具体定义如下。
DS位的值
01 一个二极管
10 两个二极管
00/10 涓流充电被禁止,与TCS无关
RS位的值
01 接入2kΩ的电阻
10 接入4kΩ的电阻
11 接入8kΩ的电阻
00 涓流充电被禁止,与TCS无关
下图可以很清楚地示意

二极管和电阻的选择由用户根据所需的为电池或超级电容充电的最大电流决定。最大电流可以通过如下面这个例子所示的进行计算。假定为系统供电的5V电源连接到VCC2,超级电容连接到VCC1。假定涓流充电已启用,在VCC1和VCC2之间串联了一个二极管和电阻R1。最大电流可以由下式计算:
IMAX = (5.0V – 二级管压降) / R1 ≈ (5.0V – 0.7V) / 2kΩ ≈ 2.2mA
随着超级电容充电,VCC2和VCC1之间的压差减小,充电电流减弱。

***********************************读写时序*************************************

上图就是DS1302的三个时序:复位时序,单字节写时序,单字节读时序;
RST:复位时序,即在RST引脚产生一个正脉冲,在整个读写器件,RST要保持高电平,一次字节读写完毕之后,要注意把RST返回低电平准备下次读写周期;
SINGLE BYTE READ:单字节读,注意读之前还是要先对寄存器写命令,从最低位开始写;大家细心看可以看到,写数据是在SCLK的上升沿实现,而读数据在SCLK的下降沿实现,所以,在单字节读时序中,写命令的第八个上升沿结束后紧接着的第八个下降沿就将要读寄存器的第一位数据读到数据线上了!这个就是DS1302操作中最特别的地方。当然读出来的数据也是最低位开始。

注意:CR开头的纽扣电池不可充电,ML(3V)和LIR(3.6V)开头的可充电,使用前请看清楚!若对不可充电电池开启充电,电池会发热,后果不堪设想!

*************************************库的使用**************************************
Ansifa提供的库,1.0.X可用
  
这个库没有提供设置涓流充电的接口函数
于是我对上面的库作了修改,加入了设置涓流充电的功能。

在DS1302类中新加公有函数void TCS(bool value)和void TCS_set(int dio, int res);
void TCS(bool value)                 value:true为开启涓流充电,电流设置为最小值; false为关闭涓流充电
void TCS_set(int dio, int res)     此函数用于在涓流充电开启情况下,更改电流值
                                                 dio:要串入VCC1和VCC2的二极管数(1或2);
                                                 res:要串入VCC1和VCC2的电阻值(千欧数)(2或4或8)

例如,要在Ansifa的例程中开启涓流充电,只需在setup()中加入rtc.TCS(true);
若要更改电流大小比如串入1个二极管和4千欧电阻,则再添加rtc.TCS_set(1 , 4);
setup()就会变成这样
  1. void setup()
  2. {
  3. Serial.begin(9600);
  4. rtc.write_protect(false);
  5. rtc.halt(false);
  6. rtc.TCS(true);
  7. rtc.TCS_set(1 , 4);
  8. }
复制代码


***********************************购买模块/自己组装********************************
自己组装,可以做出一个抗干扰较强的DS1302模块,要注意的是
1. 在VCC和电源间添加滤波电容;
2. 给晶振添加辅助电容,具体请参考shenhaiyou的时钟芯片DS1302可靠起振的方法【转载】
3. 若以软件设置方式不能解决电池发烫的问题,可以考虑在电池上串联一个二极管。
4. 5,6,7脚请接4.7K上拉电阻。
5. 引线尽量缩短。
6. 请选用具有6pF负载电容的32768Hz晶振。

由于淘宝所购的DS1302模块质量参差不齐,抗干扰能力较差,若在较恶劣的环境使用(电磁干扰强),
购买模块前需谨慎考虑。最好找店家索取电路图,看是否作了抗干扰的配置。

*************************************注意事项**************************************
程序注意事项:
★要记得在操作DS1302之前关闭写保护;为了抗干扰,最好在操作之后打开写保护。
★注意用延时来降低单片机的速度以配合器件时序。
★读取字节之前,将IO设置为输入口,读取完之后,要将其改回输出口;
★在写程序的时候,建议实现开辟数组(内存空间)来集中放置DS1302的一系列数据,方便以后扩展键盘输入;
★若端口富裕,推荐使用稳定性较好的DS12C887。
★若出现停振现象,请确保电池接触良好。再不行,请参考Ansifa的DS1302停振的及时处理方法【转载】
★其他问题或是DS1307可参考Randy的arduino学习笔记38 - Arduino + DS1307 RTC时钟模块与经典总结

*************************************致谢**************************************
感谢Ansifa、shenhaiyu、飞翔的红猪、Randy的辛勤劳动以及无私奉献。

本人还是Arduino的初学者,若发现帖子有问题,请大家不吝赐教,我会尽快改正。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-6-3 10:16:01 | 显示全部楼层
如果能够再加上 此模块 可应用的实例 资料将会更完善
回复 支持 反对

使用道具 举报

发表于 2013-10-9 16:34:22 | 显示全部楼层
{:soso_e179:} 涓流充电,我没想到这个可以配置
回复 支持 反对

使用道具 举报

发表于 2014-5-16 16:24:54 | 显示全部楼层
问个小白问题,如果此模块纽扣电池一直有电,但arduino断电。ds1302上面的信息能否保留?
回复 支持 反对

使用道具 举报

发表于 2014-6-3 22:41:18 | 显示全部楼层
svw 发表于 2014-5-16 16:24
问个小白问题,如果此模块纽扣电池一直有电,但arduino断电。ds1302上面的信息能否保留?

信息会一直保留不丢失,最近一段时间也在研究ds3231和ds1302这个模块。
回复 支持 反对

使用道具 举报

发表于 2015-6-7 15:26:23 | 显示全部楼层
很有用 非常感谢!
回复 支持 反对

使用道具 举报

发表于 2015-12-25 13:40:02 | 显示全部楼层
楼主辛苦了
回复 支持 反对

使用道具 举报

发表于 2016-5-19 12:00:03 | 显示全部楼层
楼主辛苦了
回复 支持 反对

使用道具 举报

发表于 2017-12-19 17:23:44 | 显示全部楼层
谢谢分享^^^^^^^^^^^^^^^^^^^^
回复 支持 反对

使用道具 举报

发表于 2017-12-27 14:56:19 | 显示全部楼层
感谢分享,终于看到了点关于DS1302详细的东西
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 16:16 , Processed in 0.051271 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表