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

Модуль часов реального времени  DS1307 собранный на базе микросхемы DS1307ZN с питание от литиевой батарейки (LIR2032), что позволяет работать автономно в течение длительного времени. Также на модуле, установлена энергонезависимая память EEPROM объемом 32 Кбайт (AT24C32).

Отличительные особенности:

  • Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом высокосности текущего года вплоть до 2100 г.
  • 56 байт энергонезависимого ОЗУ для хранения данных
  • 2 проводной последовательный интерфейс
  • Программируемый генератор прямоугольных импульсов
  • Автоматическое определение отключения основного источника питания и подключение резервного
  • Потребление не более 500 нA при питании от резервной батареи питания при температуре 25°C
  • Возможность поставки в промышленном диапазоне температур: от -40°C до+85°C

Библиотека iarduino_RTC поддерживает все функциональные возможности часов реального времени, проста в применении.

Плата Arduino Nano и часы реального времени DS1307 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация).

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5
#include <Wire.h>
#include <iarduino_RTC.h> // iarduino_RTC.zip
iarduino_RTC time(RTC_DS1307);
 
void setup() {
    delay(300);
    Serial.begin(9600);
    time.begin();
  // УСТАНОВКА ВРЕМЕНИ
  //  time.settime(0,5,11,30,1,20,4);  // 0  сек, 5 мин, 11 час, 30, января, 2020 года, четверг
  //  time.settime(-1, -1, -1, 30, 1, 20); // Установить дату 30.01.2020, а время и день недели оставить без изменений
}
void loop(){
      // time.gettime(); // опрос времени - использовать если не применяете time.gettime("d-m-Y, H:i:s, D")
 
      Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
      Serial.println(time.gettime("d-M-Y, H:i:s, D")); // выводим время
      // часы: h (01-12) / H (01-24)
      // день недели: D (Mon Tue Wed Thu Fri Sat Sun) / w (0-воскресенье, 6-суббота)
      // месяц: m (1-12) / M (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
      // год: Y (2020) / y (20)
      // полдень: a (am pm) / A (AM PM)
 
      Serial.println(); 
      // int & byte
      Serial.print("часы ");Serial.println(time.Hours);      // часы 0-24 // hours 0-12
      Serial.print("минуты ");Serial.println(time.minutes);    // минуты
      Serial.print("секунды ");Serial.println(time.seconds);  // секунды
      Serial.print("день ");Serial.println(time.day);        // день 0-31
      Serial.print("месяц ");Serial.println(time.month);      // месяц 1-12
      Serial.print("год ");Serial.println(time.year);       // год 
      Serial.print("день недели ");Serial.println(time.weekday);  // 0-воскресенье, 1-понедельник, ... , 6-суббота
 
      Serial.println();
 
    delay(1000);
}

Используя дисплей LCD1602(I2C) (на базе контроллера HD44780) можно сделать простые часы, которые будут показывать текущее время и дату.

#include <Wire.h>
#include <iarduino_RTC.h> // iarduino_RTC,zip
#include <LiquidCrystal_I2C.h>// http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  iarduino_RTC time(RTC_DS1307);
 
void setup() {
     Serial.begin(9600);
     time.begin();
     lcd.init();                     
     lcd.backlight();// Включаем подсветку дисплея
  //  time.settime(0,5,11,30,1,20,4);  // 0  сек, 5 мин, 11 час, 30, января, 2020 года, четверг
}
void loop(){
    //  time.gettime(); // опрос времени
      lcd.setCursor(4, 0);
      lcd.print(time.gettime("H:i:s")); // выводим время
      lcd.setCursor(1, 1);
      lcd.print(time.gettime("d-m-Y D")); // выводим время
 
    delay(1000);
}

Comments

Добавить комментарий

Войти с помощью: