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

3

В этой статье расскажу как подключить часы реального времени DS1302 к Arduino UNO. В прошлых статьях рассказывал о похожих модулях DS1307 и DS3231, которые работают таким же образом, что и DS1302, но основное различие между ними, это используемая линия связи с Arduino. Модули DS1307 и DS3231 используют линию I2C, а DS1302 использует трех проводную линию.

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

В этой статье расскажу как подключить часы реального времени DS1302 к Arduino UNO. В прошлых статьях рассказывал о похожих модулях DS1307 и DS3231, которые работают таким же образом, что и DS1302, но основное различие между ними, это используемая линия связи с Arduino. Модули DS1307 и DS3231 используют линию I2C, а DS1302 использует трех проводную линию.

Технические параметры HX711:

► Микросхема: DS1302;
► Номинальное напряжение: 2-5.5 В;
► Потребляемый ток: менее 300 нА;
► Рабочая частота: 32.768 кГц;
► ОЗУ: 31 байт;
► Габариты: 44 × 23 × 11 мм;
► Вес: 7 грамм.

Краткий обзор модуля DS1307

Основная и единственная микросхема на модуле, это DS1302, как еще называют «Real Time Clock» (Часы Реального Времени), сокращенно RTC. Данная микросхема поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Микросхема работает в 24-часовом или 12-часовом формате с индикатором AM/PM.

На плате, кроме микросхемы DS1302, установлен кварц на 32,768 кГц и бокс для батарейки тика CR2032. Для связи и подачи питания, предусмотрен пяти контактный разъем, шагом 2,54 мм.

Назначение контактов:
Vcc и GND — Питание модуля, 2 — 5.5 В;
CLK — Вход тактовой частоты последовательных данных.
DAT — Ввод/вывод последовательных данных
RST — Включение логике RTC

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

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Часы реального времени на DS1302, RTC x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Описание:
В примере покажу как подключить модуль DS1302 к Arduino UNO. В скетче установим текущие время и затем прочитаем его, полученные данные отправим в последовательный порт.

Подключение:
Схема не сложная, необходимо пять проводов, сначала подключаем шину Vcc и GND от модуля DS1302 к выводам Arduino 5 В и GND (можно и запитать и от 3.3 В), затем подключим CLK, DAT, RST от модуля DS1302 к выводам Arduino 6, 7, 8 (при необходимости, выводы можно поменять). Схема собрана, для удобства приведу принципиальную схему подключения.

Установка библиотек:
Для работы с модулем необходимо установить библиотеку «RTC by Makuna», для этого, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «1302», найдите библиотеку « RTC by Makuna » и установите данную библиотеку.

Программа:
Теперь запускаем среду разработку Arduino IDE и загружаем скетч в контроллер.

 Скачать скетч

Загрузите скетч и откройте «Последовательный монитор» из Arduino IDE. 

Вот и все, если будут вопросы пишите.

Ссылки
  Библиотека RtcDS1302
  Документация на DS1302

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Комплект проводов DuPont, 2,54 мм, 20 см
 Часы реального времени на DS1302

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
 Часы реального времени на DS1302, RTC

3 комментария для “Подключение DS1302 к Arduino

  1. А как установить время 0 часов 0 минут 0 часов? А ещё я хотел спросить, как сделать милисекунды?

    1. Сильвер, здравствуйте! У меня была подобная проблема, укажите номера пинов в этом порядке.
      Заменить на 4-ой строчке у автора: ThreeWire myWire(8, 9, 7); // Указываем вывода DATE, CLK, RST (на датчике такие значения). Пины 8, 9, 7, конкретно у меня такие, вы можете поставить другие.

  2. Очень важные дополнения для всех кто делает это в первый раз:
    автор использует функцию Rtc.SetDateTime(compiled);, что устанавливает текущее время при каждой перезагрузке Arduino. Это может быть полезно только один раз для установки времени, после чего ты можешь закомментировать эту строку, чтобы не перезаписывать время каждый раз при старте.

    Нет проверки что подгруженное время успешно прочитано: Перед тем как выводить данные, можно добавить проверку успешности чтения времени с RTC

    Чтобы избежать перезаписи времени при каждом запуске Arduino, можно сделать следующее: проверять текущее время на устройстве и устанавливать его только в случае, если оно недействительно. Это можно реализовать с помощью проверки флага на отсутствие установленного времени. Например, если время сброшено или не было установлено ранее, Arduino сможет установить его один раз.

    Вот метод, который можно использовать:

    Проверить, было ли время установлено ранее.
    Установить время только если оно недействительно.

    пример кода с этой логикой:

    #include // Подключаем библиотеку ThreeWire
    #include // Подключаем библиотеку RtcDS1302

    ThreeWire myWire(7, 6, 8); // Указываем пины IO, SCLK, CE
    RtcDS1302 Rtc(myWire);

    void setup ()
    {
    Serial.begin(9600); // Установка скорости последовательной связи на 9600
    Rtc.Begin(); // Инициализация RTC

    // Проверка, что время на RTC корректное
    if (!Rtc.GetIsRunning() || !Rtc.GetDateTime().IsValid()) {
    Serial.println(«RTC остановлены или время некорректно, установка времени…»);

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); // Время компиляции
    Rtc.SetDateTime(compiled); // Установка времени (с компиляции)
    Rtc.SetIsRunning(true); // Запуск RTC
    } else {
    Serial.println(«Время уже установлено.»);
    }

    Serial.print(«Дата компиляции: «);
    Serial.println(__DATE__); // Вывод даты компиляции
    Serial.print(«Время компиляции: «);
    Serial.println(__TIME__); // Вывод времени компиляции
    }

    void loop ()
    {
    RtcDateTime now = Rtc.GetDateTime();

    // Проверка на корректность времени
    if (!now.IsValid()) {
    Serial.println(«Ошибка: время с модуля RTC недоступно»);
    return;
    }

    // Вывод даты
    Serial.print(«Дата RTC: «);
    Serial.print(now.Day());
    Serial.print(«.»);
    Serial.print(now.Month());
    Serial.print(«.»);
    Serial.print(now.Year());

    // Вывод времени
    Serial.print(» Время RTC: «);
    Serial.print(now.Hour());
    Serial.print(«:»);
    Serial.print(now.Minute());
    Serial.print(«:»);
    Serial.println(now.Second());

    delay(2000); // Задержка 2 секунды
    }

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *