ds1302(轻松吃透实时时钟芯片DS1302软硬件设计)

更新时间:2024-12-22 21:26:03 所在栏目: 生活常识点击量:

轻松吃透及不时钟芯片DS1302软硬件计划

今天我们来讨论一款老掉牙的及不时钟芯片DS1302。什么是及不时钟(RealTime Clock, RTC)呢?为什么我们必要它呢?假定你使用单片机完成万年历使用,寻常的做法是如此的:设置中缀后推断1秒对否到来,假如到来就将秒数加1,然后再思索一些进位处理,比如,每60秒则分钟加1,每60分则小时加1, 24小时或12小时制也要区分对待,每12个月则年加1,还要思索闰月闰年。固然思索的事变仿佛有些多,但是在资讯十分兴旺的今天,从网络上搜刮显现成的代码也绝不是难事。

固然,使用代码来完成这些算法并不是唯一途径,你也可以使用及不时钟芯片来减小编程包袱,只需我们把芯片内的年代日时分秒等参数设置为如今时间,启动后内里会主动开头计数,实际上芯片纪录的时间将与我们的时间及时同步,进位的成绩也由芯片自行处理,我们只必要在必要的时分从芯片中读取一些时间值即可,真实不要太简便。

DS1302就是一款使用广泛的RTC芯片,我们来看看与时间干系的存放器有哪些,如下图所示(DS1302内里别的另有31个字节的RAM,本文不触及):



起首我们眷注一下地点,约莫不少人会想:这些地点怎样这么怪呢?你这个厂家计划芯片时就不克不及靠谱点吗?地点从0x00开头一连增长会死呀?居然还分为不同的读写地点,我看这个芯片计划者是闲得“淡”疼,简便的成绩繁复化!

但是实践上,这9个存放器地点的确是0x0~0x8,并且读写的也的确是同一个地点的数据,只不外数据手册在标志这些地点时,把发送串行数据中的别的一些位也思索过来了。我们来看看怎样往DS1302中写入一个字节的数据,相应的时序如下图所示:


可以看到,单个字节数据写入到DS1302必要两个字节,前一个字节用来确定写数据的目标地点。后一个字节就是必要写入的数据。请注意:两个字节都是以低位先行的办法发送,正常情况下确定地点的前一个字节如下图所示



读写数据时最高位(第7位)必需为1,最低位用来表现读(RD=1)照旧写(WR=0)数据。我们刚刚提过,DS1302内里分外另有31个字节的RAM,可作为通用的RAM使用,第6位表现往RAM(RAM=1)照旧RTC(CK=0)中写入(或读取)数据,前方表格中标注的写或读地点就是把这8位都思索过来了

假如你往RTC写入数据,第7位总是1,第6位与第0位总是0,以是写的地点总是偶数,读的地点总是奇数。是不是闲得“淡”疼呢?还真不是,由于从实质上去讲,读写信号以及拜候地区(RAM/CK)选择位也可以算是地点线。比如,从前讨论的HD44780有一个RS引脚表现写入的是数据照旧指令,但是你也可以以为它是一条地点线,它决定你将代码写入数据存放器照旧指令存放器。

好吧!地点的事变以前谈妥了,我们来逐一先容DS1302内里与时间有关的存放器:

(1)【地点0x80】秒钟存放器(Seconds):DS1302中RTC存放器都是以BCD码来保存的,也就是说,个位与十位分散占用一些位。在8位秒钟存放器中,BIT3~0用来保存秒钟的个位,BIT6~4用保存秒钟的十位,由于秒数是不成能大于5的,以是用3位已然充足,而最高位BIT7表现时钟挂起位(ClockHalt, CH),当CH=1时,时钟暂且处于挂起形态(停息计数),当CH=0时,计数才会开头运转。这个存放器的计划照旧很奇妙的,也就是说,只需我们往秒存放器写入实践的秒钟数时,CH位都市被清零。换句话说,寻常情况下,我们都市先初始化年代日时分等别的存放器,而秒钟存放器留待最初设置,同时也开启了芯片计数。

(2)【地点0x82】分钟存放器(Minutes):与秒钟存放器一样,BIT3~0用来保存分钟的个数,BIT6~4用保存分钟的十位,最高位是没效的。

(3)【地点0x84】小时存放器(Hour):该存放器的低4位保存小时的个位,而小时的十位则取决于时间是24照旧12小时制。BIT7=1时为12小时制,那么小时的十位不成能大于1(1~12),它只必要一位(BIT4)表现即可,只是还多了一个BIT5用来表现中午(PM=1)照旧上午(AM=0);而BIT7=0时为24小时制,十位数最大值约莫为2(0~23),以是用BIT5~BIT4表现小时的十位。

(4)【地点0x86】日期存放器(Date):日期表现一个月份有几多天,其范围为1~31,十位最大值为3,以是用BIT5~4表现十位,BIT3~0表现个位。

(5)【地点0x88】月份存放器(Month):月份范围是1~12,以是用BIT4表现十位,BIT3~0表现个位。

(6)【地点0x8A】星期存放器(Day):星期的范围是1~7,以是用BIT2~BIT0表现即可。约莫有些人在想:为什么星期数用Day而不必Week之类的呢?我还以为是天数呢!由于英文的星期1~7都是以Day开头,比如,Monday,Sunday, Friday等等。英文扣问今天星期几即“What day is today?”

(7)【地点0x8C】年份存放器(Year):DS1302的年份范围是00~99,以是分散用高4位与低4位分散表现十位与个位。

(8)【地点0x8E】写保护存放器(Write Protect, WP): 该存放器仅有最高位好效,为1表现开启写保护,为0表现排除写保护。在往RTC(或RAM)中写入数据前,必需将该位清0。

(9)【地点0x90】充电存放器:与时间计数不关,我们最初讨论。

我们使用VisualCom软件平台来仿真一下,相应的仿真后果如下图所示:



调出的DS1302器件有一个可以便利我们察看RTC内里形态的屏幕,但是就是一块可以体现4行20个字符的液晶体现模组(LCM2004),从屏幕上看到信息就是从DS1302中读取出来并写入到LCM2004中的。固然,一些特别的存放器形态照旧得察看“内存”窗口,相应的预置数据如下图所示:


VisualCom软件平台中的预置数据格式均依照正常位序界说,共16位好效,高8位设置拜候地点,低8位则是写入的数据,如下图所示:


起首我们排除了写保护。由于无论你写什么、往何处写,写保护都必要排除(将WP位清零),以是必要写入的数据为“0b10001110_0000000(0x8E00)”,如下图所示


写保护解锁后,我们就可以为所欲为了,在依次写入年份、星期、月份、日期、小时、分钟后,我们才设置了秒钟,也就同时启动了芯片的计数,简便吧!

最初我们谈谈充电存放器,它是用来做什么的呢?有电脑使用履历的读者都晓得,当我们将电脑彻底关机(电)后再开机,时间仍旧还在持续跑的,对不合错误?由于电脑的处理器也有RTC功效,当电脑处于开机时,RTC由外部电源供电,而在断电形态下,RTC则由主板上的电池(最稀有的是钮扣电池CR2032)供电。换句话说,RTC单位的供电总是不会断开的,以是计数功效也向来没有中止过,相似的供电电路如下图所示:


图中RTC_VDD是RTC单位的供电电源,电路体系上电后VCC是有电的,同时也给RTC单位供电,断电后则由电池供电,两个二极管可以避免VCC与电池之间显现泄电形态。

DS1302有两个电源供电引脚,VCC2为主电源供电(相当于上图的VCC),VCC1为帮助电源供电。当VCC2没有电源供电时,挂在VCC1引脚的电池将给RTC供电,如图所示:


假如电池是可充电型的,当VCC2主电源有供电时,我们就可以使用充电存放器来控制充电参数,我们来看看VCC2与VCC1之间的内里电路,如下图所示:


可以看到,VCC2与VCC1之间有三级开关,TCS3~TCS0控制主电源对否往帮助电源供电,DS1~DS0控制串联的二极管个数,ROUT1~ROUT0控制串联的电阻值,数据手册有下表所示的功效表:


假如你使用可充电电池,并且决定使用充电功效,应该经过选择切合的二极管数目与阻值来限定最大充电电流。假定供电电源为5V,并且使用1个二极管与2K欧姆电阻串联办法,则最大充电电流为IMAX=(5V-0.7V)/2K≈2.2mA。

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。