ЭЛЕКТРОНИКА DS3231M особенности и глюки

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
Хочу поделиться опытом, может кому будет полезно. Подключил к Ардуино Нано модуль DS3231M. С библиотекой Гайвера модуль не заработал. Висел на инициализации, либо проходил и отвечал на запросы, но выдавал нули. Модуль новый, на вид всё отлично. Подключил другую библиотеку. Заработало, правда не сразу, были какие-то глюки с большими паузами перед началом индикации. Но затем всё заработало и показывало время. Установилось время компиляции. Где-то полчаса работало. В какой-то момент выключил. Затем включил заново — индикатор пустой. Не понял. Индикация должна быть по любому, т.к. она на прерываниях. Скорее всего опять задержка при инициализации. Затем индикатор стал показывать 165.165. (6-разрядный). Проверил по монитору порта — все значения 165.
Внимательно посмотрел на плату. Замерил SDA — около 30 Ом! Линия SCL — около 7 КОм. Пропаял микросхему DS3231 и сопротивление линии SDA вернулось к правильному — около 7 КОм. Только работоспособность модуля это не вернуло. Скорее всего при большой нагрузке на линию SDA, влекущим искажение данных, произошел сбой внутри чипа то ли в настройках, а может в программной части внутреннего микроконтроллера.
 

bort707

★★★★★★✩
21 Сен 2020
3,361
975
В какой-то момент выключил. Затем включил заново — индикатор пустой. Не понял. Индикация должна быть по любому, т.к. она на прерываниях. Скорее всего опять задержка при инициализации. Затем индикатор стал показывать 165.165. (6-разрядный).
Вы ничего не путаете? DS3231 это модуль часов реального времени. На нем нет индикаторов.

А так, ничего в нем сложного нет, да и библиотек к нему не одна и не две, выбирай любую. Чтобы время не сбрасывалось, не забудьте доработать цепь питания от батарейки, как описано в куче мест в инете.
 

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
Вы ничего не путаете? DS3231 это модуль часов реального времени. На нем нет индикаторов.

А так, ничего в нем сложного нет, да и библиотек к нему не одна и не две, выбирай любую. Чтобы время не сбрасывалось, не забудьте доработать цепь питания от батарейки, как описано в куче мест в инете.
Индикатор внешний через Ардуино Нано.
Имеется в виду цепочка из резистора с диодом? Если питать от 5 вольт то батарейка начинает заряжаться, что противопоказано для неё, но если питать от 3.3 вольта то ничего лишнего не придёт. В даташите на микросхему DS3231 сказано, что рабочее напряжение питания 3.3 вольта, а максимум 5.5 вольта.
 

bort707

★★★★★★✩
21 Сен 2020
3,361
975
В даташите на микросхему DS3231 сказано, что рабочее напряжение питания 3.3 вольта, а максимум 5.5 вольта.
Для самой микросхемы 3.3в может и подходит, а вот для схемы конкретного модуля?
Может, именно поэтому у вас такие неожиданные проблемы с ним?

Уточните, каким образом Вы сопрягли модуль питающийся от 3.3в с платой Нано? Или Нано у вас тоже 3.3в?

И дайте, пожалуйста, ссылку на Ваш модуль
 

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
Для самой микросхемы 3.3в может и подходит, а вот для схемы конкретного модуля?
Может, именно поэтому у вас такие неожиданные проблемы с ним?

Уточните, каким образом Вы сопрягли модуль питающийся от 3.3в с платой Нано? Или Нано у вас тоже 3.3в?

И дайте, пожалуйста, ссылку на Ваш модуль
Вначале от 5 вольт запитывал, потом переключил на 3.3. Вообще-то я полагал, что моя плата Нано на 3.3 в, но ваш вопрос заставил меня задуматься, замерил напряжение на 4-й ноге, оказалось 5 вольт. Но DS3231 всё-так же не работает.
Вот этот модуль https://www.direnc.net/arduino-i2c-ds3231-real-time-clock-rtc-modulu
 

Bruzzer

★★★★✩✩✩
23 Май 2020
756
232
@Esteriman,
При непонятных ситуациях, надо упрощать схему до минимальной и искать причину. Т.е. запитать от 5 В, подключить к НАНО только модуль часов и выводить в Serial отладочные сообщения. Проверить сканером i2c, находятся ли часы и eeprom. Потом инициализация часов, и т.д. ...
 

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
C++:
#include <DS3231.h> //https://github.com/jarzebski/Arduino-DS3231
#include <Wire.h>

DS3231 rtc;
RTCDateTime dt;
uint16_t t1=millis();

void setup() {
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();
  rtc.setDateTime(2018, 4, 13, 19, 21, 00);
}

void loop() {
  if (millis()-t1>1000) {
    t1 = millis();
    dt = rtc.getDateTime();
    Serial.println(rtc.dateFormat("H.i.s", dt));
  }
}
Вот минимальный код, все лишнее выкинул. И вот вывод в монитор:
165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

165.165.165

...

Повторюсь: всё работало, часы тикали, время устанавилось, отключал, подключал проверить автономное тиканье, все работало. Отключил, включил через полчасика — не работает. По линии SDA сильно заниженное сопротивление.
 

bort707

★★★★★★✩
21 Сен 2020
3,361
975
Вообще-то я полагал, что моя плата Нано на 3.3 в, но ваш вопрос заставил меня задуматься
Не обижайтесь, но пока выглядит так, что вы крайне мало понимаете и в Ардуинах, и в электронике в общем. Легко может статься, что вы уже давно поджарили модуль неверным подключением и теперь не удивительно, что он работает абы как
 

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
Не обижайтесь, но пока выглядит так, что вы крайне мало понимаете и в Ардуинах, и в электронике в общем. Легко может статься, что вы уже давно поджарили модуль неверным подключением и теперь не удивительно, что он работает абы как
Это верно. Я начинающий. Но теперь мне интересно, когда поджарился модуль:
1. При подключении с питанием 5 вольт (когда он и перестал работать, на 3.3 переключил после).
2. Когда переключил на питание от 3.3 вольта.
P.S. Я полагаю, что модуль RTC изначально был немного попорченный. Он не сразу заработал, видно уже тогда подбитый SDA давал знать.
 

Bruzzer

★★★★✩✩✩
23 Май 2020
756
232
@Esteriman,
Повторюсь: "Проверить сканером i2c, находятся ли часы и eeprom. "
 

Esteriman

✩✩✩✩✩✩✩
4 Июн 2025
28
1
Господа! Благодарю всех за участие, проблема разрешилась, хвала Всевышнему.
Суть проблемы была в том, что по линии SDA было сильно заниженное сопротивление, возможно из-за плохого флюса. После пропайки модуля с хорошим флюсом и чистки это заниженное сопротивление ушло. Но когда я обратно припаивал провода к плате Ардуино на линию I2C, перепутал контакты и сдвинул вправо, так что SDA сидел на А5, а SCL на А6 (плата Ардуино Нано). Только заметил, перепаял и все заработало.
 
  • Лойс +1
Реакции: bort707