Подключение DS1307 к Arduino

26-02-2020, 16:01 0 комментариев
В статье вы познакомитесь с механизмом подключения часов реального времени DS1307 к Arduino. Этот модуль для обзора мы выбрали не случайно – он популярен, необычайно легок в сборке и использовании, доступен по цене (продается буквально в каждом магазине, онлайн в том числе). Кроме того, он может функционировать без замены батареи на протяжении нескольких лет (в зависимости от производителя микроплаты).

Да и о практичности подобных устройств забывать не стоит. На их основе можно собрать не один интересный проект. В частности, их применяют в качестве элементов для проектирования будильников, сигнализации, снятия показаний с различных датчиков (в режиме реального времени). Главная особенность именно этого RTC-модуля – работа от автономного питания (в случае, если на вашем проекте оно пропало, часы все равно будут работать и не «собьются»).

Технические параметры прибора таковы:
  • напряжение питания: 5 V;
  • рабочая температура: – 40℃ … + 85℃;
  • память: 56 байт;
  • тип интерфейса: I2C (двухпроводной);
  • 24-х и 12-ти часовой режимы;
  • размеры: 28мм х 25мм х 8 мм.

Подключение DS1307 к Arduino

Модуль сочетается со многими платами расширения Ардуино, на которых питание логики равно 5 В. Для реализации нашего проекта понадобится следующее «железо»:
  • контроллер Arduino UNO 
  • USB -кабель (для подключения к персональному компьютеру)
  • RTC DS1307 
  • соединительный провод (перемычки)
Мы подключили RTC модуль DS1307 к Ардуино. Теперь можно приступать к программированию. Для корректного компилирования прошивки понадобятся библиотеки – DS1307RTC и TimeLib. Их можно отыскать и скачать в Интернете, а затем просто добавить в IDE (директория папки libraries).
Заливаем скетч для установки и проверки времени:
/* 
  Тестирование производилось на Arduino IDE 1.6.12
  Дата тестирования 23.11.2016г.
*/
 
#include <Wire.h>                           // Подключаем библиотеку Wire                           
#include <TimeLib.h>                        // Подключаем библиотеку TimeLib
#include <DS1307RTC.h>                      // Подключаем библиотеку DS1307RTC
 
const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
 
tmElements_t tm;
 
void setup() {
  bool parse=false;
  bool config=false;
 
  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }
 
  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time=\"");
    Serial.print(__TIME__);
    Serial.print("\", Date=\"");
    Serial.print(__DATE__);
    Serial.println("\"");
  }
}
 
void loop() {
}
 
bool getTime(const char *str)
{
  int Hour, Min, Sec;
 
  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}
 
bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;
 
  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}
Проверяем себя - открываем монитор последовательного порта (клавиши Ctrl+Shift+M). Там должно отобразиться что-то вроде текста: configured Time=16:38:47 Это означает, что вы все сделали правильно!

В целом программ по работе с часами в сети очень много – можно установить время вручную либо через монитор порта, можно поработать с миганием цифр и в общем – с выводом их на экран. Все в ваших руках! Пробуйте, оценивайте, тестируйте!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

Сегодня хотим рассказать вам о том, как происходит подключение DS3231 к Arduino и что это за электронное устройство. Речь идет о модуле часов реального...

Модуль энкодер KY-040 является электромеханическим устройством, а точнее - датчиком угла поворота и вращения оси различных девайсов. Непосредственно сам прибор...

В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...

В этой статье мы рассмотрим подключение ADS1115 к Ардуино. Речь идет о 16-битном аналого-цифровом преобразователе, оснащенном 4 входами непосредственно для...

Оставить комментарий