ds3231怎么用(ds3231 介绍与初步使用)

DS3231

概述:在许多电子应用中都含有时钟要求,最节省成本的是直接使用单片机中的定时器作为计时方式,但是这种方式是有很大的不足,计时误差大,同时电源掉电不能保持时钟继续运行,不能满足长时间作为时钟计时。在对时钟要求较高的场合中,则使用廉价的时钟芯片(如DS1302,PCF8563等等)加备用电池,计时精度略高,可满足一般的要求。

在这篇文章中,我们重点介绍高精度时钟电路DS3231的设计和应用。在DS1302普及型时钟芯片,晶体均需外置,由于晶体的离散性,很难选择到精度很高的器件,同时也没有温度补偿电路,不同的温度环境下,晶体的特性也在变化,直接影响着时钟的振荡频率,较大的误差在所在所难免。而我爱线报网DS3231高精度时钟芯片,将晶体和温度补偿均集成在芯片中,为提高计时精度提供了可能,实册证明,使用DS3231时钟芯片,误差可做到一年小于一分钟,甚至部分显示器误差可小于20秒/一年。这对有相对精确时钟要求的应用场合是个理想的选择。

一、DS3231时钟芯片结构原理

DS3231是一款高精度I2C实时时钟(RTC)器件,具有集成的温度补偿晶体振荡器(TCXO)。该器件包含电池输入端,断开主电源时仍可保持精确计时。集成的晶体振荡器可提高器件的长期精确度。DS3231的寄存器能保存秒、分、时、星期、日期、月、年和闹钟设置信息,时钟和日历寄存器的内容采用二–十进制编码(BCD)格式。少于31天的月份,我爱线报网可自动调整月末日期,包括闰年补偿。时钟的工作格式为24小时或带AM/PM指示的12小时格式。DS3231提供两个可编程日历闹钟和一路可编程方波输出。DS3231与单片机通过I2C双向串行总线传输地址与数据。

引脚功能:

VCC用于主电源的DC引脚;

INT/SQW为低电平有效中断或方波输出:是低电平有效复位引脚;

N.C.表示无连接,外部必须接地;

GND为地;

VBAT为备用电源输入;

SDA为串行数据输入、输出;

SCL为串行时钟输入。

二、选型

DS3231有两种封装:1、SOP-16;2、SOP-8。

型号有DS3231sn、DS3231Mz,前者的精度高于后者,相差也不是很大。ds3231做的比较好的是引我爱线报网脚都是一样的

三、操作

该芯片提供的是IIC接口,使用起来比较方便。

#define DS3231_WriteAddress 0xD0 //器件写地址

#define DS3231_ReadAddress 0xD1 //器件读地址

#define DS3231_SECOND 0x00 //秒

#define DS3231_MINUTE 0x01 //分

#define DS3231_HOUR 0x02 //时

#define DS3231_WEEK 0x03 //星期

#define DS3231_DAY 0x04 //日

#define DS3231_MONTH 0x05 //月

#define DS3231_Y我爱线报网EAR 0x06 //年

//闹铃1

#define DS3231_SALARM1ECOND 0x07 //秒

#define DS3231_ALARM1MINUTE 0x08 //分

#define DS3231_ALARM1HOUR 0x09 //时

#define DS3231_ALARM1WEEK 0x0A //星期/日

//闹铃2

#define DS3231_ALARM2MINUTE 0x0b //分

#define DS3231_ALARM2HOUR 0x0c //时

#define DS3231_ALARM2WEEK 0x0d //星期/日

#define DS3231_CONTROL 0x0e 我爱线报网//控制寄存器

#define DS3231_STATUS 0x0f //状态寄存器

#define BSY 2 //忙

#define OSF 7 //振荡器停止标志

#define DS3231_XTAL 0x10 //晶体老化寄存器

#define DS3231_TEMPERATUREH 0x11 //温度寄存器高字节(8位)

#define DS3231_TEMPERATUREL 0x12 //温度寄存器低字节(高2位)

//一般使用不需要进行复位操作

if(read_random(DS3231_CONTROL)!=0x1C){

if (write_byte(DS3231_CONTROL, 0x1C) 我爱线报网== 0)

GPIO_ResetBits(GPIOB,GPIO_Pin_9);

}

if(read_random(DS3231_STATUS)!=0){

if (write_byte(DS3231_STATUS, 0x00) == 0)

GPIO_ResetBits(GPIOB,GPIO_Pin_8);

}

完成这连个操作后就可以直接读取寄存器

void get_show_date(uint8 *data)

{

uint8 Ytemp,Mtemp,Dtemp;

Ytemp=BCD2HEX(read_random(DS3231_YEAR)); //年

Mtemp=BCD2HEX(read_random(DS3231_M我爱线报网ONTH));//月

Dtemp=BCD2HEX(read_random(DS3231_DAY)); //日

if(data!=0){

data[0]=Ytemp;

data[1]=Mtemp;

data[2]=Dtemp;

}

}

static uint8 BCD2HEX (uint8 val) //16->10

{

return val – 6 * (val >> 4);

}

static uint8 HEX2BCD (uint8 val) //10->16

{

return val + 6 * (val / 10);

}

推荐阅读

给力项目线报网会员可免费下载 加入会员
友情提醒: 请尽量登录购买,防止付款了不发货!
QQ交流群:226333560 站长微信:qgzmt2
温馨提示:本站提供的一切软件、教程和内容信息都来自网络收集整理,仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,版权争议与本站无关。用户必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

给TA打赏
共{{data.count}}人
人已打赏
行业资讯

电视版k歌软件哪个好(电视K歌软件哪个好?这10款最火,最好用的电视K歌软件,收藏起来)

2024-6-15 12:29:20

行业资讯

建立邮箱服务器(架设自己的邮件服务器)

2024-6-15 12:49:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索