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

电子说

1.3w人已加入

描述

概述

时钟

这是一个出色的电池支持实时时钟(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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分