Обзор часов реального времени DS3231 (RTC)
Модуль DS3231 (RTC, ZS-042) — представляет собой недорогую плату с чрезвычайно точными часами реального времени (RTC), с температурной компенсацией кварцевого генератора и кристалла. Модуль включает в себя литиевую батарею, которая поддерживает бесперебойную работу, даже при отключении источник питания. Интегрированный генератор улучшить точность устройства и позволил уменьшить количество компонентов.
Технические параметры
► Напряжение питания: 3.3В и 5В
► Чип памяти: AT24C32 (32 Кб)
► Точность: ± 0.432 сек в день
► Частота кварца:32.768 кГц
► Поддерживаемый протокол: I2C
► Габариты: 38мм x 22мм x 15мм
Общие сведения
Большинство микросхем, таких как DS1307 используют внешний кварцевый генератор частотой 32кГц, но в них есть существенный недостаток, при изменении температуры меняется частота кварца, что приводит к погрешности в подсчете времени. Эта проблема устранена в чипе DS3231, внутрь которого установили кварцевый генератор и датчик температуры, который компенсирует изменения температуры, так что время остается точным (при необходимости, данные температуры можно считать). Так же чип DS3231 поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Поддерживает работу часов в двух форматов 24 и 12, а так-же возможно запрограммировать два будильника. Модуль работает по двух проводной шине I2C.
Теперь немного о самом модуле, построен он на микросхеме 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: «-» питание модуля
Немного расскажу, о микросхеме 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 нет в среде разработке IDE Arduino, необходимо скачать «DS3231 » и добавить в среду разработки Arduino.
Установка времени DS3231
При первом включении необходимо запрограммировать время, откройте пример из библиотеки DS3231 «Файл» —> «Примеры» —> «DS3231» —> «Arduino» —> «DS3231_Serial_Easy», или скопируйте код снизу
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* Тестирование производилось на Arduino IDE 1.8.0 Дата тестирования 31.08.2018г. */ #include <DS3231.h> // Подключаем библиотеку Wire DS3231 rtc(SDA, SCL); // Инициализация DS3231 void setup() { Serial.begin(115200); // Установка последовательного соединения rtc.begin(); // Инициализировать rtc // Установка времени rtc.setDOW(FRIDAY); // Установить день-недели rtc.setTime(16, 29, 0); // Установить время 16:29:00 (формат 24 часа) rtc.setDate(31, 8, 2018); // Установить дату 31 августа 2018 года } void loop() { Serial.print(rtc.getDOWStr()); // Отправляем день-неделя Serial.print(" "); Serial.print(rtc.getDateStr()); // Отправляем дату Serial.print(" -- "); Serial.println(rtc.getTimeStr()); // Отправляем время delay (1000); // Задержка в одну секунду } |
Загружаем скетч в контроллер Arduino и открываем «Мониторинг порта»
Вот и все.
Ссылки
Библиотека 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
Часы реального времени RTC DS3231
Библиотека libraries-DS1307RTC
А почему Вы не используете библиотеку DS3231?
Добрый день, решил использовать эту библиотеку, работает как с DS3231 так и с DS1307, в другом примере уже начал использовать библиотеку для DS3231
OLED часы (термометр) на arduino и DS3231
Я будильник для прогрева автомобиля писал с библиотекой 1307 а 3231 подвисала,знак-му гению по С++ отдал на анализ и он сказал библиотека сырая, делайте вывод!
В данном примере не устанавливается день недели. Кстати в библиотеке 3231 гораздо всё проще и ещё температура есть.
Эти часы рассчитаны на работу с аккумулятором (lir2032) а на фотографии гальванический элемент cr2032. Если не разорвать цепь заряда то батарейка будет быстро дохнуть.
Надо выкусить маленькую коричневую фигнюшку расположенную вертикально справа от чипа ds3231.
Можно просто перерезать дорожку, которая идёт от VCC на резистор с маркировкой 201(это такая чёрненькая штучка рядом с коричневой фигнюшкой). Потом восстановить можно, просто припаяв проводом.
На компьютерах она дохнет лет 5.
Речь о том, что батарейку cr2032 заряжать нельзя, а аккумулятор lir2032 — можно. При попытке заряда батарейки и бахнуть имеет право.
Уже года 4 в гараже часы работают и не дохнет батарейка. Ничего не выкусывал. ЧЯСНТ?
Если запитывать от 3.3 вольта можно не снимать цепь заряда и ставить батарейку
Сергей, приветствую! Перефотографируйте главное фото. Там неправильно подключение организовано. Нужно провода в SCL & SDA коннектор вставить. У вас в аналоговые вставлено.
Вопрос для самостоятельного изучения: на каких выводах чипа Atmega168/328 (или платы Arduino) присутствует аппаратная поддержка шины I2C?
На всякий случай: правильно там нарисовано.
TWI: вывод A4 или SDA и вывод A5 или SCL. С использованием библиотеки Wire данные выводы могут осуществлять связь по интерфейсу TWI.
А как поставить формат времени 12 часов?
после закрытия порта и повторного открытия — время снова отображается то, которое установил первично.
Это аппаратная проблема?
ЧЯСНТ?
О, дружище спешу помочь, запиши код который у тебя есть, ещё раз на ардуину, потом в коде выреж установку времени с последней компиляции и всё сейчас пашет!! (Ардуина сохраняет время компиляции в памяти, а потом все время при запуске восстанавливает его на часы.) Удачи!
Как контроллер узнает адрес модуля и на каких пинах он висит??
Добрый день, в библиотеке ds3231, уже указан адрес микросхемы 0x68 и аппаратные пины I2C
Я заметил, у часов есть проблема(рассинхрон какой-то) температура окружения стабильная но время идёт медленнее при отключении от 5V. Эмм.. что это такое и как с этим бороться?
Сергей, А как прописать команду на включение двигателя один раз в сутки или в определенное время?
Добрый день, Анатолий.
Посмотрите данный форум: http://arduino.ru/forum/obshchii/vkl-i-vykl-rele-po-vremeni , тут есть пример включения реле по времени.
Спасибо, Сергей.
Я нашёл эту программу:
#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 соответственно? Спасибо.
А не подскажите как с памятью работать что в этом модуле распаяна?
Как к ней обратиться?
И вообще возможно ли её использовать под хранение «своих» ардуиновских настроек?
Подскажите, пожалуйста , начинающему ардуинщику.
Есть 1)Arduino Nano; 2)Модуль часов реального времени ds3231 3) 2-х канальный модуль реле 5V.
Нужно 1 раз в 1 минуту поочередно по одному включать каждое реле на 2 сек. То есть: включить реле №1 на 2 секунды –выключить реле №1, подождать 58 секунд. После этого включить реле № 2 на 2 секунды – выключить реле №2, подождать 58 секунд. И так по кругу. Как написать скетч?
Добрый день, напишите на почту. info@robotchip.ru
Здравствуйте. Решили как это сделать? Мне нужно точно то же самое. Ардуино ни разу в руках не держал, но был бы готовый код, дальше соображу. Хочу запустить вторичные часы «Стрела». Можете помочь?
Могу прислать код для вторичных часов