1 应用:
1.1 需要显示时钟及日期或实现时钟控制的电子设备。
1.2 本电路在HGT2110、HGT3101、HDM2100、HDM3200中成功应用。
2 特性:
2.1 年、月、日、时、分、秒、星期的实时走时;
2.2 可设置为12小时制或24小时制走时;
2.3 日历时钟数据可读写,可启动写保护;
2.4 可接入3V电池,断电后由电池供电走时,电池供电通常可持续一年以上; 2.5 可对电池设置充电参数。
3 核心部件:
3.1 DS1302,DIP8 或 SOP8封装(推荐)。
4 外围关键元件:
4.1 32768Hz晶体振荡器;
4.2 3V电池。
5 设计注意事项:
5.1 晶体振荡器必须采用32768Hz,其引脚不得接入其它元件; 5.2 晶振引脚具有高阻抗特性, 印制板漏电会导致停振。设计时引脚应尽量短,远离周边元件或导线,并应大于2mm;
5.3 此器件对潮湿、低温敏感,推荐线路进行防潮处理;
5.4 不推荐使用大容量电容替代电池,电容引脚易与其它线路板接通造成其它线路板元件损坏。
6 软件设计要点:
6.1 上电初始化必须设置为充电;
6.2 上电后对秒进行操作,可避免时钟锁定;东安黑豹
6.3 非写入数据操作后启动写保护;
7 原理图:
7.1 见DS1302.Ddb文件;
8 引脚说明或时序图:
8.1 见DS1302.pdf文件;
9 主要指标:
10 C语言例程:
10.1 本例在HDM3200消防电话总机中应用,CPU为ATmega32L ,工作频率为4MHz。
//************************************************************************//
// 日历时钟DS1302公用变量说明我国减灾工作的主要目标是 //
// -------------------------------------------------------------------- //
// uchar cale[7] 下标对应 0 1 2 3 4 5 6 //
// year month day hour minute second week //
// 年 月 日 时 分 秒 星期 //
// write_cale(why) 将cale[]中指定的日期或时间写入dallas中 //
// get_cale(why); 获得由why指定的日期或时钟,并且赋值给cale[why] //
// why--指定年、周、月、日、时、分、秒中的一个, why可取year或 //
伊格尔顿// month或day或hour或minute或second或week //
//************************************************************************//
// -------------------------------------------------------------------- //
// 充电设置 //
// -------------------------------------------------------------------- //
// 使用bttay_charger(uchar charge_set)函数,其中 //
// charge_set: 0--不充电 4.3V时 0mA 0mA //
// 1--2K充电 4.3V时 1.8mA 1.5mA //
// 2--4K充电 4.3V时 0.9mA 0.8mA //
// 3--8K充电 4.3V时 0.45mA 0.4mA //
// 默认使用1只二极管 建议使用4K电阻(0.9mA) //
// -------------------------------------------------------------------- //
//************************************************************************//
//DS1302时钟端口定义(以下端口可根据实际使用改变)-------------------------//
#define SET_DS_RST SETBIT(PORTD,1) //ret=1
#define CLK_DS_RST CLRBIT(PORTD,1) //ret=0
#define SET_DS_SCL SETBIT(PORTB,7) //scl=1
#define CLK_DS_SCL CLRBIT(PORTB,7) //scl=0
#define SET_DS_DAT SETBIT(PORTB,2) //data=1
#define CLK_DS_DAT CLRBIT(PORTB,2) //data=0
#define IN_DS_DAT CLRBIT(DDRB,2) //data port is input
#define OUT_DS_DAT SETBIT(DDRB,2) //data port is output
#define CHK_DS_DAT CHKBIT(PINB,2) //get data
#define dec_dallas(x) ((x/10)*16+x%10) //将10进制数转换为dallas数
#define dallas_dec(x) ((x/16)*10+x%16) //将dallas数转换为10进制数
//日历时钟全局变量定义---------------------------------------------------//
unsigned char cale[7]; //日期缓存数据,下标用以下宏表示
#define year 0 //年
#define month 1 //月
#define day 2 //日
#define hour 3 //时
#define minute 4 //分
#define second 5 //秒
#define week 6 //星期
//**********************************************************//
于娟的忠告// DS1302日历时钟电路程序 //
// ------------------------------------------------------ //
// 涓流充电:read_dallas(0x91) write_dallas(0x90) //
零售商品称重计量监督管理办法// 控制:read_dallas(0x8f) write_dallas(0x8e) //
// 年:read_dallas(0x8d) write_dallas(0x8c) //
集韵// 周:read_dallas(0x8B) write_dallas(0x8a) //
// 月:read_dallas(0x89) write_dallas(0x88) //
// 日:read_dallas(0x87) write_dallas(0x86) //
// 时:read_dallas(0x85) write_dallas(0x84) //
// 分:read_dallas(0x83) write_dallas(0x82) //
// 秒:read_dallas(0x81) write_dallas(0x80) //
// ----------------------------------------------------- //
// 内有31字节RAM 存储器,掉电失去: //
// write_dallas(0xc0 - 0xfc) 偶数写 //
// read_dallas(0xc1 - 0xfd) 奇数读 //
//**********************************************************//