Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

Подключение часов реального времени ds1302 к Arduino

Подключение часов реального времени ds1302 к Arduino

Итак, часы реального времени. Эта полезная штучка решает большинство полезных задач, связанных со временем. Допустим управление поливом в 5 часов утра на даче. Или включение и выключение освещения в определённый момент. По дате можно запускать отопление в каком-нибудь доме. Вещь достаточно интересная и полезная. А конкретно? Мы с вами рассмотрим часы реального времени DS1302 для популярной платформы Arduino.

Из этой статьи вы узнаете:

Часы реального времени DS1302
Способ программирования Arduino для работы с DS1302

Доброго времени суток, уважаемые читатели блока kip-world! Как ваши дела? Напишите в комментариях, вы увлекаетесь робототехникой? Что значит для вас эта тема?

У меня ни на минуту не покидает мысль об этом. Я сплю и вижу, когда мы наконец — то придём к тому, что каждый сможет позволить себе купить персонального робота — помощника. Не важно, чем он будет заниматься, уборкой мусора, стрижкой газонов, мойкой автомобиля.

Я просто представляю себе, насколько сложные алгоритмы они должны содержать в своих «мозгах».

Louis roederer cristal brut на сайте wiski.ru.

Ведь мы придём к тому, что мы будем так же прошивать ПО, как на персональных компах. Так же скачивать прикладные программы. Пришивать руки, ноги, менять клешни, манипуляторы.

Посмотрите фильмы «Я-робот», «Искусственный интеллект», «Звёздных воинов».

Японцы уже давно внедряют свои разработки. Чем мы хуже?? У нас очень слабая популярность. Я знаю немногих разработчиков. По пальцам пересчитать. Мы занимаемся другим. Мы перекупщики. Просто покупаем готовые наборчики, роботов — игрушек и всякую дребедень.

Почему не разрабатываем вот это:

Геты

Или вот это:

Я закончил свои размышления вслух. Давайте мы с вами поговорим о подключении Таймера часов реального времени DS1302 к Arduino.

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

Контроллер Arduino не имеет своих собственных часов. Поэтому в случае необходимости нужно дополнять специальной микросхемой DS1302.

Таймер DS1302

По питанию эти платы могут использовать свой элемент питания, или запитываться непосредственно с платы Arduino.

Таблица распиновки:

VCCПитание (+5V)
GNDЗемля (GND)
CLKК цифровому пину Arduino ( в примере — пин 6, Arduino UNO)
DATК цифровому пину Arduino ( в примере — пин 7, Arduino MEGA UNO)
RSTК цифровому пину Arduino ( в примере — пин 8, Arduino MEGA UNO)

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

Arduino-DS1302

Способ программирования Arduino для работы с DS1302

Обязательно нужно скачать действующую библиотеку из надёжных источников.

Универсальная библиотека для DS1302, DS1307, DS3231.

Библиотека позволяет считывать и записывать параметры реального времени. Небольшое описание я привожу ниже:

#include <iarduino_RTC.h> // Подключаем библиотеку.
iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ [, ВЫВОД_RST [, ВЫВОД_CLK [, ВЫВОД_DAT ]]] ); // Создаём объект.

Функция begin (); // Инициализация работы RTC модуля.

Функция settime ( СЕК [, МИН [, ЧАС [, ДЕНЬ [, МЕС [, ГОД [, ДН ]]]]]] ); // Установка времени.

Функция gettime ( [ СТРОКА ] ); // Чтение времени.

функция blinktime ( ПАРАМЕТР [ ЧАСТОТА ] ); // Заставляет функцию gettime «мигать» указанным параметром времени.

функция period ( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах.

Переменная seconds // Возвращает секунды от 0 до 59.

Переменная minutes// Возвращает минуты от 0 до 59.

Переменная hours // Возвращает часы от 1 до 12.

Переменная Hours // Возвращает часы от 0 до 23.

Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm).

Переменная day // Возвращает день месяца от 1 до 31.

Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).

Переменная month // Возвращает месяц от 1 до 12.

Переменная year // Возвращает год от 0 до 99.

Пишем простенькую программу. Установка текущего времени в RTC модуль (DS1302):

Считываем текущее время с RTC модуля (DS1302) и выводим в "Последовательный порт" :

С вами на связи был я, Сёма. Пишите в комментах, подписывайтесь на новости, пишите письма.

С уважением, Гридин Семён.

Вам так же может быть интересно

Комментариев к статье: 18
  • Доброго времени суток)

    Хорошая микросхемка, стабильная.

    «По питанию эти платы могут использовать свой элемент питания, или запитываться непосредственно с платы Arduino.» — внешнее питание микросхеме в любом случае необходимо для чтения/записи текущих времени/даты/пользовательских данных. Элемент питания на самом шилде используется исключительно для тактирования в отсутствии основного питания.

    И скетчи все-таки не тру)

    Где романтика с самописными библиотеками, ногодрыгом и курением даташита? =)))

    (как раз недавно пришлось этим заниматься с DS1307 ;-) )

    А так неплохая статья) Удачи и всего хорошего =)

  • Юрик, привет, спасибо за комментарий. Времени не очень хватает на электронную романтику, вкуривания даташита и придумывания собственных библиотек.

    Пока изучал поверхностно… :o

    Насчёт питания я уловил мысль…

  • Добрый день!

    А как с помощью данной библиотеки с подключенным DS1302 читать и писать в память часов данные (вроде память у нее 32 байта…)?

    • Привет, записывать в память я полагаю вот так

      clock.set (20,29,45,27,07,2005,THURSDAY); ,

      запросить вот так

      clock.read ();

      присвоить переменным вот так

      int hour = clock.getHour ();

      int minute = clock.getMinute ();

      • Так не получится

        'class iarduino_RTC' has no member named 'getHour'

        :roll:

  • Доброе время суток,

    После подключения Ардуино упорно в монитор выводила полночь. По моему в примере перепутаны пины. Строку, «iarduino_RTC time (RTC_DS1302,6,7,8);» поменял на «iarduino_RTC time (RTC_DS1302,8,6,7);» и все заработало.

    Может подскажите есть ли возможность синхронизации DS1302 с компьютером?

    • Приветствую, я так предполагаю — нет. Так как DS1302 напрямую не связывается с компьютером. С шильдиком работает скетч в Ардуино.

    • Можно это осуществить через serial и Python

  • Текст библиотеки читается с трудом! Одна строка пишется левой рукой, другая правой, а потом наоборот.

    • Именно в блоге не удобно, или сама библиотека?

  • Потому что библиотеку, как и код программы, писал не автор.

    Если решили скопировать, то укажите первоисточник. ;-)

    • Я и не отрицаю, в этой статье и код и библиотека не мои. Зачем изобретать велосипед, когда есть готовое в открытых источниках.

  • Не совсем понятно, что делает функция blinktime.

    • blinktime — это мигание объекта с указанной частотой, можно грубо назвать ШИМом

  • А вот подскажите вы используете команду time.begin ();, у других авторов я встречал вот так rtc.halt (false); //запуск часов

    rtc.writeProtect (false); //снять защиту от записи

    И еще что то пишут про непропаяные контакты у кварца. Так все же как правильно? У некоторых я вообще встречал схемы на аналоговых выходах. В целом мои часы не ходят, батарейка схема плата всё проверено 100500 раз. Всё же склоняюсь к кварцу

  • а как сделать так что бы время задавалось через ком порт а не в программе?

  • Как я понял из информации на сайте, переменные Hours и minutes уже встроены в библиотеку. Написал простенькую программу, чтобы по времени включался и выключался светодиод. При компиляции пишет, что переменная Hours не была объявлена. При вставке int Hours = clock.getHour (); пишет, что не видит clock.

    Что я делаю не так? ))

    #include

    iarduino_RTC time (RTC_DS1302, 8, 6, 7); // RST, CLK, DAT

    void setup () {

    delay (300);

    Serial.begin (9600);

    time.begin ();

    time.settime (0,59,15,17,05,20,7);

    pinMode (5, OUTPUT);

    }

    void loop (){

    if (Hours == 16 || minutes == 1) {

    digitalWrite (5, 1);

    }

    if (Hours == 16 || minutes == 5) {

    digitalWrite (5, 0);

    }

    }

  • А вот как такой пример реализовать? У меня например есть модуль реального времени (для случаев, когда пропало напряжение в сети) И мне нужно написать код таким образом, чтобы по циклу происходило считывание времени (сутки), сравнивалось с тем значением времени, что в программе, и если оно в диапазоне, выполнилось действие, если нет, то соответственно ждет своего часа. При отключении питания и повторном включении время в модуле продолжает тикать. Программа загрузилась и опять начала смотреть по коду, и сравнивать с реальным временем, нашла значение, выполнила код по условию, и дальше работает. Опыта в ардуинке можно сказать вообще нет, но нужно делать блок управления светом на аквариум. Хочется заложить этот минимум, когда падает электричество в сети и вырубается полностью все.