高精度时钟芯片SD2001E及其应用_单片机论文
关键词:sd2001e 实时时钟 单片机
实时时钟电路在以单片机为核心构成的智能仪器仪表、测控系统、工业控制等领域有着广泛的应用,但现有的时钟电路存在着外围电路(如需外接晶振、电池)和接口电路(并行接口)复杂、功能单一等缺点。sd2001e则是在内部集成了实时时钟电路、串行非易失性sram、可充电电池、晶振及电池管理电路的新型实时时钟芯片。该芯片与单片机的接口电路采用工业标准i2c总线,从而简化了接口电路设计。利用该芯片无需扩展任何外围元件,即可构成一个高精度实时时钟及具有256kb非易失性sram的数据存储电路。
1 主要特性及引脚说明
sd2001e时钟芯片的主要特性如下:
*年、月、日、星期、时、分、秒的bcd码输入/输出;
*i2c总线接口(包括实时时钟部分和sram部分);
*自动日历到2099年(包括闰年自动换算功能);
*内置晶振,出厂前已对时钟进行校准,保证精度为±4×10 -6,即时钟年误差小于2min;
*低功耗,典型值为1.0μa(vdd=3.5v);
*工作电压为3.0~5.5v(其中nvram在4.5~5.5v工作);
*可设置的两路闹钟输出及32 768hz~1hz的方波信号输出;
*可设置的每分钟固定中断输出或选定频率固定中断输出;
*内置充电电路和充电电池,充满一次可保持内部时钟走时时间超过1年以上,可满充电次数达200次;
*内置电源管理电路,当vdd≥3.0v,内部电池不耗电;
*内置稳定电路及电池掉电检测电路;
*内置256kb的非易失性sram,其擦写次数为100亿次,且没有内部写延时。
sd2001e采用24脚dip封装形式。各引脚的功能如表1所列,其外形及引脚排列如图1所示。
表1 sd2001e引脚说明
引脚号 | 标 廖 | 功 能 | 特 征 |
3 | test | 测试 | 内部电池电压检测 |
4 | on/off | 打开/关闭sram,接低电平为打开sram,接高电平时关闭 | 此功能引脚主要用来降低芯片整体功耗 |
10~12 | gnd | 接地 | |
13 | scl | 串行时钟输入脚 | cmos输入(与vdd间无保护二极管) |
14 | vout | 3.3v稳压输出脚,当vdd≥3.4v时有效 | 可供电流≤30ma,电压精度3.3(1±0.02)v |
15 | sda | 串行数据输入/输出脚 | n沟道开路输出(与vdd间无保护二极管)cmos输入 |
1、2、22 16~18、5~9 | nc | 空引脚 | |
19 | int1 | 报警中断1输出脚,根据中断寄存器与状态寄存器来设置其工作的模式,当定时时间到达时输出低电平或时钟信号。它可通过重写状态寄存器来禁止 | n沟道开路输出(与vdd端之间无保护二极管) |
20 | sdae | sram串行数据输入/输出脚 | 开路输出 |
21 | scle | sram串行数据时钟脚 | cmos输入 |
23 | int2 | 报警中断2输出脚,同int1 | |
24 | vdd | 正电源 |
2 工作原理
sd2001e内部包括实时时钟与nvram两部分,内部原理框图如图2所示。
2.1 实时时钟
sd2001e实时时钟是基于i2c总线的器件,故对该器件的操作必须严格遵守总线时序。当cpu发出起始条件,建立与实时时钟连接后,cpu通过sda总线连续输出4位器件地址、3位操作指令和1位读/写指令,其格式如下:
db7 | db6 | db5 | db5 | db3 | db2 | db1 | db0 |
0 | 1 | 1 | 0 | c2 | c1 | c0 | r/w |
实时时钟器件的地址固定为“0110”,接下来的3位操作指令构成了对实时时钟部分的8条操作指令,具体指令含义如表2所列。
表2 sd2001e实时时钟指令表
c2 | c1 | c0 | 操 作 | ack数目 |
0 | 0 | 0 | 复位00(年),01(月)有,01(天),0(星期)00(分),00(秒) | 1 |
0 | 0 | 1 | 状态寄存器存取 | 2 |
0 | 1 | 0 | 实时数据1(从年数据开始)存取 | 8 |
0 | 1 | 1 | 实时数据2(从小时数据开始)存取 | 4 |
1 | 0 | 0 | 频率事件设置1(int1脚) | 3 |
1 | 0 | 1 | 频率事件2(int1脚) | 3 |
1 | 1 | 0 | 测试模式开始 | 1 |
1 | 1 | 1 | 测试模式结束 | 1 |
cpu通过发送不同操作指令,选择相应的寄存器从而完成相应的操作功能。sd2001e实时时钟部分共包括4个寄存器,分别分别如下:
(1)实时数据寄存器
实时数据寄存器是一个56位的存储器。它以bcd码方式存储,包括年、月、日、星期、时、分、秒的数据,数据格式如图3所示。任何读/写操作或实时数据存取命令都通过发送或接收年数据的第一位“lbs”执行的。
*年数据(00~99):设置最后两位数字(00~99),通过自动日历功能计至2099年。
*月数据(01~12):每月包含天数通过自动日历功能来更改。1、3、5、7、8、10、12为1~31;4、6、9、11为1~30;2(闰年)为1~29;2(普通)为1~28。
*天数(01~31)。
*星期数据(00~06):七进制计数器,对应于星期内每一天来设置。
*小时数据(00~23或00~11):12小时进制,0为am,1为pm;对于24小时进制,这一位没有意义,但必须设置为“0”或“1”。
*分数据(00~59)。
*秒数据(00~59)与测试标志。
*test:在测试模式变为“1”。
(2)状态寄存器
状态寄存器是一个8位寄存器。该寄存器用来显示和设置实时时钟的工作模式,状态寄存器格式如下。
power:电源标志位,为只读位。
12/24:设置12小时制或24小时制:0为12小时制;1为24小时制。
int1ae:设置从int1脚输出的报警中断的状态。设定报警时间并设此位为“1”时int1寄存器开始有效,0:报警中断输出禁止;1:报警中断输出允许。
int1me:确定int1脚的输出为每分钟边沿中断或每分钟固定中断。为了设为每分钟固定中断输出,应将int1me和int1fe置1。0:报警中断或可选的频率的固定中断输出;1:每分钟边沿中断或每分钟固定中断输出。
int1fe:设定int1脚的输出为每分钟固定中断(周期1分钟,占空比50%)或选定频率的固定中断。如果选定频率固定中断输出被允许时,int1寄存器被认为是频率/事件的数据,0:报警中断或每分钟边沿中断输出;1:每分钟固定中断输出或选定频率固定中断输出。
int2ae、int2me、int2fe位用于设置从int2脚输出的报警中断的状态,各位含义同上。
(3)两组报警时间/频率事件设置寄存器
有两组16位报警时间/频率事件设置寄存器,用于设置报警时间或频率事件,由intxae与intxfe控制。设定的am/pm标志位必须同12小时制或24小时制相对应,否则,设定的小时数将与报警数据不匹配。该寄存器为只写寄存器(x:1或2)。
intxae=1时,int1和int2寄存器被认为是报警时间数据,与实时数据寄存器中小时和分钟寄存器设置相同。它们用bcd码代表小时与分钟。int1寄存器内容如图4(a)所示。
intxfe=1时,int1与int2寄存器被视为是频率事件数据(f0~f15位对应频率为32 768~1hz),对相应位置“1”,则对应频率以“与”的方式输出。int1寄存器内容如图4(b)所示。
2.2 非易失数据寄存器
sd2001e内部还具有256kb的非易失性数据寄存器。该存储器是一种性能优良的可擦写100亿次且无内部写延时的数据存储器,可用于保存系统设置参数及采集的数据。
nvram的操作方式如下:首先,cpu发出开始信号给sd2001e,然后cpu发出包括4位控制代码,1位读/写指令的8位数据,即“从器件地址”,前4位称为“sram器件代码”,固定为“1010”。接下来的3位在这里固定为“000”,从器件地址的最低位为读写控制位,该位为“1”表示对从器件进行读操作,为“0”表示对从器件进行写操作,接下来就可对sd2001e进行读写操作。写操作可分为单字节写操作和连续写操作。读操作有三种操作方式:立即地址读操作、同地址读操作、连续读操作。其操作过程和操作时序与i2c总线sram的读写操作相同,这里不再详述。
3 sd2001e在嵌入式系统中的应用
sd2001e可广泛应用于智能仪器仪表系统、水/电/气表等ic卡应用系统、数据采集系统、工业控制系统、测控系统、门禁系统、家用电器等嵌入式应用领域。利用sd2001e可为系统提供以下功能。
(1)实时时钟日历
sd2001e可为系统提供高精度的时钟及日历功能,以满足具有定时数据采集、输出控制、数据保存及定时报警等功能的嵌入式系统需要,同时也可为系统提供时间及日期显示功能。
(2)数据保存
嵌入式系统一般均需要涉及到系统设置参数及采集数据保存的问题。通常的做法是,通过扩展1片e2prom芯片来保存设置参数及采集的数据,但e2prom存在擦写寿命有限及数据存储的可靠性不高等问题;而利用sd2001e片内32kb、擦写数为100亿次的高性能nvram,则几乎不用考虑存储器的擦写寿命及数据存储的可靠性问题。因而,sd2001e为需频繁读写数据的应用领域提供了很好的解决方案。
(3)频率输出
对于需要固定频率输出或需要以ms或s为单位的定时应用领域,可以通过设置频率事件数据给int1寄存器,并置int1me位为“0”和int1fe位为“1”。此时,从int1引脚将输出频率为32 768hz~1hz的固定频率,利用单片机的计数器或中断次数软件计数的方法可得到以ms或s为单位的任意时间输出。
(4)定时输出
当系统需要以分钟为基本单位的定时输出时(如采集周期固定的多路数据采集、巡回检测系统等),可将sd2001e状态寄存器的int1me位置为“1”,int1fe位置为“0”,以选择为每分钟边沿中断输出或将int1me、int1fe位同时置“1”选择为每分钟固定中断输出。通过单片机的计数器或中断次数软件计数的方法,可得到以min为单位的任意时间输出。
(5)定时报警
对于具有定时报警输出要求的系统,可通过sd2001e的int1寄存器来设置报警时间(小时和分钟数据),并将状态寄存器中的int1ae位置为“1”、int1me位及int1fe位置为“0”来实现。需要指出的是sd2001e定时报警中断为每天一或二次。对于需要用到长时间定时的报警系统,如每月或每年一次的报警系统,可通过软件编程的方法设定报警中断的时间。
图5 sd2001e与单片机硬件连接
4 具体应用与软件编程
下面以at89c52单片机为例,给出sd2001e与单片机的典型接口电路。由于at89c52单片机没有i2c总线接口,故这里使用at89c52的p3.3、p3.4口线,来模拟i2c总线,其中sda与p3.4相连,scl与p3.3相连。sd2001e内部sram的i2c总线接口sdae与sda并联,scle与scl并联。此外,为了实现定时报警中断输出的功能,还将sd2001e int1端与单片机的int0外中断端相连,具体的硬件连接电路如图5所示。网络补充版(//www.dpj.com.cn)给出与上述硬件电路对应的子程序,包括sd2001e初始化子程序,实时时钟数据读、写子程序与int1中断输出子程序。程序采用模拟i2c总线软件包编制。
由于sd2001e高精度时钟日历芯片将可充电池、晶振充电电路及256kb的nvram集成在了一起,又采用了简单的i2c总线接口,因而该器件无需扩展任何外围元件就可构成一个功能完善的时钟日历电路,同时又可为系统提供一个容量为32kb的高性能非易失性数据存储单元,故该器件是嵌入式系统时钟电路的良好选择。