DS1302

2024-06-26

DS1302(精选3篇)

DS1302 篇1

大家好, 通过前一期的学习, 我们已经对ICD2仿真烧写器和增强型PIC实验板的使用方法及学习方式有所了解与熟悉, 学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键、数码管、RS232串口、步进电机、温度传感器、I2C总线、SPI总线等资源, 体会到了学习板的易用性与易学性, 这一期我们将介绍市面上常见的时钟芯片DS1302的应用。

一、DS1302时钟芯片简介

DS1302是DALLAS公司推出的涓流充电时钟芯片, 内含一个实时时钟/日历和31字节静态RAM, 可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息, 每个月的天数和闰年的天数可自动调整, 时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信, 仅需三根I/O线:复位 (RST) 、I/O数据线、串行时钟 (SCLK) 。时钟/RAM的读/写数据以一字节或多达31字节的字符组方式通信。DS1302工作时功耗很低, 保持数据和时钟信息时, 功耗小于1m W。

1. DS1302的内部结构

DS1302的外部引脚功能说明如图1所示。

DS1302的内部结构如图2所示, 主要组成部分为:移位寄存器、控制逻辑、振荡器、实时时钟以及RAM。虽然数据分成两种, 但是对单片机的程序而言, 其实是一样的, 就是对特定的地址进行读写操作。

DS1302含充电电路, 可以对作为后备电源的可充电电池充电, 并可选择充电使能和串入的二极管数目, 以调节电池充电电压。不过对我们目前而言, 最需要熟悉的是和时钟相关部分的功能, 对于其它参数请参阅数据手册。

2. DS1302的工作原理

DS1302工作时为了对任何数据传送进行初始化, 需要将复位脚 (RST) 置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟 (SCLK) 的上升沿串行输入, 前8位指定访问地址, 命令字装入移位寄存器后, 在之后的时钟周期, 读操作时输出数据, 写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8 (8位地址+8位数据) , 在多字节方式下为8加最多可达248的数据。

3. DS1302的寄存器和控制命令

对DS1302的操作就是对其内部寄存器的操作, DS1302内部共有12个寄存器, 其中有7个寄存器与日历、时钟相关, 存放的数据位为BCD码形式。此外, DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。日历、时间寄存器及控制字如表1所示。

最后一位RD/W为“0”时表示进行写操作, 为“1”时表示读操作。

DS1302内部寄存器列表如表2所示。

DS1302内部的RAM分为两类, 一类是单个RAM单元, 共31个, 每个单元为一个8位的字节, 其命令控制字为COH~FDH, 其中奇数为读操作, 偶数为写操作;再一类为突发方式下的RAM, 此方式下可一次性读写所有的RAM的31个字节, 命令控制字为FEH (写) 、FFH (读) 。

我们现在已经知道了控制寄存器和RAM的逻辑地址, 接着就需要知道如何通过外部接口来访问这些资源。单片机是通过简单的同步串行通讯与DS1302通讯的, 每次通讯都必须由单片机发起, 无论是读还是写操作, 单片机都必须先向DS1302写入一个命令帧, 最高位BIT7固定为1, BIT6决定操作是针对RAM还是时钟寄存器, 接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址, 最后一个BIT表示这次操作是读操作抑或是写操作。

物理上, DS1302的通讯接口由3个口线组成, 即RST, SCLK, I/O。其中RST从低电平变成高电平启动一次数据传输过程, SCLK是时钟线, I/O是数据线。具体的读写时序参考图3, 但是请注意, 无论是哪种同步通讯类型的串行接口, 都是对时钟信号敏感的, 而且一般数据写入有效是在上升沿, 读出有效是在下降沿 (DS1302正是如此的, 但是在芯片手册里没有明确说明) , 如果不是特别确定, 则把程序设计成这样:平时SCLK保持低电平, 在时钟变动前设置数据, 在时钟变动后读取数据, 即数据操作总是在SCLK保持为低电平的时候, 相邻的操作之间间隔有一个上升沿和一个下降沿。

通过前文的原理介绍, 我们已经对DS1302时钟芯片的特性以及工作原理有了大致地了解, 但当我们拿到一个时钟器件时要正确地应用它还是一时不知如何下手, 比如我们要做一个简单的时间显示, 需要怎么办呢?首先, 时钟芯片与单片机的连接非常简单, 一般来说, 我们只需要将IIC器件的复位“RST”、数据“I/O”、时钟“SCLK”端与单片机的I/O口相连, 就可以进行时间、日期数据的写入或读取了。现在, 我们来一起看一个使用DS1302做时间显示的例子, 通过一个实例, 相信会给大家带来一个感性的认识。

首先, 我们来看一下增强型PIC实验板上DS1302器件的接口电路, 因为我们需要将软件和硬件相结合进行考虑如何来编程, 完成该实验的硬件原理图如图4所示, U2为实验板上DS1302芯片, “I/O”与单片机的RB5口相连, “SCLK”与单片机RB6相连, “RST”与单片机RB7相连, 七段数码管D5、D7、D8组成了显示单元, 字形码的数据通过RC口送入, 各数码管的显示片选信号分别不同的RA口进行控制。

对于单机软件的编程, 我们使用MPLab IDE软件来进行C语言编程, 它是我们的编程环境, 同时我们可以通过使用ICD2仿真烧写器和增强型PIC实验板连接进行程序的仿真调试和烧写步骤, 具体的操作步骤, 我们已经在前几期做了详细的说明和介绍, 在此就不再重复说明, 读者朋友可以参阅以前的文章或直接登陆我们的网站查看资料。现在我们可以输入程序代码进行调试了, 我们在MPLab IDE软件中新建工程, 加入源程序代码, 同时进行芯片型号的选择和配置位的设置, 我们实验所用的芯片型号为PIC16F877A。编写的程序代码如下, 其中程序流程图如图5所示, 实际运行效果如图6所示。

二、软件代码

看到这里, 相信你现在已经可以完成一些简单的电子钟实验, DS1302的原理与使用我们讲到这里。增强型PIC实验板系统资源丰富, 可做实验有:6位LED数码管、8路LED、直控键盘、蜂鸣器喇叭、继电器试验、I2C总线接口、SPI总线接口、160X液晶、128X64液晶、红外接收头接口、步进电机驱动接口、AD模/数转换接口、串行时钟芯片DS1302、温度传感器DS18B20接口、RS232串口通讯、外扩展接口以便外接更多的实验资源, 有兴趣的朋友也可以登陆我们的网站进行资料浏览与下载。

DS1302 篇2

1 DS1302 RAM地址与数据产生时间的关系

在许多场合中,需要保存的数据与时间之间有一定的对应关系。例如,在温室中,每隔半小时采集并保存一次CO2浓度数据,这时,如果确定了第一次保存CO2浓度的时间为8∶00,以后保存CO2浓度的时间也就确定为8∶30,9∶00,9∶30…。如果第一次保存CO2浓度的RAM地址是0x02,则第二次、第三次保存CO2浓度的RAM地址为0x03,0x04…若将RAM地址编号用x表示,将此地址中数据对应的时间化为分钟(从零点算起,当前分钟=当前小时×60+当前小时内分钟)并用y表示,则x与y之间的关系可表示为:

undefined

其中:FirstHour:首次记录产生的小时数;FirstMinute:首次记录产生的分钟数;RecMode:两次记录之间的时间间隔,单位分钟。

在保存数据时,用下面公式确定某时间y产生的数据对应的RAM地址x:

undefined

如果要将某地址中数据对应的记录时间化为“小时∶分钟”表示方法,小时用H表示,分钟为M表示,则:

undefined

其中,符号“/”表示整除;符号“%”表示取余数,相当于C语言中的取模运算。

根据上述讨论可知,如果要完整的推算出每项数据对应的时间信息,则需要在DS1302的RAM中存储的内容为:第一条数据产生的时间;第一条记录的存储地址;不同数据产生的时间间隔。

2 DS1302中的数据存放格式

2.1 控制信息存放格式

为了使系统在恢复供电后可继续工作,必须将有关控制参数保存在DS1302的内部RAM中。为确定是否记录数据,除了保存前面讨论的信息以外,还需要保存是否记录标志。为提高RAM利用效率,将“是否记录(IsRec)”、“记录模式(RecMode)”和“首项记录产生小时(FirstHour)”记录在同一个8位控制字WORD1中,并将此控制字保存在DS1302内部RAM的第一个字节(其地址为0x00)中,将首项记录的“产生分钟(FirstMinute)”保存在第二个字节中(其地址为0x01)。第一个字节各位的含义如图1所示。

IsRec取值含义;

0:不记录数据;

1:记录数据;

RecMode含义;

00:每10 min记录一次数据;

01:每20 min记录一次数据;

10:每30 min记录一次数据;

11:每60 min记录一次数据;

FirstHour含义:

首项数据产生时间的小时数;

在确定各个参数的取值后,可用如下运算得到控制字WORD1:

RecMode=RecMode<<1;

FirstHour=FirstHour<<3;

WORD1=FirstHour|RecMode|IsRec;

2.2 CO2浓度数据存放格式

根据农学家的研究,CO2浓度约1 000 ppm可显著提高作物产量,在各种温室控制中,CO2浓度的变动范围一般不超过0~5 000 ppm,而且作物对低于20 ppm的CO2浓度变化是不敏感的[10]。因此,在确保CO2浓度记录数据的准确性前提下,为了节省RAM空间,将CO2浓度变化自0~5 000 ppm分为250个区间,每个区间中的CO2浓度值一律以本数据所在区间号为代表进行记录。实测CO2浓度值ρ与记录值R之间的关系为:

undefined

其中“/”表示整除。

在读取CO2浓度时,实际读取值为CO2实际浓度值所在的区间号,为了得到CO2浓度值ρ,应用以下公式:

undefined

计算出的CO2浓度值ρ′与其实际值ρ之间的最大误差为10 ppm。实际测量CO2浓度值与其记录值、读取值之间的关系见表1。

3 数据保存与显示

3.1 数据保存

在启动数据保存功能时,需要将DS1302内部RAM中所有内容清空,然后将控制信息IsRec和RecMode写入WORD1并存入地址为0x00的RAM。第一次记录数据时,将FirstHour信息写入WORD1并存放至0x00 RAM,将FirstMinute存入0x01 RAM。

程序不断读取和检测当前时间,如果当前时间与上次记录时间间隔为程序控制参数RecMode规定的时间,就按图2所示流程保存CO2浓度数据。

3.2 数据读取与显示

将CO2浓度保存到DS1302中后,任意时间可以读取显示。读取与显示流程如图3所示。为使用户方便地了解当前时刻CO2浓度值及其记录情况,在LCD显示屏上随时更新当前CO2浓度及第一次CO2浓度记录时间及已经记录的CO2浓度值个数。CO2增施控制器LCD屏显示界面如图4所示。查询显示CO2浓度的界面如图5所示。

图4显示的信息为:当前CO2浓度是883 ppm;当前时间是8∶01;当前已记录了1个CO2浓度值;首次记录CO2浓度的时间是8∶01。图5显示的信息为:8∶01时CO2浓度是890 ppm。可见,数据保存到DS1302中后, 产生了7 ppm的误差。当然,这个误差是微不足道的。

4 结 语

本方法利用DS1302的2个字节存放控制信息,剩余的29个字节可存储29条CO2浓度数据。若半小时存储1个CO2浓度值,共可存储14.5 h的数据,即可以自动存储整个白天或夜晚的CO2浓度值。对程序控制参数和CO2浓度数据进行了编码转换,提高了RAM利用效率。控制参数保存在DS1302中,即使断电这些参数也不会丢失,恢复供电后程序继续运行。如果某时刻因断电而不能记录数据,在查询CO2浓度时,此时刻的数据将显示为0,提示用户为无效数据,但恢复供电后的数据仍然有效。 该方法可推广到其他按一定时间间隔记录小容量数据的场合。

参考文献

[1]赵海兰,朱剑,赵祥伟.DS1302实时显示时间的原理与应用[J].电子技术,2004(1):43-46.

[2]李文玉.例谈实时时钟/日历芯片DS1302的具体应用[J].电子制作,2007(9):43-45.

[3]欧阳乔.时钟芯片DS1302的原理及其Proteus仿真设计[J].科技信息,2006(6):19-20.

[4]陈冬,彭德迟,胡荣强.DS1302实时钟在嵌入式系统中的应用[J].黄石理工学院学报,2006(3):83-86.

[5]黄明强.DS1302在单片机系统中的应用[J].保定师范专科学校学报,2004(2):30-33.

[6]能昌会.时钟芯片DS1302在单片机系统中的应用[J].电子制作,2007(11):39-40.

[7]姚得法,张洪林.串行时钟芯片DS1302的原理与使用[J].信息技术与信息化,2006(1):92-94.

[8]高培先,张相.实时时钟芯片DS1302在某测试记录仪设计中的应用[J].电子技术,2003(7):43-46.

[9]朱昌,方勇,朱保文.心电图的采集与存储[J].仪器仪表学报,2004,25(4):360-361.

DS1302 篇3

定时开关[1]在人们生活中扮演着重要的角色,给人们的生活带来了很大的方便。早在我国的古代采用滴水方式计时,当水滴到一定量时就引发机关报时。随着电子信息的快速发展,如今的电视机,电风扇等电器产品都附带了定时器,但是电子产品附带的定时器只适用于该用电器,并不能扩展使用到其他用电器上。

本文所介绍的定时开关目的在于控制主电源,从而适用于能瞬间断电的一切电子产品,不仅能在规定的时间准时断开同时能在设定的时间内准时开启,给人们日常生活带来了极大的方便,如能通过应用此定时开关在上班期间定时煮饭,手机充电在适当时间将电源断开。

该定时器具备以下几个特点:采用C语言[2]编写程序,与汇编语[3]言相比便于修改和增减功能;所采用的芯片STC89C52单片机、1602液晶显示器,DS1302时钟芯片功耗低、可靠性高;与机械定时器相比不仅消除了噪声,更加准确,且使用寿命要长;采用Protues仿真,方便直观。

1 系统设计方案

以STC89C52[4]单片机为核心,通过DS1302时钟芯片进行时间控制,使用1×4键盘作为数据输入方式,驱动1602显示器提示程序运行过程和开锁的步骤。系统结构如图1所示。

2 系统设计

2.1 系统硬件组成

使用的元器件有:核心芯片STC89C52、时钟芯DS1302、液晶显示1602、继电器、蜂鸣器、1×4键盘[5]、发光二极管和三极管。

2.2 系统软件设计

本文采用单片机的C语言编写程序对整个系统的硬件进行管控,实现了对DS1302的控制,1602的显示,时间管控。其中时间管控包括:系统时间以及开启与关闭时间的设定,系统时间与开启或关闭时间相同时继电器、蜂鸣器和指示灯工作状态的管控。系统程序流程如图2所示。

2.2.1 DS1302的控制[6]

DS1302的RST,SCLK和I/O分别与单片机的P2.0,P2.1和P2.2相连。单片机与DS1302进行数据交换时,首先要将RST变为高电位,也就是单片机P2.0必须为逻辑1。在RST保持为高电位时,SCLK时钟由低电位变为高电位的上升沿时,数据被写入DS1302中,数据从最低位通过I/O开始写入。在RST保持高电位,SCLK时钟由高电位变为低电位的下降沿时,从DS1302读取数据,数据也是从DS1302的最低位通过I/O读取。

DS1302读取数据子程序

2.2.2 1602的显示[7]

通过单片机指令控制1602光标是否闪烁,是否清除原来数据以及显示的具体位置,并不停地对数据显示进行刷新,从而显示了准确的时间,并为系统提供了智能的人机对话模式。

2.2.3 时间的管控

当系统启动时,STC89C52单片机立即从DS1302时钟芯片获取时间,并通过键盘和1602显示器配合完成对当系统时间、启动时间和关闭时间的设定。当系统时间与启动时间相同,从而控制继电器闭合,直到系统时间与关闭时间相同时断开。

3 系统仿真

本文采用具有强大的EDA仿真功能的Protues[8]软件进行仿真,仿真图如图3所示。

3.1 系统介绍

系统仿真图中的STC89C52为真个系统的控制核心,将其编写的程序以二进制的形式烧入后,它将按照编写的指令运行。通过P2.0,P2.1和P2.2与右上方的DS1302时钟芯片的联系在一起,从而控制DS1302的执行方式。在STC89C52的控制下,1602液晶显示器能显示当前时间,提示用户修改时间;左下方的继电器能在设定的开启时间闭合,在设定的关闭时间断开;中间的蓝色信号灯在继电器闭合是点亮;四个独立键盘在1602液晶显示器配合下完成系统时间、开启时间和关闭时间的设置;右下方整个模块为系统提示模块,当系统时间与设定的开启或者关闭时间相同时,D1将闪烁3次同时蜂鸣器响3声;D2用于模拟用电器,当继电器闭合时,将会被点亮。

3.2 系统时间的设置

当电源开启时,1602将显示系统初始化时间,按下FUC键后,时间停止走动并且显示秒的数字将会闪烁,此时可以通过ADD和SUB键调节。其中每按下一次ADD键数字将加1,每按下SUB键数字将减1。调节完秒后,再次按下FUC键,闪烁的光标将转移到分钟位置,同样通过调节ADD和SUB键盘调节当前的时间。同样的原理调节小时与日期。当调节星期时候,按下ADD和SUB将按照星期的英文缩写变化显示。调节完星期后在此按下FUN键后,闪烁光标将消除,同时时间开始在调节完毕的基础上开始运行。

3.3 开启与关闭时间的设置

在1602显示器正常显示时间的期间,按下CHOOSE键一次,液晶显示器显示当前设置的开启时间,如图4所示。按下FUC键后,光标在秒位闪烁,同样通过ADD和SUB键进行调节。再次按下CHOOSE键后,液晶显示器显示当前关闭时间。同样按下FUC键配合ADD与SUB键调节关闭时间。再次按下CHOOSE键,显示器回到系统时间显示界面。当系统时间与设定的启动时间相同时,继电器闭合,蜂鸣器[9]响3声,D1闪烁3次,信号灯变蓝,同时D2被点亮。直到系统时间与设定的关闭时间相同,蜂鸣器再次响3声,D1闪烁3次,信号灯和D2都熄灭。

4 结语

该智能定时开关系统采用C语言编写,以STC89C52和DS1302为核心,具备时间准确,功耗低,增加功能方便。通过Protues的仿真,直观展示了系统的运行界面,证明了此设计方案的可行性。

参考文献

[1]雷道仲,李书成,罗政球.基于单片机定时开关的设计[J].贵州教育学院学报,2005(4):224-225.

[2]张天凡.完全手册:51单片机C语言开发详解[M].北京:电子工业出版社,2008.

[3]王振宇.基于单片机设计的多功能定时器[J].贵州教育学院学报,2005(4):79-81.

[4]刘焕平,李娟.基于51单片机的智能定时控制系统设计[J].石家庄职业技术学院学报,2010(6):26-28.

[5]张自聪,金永兴.基于AT89S52的奥运倒计时牌的设计[J].中国计量学院学报,2007(4):305-307.

[6]曹晖,彭小军.DS1320的C51编程[J].新余高专学报,2001(2):28-29.

[7]于志赣,刘国平,张旭斌.液显LCD1602模块的应用[J].机电技术,2009(3):21-23.

[8]李娜,刘雅举.Proteus在单片机仿真中的应用[J].现代电子技术,2007,30(4):181-182.

上一篇:氧化锰催化剂下一篇:干预项目

本站热搜

    相关推荐