8 (800) 550-13-29
Заказать звонок
Связь с директором
  • Контакты
  • Доставка
  • Оплата
  • База знаний
  • Блог
  • Акции
  • Видео
  • О 3DiY
  • Гос. закупки
  • ...
    3DIY
    3D принтеры
    Всё для 3D принтеров
    • Электроника
      Электроника
    • Механика
      Механика
    • Экструдеры
      Экструдеры
    • Пластик
      Пластик
    • 3D принтеры
      3D принтеры
    • 3D ручки
      3D ручки
    • Сопутствующие
      Сопутствующие
    Arduino/робототехника
    • Arduino
      Arduino
    • Raspberry Pi
      Raspberry Pi
    • Orange Pi
      Orange Pi
    • Одноплатники
      Одноплатники
    • Модули (Shield)
      Модули (Shield)
    • Датчики / Сенсоры
      Датчики / Сенсоры
    • Дисплеи
      Дисплеи
    • Механика
      Механика
    • Макетные платы (Breadboard)
      Макетные платы (Breadboard)
    • Светодиоды
      Светодиоды
    • Провода и кабели
      Провода и кабели
    • Источники питания
      Источники питания
    • Радиодетали
      Радиодетали
    ЧПУ
    • Электроника
      Электроника
    • Электротехника
      Электротехника
    • Электропривод
      Электропривод
    • Направляющие
      Направляющие
    • Передачи
      Передачи
    • Механика
      Механика
    • Конструкционный профиль
      Конструкционный профиль
    • Лазерная резка и аксессуары
      Лазерная резка и аксессуары
    Услуги
    • 3D печать
    • Ремонт 3D принтеров
    Ещё
      3DIY
      3D принтеры
      Каталог
      • 3D принтеры и комплектующие
        3D принтеры и комплектующие
        • Электроника
        • Механика
        • Экструдеры
        • Пластик
        • 3D принтеры
        • 3D ручки
        • Сопутствующие
      • Arduino и робототехника
        Arduino и робототехника
        • Arduino
        • Raspberry Pi
        • Orange Pi
        • Одноплатники
        • Модули (Shield)
        • Датчики / Сенсоры
        • Дисплеи
        • Механика
        • Макетные платы (Breadboard)
        • Светодиоды
        • Провода и кабели
        • Источники питания
        • Радиодетали
      • ЧПУ комплектующие
        ЧПУ комплектующие
        • Электроника
        • Электротехника
        • Электропривод
        • Направляющие
        • Передачи
        • Механика
        • Конструкционный профиль
        • Лазерная резка и аксессуары
      Услуги
      • 3D печать
      • Ремонт 3D принтеров
      Блог
      • 3D-печать
      • 3D-принтеры
      База знаний
      • Датчики
      • Модули
      • Платы
      • 3D-принтеры
      • Дисплеи
      • Механика
      • Сопутствующие
      • ЧПУ
      • Проекты
      • Компоненты
      Информация
      • Акции и Скидки
      • Условия доставки
      • Условия оплаты
      • Сashback
      • О нас
        • Наши партнеры
        • Наши клиенты
        • Вакансии
      • Гос. закупки
      Контакты
      • Как до нас добраться
      Ещё
        3DIY
        • 3D принтеры
        • Каталог
          • Назад
          • Каталог
          • 3D принтеры и комплектующие
            • Назад
            • 3D принтеры и комплектующие
            • Электроника
            • Механика
            • Экструдеры
            • Пластик
            • 3D принтеры
            • 3D ручки
            • Сопутствующие
          • Arduino и робототехника
            • Назад
            • Arduino и робототехника
            • Arduino
            • Raspberry Pi
            • Orange Pi
            • Одноплатники
            • Модули (Shield)
            • Датчики / Сенсоры
            • Дисплеи
            • Механика
            • Макетные платы (Breadboard)
            • Светодиоды
            • Провода и кабели
            • Источники питания
            • Радиодетали
          • ЧПУ комплектующие
            • Назад
            • ЧПУ комплектующие
            • Электроника
            • Электротехника
            • Электропривод
            • Направляющие
            • Передачи
            • Механика
            • Конструкционный профиль
            • Лазерная резка и аксессуары
        • Услуги
          • Назад
          • Услуги
          • 3D печать
          • Ремонт 3D принтеров
        • Блог
          • Назад
          • Блог
          • 3D-печать
          • 3D-принтеры
        • База знаний
          • Назад
          • База знаний
          • Датчики
          • Модули
          • Платы
          • 3D-принтеры
          • Дисплеи
          • Механика
          • Сопутствующие
          • ЧПУ
          • Проекты
          • Компоненты
        • Информация
          • Назад
          • Информация
          • Акции и Скидки
          • Условия доставки
          • Условия оплаты
          • Сashback
          • О нас
            • Назад
            • О нас
            • Наши партнеры
            • Наши клиенты
            • Вакансии
          • Гос. закупки
        • Контакты
          • Назад
          • Контакты
          • Как до нас добраться
        • 8 (800) 550-13-29
        Контактная информация
        Москва, Духовской пер. 17с3   |  Пн-Пт 11.00-19.00 | Сб-Вс Выходные
        info@3d-diy.ru
        • Facebook
        • Вконтакте
        • Instagram
        • YouTube

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

        База знаний
        -
        Модули
        -
        Другие
        -Часы реального времени DS3231
        Поделиться
        • Часы реального времени DS3231
        Модули (Shield)
        Перейти в раздел
        Модули (Shield)
        Товары
          • Часы реального времени DS1302
            Быстрый просмотр
            Часы реального времени DS1302
            Много
            117 руб./шт
            Подробнее

          Содержание

          • Обзор
          • Технические характеристики
          • Назначение контактов
          • Подключение к Arduino
          • Пример использования
          • Часто задаваемые вопросы

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

          Если вы создаете устройство, которому нужно знать точное время, вам пригодится модуль часов реального времени RTC (Real Time Clock). Данные модули отсчитывают точное время и могут сохранять его даже при отключении основного питания при использовании резервного питания (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В), которого хватит на несколько лет.

          Еще совсем недавно основным модулем RTC в среде Ардуинщиков являлся модуль на микросхеме DS1307. В этом модуле использовался внешний кварцевый генератор частотой 32кГц, при изменении температуры менялась частота кварца, что приводило к погрешности в подсчете времени.

          Новые модули RTC (рис. 1) построены на микросхеме DS3231, внутрь которой установлен кварцевый генератор и датчик температуры, который компенсирует изменения температуры, поэтому время отсчитывается более точно. Погрешность составляет ±2 минуты за год. 

          real-time-clock-01.jpg

          Рисунок 1.


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

          • календарь до 2100 года

          • погрешность : +/- 4ppm

          • два будильника

          • выход стабильной частоты : 1-32768 Гц

          • напряжение питания : 2,7 - 5,3 В

          • напряжение батарейки : 2,3 - 5,3 В

          • ток потребления : 250 мкA

          • ток потребления от батарейки : 3 мкA

          • порог переключения на батарейку : 2,6 В

          • интерфейс : I2C

          • размеры : 40х22 мм


          Назначение контактов

          Модуль имеет 6 выводов:

          • GND – общий

          • VCC – питание 2,7 - 5,3 В

          • SDA – вход/выход данных интерфейса I2C

          • SCL – синхронизация интерфейса I2C

          • SQW – прерывание от будильников или выход импульсов 1-8192 Гц

          • 32K – выход импульсов 32768 Гц


          Подключение к плате Arduino

          Модуль DS3231 подключается к плате Arduino по интерфейсу I2C, используются выводы SDA и SCL. Схема подключения показана на рис. 2.

          real-time-clock-02.jpg

          Рисунок 2.

          Для программирования будем использовать библиотеки DS1307 и Time. Скетч получения данных с DS3231 и вывода в последовательный порт показан в листинге 1.

          Листинг 1

          #include <Wire.h>

          #include <DS1307RTC.h>

          #include <Time.h>

          tmElements_t datetime;

          void setup() {

             Serial.begin(9600);

          }

          void loop() {

             // получение данных из ds3231

             if (RTC.read(dt)) {

                print2(datetime.Hour, ":");

                print2(datetime.Minute, ":");

                print2(datetime.Second, " ");

                print2(datetime.Day, "/");

                print2(datetime.Month, "/");

                print2(tmYearToCalendar(datetime.Year) ,"");

                Serial.println();

             }

             else {

                   Serial.println("error");

                   delay(5000);

             }

             delay(1000);

          }

          void print2(int nn,String str) {

             if (nn >= 0 && nn < 10)

                { Serial.print("0");}

             Serial.print(nn);

             Serial.print(str);

          }

          Открываем монитор последовательного порта (рис. 3).

          real-time-clock-03.jpg

          Рисунок 3.

          Результат работы – правильный отсчет, но неверное значение времени и даты. При отсутствии питания значение времени в микросхеме DS3231 сбрасывается на 00:00:00 01/01/2000.

          Добавим функционал скетчу – установка времени отправкой строки вида "dd/mm/ YYYY hh:mm:ss" в последовательный порт.

          Листинг 2

          #include <DS1307RTC.h>

          #include <Time.h>

          #include <Wire.h>  

          String inSer = "";

          boolean strFull = false;

          tmElements_t datetime;

           

          void setup() {

             Serial.begin(9600);

          }

           

          void loop() {

             // пришли данные по serial

             if (strFull) {

                datetime.Hour=(int(inSer[11])-48)*10+(int(inSer[12])-48);

                datetime.Minute=(int(inSer[14])-48)*10+(int(inSer[15])-48);

                datetime.Second=(int(inSer[17])-48)*10+(int(inSer[18])-48);

                datetime.Day=(int(inSer[0])-48)*10+(int(inSer[1])-48);

                datetime.Month=(int(inSer[3])-48)*10+(int(inSer[4])-48);

                datetime.Year=CalendarYrToTm((int(inSer[6])-48)*1000+(int(inSer[7])-48)*100+(int(inSer[8])-48)*10+(int(inSer[9])-48));

               RTC.write(datetime); // записать данные в DS3231

                // очистить строку

                inSer = "";

                strFull = false;

             }

             // получение данных из ds3231

             if (RTC.read(datetime)) {

                print2(datetime.Hour, ":");

                print2(datetime.Minute, ":");

                print2(datetime.Second, " ");

                print2(datetime.Day, "/");

                print2(datetime.Month, "/");

                print2(tmYearToCalendar(datetime.Year) ,"");

                Serial.println();

             }

             else {

                   Serial.print("error");

                   delay(5000);

             }

             delay(1000);

          }

          void print2(int nn,String str) {

             if (nn >= 0 && nn < 10)

                { Serial.print("0");}

             Serial.print(nn);

             Serial.print(str);

          }

          void serialEvent() {

             while (Serial.available()) {

                // получить очередной байт:

                char c = (char)Serial.read();

                // добавить в строку

                inSer += c;

                // /n - конец передачи

                if (c == '\n')

                   { strFull = true;}

             }

          }

          После загрузки скетча на плату Arduino, открываем монитор последовательного порта и отправляем в Arduino строку «dd/mm/ YYYY hh:mm:ss» для установки текущей даты и точного времени (рис. 4,5).

          real-time-clock-04.jpg

          real-time-clock-05.jpg

          Рисунок 4,5.

          Теперь DS3231 будет отсчитывать точное время. И если установлена батарейка, время не собъется после отключения питания.


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

          Создадим проект часов с выводом данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637.

          Нам потребуются следующие компоненты:

          • Плата Arduino Uno – 1

          • Плата прототипирования – 1

          • Модуль DS3231 – 1

          • 4digit display на базе TM1637 – 1

          • Провода

          Схема соединения элементов показана на рис. 6.

          real-time-clock-06.jpg

          Рисунок 6.

          Для программирования вывода данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637 установим в Arduino IDE библиотеку TM1637. Каждые 5 секунд меняем на дисплее отображение:

          • текущее время;

          • день и месяц.

          При отображении показаний текущего времени каждые 0.5 секунды мигаем разделителем типа "двоеточие" между вторым и третьим разрядом. Содержимое скетча показано в листинге 3.

          Листинг 3

          #include <DS1307RTC.h>

          #include <Time.h>

          #include <Wire.h>

          #include "TM1637.h"

          #define CLK 3     

          #define DIO 2

          TM1637 4dig_display(CLK,DIO);

          // для данных времени

          int8_t ListTime[4]={0,0,0,0};

          // для данных dd/mm

          int8_t ListDay[4]={0,0,0,0};

          // разделитель

          boolean point=true;

          // для смены время / день-месяц

          unsigned long millist=0;

          tmElements_t datetime;    

          void setup() {

             Serial.begin(9600); // запустить последовательный порт

             // запуск дисплея

             4dig_display.init();

             // яркость дисплея

             tm1637.set(7);

          }  

          void loop() {

             // получение времени

             if (RTC.read(datetime)) {

                ListTime[0]= datetime.Hour/10;

                ListTime[1]= datetime.Hour%10;

                ListTime[2]= datetime.Minute/10;

                ListTime[3]= datetime.Minute%10;

                ListDay[0]= datetime.Day/10;

                ListDay[1]= datetime.Day%10;

                ListDay[2]= datetime.Month/10;

                ListDay[3]= datetime.Month%10;

             }

             else {

                // ошибка

                4dig_display.display(0,ListDay[0]);

                4dig_display.display(1,ListDay[1]);

                4dig_display.display(2,ListDay[2]);

                4dig_display.display(3,ListDay[3]);

                4dig_display.point(false);

             }

             if(millis()-millist>=10000) {

                millist=millis();

             }

             else if(millis()-millist>=5000) {

                // вывод день - месяц

                4dig_display.display(0,ListDay[0]);

                4dig_display.display(1,ListDay[1]);

                4dig_display.display(2,ListDay[2]);

                4dig_display.display(3,ListDay[3]);

                4dig_display.point(false);

             }

             else {

                // вывод времени

                4dig_display.display(0,ListTime[0]);

                4dig_display.display(1,ListTime[1]);

                4dig_display.display(2,ListTime[2]);

                4dig_display.display(3,ListTime[3]);

                4dig_display.point(point);

             }

             delay(500);

             // поменять индикацию точек

             point=!point;

          }

          Загружаем скетч на плату Arduino и проверяем работу часов.

          real-time-clock-07.jpg

          real-time-clock-08.jpg

          Рисунок 7,8. 


          Часто задаваемые вопросы

          1. Отсутствует получение данных времени с модуля DS3231.

          • Проверьте правильность подключения модуля DS3231 к плате Arduino.

          2. Данные, получаемые с модуля DS3231, неверные.

          • Установите правильную дату и время, загрузив код из листинга 2 и отправив из последовательного порт правильные данные.

          3. При отключении питания сбивается время и дата.

          • Установите резервное питание модуля (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В).

          • Проверьте напряжение резервного питания (должно быть не менее 2,3 В).



          Документы
          listing_01 1,1 кб
          listing_02 1,5 кб
          listing_03 1,9 кб

          Товары
            • Часы реального времени DS1302
              Быстрый просмотр
              Часы реального времени DS1302
              Много
              Подробнее

            Назад к списку Следующий проект
            Компания
            О компании
            Политика
            Услуги
            Партнеры
            Клиенты
            Информация
            Акции и скидки
            Условия оплаты
            Условия доставки
            Гарантия на товар
            Кэшбэк
            Как купить
            Вопрос-ответ
            Блог
            База знаний
            Производители
            Будьте всегда в курсе!
            Узнавайте о скидках и акциях первым
            Оставайтесь на связи
            • Вконтакте
            • Facebook
            • Instagram
            • YouTube
            Наши контакты
            8 (800) 550-13-29
            info@3d-diy.ru
            Москва, Духовской пер. 17с3   |  Пн-Пт 11.00-19.00 | Сб-Вс Выходные
            2021 © 3DiY (Тридиай) - интернет-магазин комплектующих для 3D принтеров, ЧПУ станков и робототехники