Обзор часов реального времени DS3231 (RTC)

27
Обзор часов реального времени DS3231 (RTC)

Модуль DS3231 (RTC, ZS-042) — представляет собой недорогую плату с чрезвычайно точными часами реального времени (RTC), с температурной компенсацией кварцевого генератора и кристалла. Модуль включает в себя литиевую батарею, которая поддерживает бесперебойную работу, даже при отключении источник питания. Интегрированный генератор улучшить точность устройства и позволил уменьшить количество компонентов.

Обзор часов реального времени DS3231 (RTC)

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

► Напряжение питания: 3.3В и 5В
► Чип памяти: AT24C32 (32 Кб)
► Точность: ± 0.432 сек в день
► Частота кварца:32.768 кГц
► Поддерживаемый протокол: I2C
► Габариты: 38мм x 22мм x 15мм

Общие сведения

Большинство микросхем, таких как DS1307 используют внешний кварцевый генератор частотой 32кГц, но в них есть существенный недостаток, при изменении температуры меняется частота кварца, что приводит к погрешности в подсчете времени. Эта проблема устранена в чипе DS3231, внутрь которого установили кварцевый генератор и датчик температуры, который компенсирует изменения температуры, так что время остается точным (при необходимости, данные температуры можно считать). Так же чип DS3231 поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Поддерживает работу часов в двух форматов 24 и 12, а так-же возможно запрограммировать два будильника. Модуль работает по двух проводной шине I2C.

Обзор часов реального времени DS3231 (RTC)

Теперь немного о самом модуле, построен он на микросхеме DS3231N. Резисторная сборка RP1 (4.7 кОм), необходима для подтяжки линий 32K, SQW, SCL и SDA (кстати, если используется несколько модулей с шиной I2C, необходимо выпаять подтягивающие резисторы на других модулях). Вторая сборка резисторов, необходима для подтяжки линий A0, A1 и A2, необходимы они для смены адресации микросхемы памяти AT24C32N. Резистор R5 и диод D1, служат для подзарядки батарее, в принципе их можно выпаять, так как обычной батарейки SR2032 хватает на годы. Так же установлена микросхема памяти AT24C32N, это как бы бонус, для работы часов RTC DS3231N в ней нет необходимости. Резистор R1 и светодиод Power, сигнализируют о включении модуля. Как и говорилось, модуль работает по шине I2C, для удобства эти шины были выведены на два разъема J1 и J2, назначение остальных контактов, можно посмотреть ниже.Назначение J1
► 32K:   выход, частота 32 кГц
► SQW: выход
► SCL:   линия тактирования (Serial CLock)
► SDA:  линия данных (Serial Dфta)
► VCC:  «+» питание модуля
► GND: «-» питание модуля   Назначение J2
► SCL:   линия тактирования (Serial CLock)
► SDA:  линия данных (Serial Data)
► VCC:  «+» питание модуля
► GND: «-» питание модуля

Обзор часов реального времени DS3231 (RTC)

Немного расскажу, о микросхеме AT24C32N, это микросхема с 32к памятью (EEPROM) от производителя Atmel, собранная в корпусе SOIC8, работающая по двухпроводной шине I2C. Адрес микросхемы 0x57, при необходимости легко меняется, с помощью перемычек A0, A1 и A2 (это позволяет увеличить количество подключенных микросхем AT24C32/64). Так как чип AT24C32N имеет, три адресных входа (A0, A1 и A2), которые могут находится в двух состояния, либо лог «1» или лог «0», микросхеме доступны восемь адресов. от 0x50 до 0x57.

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

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

Подключение:
В данном примере буду использовать только модуль DS3231 и Arduino UNO R3, все данные будут передаваться в «Мониторинг порта». Схема не сложная, необходимо всего четыре провода, сначала подключаем шину I2C, SCL в A4 (Arduino UNO) и SDA в A5 (Arduino UNO), осталось подключить питание GND к GND и VCC к 5V (можно записать и от 3.3В), схема собрана, теперь надо подготовить программную часть.

Обзор часов реального времени DS3231 (RTC)

Библиотеки работающий с DS3231 нет в среде разработке IDE Arduino, необходимо скачать «DS3231 » и добавить в среду разработки Arduino.

Установка времени DS3231
При первом включении необходимо запрограммировать время, откройте пример из библиотеки DS3231 «Файл» —> «Примеры» —> «DS3231» —> «Arduino» —> «DS3231_Serial_Easy», или скопируйте код снизу

Загружаем скетч в контроллер Arduino и открываем «Мониторинг порта»

Обзор часов реального времени DS3231 (RTC)

Вот и все.

Обзор часов реального времени DS3231 (RTC)

Ссылки
  Библиотека libraries-DS3231

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

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

27 комментариев для “Обзор часов реального времени DS3231 (RTC)

  1. Часы реального времени RTC DS3231
    Библиотека libraries-DS1307RTC
    А почему Вы не используете библиотеку DS3231?

      1. Я будильник для прогрева автомобиля писал с библиотекой 1307 а 3231 подвисала,знак-му гению по С++ отдал на анализ и он сказал библиотека сырая, делайте вывод!

  2. В данном примере не устанавливается день недели. Кстати в библиотеке 3231 гораздо всё проще и ещё температура есть.

  3. Эти часы рассчитаны на работу с аккумулятором (lir2032) а на фотографии гальванический элемент cr2032. Если не разорвать цепь заряда то батарейка будет быстро дохнуть.
    Надо выкусить маленькую коричневую фигнюшку расположенную вертикально справа от чипа ds3231.

    1. Можно просто перерезать дорожку, которая идёт от VCC на резистор с маркировкой 201(это такая чёрненькая штучка рядом с коричневой фигнюшкой). Потом восстановить можно, просто припаяв проводом.

      1. Речь о том, что батарейку cr2032 заряжать нельзя, а аккумулятор lir2032 — можно. При попытке заряда батарейки и бахнуть имеет право.

    2. Уже года 4 в гараже часы работают и не дохнет батарейка. Ничего не выкусывал. ЧЯСНТ?

    3. Если запитывать от 3.3 вольта можно не снимать цепь заряда и ставить батарейку

  4. Сергей, приветствую! Перефотографируйте главное фото. Там неправильно подключение организовано. Нужно провода в SCL & SDA коннектор вставить. У вас в аналоговые вставлено.

    1. Вопрос для самостоятельного изучения: на каких выводах чипа Atmega168/328 (или платы Arduino) присутствует аппаратная поддержка шины I2C?
      На всякий случай: правильно там нарисовано.

    2. TWI: вывод A4 или SDA и вывод A5 или SCL. С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI.

  5. после закрытия порта и повторного открытия — время снова отображается то, которое установил первично.
    Это аппаратная проблема?
    ЧЯСНТ?

    1. О, дружище спешу помочь, запиши код который у тебя есть, ещё раз на ардуину, потом в коде выреж установку времени с последней компиляции и всё сейчас пашет!! (Ардуина сохраняет время компиляции в памяти, а потом все время при запуске восстанавливает его на часы.) Удачи!

    1. Добрый день, в библиотеке ds3231, уже указан адрес микросхемы 0x68 и аппаратные пины I2C

  6. Я заметил, у часов есть проблема(рассинхрон какой-то) температура окружения стабильная но время идёт медленнее при отключении от 5V. Эмм.. что это такое и как с этим бороться?

  7. Сергей, А как прописать команду на включение двигателя один раз в сутки или в определенное время?

  8. Спасибо, Сергей.

    Я нашёл эту программу:

    #include //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
    #include
    #include // Подключаем библиотеку часов
    int Relay = 12; // Назначаем выход для управлением реле
    int DAY
    int HR
    int MIN
    int SEC

    void setup(){
    Serial.begin(9600);
    while (!Serial); // Устанавливаем функцию для получения времени с часов
    setSyncProvider(RTC.get); //Устанавливаем время в формате: часы, минуты, секунды, день, месяц, год
    setTime(17,50,0,23,3,2015);
    RTC.set(now()); //Применяем:
    pinMode(Power, OUTPUT);
    pinMode(Relay, OUTPUT); // Устанавливаем выход для реле
    RTC.stop(); // остановка времени перед синхронизацией с компьютером
    }
    void loop(){
    RTC.get(rtc,true); // Получаем время из DS1307
    if(DOW == 1 && HR == 12 && MIN == 0 && SEC == 0){ // задаём день понельник время и время включения с 12.00.00
    digitalWrite(Relay, HIGH); //реле включено
    }
    delay(3000); //задержка на 3 секунды
    else { //иначе
    digitalWrite(Relay, LOW); //реле выключено
    }
    }

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

    в void setup и void loop соответственно? Спасибо.

  9. А не подскажите как с памятью работать что в этом модуле распаяна?
    Как к ней обратиться?
    И вообще возможно ли её использовать под хранение «своих» ардуиновских настроек?

  10. Подскажите, пожалуйста , начинающему ардуинщику.
    Есть 1)Arduino Nano; 2)Модуль часов реального времени ds3231 3) 2-х канальный модуль реле 5V.
    Нужно 1 раз в 1 минуту поочередно по одному включать каждое реле на 2 сек. То есть: включить реле №1 на 2 секунды –выключить реле №1, подождать 58 секунд. После этого включить реле № 2 на 2 секунды – выключить реле №2, подождать 58 секунд. И так по кругу. Как написать скетч?

    1. Здравствуйте. Решили как это сделать? Мне нужно точно то же самое. Ардуино ни разу в руках не держал, но был бы готовый код, дальше соображу. Хочу запустить вторичные часы «Стрела». Можете помочь?

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

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