2

嘿,我最近几天一直在处理这个问题这个。

我正在尝试从 RTC(实时时钟计时器)获取时间,无论如何,我认为这是首字母缩略词,但是当我拔下 USB 电缆大约 10 秒钟然后重新连接它的那一刻,它会给我带来这些有趣的时刻。

像 2036 年和 46 小时 165 分钟这样的东西真的只是垃圾。所以我在某处读到,这些时间只是程序表示与设备没有连接的方式。我并没有真正得到,因为它永久插入,但嘿,这就是它想要的。

因此,这是我从库附带的示例中获得的基本代码。我想因为没有连接只是做一个while循环,直到设备连接这很好,但有时需要10秒才能启动。

RTC 有一个备用电池,并通过 SCL 到 A5 和 SDA A4 线

正如我所说,它可以工作,但需要很长时间才能启动并给我正确的时间。

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup () {
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();
 Serial.println("RTC capturing time!");
 while (! RTC.isrunning()) 
  {
    Serial.println("RTC is NOT running!");
    Wire.begin();
    RTC.begin();
  }  
Serial.println("RTC IS running!");
// following line sets the RTC to the date & time this sketch was compiled
//  RTC.adjust(DateTime(__DATE__, __TIME__));
}


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(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.println();
delay(1000);
}

输出看起来像这样,只是没有运行更多的 RTC!

RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC is NOT running!
RTC IS running!
2013/6/11 22:22:0

2013/6/11 22:22:2

2013/6/11 22:22:3

2013/6/11 22:22:4

2013/6/11 22:22:5

如果我不包括我的while循环想法,我会像我之前所说的那样把时间和日期弄得一团糟,直到由于某种原因它本身就正确了。

如果有人知道解决我的问题的更好方法,请告诉我,我真的很困惑为什么会发生这种情况。

4

2 回答 2

1

试试这个代码...

void setup () {
  Serial.begin(57600);
  Wire.begin();
  RTC.begin();
  Serial.println("RTC capturing time!");

  while (!RTC.isrunning()) 
  {
    // do not really need this, remove after testing
    Serial.println("RTC is NOT running!");

    delay(10);

  }  
  Serial.println("RTC IS running!");
  // following line sets the RTC to the date & time this sketch was compiled
  //  RTC.adjust(DateTime(__DATE__, __TIME__));
}
于 2013-06-12T04:29:52.137 回答
0

您应该澄清 USB 断开时如何为 RTC 供电。首先你应该检查电池是否真的很好。然后你需要确保 Arduino 注意到 RTC 是电池供电的。这是因为 RTC 将在电池供电时完全关闭 I2C --> 电源恢复时必须重新初始化 I2C。关键是您的 DS1307 库可能没有考虑到这一点。

如有疑问,您需要分析库的源代码并阅读 DS1307 芯片的数据表。

另一件事是数据表说

当 VCC 大于 VBAT+0.2V 时器件从电池切换到 VCC,并在 VCC 大于 1.25 x VBAT 时识别输入

你有没有在启动时测量过 VBAT 和 VCC?

于 2013-06-12T10:53:35.587 回答