Модуль часов реального времени 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); }
НЕ пойму, как часы устанавливают начальное текущее время ?
time.settime(0,5,11,30,1,20,4); // 0 сек, 5 мин, 11 час, 30, января, 2020 года, четверг
Это понятно. Как установить реальное текущее время ? Или вписать руками с запасом на компилирование и загрузку кода ?