• Отличительные особенности:
  • Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом высокосности текущего года вплоть до 2100 г.
  • Дополнительное ОЗУ 31 x 8 для хранения данных
  • Последовательный ввод – вывод информации для сокращения выводов микросхемы
  • Выполнение всех функций при напряжении питания 2.0-5.5 В
    - выполнение всех функций при напряжении 2.0-5.5 В на дополнительном выводе питания
  • Потребление не более 300 нA при 2.5 В питания
  • Чтение и запись информации по одному байту или потоком
  • Исполнение в 8-ми выводном корпусе DIP, а также по заказу в 8-ми выводном SOIC корпусе для поверхностного монтажа
  • Простой 3-проводной интерфейс
  • Совместимость с TTL-микросхемами (Vcc= 5V)
  • Возможность поставки в промышленном диапазоне температур: от -40°C до+85°C
  • Совместимость с DS1202
  • Отличия от DS1202:
    возможность подключения встроенной цепи подзарядки к выводу Vcc1
    два вывода питания для подключения основного и резервного источника питания
    увеличено ОЗУ на 7 байт

Описание выводов:

X1, X2 подключение кварцевого резонатора 32.768 кГц
GND общий
RST сброс
I/O ввод - вывод данных
SCLK синхронизация последовательной связи
VCC1, VCC2 выводы питания

Структурная схема DS1302:

Общее описание:

Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом высокосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). Подключение DS1302 к микропроцессу упрощено за счет синхронной последовательной связи. Для этого требуется только 3 провода: (1) RST (сброс), (2) I/O (линия данных) и (3) SCLK (синхронизация последовательной связи). Данные могут передаваться по одному байту или последовательностью байтов до 31. DS1302 разработан, чтобы потреблять малую мощность и сохранять данные и информацию часов при потреблении менее 1 мкВт. DS1302 - преемник DS1202. В дополнение к основным функциям хранения времени DS1202, DS1302 имеет два вывода питания для подключения основного и резервного источника питания, возможность подключения программируемой цепи заряда к выводу VCC1 и семь дополнительных байтов ОЗУ.

Подключение:

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

RTC DS1307 Arduino UNO
GND GND
VCC +5V
SDA A4
SCL A5

Подключение DS1302 к Arduino:

RTC DS1302 Arduino UNO
GND GND
VCC +5V
RST 6 (Можно изменить на другие в скетче)
CLK 7 (Можно изменить на другие в скетче)
DAT

(Можно изменить на другие в скетче)

Подключение DS3231 к Arduino:

RTC DS3231 Arduino UNO
GND GND
VCC +5V
SDA A4
SCL A5

Модуль DS1302 часы реального времени на Алиэкспресс http://ali.pub/1br52w

Код программы для модуля 1302 и дисплей 1602 I2C

В зависимости от того какой модуль Вы подключаете, необходимо в программе указать

Для DS1302 :

time . begin (RTC_DS1302 , 10 , 13 , 12 );

#include

virtuabotixRTC myRTC(6, 7, 8); //CLK, DAT, RST

Программа

#include

#include

LiquidCrystal_I2C lcd(0x3F ,2,1,0,4,5,6,7,3, POSITIVE);

void setup() {

lcd.begin(16,2);

//myRTC.setDS1302Time(00,04, 12, 06, 18, 04, 2017);

void loop() {

myRTC.updateTime();

lcd.setCursor(0, 0);

lcd.print("date: ");

lcd.print(myRTC.dayofmonth);

lcd.print("/");

lcd.print(myRTC.month);

lcd.print("/");

lcd.print(myRTC.year);

lcd.print(" ");

lcd.setCursor(0, 1);

lcd.print("time: ");

lcd.print(myRTC.hours);

lcd.print(":");

lcd.print(myRTC.minutes);

lcd.print(":");

lcd.print(myRTC.seconds);

lcd.println(" ");

Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка

Преимущества библиотеки:

Библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.

Библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire

Для инициализации модуля необходимо вызвать функцию begin с названием модуля.

Подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)

Простота установки и чтения времени функциями settime и gettime

функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)

функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.

Библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt

Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на ~ 36 байт, при этом не затронув область памяти программ.

При вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.

При работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.

В библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента - количество минут (от 1 до 255)

если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа.

Функцию period достаточно вызвать один раз.

Подробное описание:

} // ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ: // // Подключение библиотеки: // #include // iarduino_RTC time(название модуля [, вывод SS/RST [, вывод CLK [, вывод DAT]]]); // если модуль работает на шине I2C или SPI, то достаточно указать 1 параметр, например: iarduino_RTC time(RTC_DS3231); // если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: iarduino_RTC time(RTC_DS1305,22); // если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: iarduino_RTC time(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT // // Для работы с модулями, в библиотеке реализованы 5 функции: // инициировать модуль begin(); // указать время settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]); // получить время gettime("строка с параметрами"); // мигать времем blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень) // разгрузить шину period (минуты); // // Функция begin(): // функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д. // // Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]): // записывает время в модуль // год указывается без учёта века, в формате 0-99 // часы указываются в 24-часовом формате, от 0 до 23 // день недели указывается в виде числа от 0-воскресенье до 6-суббота // если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение // пример: settime(-1, 10); установит 10 минут, а секунды, часы и дату, оставит без изменений // пример: settime(0, 5, 13); установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений // пример: settime(-1, -1, -1, 1, 10, 15); установит дату 01.10.2015 , а время и день недели оставит без изменений // // Функция gettime("строка с параметрами"): // функция получает и выводит строку заменяя описанные ниже символы на текущее время // пример: gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu" // пример: gettime("s"); ответит строкой "05" // указанные символы идентичны символам для функции date() в PHP // s секунды от 00 до 59 (два знака) // i минуты от 00 до 59 (два знака) // h часы в 12-часовом формате от 01 до 12 (два знака) // H часы в 24-часовом формате от 00 до 23 (два знака) // d день месяца от 01 до 31 (два знака) // w день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота) // D день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun) // m месяц от 01 до 12 (два знака) // M месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) // Y год от 2000 до 2099 (четыре знака) // y год от 00 до 99 (два знака) // a полдень am или pm (два знака, в нижнем регистре) // A полдень AM или PM (два знака, в верхнем регистре) // строка не должна превышать 50 символов // // если требуется получить время в виде цифр, то можно вызвать функцию gettime() без параметра, после чего получить время из переменных // seconds секунды 0-59 // minutes минуты 0-59 // hours часы 1-12 // Hours часы 0-23

Опубліковано 18.08.2011

– это микросхема реального времени. Она обеспечивает ход времени, даже когда основное устройство отключено от питания.

Основные характеристики:

  • – простота подключения к микроконтроллеру по трехпроводному интерфейсу.
  • – питание от 2 до 5.5 В.
  • – из внешних элементов часовой кварц 32768 Гц и батарейка резервного питания 3В (я использую RC2032). Батарейки хватает надолго, микросхема потребляет около 300 нА (нано ампер)!
  • – считает секунды, минуты, часы, день месяца, месяц, год, день недели. Учитываются високосные года. Микросхема сможет работать до 2100года. Дальше не хватит счетчика лет. Это, несомненно, опечалило меня. 🙂
  • – отображение времени в 12 или 24 часовом режимах с отображением AM или PM

Нюансы

Иногда пишут “в микросхеме есть встроенный календарь до 2100 года”. Не спешите удивляться, это всего лишь означает, что подсчет времени ведется с учетом високосных лет. И все! На самом деле даже день недели надо устанавливать. Т.е. день недели не определяется по установленной дате. День недели работает как простой счетчик и переключается в полночь. Но с другой стороны, это очень удобно. Ведь в Восточной Европе принято считать первый день недели понедельник, а на западе первый день недели – воскресенье. В данном случае микросхеме абсолютно все равно. Устанавливаем текущий день недели по собственному исчислению, а дальше он будет изменяться каждую полночь.

Подключение к МК

Распиновка микросхемы:

Подключение к микроконтроллеру:

взяты с документации, которую можно скачать здесь:

Библиотека для GCC WinAVR

Честно говоря, сразу я хотел не заморачиваться и использовать уже готовую библиотеку. Так и сделал, скачал даже две. Одну написал русский программист, а вторую иностранец. Обе не работали должным образом. В первом случае почему-то не выставлялся день больше магического 7 дня месяца, ну конечно, о 12 часовом режиме в России никогда не слышали, а буковки AM PM, для нас славян, чужды и не понятны. Во втором случае… уже догадались? Да! Иностранцы не учли, что где то на планете коварные нации исчисляют время до 24 часов!!! Вдобавок, год записывал (соответственно и считывал) не правильно. Т.е. оно конечно как то работает, но в следующем году вылезут все баги. Плюнул, написал свою простую библиотеку.

Перед тем как использовать библиотеку, откроем файл
В нем правим только эти параметры:

#define DS1302_E 0 #define DS1302_SCLK 1 #define DS1302_IO 2 #define DS1302_DDR_RTC DDRC #define DS1302_PORT_RTC PORTC #define DS1302_PIN_RTC PINC

Т.е. описываем к каким ногам и к какому порту подключена наша .

Обратите внимание, что в этом же файле описана структура:

Typedef struct { uint8_t Sec; uint8_t Min; uint8_t Hour; uint8_t Month; uint8_t Day; uint8_t Year; uint8_t WeekDay; uint8_t AMPM; uint8_t H12_24; } tpDateTime; tpDateTime DateTime;

Через нее и будет выполняться взаимосвязь (запись и чтение) с .

В библиотеке всего две функции:
void DS1302_ReadDateTime();
void DS1302_WriteDateTime();

Для установки времени в микросхеме необходимо
1. В структуру DateTime задать время и режим (12 или 24 часовой)
2. Вызвать функцию DS1302_WriteDateTime();

Для чтения времени из микросхемы:
1. Вызвать функцию DS1302_ReadDateTime();
2. Читать время и режим из структуры DateTime .

Обратите внимание, что DateTime.AMPM и DateTime.H12_24 задаются следующим образом:

DateTime.AMPM = AM; или DateTime.AMPM = PM;

DateTime.H12_24 = H12; или DateTime.H12_24 = H24;

Пример использования:

#include #include #include "lcd_lib.h" #include "ds1302.h" char buffer=""; int main() { // Задаем время и параметры (AM/PM следует задавать только при H12) DateTime.Sec = 57; DateTime.Min = 59; DateTime.Hour = 11; DateTime.Month = 8; DateTime.Day = 16; DateTime.Year = 11; DateTime.WeekDay = 2; DateTime.AMPM = AM; //AM/PM DateTime.H12_24 = H12; //H12/H24 // Записываем время в микросхему ds1302 DS1302_WriteDateTime(); // Инициализация дисплея LCDinit(); LCDcursorOFF(); LCDclr(); while(1) { // Читаем время с микросхемы ds1302 DS1302_ReadDateTime(); // Выводим время и дату на дисплей sprintf(buffer, "%02i:%02i:%02i", DateTime.Hour, DateTime.Min, DateTime.Sec); LCDGotoXY(0,0); LCDstring(buffer, 8); if (DateTime.H12_24 == H12) { if (DateTime.AMPM == AM){ LCDsendChar("A"); } else { LCDsendChar("P"); } LCDsendChar("M"); } sprintf(buffer, "%02i-%02i-%02i,%i", DateTime.Day, DateTime.Month, DateTime.Year, DateTime.WeekDay); LCDGotoXY(0,1); LCDstring(buffer, 10); _delay_ms(100); } }

Внимание! В примере в следующих строках устанавливается заранее указанное время при старте микроконтроллера.

DateTime.Sec = 57; DateTime.Min = 59; DateTime.Hour = 11; DateTime.Month = 8; DateTime.Day = 16; DateTime.Year = 11; DateTime.WeekDay = 2; DateTime.AMPM = AM; //AM/PM DateTime.H12_24 = H12; //H12/H24 // Записываем время в микросхему ds1302 DS1302_WriteDateTime();

Т.е. при каждом включении питания микроконтроллер будет устанавливать одно и то же время. Если в микросхеме уже установлено время (разумеется, при подключенной батарейки), можно закомментировать функцию DS1302_WriteDateTime(); скомпилировать и прошить микроконтроллер новой прошивкой. После чего он будет только читать время из микросхемы.

Описание

Модуль часов реального времени с независимым питанием. Контроллеры Arduino/Genuino не имеют встроенных часов реального времени. Для работы со временем есть функция millis(). Однако, для проектов где требуется время и дата, возможностей данной функции недостаточно и на помощь приходят часы реального времени.

Модуль часов выполнен на основе чипа ds-1302. Часы позволяют считать секунды, минуты, часы, день недели, день месяца, месяц, год с учетом високосных лет до 2100 года. Есть возможность вести 12 или 24 часовой учет времени. Подсоединение осуществляется посредством стандартных проводов «папа-мама».

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

Для питания модуля используется батарейка CR2032, 3В.

Технические характеристики

    Напряжение внешнего питания: 5 - 5,5 В

    Напряжение питания батареи: 2,0 - 3,5 В

    Тип батарейки: CR2032

    Потребляемый ток: 300 нА

Физические размеры

    Модуль (Д х Ш х В): 44 х 23 х 11 мм

Плюсы использования

    Недорогое решение для получения времени и даты

    Просты в работе

Минусы использования

    Не работают от внешнего питания (только от батареи)

    При подключении требуется резистор, что затрудняет легкое подключение к модулю

Библиотека для работы с модулем

Примеры подключения и использования

Пример 1: В примере иллюстрируется подключение модуля часов к контроллеру, и установка времени на часах. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки: Установку времени для часов достаточно запустить один раз

#include //создание объекта часы void setup() { rtc.halt (false ) ; //запуск часов rtc.writeProtect (false ) ; //снять защиту от записи //Установка даты rtc.setDOW (TUESDAY) ; //установка дня недели (только на английском) rtc.setTime (10 , 48 , 0 ) ; //установка времени (часы, минуты, секунды) rtc.setDate (21 , 6 , 2016 ) ; //Дата цифрами. "0" перед одиночной цифрой можно не ставить } void loop() { }

Пример 2: В примере иллюстрируется подключение модуля часов к контроллеру, определение текущих значений времени и даты. Значения времени и даты выводятся в монитор Serial - порта. (Примеры тестировались на контроллере Smart UNO)

Схема подключения:

Скетч для загрузки:

#include //подключение библиотеки для работы с часами DS1302 rtc(10 , 9 , 8 ) ; //создание объекта часы void setup() { rtc.halt (false ) ; //запуск часов Serial .begin (9600 ) ; //инициализация Serial-порта } void loop() { String weekDay = rtc.getDOWStr (FORMAT_LONG) ; //получить день недели String theDate = rtc.getDateStr () ; //получить дату String theTime = rtc.getTimeStr () ; //получить время Serial .println ("The day of week is " + weekDay) ; //вывести день недели Serial .println ("The date is " + theDate) ; //вывести текущую дату Serial .println ("Time: " + theTime) ; //вывести время delay (1000 ) ; //задержка на 1 секунду }

Началось все с того, что волею случая я оказался владельцем текстового ЖК экрана BTHQ 22005VSS (2 строки по 20 знаков в каждой) и платы электронных часов DS1302. По правде говоря, в «Ардуиностроении» я делаю первые шаги, по этому, в приобретении данных деталей решающую роль сыграла демократичная цена и возможность быстрой доставки. Ведь, зачастую ждать, когда «девайс» прибудет из Поднебесной, обогнув почти «пол мира» некогда, да и просто не хочется.

Почему именно часы? В то время, когда вокруг продается масса разнообразных часов, цена самых простых из которых сравнима с пакетом сока. А дело все в том, что зачастую необходимо не просто знать точное время (и дату, что тоже иногда нужно) но еще и оперировать этим временем. Например - вести логи изменения температуры (влажности, давления, освещенности и т.п.) с указанием точного времени, когда эти изменения произошли. Вот тут-то ARDUINO оснащенный часами и окажет замечательную услугу. Да и кроме того, приятно, когда прибор ко всему прочему показывает еще и время. Ведь, даже работая на персональном компьютере мы изредка, да поглядываем в правый нижний угол, а вдруг уже пора на обед, или наступил конец рабочего дня, а может быть уже скоро рассвет?

Сердцем данного проекта послужил ARDUINO UNO, приобрести который довольно просто - это, конечно, если хочется купить что-то качественное и быстро. Можно, конечно найти и дешевле, но опять-же ждать, а ждать не хотелось. «Ардуинка» бодро моргала светодиодиком, выполняла все, что от неё требовалось давая простенькие сообщения через последовательный порт, в общем радовала. Но вернемся к часам. Проблемы начались, как всегда, неожиданно. Толковых статей и всего остального ни на экранчик, ни на часы «слёту» найти не удалось. На другие экраны - есть, на другие часы - сколько угодно, а вот на то, что в руках - почти ничего. Но, когда нет ничего - «почти» это тоже очень много.

Начнем с экрана. BTHQ 22005VSS оказался банальным ЖК экраном 20х2 (т.е. имеет 2 строки по 20 символов в каждой) вместо него вполне можно использовать, например экран - правда в нем «всего» 16 символов в каждой из строк, но для большинства проектов этого более, чем достаточно. Данный экран имеет 16-пиновый разъем, правда не однорядный, а двухрядный (2х8), если держать устройство экраном от себя, а разъемом справа, то первый пин будет нижним левым, второй нижним правым, третий над первым, четвертый над вторым, и т.д. Верхний левый (15) будет анод, верхний правый (16) - катод. Если есть знания английского и любознательность - можно почитать техническое описание . Если первого крайне мало, а любознательность гораздо слабее желания поэкспериментировать - вот, как подключал я:

Контакт экрана Контакт Ардуино Примечание
1 GND Это «минус», или «земля».
2 +5V
3 GND Если нужны яркие знаки.
4 4
5 GND Если только «писать».
6 5
7 -- Не использовал
8 -- Не использовал
9 -- Не использовал
10 -- Не использовал
11 10
12 11
13 12
14 13
А(15) +5V Я подключил через резистор 500 Ом
К(16) GND

В некоторых источниках «распиновка» со стороны Ардуино отличается, но ведь мне было удобнее так. Подключение часов также не вызвало проблем:

Часы DS1302 Ардуино Примечание
VCC +5V
GND GND Тут я подключал через резистор 10кОм.
CLK 0 Не путать с GND!!! Контакт также называется SCLK
DAT 1 Контакт также называется IO
RST 3 Контакт также называется СЕ

Подключать можно проводками, шлейфом, лично я собрал на макетной плате.

Проблемы начались, когда был загружен демоскетч и часы заработали. Правда показали они 2165 год, 45 месяц, 85 неделю... Наверное это по «уранскому» или «нептунскому» календарю… Но жить мне на Земле, а на Уран с Нептуном я пока не собираюсь. В общем надо что-то делать. Пайка в цепь GND->GND резистора 10кОм не помогла. Проблема оказалась в некорректной библиотеке. Сразу скажу, что корректную библиотеку можно взять . Это для часов. Экранчик успешно пользуется библиотекой из стандартного набора, которая зовется LiquidCrystal.h .

Проблема №2. Часы при каждом запуске начинают отсчет с того времени, которое «прошито» в программе. Есть сложное решение этой проблемы. Создать хеш, записать его в память часов, потом, при запуске считать его оттуда, сравнить… В общем для новичка в «Ардуиностроении» как то сложновато. Как оказалось есть и простое решение. точнее очень простое. А именно - прошить 2 раза. Первый раз - прошить с установкой даты и времени, второй раз прошить, предварительно «закомментировав» (поставив знак // в самом начале строки) строки с установкой этой самой даты.

Собственно говоря скетч:

// DS1302_LCD (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
// A quick demo of how to use my DS1302-library to make a quick
// clock using a DS1302 and a 20x2 LCD.
// Соответствие пинов часов и экрана пинпм Ардуино.
// DS1302: CE pin -> Arduino Digital 3
// I/O pin -> Arduino Digital 1
// SCLK pin -> Arduino Digital 0
// LCD: DB7 -> Arduino Digital 13
// DB6 -> Arduino Digital 12
// DB5 -> Arduino Digital 11
// DB4 -> Arduino Digital 10
// E -> Arduino Digital 5
// RS -> Arduino Digital 4

#include // Подключение библиотеки экрана.
#include // Подключение библиотеки часов.

// Инициализация пинов часов
DS1302 rtc(3, 1, 0);
// Инициализация пинов экрана
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);

void setup()
{
// Запуск часов
rtc.halt(false);
rtc.writeProtect(false);

// Запуск экрана с указанием количества символов и строк
lcd.begin(20, 2);

// Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем.
//rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать!
//rtc.setTime(11, 41, 0); // Часы, минуты, секунды 24-часовой формат.
//rtc.setDate(13, 6, 2013); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить!
}

void loop()
{
// Display time centered on the upper line
lcd.setCursor(6, 0); // Устанавливаем курсор для печати времени в верхней строчке
lcd.print(rtc.getTimeStr()); // Печатаем время

// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 1); // Устанавливаем курсор слева внизу для печати дня недели
lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет.

// Display date in the lower right corner
lcd.setCursor(9, 1); // Устанавливаем курсор для печати даты
lcd.print(rtc.getDateStr()); // Печатаем дату

// Wait one second before repeating
delay (1000); // Пауза 1 секунда и все по новой!
}

setTime(hour, min, sec);
Установка времени.
Параметры:
hour: Часы (0-23)
min: Минуты (0-59)
sec: Секунды (0-59)
Пример: rtc.setTime(23, 59, 59); // Установка времени 23:59:59
Примечание: Установка времени сбрасывает флаг CH (Clock Halt).

setDate(date, mon, year);
Установка даты.
Параметры:
date: День (1-31)
mon: Месяц (1-12)
year : Год (2000-2099)
Пример: rtc.setDate(6, 8, 2015); // Установка даты 6 августа 2015г.
Примечание: Защиты от ввода неправильной даты нет. Т.е., возможно ввести 31 февраля, но результат будет не предсказуем

setDOW(dow);
Установка дня недели.
Параметры:
dow: День недели (1-7)
Пример: rtc.setDOW(FRIDAY); // Установить день недели - Пятница
Примечание: Устанавливаются от понедельника (1) до воскресенья (7).

getTimeStr();
Считать текущее время в виде строковой переменной.
Параметры :
format: <необязательный параметр>
FORMAT_LONG "ЧЧ:ММ:СС" (По умолчанию)
FORMAT_SHORT "ЧЧ:ММ"
Пример: Serial.print(rtc.getTimeStr()); // Отправить текущее время через последовательный порт

getDateStr(]]);
Считать текущую дату в виде строковой переменной.
Параметры:
slformat: <необязательный параметр>
FORMAT_LONG Год из 4х цифр (ГГГГ) (По умолчанию)
FORMAT_SHORT Год из 2х цифр (ГГ)
eformat: <необязательный параметр>
FORMAT_LITTLEENDIAN "ДД.ММ.ГГГГ" (По умолчанию)
FORMAT_BIGENDIAN "ГГГГ.ММ.ДД"
FORMAT_MIDDLEENDIAN "ММ.ДД.ГГГГ"
divider: <необязательный параметр>
Символ для разделения. По умолчанию "."
Пример: Serial.print(rtc.getDateStr()); // Отправить текущую дату через последовательный порт (В формате "ДД.ММ.ГГГГ")

getDOWStr();
Считать текущий день недели в виде строковой переменной.
Параметры:
format: <необязательный параметр>
FORMAT_LONG День недели на английском языке (По умолчанию)
FORMAT_SHORT Сокращенное название дня недели на английском языке (3 символа)
Пример: Serial.print(rtc.getDOWStr(FORMAT_SHORT)); // Отправить сокращенное название текущего дня недели через последовательный порт

getMonthStr();
Считать текущий месяц в виде строковой переменной.
Параметры:
format: <необязательный параметр>
FORMAT_LONG название месяца на английском языке (По умолчанию)
FORMAT_SHORT Сокращенное название месяца на английском языке (3 символа)
Пример: Serial.print(rtc.getMonthStr()); // Отправить название текущего месяца через последовательный порт

halt(value);
Управление флагом СН (запуск-останов часов).
Параметры:
value:
true: Установить флаг CH
false: очистить флаг CH
Пример: rtc.halt (истина); // Установить флаг CH
Примечания: Когда флаг установлен, тактовый генератор
останавливается и DS1302 находится в режиме ожидания с низким энергопотреблением с током менее 100nA. Если флаг сбрасывается, часы начинают отсчет времени.

writeProtect(enable);
Установка или сброс WP-бита.
Параметры:
enable:
true: Установить WP-бит
false: Сбросить WP бит
Пример: rtc.writeProtect(false); // Сбросить WP-бит
Примечание: WP: (Write-Protect) бит. Блокирует запись информации в DS1302

setTCR(value);
Установка режима trickle charge (заряд малым током).
Параметры:
value: определенные литералы, обозначающие количество диодов и сопротивлений для зарядки.
Пример: rtc.setTCR(TCR_D1R4K); // Задан режим trickle charge 1 диод и резистор сопротивлением 4кОм.
Примечание: Литералы имеют вид TCR_DxRyK где х число диодов (1 или 2), а у - используемое сопротивление (2, 4 или 8 кОм). TCR_OFF отключает фунцию подзарядки.

writeBuffer(buffer);
Запись информации в ОЗУ DS1302.
Параметры:
buffer: DS1302_RAM буфер
Пример: rtc.writebuffer(ramBuffer); // Записать 31 байт из переменной ramBuffer в ОЗУ DS1302

readBuffer();
Чтение информации из ОЗУ DS1302.
Параметры: Нет
Пример: ramBuffer=rtc.readBuffer(); // Прочитать все 31 байт из ОЗУ DS1302 в переменную ramBuffer

poke(address, value);
Запись одного байта в ОЗУ DS1302.
Параметры:
address: адрес для записи (0-30)
value: число для записи по адресу

(0-255)
Пример: rtc.poke(15, 160); // Записать число 160 по адресу 15

peek(address);
Чтение одного байта из ОЗУ DS1302.
Параметры:
address: адрес для чтения (0-30)
Пример: b=rtc.peek(18); // Считать 1 байт по адресу 18 в переменную b