Вы здесь

Часы реального времени DS1307 и Arduino

DS1307  I2C модуль часов реального времени

В многих проектах, связанных с Arduino требуется знать точное время. Для этого удобнее всего использовать отдельные модули, которые считают время. существует большое количество разных часов реального времени, но все они имеют примерно одинаковые функции. Одной из самых распространённых систем для использования в модулях для Arduino используется микросхема DS1307, для которой существует большое количество библиотек под различные платформы. Подключение DS1307 RTClib как раз рассматривается в статье про подключение библиотек в Arduino IDE.

Эта микросхема работает по I2C интерфейсу связи, от 5 Вольт. Интересно то, что DS1307 имеет выход генератора с частотой 1000Гц, который производить импульсы высокого уровня каждую секунду. С помощью этой функции мы можем настроить прерывания, например для незамедлительного обновления времени на экране или для чего-то подобного.

Подключаем VCC и GND соответственно выходам питания на Arduino и пины SDL и SDA соответственно портам A5 и A4 на Arduino Uno (на других платах выходы интерфейса I2C могут находиться в другом месте).

Схема подключение DS1307 по I2C к Ардуино

 

 

 

#include <Wire.h>   // подключаем нужные библиотеки (RTClib)
#include "RTClib.h" // можно скачать из репозитория
RTC_DS1307 rtc; // "rtc" используется в начале функций, которые прилагаются с библиотекой

void setup ()
{

  Serial.begin(57600); // инициализируем Serial порт
  rtc.adjust(DateTime(2015, 11, 27, 3, 0, 0)); // задаём год/ месяц/ дата/ часы/ минуты/ секунды

}

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(3000); // каждые 3 секунды
}