RTC DS1302, DS1307 и DS3231 инициализация с помощью ESP8266

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ก.ค. 2016
  • Модули часов реального времени (RTC) DS1302, DS1307 и DS3231 и их инициализация с помощью NTP клиента на ESP8266.
    Даташиты на микросхемы DS:
    datasheets.maximintegrated.com...
    datasheets.maximintegrated.com...
    datasheets.maximintegrated.co...
    Скетч:
    drive.google.com/file/d/0B7Yh...
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 43

  • @user-dk6dg4go8p
    @user-dk6dg4go8p 6 ปีที่แล้ว +1

    Спасибо за информацию по батарейке на модуле DS3231. В 2 часа ночи увидел ваше видео, пошёл замерил - так и есть. Тогда же всё и исправил. Спасибо ещё раз.

  • @yurishipunov5930
    @yurishipunov5930 7 ปีที่แล้ว +2

    Спасибо за труд, посмотрел до конца.

  • @veoramid
    @veoramid 6 ปีที่แล้ว +2

    На 1307 есть ещё ОЗУ, запитаное от батарейки. В некоторых случаях очень удобно. Мне, например, надо было знать сколько времени не было питания. Для этого я в это "батарейной" ОЗУ каждую секунду пишу текущее время, а при старте проверяю время в ОЗУ и в часах. Во флеш каждую секунду писать проблематично. В 3231 такой памяти нет ( была ещё микросхема mk41t56 - в ней, если не путаю, есть программная подстройка точности хода.

  • @user-qr2jq5no2h
    @user-qr2jq5no2h 3 ปีที่แล้ว +1

    Спасибо, ценная информация для новичка !

  • @andron308
    @andron308 6 ปีที่แล้ว +1

    Отличное видео! Спасибо!

  • @dmitriysmirnov1018
    @dmitriysmirnov1018 4 ปีที่แล้ว

    Здравствуйте Alex Morozov. Подскажите пожалуйста, возможно ли приведенный скетч сделать отдельно для каждого модуля? Просто я не очень хорошо разбираюсь в программировании и мне сложно разобраться какие фрагменты скетча к каким модулям относятся. Просто я планирую использовать модуль RTC DS1302 совместно с другим устройством на ардуино Wemos D1 mini. Поэтому мне необходимо чтобы прошивка занимала как можно меньше объема памяти Ардуино. Еще в данном видео вы выводите информацию в монитор порта, что и в каких строках скетча необходимо изменить чтобы выводить индикацию на индикатор TM1637 подключенного к определенным выводам Ардуино?
    Еще для стабильности работы модуля RTC DS1302 необходимо в цепь минуса питания добавить резистор на 10 килоОм или выход модуля подключать к аналоговым выводам модуля Ардуино. ( про это много раз писали в интернете).
    Спасибо.

  • @DrumScream
    @DrumScream 6 ปีที่แล้ว +1

    Огромное спасибо за видео и за библиотеку, сделал на её основе свои LED-часы. Кстати говоря, у меня модуль DS1307 и он отлично работает с ESP-12 без конвертера уровней. Наоборот, сначала подключил его через конвертер, но вместо времени выводились какие-то левые значения вперемешку со значком собаки). Перепроверил - всё подключено правильно. Убрал конвертер, подключил напрямую и всё заработало).

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว +1

      Вы DS1307 от 5 В запитали? Хорошо бы проверить осциллографом уровень логической единицы на SDA при чтении из модуля, а то ногу ESP поджарить можно. Или вам повезло и ваш RTC заработал на 3.3 В (что по даташиту и моему опыту не должно быть)?

    • @DrumScream
      @DrumScream 6 ปีที่แล้ว +1

      Да, DS1307 запитан от 5В. Осциллографа нет, проверить уровни не могу. Может для ESP это плохо по питанию, но через конвертер не вышло) В общем, посмотрим, сгорит - будем дальше думать, но пока ESP несколько дней работает стабильно и не греется вообще.

  • @neat_boss
    @neat_boss 5 ปีที่แล้ว

    как по отдельности считать часы и минуты, просто хочу использовать в своём проекте, у меня DS1302.

  • @Alex_Gdreamer
    @Alex_Gdreamer ปีที่แล้ว

    С esp32 работать будут библиотеки? Как раз искал способ синхронизации часов при подключении к интернету. 😉👍

  • @valentinsavchuk7807
    @valentinsavchuk7807 ปีที่แล้ว

    Чтобы DS1307 работал от 3.3в и без конвертера уровней, замените 3в батарейку на 2*ААА аккумулятора (1.2в+1.2в). В даташите указано, что при 1.25*Vbat модуль засыпает. При 3в батарее он заснёт при питании менее 3.75 вольта, а в моем случае при 3в.

    • @valentinsavchuk7807
      @valentinsavchuk7807 ปีที่แล้ว

      От 2.2 батарейки время сброситься, поэтому цепь подзаряда можно оставить. Либо заряжать аккумуляторы раз в год. Я использую севшие батарейки, ток потребления от них 0.2мкА, и то когда отсутствует питание DS1307.

  • @user-vk9bs3se5c
    @user-vk9bs3se5c 6 ปีที่แล้ว

    Привет, подскажите делали ли вы урок по работе с пзу у esp. Хочу в проекте настройки сохранять после перезагрузки

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว +1

      Урок не делал, я не учитель. :)
      А так все "умные реле" не зависимо от платформы (Mega или ESP8266) сохраняют и восстанавливают свои параметры еще с первых версий. Более-менее отдельно эта технология рассмотрена в ролике th-cam.com/video/b1CzBbgMV40/w-d-xo.html

  • @sergeyg.2022
    @sergeyg.2022 2 ปีที่แล้ว

    Спасибо за видео-урок! Очень познавательно. Вот только выложенную Вами библиотеку (Скетч) по ссылке, в описании под видео, скачать не получается. Пишет: "Не удалось найти запрошенный URL на этом сервере", хотя сам zip-файл просмотреть можно. Возможно его как-то от Вас заполучить?

    • @sergeyg.2022
      @sergeyg.2022 2 ปีที่แล้ว +1

      Библиотеку скачал. Как у себя, так и на видео, после заливки скетча в модуль DS3231, я не увидел в мониторе порта отображения дня недели.

  • @SergeyKardakov
    @SergeyKardakov 6 ปีที่แล้ว

    Alex, подскажи - есть ли возможность подключить один модуль реального времени к двум (трем, четырем) ардуинам сразу?

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว

      Как вы себе это представляете? На шине I2C слейвов может быть несколько, а мастер один.

    • @user-jq1ml7yx4t
      @user-jq1ml7yx4t 4 ปีที่แล้ว

      вай нот? соедени ардуины меж собобой например через softserial.h и передавай что хочешь.

    • @user-jq1ml7yx4t
      @user-jq1ml7yx4t 4 ปีที่แล้ว

      только если это уно, скорсть 9600

  • @maddocrusmad464
    @maddocrusmad464 3 ปีที่แล้ว +1

    Инфа норм ;)

  • @ermakamre
    @ermakamre 6 ปีที่แล้ว

    А сколько байт тратится на таблицы виртуальных функций в классах? И в какой памяти эти таблицы расположены?

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว

      Каждый указатель занимает 4 байта. В последнем на данный момент пакете поддержки ESP8266 для Arduino IDE (2.4.1) VTABLE перенесли во флешь-память вроде как.
      А так конечно нужно делать всего 2 виртуальные функции get и set с беззнаковым длинным целым аргументом (UNIXTIME), а все остальные реализовывать через них как обычные методы, но это будет неэффективное решение в плане скорости выполнения, зато экономичное по расходу памяти.

  • @ellpigy
    @ellpigy 7 ปีที่แล้ว

    Здравствуйте, спасибо за разъяснения. Вопрос: есть модуль 1302, но он не хочет работать, всегда выдает одну и туже дату:
    RTC epoch = 946684800
    The RTC date and time is 01.01.2000 00:00:00
    Если установить время, то это же время и выдается постоянно, т. е. отсчет не идет. Пробовал большинство библиотек для этого модуля, но ничего не помогло, хотя в протеусе они работают. Походу китайцы брак впихнули, только я не могу понять это чипу хана или кварцу. Ставил на 16МГц (других нет ))) ), изменений нет. Подскажите, если знаете, как саму 1302 проверить на работоспособность?

    • @alexmorozov73
      @alexmorozov73  7 ปีที่แล้ว

      К сожалению, как проверить DS1302 не знаю. Менять кварц 32kHz на 16MHz явно не поможет. Раз ответ от микросхемы есть - значит скорее всего она рабочая. Тогда кварц мертвый. Возьмите его от старой материнской платы, там должен на RTC стоять как раз на 32kHz. На китайские кварцы с дешевых модулей нареканий много.

    • @ellpigy
      @ellpigy 7 ปีที่แล้ว

      Ок, спасибо, на 32КГц нет у меня. Я, в принципе, уже 1307 и 3231 заказал, а пока 1302 мучаю. Пойду кварц выпаивать )

    • @alexmorozov73
      @alexmorozov73  7 ปีที่แล้ว

      А вы точно в регистре секунд старший бит не устанавливаете случайно? Это Clock Halt, он должен быть 0, чтобы часы начали идти.
      1307 не сильно лучше 1302, только что I2C, зато от 3.3 B не работает. А вот 3231 - совсем другое дело. И точнее и удобнее.

    • @ellpigy
      @ellpigy 7 ปีที่แล้ว

      в даташите вот что написано: The MSB
      (Bit 7) must be a logic 1. If it is 0, writes to the DS1302 will be disabled.
      Может подскажете как определить? В библиотеке же должен он устанавливаться?

    • @alexmorozov73
      @alexmorozov73  7 ปีที่แล้ว

      Вы говорите о старшем бите в контрольном регистре, а я говорю о старшем бите в секундном регистре.
      Библиотеки должны бит CH сбрасывать. Но я на всякий случай уточнил, вдруг вы руками регистры устанавливаете.

  • @StefanKovachevSP
    @StefanKovachevSP 7 ปีที่แล้ว

    У меня следующий вопрос. Как я могу исправить, чтобы занять время, включая зимнее или летнее время с функцией Web-адрес google.com:80 в этом коде:
    void getTime()
    {
    WiFiClient client;
    if (!client.connect("www.google.com", 80)) {
    Serial.println("connection to google failed");
    return;
    }
    client.print(String("GET / HTTP/1.1
    ") +
    String("Host: www.google.com
    ") +
    String("Connection: close

    "));
    int repeatCounter = 0;
    while (!client.available() && repeatCounter < 10) {
    delay(500);
    //Serial.println(".");
    repeatCounter++;
    }
    String line;
    client.setNoDelay(false);
    while(client.connected() && client.available()) {
    line = client.readStringUntil('
    ');
    line.toUpperCase();
    if (line.startsWith("DATE: ")) {
    date = " "+line.substring(6, 22);
    h = line.substring(23, 25).toInt();
    m = line.substring(26, 28).toInt();
    s = line.substring(29, 31).toInt();
    localMillisAtUpdate = millis();
    localEpoc = (h * 60 * 60 + m * 60 + s);
    }
    }
    client.stop();
    }
    // =======================================================================
    void updateTime()
    {
    long curEpoch = localEpoc + ((millis() - localMillisAtUpdate) / 1000);
    long epoch = round(curEpoch + 3600 * utcOffset + 86400L) % 86400L;
    h = ((epoch % 86400L) / 3600) % 24;
    m = (epoch % 3600) / 60;
    s = epoch % 60;
    }
    // =======================================================================
    или как заменить его с кодом NTP Client, что эта проблема решается? И еще один вопрос. Могу ли я на существующие часы RTC3231 добавить этот модуль, чтобы периодически обновлять часы времени? Только для летнего и зимнего времени. В противном случае он практически не нуждается в проверке, так точно.

    • @alexmorozov73
      @alexmorozov73  7 ปีที่แล้ว

      Зимнее и летнее время как и тайм-зона - это исключительно локальная настройка и никак ее кроме задания вручную самому не применить, не зависимо от источника получения точного времени (NTP серверы или HTTP ответ).

    • @veoramid
      @veoramid 4 ปีที่แล้ว

      Время переводится в последнее воскресенье март/октябрь (?) в 4 часа утра. В этих месяцах 31 день. Соотвественно нужно запомнить флаг что время УЖЕ переведено осенью назад, высчитать число 31-7, знать день недели и применять в 4 часа утра [часовой пояс] + [летнее время] или [часовой пояс] + [0]

  • @mikhailkogtev7474
    @mikhailkogtev7474 7 ปีที่แล้ว +1

    В модуле DS3231 есть еще датчик температуры....

    • @alexmorozov73
      @alexmorozov73  7 ปีที่แล้ว

      Это не совсем датчик, а устройство для внутренней термокалибровки. Точность его сомнительна. Но да, как факт есть. И как работать с ним описано в даташите.

  • @kabikin
    @kabikin 6 ปีที่แล้ว

    Изменение timeZone не меняет показание часов

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว

      Что пишет в сериал?

    • @kabikin
      @kabikin 6 ปีที่แล้ว

      sending NTP packet...
      packet received, length=48
      Seconds since Jan 1 1900 = 3723463140
      Unix time = 1514474340
      The UTC time is 15:19:00
      RTC epoch = 2309275169
      The RTC date and time is @5.85.20@5 45:@5:@5
      Updating RTC ( epoch difference is 794790029)
      Но возможно проблема в том, что модуль не видится сканером шины
      (только сейчас обнаружил) .Решаю сейчас.Спасибо за оперативность.

    • @kabikin
      @kabikin 6 ปีที่แล้ว

      Сканер на arduino видит два адреса 0х57 и 0х68

    • @alexmorozov73
      @alexmorozov73  6 ปีที่แล้ว

      Речь идет о DS3231? 0x68 - это адрес часов, другой адрес EEPROM. Если правильный дефайн раскомментирован в .ino-файле, то все должно работать. Если, конечно, сам модуль часов рабочий.

  • @user-bomb.
    @user-bomb. ปีที่แล้ว

    Про пилу на 32кГц, вы загнули, конечно. 😂 Там чистый меандр! А дальше смотреть не интересно стало!

  • @maddocrusmad464
    @maddocrusmad464 3 ปีที่แล้ว

    Звук говно? Че за?