Странное поведение DS3231

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

Сталкивался. Батарейка села. Для хранения времени энергии хватает, а для работы осциллятора уже нет.

Резонатор отключается при выключенном питании, нужно включить. В этой библиотеке вроде бы метод enableOscillator(). Сам не сталкивался. Если садится батарея, часы просто сбрасываются

А люди сталкивались. Вот например #138. Часы останавливались, а при подаче питания автоматически переходили в режим настройки времени (есть там такая функция - отслеживается остановка осциллятора). Время при этом отображалось, когда они остановились. Т.е. DS-ка уже не “тикала”, но все еще хранила время. Как выяснилось #146, причина - подсевшая батарейка, как и у ТСа.

Спасибо большое за советы, батарейки действительно китайские, возможно дело в этом, проверю отпишусь

Не сталкивался с остановкой. А с севшими батарейками сталкивался. Всегда сбрасывались часы

В любом случае @v258 прав. Если осциллятор остановился (по любой причине, из-за батарейки или ещё почему), то сам он не запустится. Его надо запустить явно.

1 лайк

Поменял батарейку все нормально работает, буду иметь в виду, спасибо всем

“эта музыка будет вечной…”

согласен, прежде чем задать вопрос, я искал в интернете похожие случаи, к сожалению не нашел, может кто-то в будущем наткнется на эту тему и не будет задавать вопросов

2 лайка

При любых непонятных проблемах первое, что нужно проверять - это питание. Ну и батарейки, если в схеме имеются. Очень много времени экономится

1 лайк

Сбрасываются они тогда, когда батарейка совсем села. А когда не совсем - просто встают на моменте выключения, и продолжают с него при включении. Проверено неоднократно.

1 лайк

так это во всём так…поел что-то…

Всем привет, тема конечно старая, но столкнулся с такими же граблями, заменил две новых батарейки (3.3в) но при отключении питания внутренний осцилятор молчит… при подключении питания на экране то время, что записал при настройке.
Подскажите где копать. модуль DS3231

В посте, на который вы сослались, сказано, что делать

я написал, пробовал две новых батарейки, не помогло, (enableOscillator()) не поможет , другая библиотека (DS3231) с другой скетч не проходит.

а в посте все пишут про севшую батарейку…

Пробовал?

пробовал, скетч матерится на него, а установка другой библиотеки (в которой есть такой оператор), тогда матерится на все ниже…

#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Библиотека - http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
DS3231 clock;RTCDateTime DateTime;

        LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей    
  byte v1[8] = {15,15,15,15,15,15,15,15};
  byte v2[8] = {15,15,15, 0, 0, 0, 0, 0};      
  byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
  byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
  byte v5[8] = { 0, 0, 0, 0, 0, 30, 30, 30};
  byte v6[8] = {30,30,30,30,30,30,30,30};
  byte v7[8] = { 0, 0, 0, 0, 0, 15,15,15};
  byte v8[8] = { 31, 31,31,0,0,0,0, 0};
  int a[6];
  byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
   void setup()

{
Wire.begin();
clock.begin();
clock.setDateTime(2024, 10, 31, 12, 01, 59);

    //DateTime myDT(2022, 09, 08, 16, 50, 59);
lcd.init();lcd.backlight();// Включаем подсветку дисплея
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);

}
void loop(){
DateTime=clock.getDateTime();
a[0]=DateTime.hour/10;
a[1]=DateTime.hour%10;
a[2]=DateTime.minute/10;
a[3]=DateTime.minute%10;
a[4]=DateTime.second/10;
a[5]=DateTime.second%10;

for(i=0;i<6;i++){
switch(i){
case 0: e1=0,e2=1,e3=2;break;
case 1: e1=3,e2=4,e3=5;break;
case 2: e1=7,e2=8,e3=9;break;
case 3: e1=10,e2=11,e3=12;break;
case 4: e1=14,e2=15,e3=16;break;
case 5: e1=17,e2=18,e3=19;break;
}
switch(a[i]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=4,d3=6,d4=1,d5=3,d6=5;break;
case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
case 5: d1=1,d2=4,d3=8,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=8,d4=1,d5=3,d6=6;break;
case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
}

  lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
  lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);

}
lcd.setCursor(6,0);lcd.print(“.”);lcd.setCursor(13,0);lcd.print(“.”);lcd.setCursor(6,1);lcd.print(“.”);lcd.setCursor(13,1);lcd.print(“.”);
lcd.setCursor(0,2);lcd.print(“--------------------”);
lcd.setCursor(1,3);lcd.print(DateTime.day/10);lcd.print(DateTime.day%10);lcd.print(“-”);lcd.print(DateTime.month/10);lcd.print(DateTime.month%10);lcd.print(“-”);lcd.print(DateTime.year);
lcd.print(" ");lcd.print(clock.readTemperature(),1);lcd.print((char)223);lcd.print(“C”);
}