0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DS1307实时时钟分线板套件的使用

454398 来源:网络整理 作者:网络整理 2019-11-27 16:26 次阅读

概述

DS1307实时时钟分线板套件的使用

这是一个出色的电池支持实时时钟(RTC),即使重新编程或断电,您的微控制器项目也可以跟踪时间。 DS1307是最流行的RTC,最适合与基于5V的芯片(如Arduino)配合使用。

所有零件,包括PCB,接头连接器包括电池和电池

可快速组装和使用

将插头插入任何面包板,也可以使用电线

我们提供了带有Arduino的示例代码和库我们的文档页面上的演练

两个安装孔

将保持5年或更长时间

此分线板是一个套件,需要一些只需15分钟即可完成。

什么是RTC?

实时时钟基本上就像手表一样-它依靠电池供电,即使断电也能为您节省时间!使用RTC,即使您对微控制器进行重新编程或将其与USB电源插头断开连接,您也可以跟踪较长的时间线。

大多数微控制器(包括Arduino)都具有称为“ millis(),并且芯片中还内置了计时器,可以跟踪更长的时间段,例如分钟或几天。那么,为什么要有单独的RTC芯片呢?好吧,最大的原因是 millis()仅跟踪时间,因为Arduino上次供电是- 。这意味着打开电源后,毫秒计时器将设置为0。Arduino不知道它是“星期二”还是“ 3月8日”,它只能告诉我“自从我上次离开以来已经过了14,000毫秒”

确定,如果要在Arduino上设置时间怎么办?您必须编程日期和时间,从那时起您就可以算上它了。但是,如果失去电源,则必须重新设置时间。就像非常便宜的闹钟一样:每当他们掉电时,它们都会闪烁 12:00

尽管这种基本的计时功能在某些项目中是可行的,但在某些项目中,例如数据记录器,时钟等必须保持一致的计时,当Arduino电池耗尽或重新编程时,计时不会重置。因此,我们包括一个单独的RTC! RTC芯片是一种专门的芯片,可以跟踪时间。它可以计算leap年,并且知道一个月中有多少天,但是它不考虑夏时制(因为它在不同的地方有所不同)

https://en.wikipedia.org/wiki/Real-time_clock#/media/File :上图显示的是带有实时时钟DS1387的计算机主板。其中有一个锂电池,这就是为什么它这么大。

我们将使用的RTC是DS1307。它价格低廉,易于焊接,并且可以在非常小的硬币电池上运行数年。

备份

只要它有一个可运行的纽扣电池,即使Arduino断电或被重新编程,RTC也会在很长的时间内运行。

使用任何CR1220 3V锂金属纽扣电池:

CR1220 12mm直径-3V锂币电池电池

产品编号:380

这些是最高质量的电池。容量的电池,与iCufflinks,iNecklace,Datalogging和GPS Shields,GPS HAT等产品随附的电池相同。每笔订购一个电池。..

$ 0.95

入库

添加到购物车

您必须安装纽扣电池才能使RTC正常工作,如果没有纽扣电池,则应将电池引脚拉低。

零件列表

如果您有组装版本,请跳过此步骤,即为您完成!

ImageName说明零件信息数量

IC2实时时钟芯片DS13071

Q132.768 KHz,12.5 pF手表晶体通用32.768KHz晶体1

R1,R21/4W 5%2.2K电阻

红色,红色,红色,金色通用2

C10.1uF陶瓷电容器(104)通用1

5针公头(1x5)通用1

BATT12mm 3V锂纽扣电池(截至2015年10月15日,产品不再配备纽扣电池-尽管我们建议您购买纽扣电池!)CR12201

BATT‘12mm硬币电池座Keystone 30011

PCB电路板Adafruit Industries1

组装

如果您有组装版本,请跳过此步骤,即完成为您服务!

将电阻,晶体和电容器的引线短路。

通过检查零件清单并确认您拥有一切,准备组装套件!

下一步,加热烙铁并清理办公桌。

将电路板放在虎钳中,以便您可以轻松地对其进行操作。

通过在电池负极上焊接一个小凸起开始:这样可以更好地接触!

放置两个2.2K电阻和一个陶瓷电容器。它们是对称的,因此无需担心方向。 如果您打算与Raspberry Pi(具有3.3V逻辑并内置上拉电阻)一起使用,请跳过2.2K电阻!

然后放置晶体(也是对称的),电池座(继续,以便电池可以在侧面滑动)和RTC芯片。必须放置RTC芯片,使末端的凹口/圆点与丝印相匹配。看左图,缺口指向下。在焊接芯片之前,请仔细检查,因为它很难撤消!

为防止电池座掉落,您可能需要从顶部“点焊”它。

然后在板上翻转并焊接所有引脚。

如果您愿意要使用插头将分线板插入某些东西,请将插头插入面包板,长边朝下放置,使短路针穿过焊盘。

将其焊接到位。

插入电池,使+面平UP。 电池可以使用5年或更长时间,因此无需拆卸或更换电池。

您必须安装纽扣电池才能使RTC正常工作,如果没有纽扣电池,它将被扼杀并可能挂起Arduino,因此请务必确保已安装电池,即使电池没电也是如此。

接线

只有5个引脚: 5V GND SCL SDA SQW 。

5V 用于为RTC芯片供电以查询时间。如果没有5V信号,则芯片会通过纽扣电池进入休眠状态。

将 GND 连接到公共电源/数据地

SCL 引脚连接到Arduino上的I2C时钟 SCL 引脚。在基于UNO和’328的Arduino上,这也称为 A5 ,在Mega上也称为 digital 21 ,在Leonardo/Micro上,也称为数字3

将 SDA 引脚连接到Arduino上的I2C数据 SDA 引脚。在基于UNO和‘328的Arduino上,这也称为 A4 ;在Mega上,其也称为 digital 20 ;在Leonardo/Micro上,这也称为数字2

SQW 是RTC可选的方波输出(如果已配置的话)。大多数人不需要或使用此图钉

用于Arduino UNO的有趣插件

如果将模拟引脚 A3 设置为OUTPUT和HIGH,将 A2 设置为OUTPUT和LOW,则可以直接从引脚为RTC供电!

将Arduino UNO A4连接到SDA。将Arduino模拟引脚A5连接到SCL。

这仅适用于UNO和其他基于ATmega328的Arduino!

Arduino库

与RTC对话

RTC是i2c设备,这意味着它使用2条线进行通信。这两条线用于设置时间并进行检索。在Arduino UNO上,这些引脚还连接到模拟4 和 5 引脚。这有点烦人,因为我们当然希望最多有6个模拟输入来读取数据,而现在我们已经丢失了2个。

对于RTC库,我们将使用JeeLab卓越的分叉器可以在GitHub上找到RTC库 。您可以通过访问github存储库并手动下载来实现此目的,或者只需单击此按钮即可下载zip

安装Adafruit_RTCLib库

对于RTC库,我们将要使用JeeLab出色的RTC库的分支。

要开始对RTC进行读写,您需要安装Adafruit_RTClib库(在github存储库中的代码)。可以从Arduino库管理器中获得它,因此我们建议使用它。

从IDE中打开库管理器。..

,然后输入 RTClib 来查找库。

查找 Adafruit RTClib (可能还有其他!)

单击安装

我们在Arduino上也有很棒的教程在以下位置安装库:

http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

完成后,重新启动IDE

了解代码

首次RTC测试我们将演示的第一件事是一个测试草图,它将每秒从RTC读取时间。我们还将显示如果您卸下电池并更换电池会发生什么,因为这会导致RTC停止。因此,要开始使用,请在未给Arduino供电或未将其插入USB的情况下从电池座中取出电池。等待3秒钟,然后更换电池。这将重置RTC芯片。现在加载下面的草图(也可以在示例→RTClib→ds1307 中找到),并在数据记录器防护罩打开的情况下将其上传到Arduino!(别忘了安装DS1307库)在运行下面的代码之前)

现在打开串行控制台,并确保将波特率正确设置为 57600波特,您应该看到以下内容:

只要RTC芯片失去所有电源(包括备用电池) ),它将以0:0:0的形式报告时间,并且不会计数秒(停止)。无论何时设置时间,它都会开始计时。因此,基本上,这样做的结果是,一旦设置了时间,就永远不要卸下电池。您不需要,电池座也非常贴合,因此除非面板被压碎,否则电池不会“掉落”

设置时间加载相同的草图后,取消注释以 RTC开始的行。调整 像这样:

下载:文件

复制代码

if (! rtc.initialized()) {

Serial.println(“RTC is NOT running!”);

// following line sets the RTC to the date & time this sketch was compiled

rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); if (! rtc.initialized()) {

Serial.println(“RTC is NOT running!”);

// following line sets the RTC to the date & time this sketch was compiled

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

这行很可爱,它的作用是根据您使用的计算机获取日期和时间(当您编译代码)并将其用于对RTC进行编程。如果您的计算机时间设置不正确,则应首先解决该问题。然后,您必须按上传按钮进行编译,然后立即上传。如果您先编译然后再上传,则时钟将在该时间段内关闭。

然后打开“串行”监视器窗口以显示时间已设置。

从现在开始,您将不再再次设置时间:电池将使用5年或以上。

读取时间 现在RTC快活了,我们想查询一下时间。让我们再次查看草图以了解其操作方法。

下载:文件

复制代码

void loop () {

DateTime now = rtc.now();

Serial.print(now.year(), DEC);

Serial.print(’/‘);

Serial.print(now.month(), DEC);

Serial.print(’/‘);

Serial.print(now.day(), DEC);

Serial.print(“ (”);

Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);

Serial.print(“) ”);

Serial.print(now.hour(), DEC);

Serial.print(’:‘);

Serial.print(now.minute(), DEC);

Serial.print(’:‘);

Serial.print(now.second(), DEC);

Serial.println(); void loop () {

DateTime now = rtc.now();

Serial.print(now.year(), DEC);

Serial.print(’/‘);

Serial.print(now.month(), DEC);

Serial.print(’/‘);

Serial.print(now.day(), DEC);

Serial.print(“ (”);

Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);

Serial.print(“) ”);

Serial.print(now.hour(), DEC);

Serial.print(’:‘);

Serial.print(now.minute(), DEC);

Serial.print(’:‘);

Serial.print(now.second(), DEC);

Serial.println();

使用RTClib获得时间的方法几乎只有一种,即调用 now(),该函数将返回一个DateTime对象,该对象描述您在调用 now()时的年,月,日,时,分和秒。

有些RTC库可以让您调用诸如 RTC.year()和 RTC.hour()之类的东西来获取当前的年份和小时。但是,存在一个问题,如果您碰巧在下一分钟滚动之前在 3:14:59 询问分钟,然后在分钟滚动之后的第二分钟问(所以在 3:15:00 ),您会看到时间为 3:14:00 ,该时间需要一分钟。如果您以其他方式进行操作,则可能会得到 3:15:59 -在另一方向上间隔一分钟。

因为这种情况发生的可能性不大-特别是如果您经常查询时间-我们会一次从RTC中获取时间的“快照”,然后将其拆分为 day()或 second() 如上所示。花费更多的精力,但是我们认为避免错误是值得的!

我们还可以通过调用 unixtime 来从DateTime对象中获取“时间戳”,该计数会计数自1970年1月1日午夜以来的秒数(不计算leap秒)

下载:文件

复制代码

Serial.print(“ since 1970 = ”);

Serial.print(now.unixtime());

Serial.print(“s = ”);

Serial.print(now.unixtime() / 86400L);

Serial.println(“d”); Serial.print(“ since 1970 = ”);

Serial.print(now.unixtime());

Serial.print(“s = ”);

Serial.print(now.unixtime() / 86400L);

Serial.println(“d”);

由于一天中有60 * 60 * 24 = 86400秒,因此我们可以很容易地算出好。当您想要跟踪自上次查询以来已经过去了多少时间,使一些数学变得容易得多时(例如检查是否在5分钟后,只需查看 unixtime()),这可能会很有用。 增加了300,您不必担心小时变化。

下载

数据表和文件您可以在GitHub上找到strong》

EagleCAD PCB文件

Adafruit Fritzing库中可用的Fritzing对象

DS1307产品页面

示意图

构造打印

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130304
  • DS1307
    +关注

    关注

    1

    文章

    34

    浏览量

    14001
收藏 人收藏

    评论

    相关推荐

    Ds1307 RTC连接到CR2032电池,就会卡住的原因?

    每当我从电源向 ds1307 RTC 施加电压时,它都能正常工作,但一旦我将其连接到 CR2032 电池,它就会卡住,时间不起作用。我检查了电池的电压,它是3v,但在电阻后,ds1307 IC上提供的电压约为1.5v。因此,DS1307
    发表于 01-22 08:02

    如何在树莓派Pico上编程使用DS1302时钟模块?

    常用的计时时钟芯片有 DS1302、DS1307DS3231,各型号还有衍生型号。
    的头像 发表于 11-28 09:16 978次阅读

    DS1302时钟模块及其驱动代码介绍

    现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。
    的头像 发表于 11-08 17:18 1898次阅读
    <b class='flag-5'>DS</b>1302<b class='flag-5'>时钟</b>模块及其驱动代码介绍

    Arduino篇—实时时钟

    DS1307时钟模块:** DS1307串行实时时钟(RTC)是低功耗,全二进制编码的十进制(BCD)时钟/日历以及56字节的NV SRAM
    的头像 发表于 11-01 16:49 930次阅读
    Arduino篇—<b class='flag-5'>实时时钟</b>

    DS1302实时时钟相关资料

    DS1302实时时钟
    发表于 10-10 07:49

    实时时钟芯片DS1302应用资料

    广泛应用于需要时间显示的测控系统或者手持式设备中。u3000u3000本章以美国DALLAS公司推出实时时钟芯片DS1302为例,介绍实时时钟芯片的功能、控制指令以及时间的操作,并给出了相应的操作
    发表于 09-26 08:27

    DS1302实时时钟资料包分享

    电子发烧友网站提供《DS1302实时时钟资料包分享.zip》资料免费下载
    发表于 09-15 16:01 4次下载
    <b class='flag-5'>DS</b>1302<b class='flag-5'>实时时钟</b>资料包分享

    基于单片机的DS1302实时时钟实验 实时时钟芯片DS1302的工作原理

    在许多系统当中都需要精确的时钟功能,因此时钟芯片孕育而生。其中美国达拉斯 DALLAS 公司设计的 DS1302 是一款非常流行的数字时钟芯片。DS
    的头像 发表于 07-27 18:27 3471次阅读
    基于单片机的<b class='flag-5'>DS</b>1302<b class='flag-5'>实时时钟</b>实验 <b class='flag-5'>实时时钟</b>芯片<b class='flag-5'>DS</b>1302的工作原理

    STM32 RTC实时时钟(一)

    STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建实时时钟系统。
    的头像 发表于 07-22 15:41 2858次阅读
    STM32 RTC<b class='flag-5'>实时时钟</b>(一)

    使用Visuino在I2C LCD显示屏上显示DS1307的日期

    电子发烧友网站提供《使用Visuino在I2C LCD显示屏上显示DS1307的日期.zip》资料免费下载
    发表于 07-13 11:30 0次下载
    使用Visuino在I2C LCD显示屏上显示<b class='flag-5'>DS1307</b>的日期

    实时时钟芯片RTC DS1307的工作原理解析

    实时时钟芯片RTCDS1307是一种广泛使用的芯片,可为外部应用提供准确的时间和日期信息。这些芯片提供秒,分钟,小时,日,月和年,它实际上用作数字日历。这种芯片只消耗更少的功率和空间,因此广泛用于许多嵌入式应用。
    的头像 发表于 06-29 18:15 2956次阅读
    <b class='flag-5'>实时时钟</b>芯片RTC <b class='flag-5'>DS1307</b>的工作原理解析

    使用RTC DS1307在TM1637 LED显示屏上的Arduino显示时间

    电子发烧友网站提供《使用RTC DS1307在TM1637 LED显示屏上的Arduino显示时间.zip》资料免费下载
    发表于 06-28 15:35 0次下载
    使用RTC <b class='flag-5'>DS1307</b>在TM1637 LED显示屏上的Arduino显示时间

    关于由Paul Stoffregen维护的用于DS1307 RTC的聪明TimeAlarms库的问题求解

    我有一个关于由 Paul Stoffregen 维护的用于 DS1307 RTC 的聪明 TimeAlarms 库的问题。我正在查看 readme.txt 文件,它显然可以在各种不同情
    发表于 05-25 09:01

    基于51单片机的DS12C887实时时钟例程源代码

    基于51单片机的DS12C887实时时钟例程源代码
    发表于 05-12 16:01 5次下载

    基于AT89C51单片机1602液晶显示的DS1302实时时钟

    基于AT89C51单片机1602液晶显示的DS1302实时时钟Proteus仿真及程序
    发表于 05-04 15:18 2次下载