Сбрасывается время на DS3231

tanc13
Offline
Зарегистрирован: 23.04.2016

Купил DS3231,установил время,идет отлично,но как отключаю Arduino от питания - сбрасывается время. Батарейку проверял,рабочая,код прилагаю.



#include "RTClib.h"
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F , 20, 4);
RTC_DS3231 RTC;

void setup()
{
  RTC.begin();
  lcd.begin();
  Serial.begin(9600);
  lcd.backlight();
}

void loop()
{
  lcd.clear();
  DateTime now = RTC.now();
  Serial.print(now.second(), DEC);
  lcd.print(now.second(), DEC); 
  delay(900);
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Чудес не бывает !

Либо батарея дохлая, либо нет контакта батареи с ногами DS3231, ищите где.

bwn
Offline
Зарегистрирован: 25.08.2014

xDriver пишет:

Чудес не бывает !

Либо батарея дохлая, либо нет контакта батареи с ногами DS3231, ищите где.

Поддерживаю усеми конечностями.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

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

А то, может ТС голую микруху купил.

tanc13
Offline
Зарегистрирован: 23.04.2016

Нет.Вот так выглядит плата(нашел в Гугле).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

tanc13 пишет:

Нет.Вот так выглядит плата(нашел в Гугле).

Нормально так )))
Отфотографируйте свою! Есть косяк с самим контейнером под батарейку, уж сколько я их перековырял, а такой, как прислали встретил впервые, батарейку нельзя защёлкивать обычним спосом, только через извращение, подламывается верхний контакт и - нет контакта

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

При отключенной Arduino, на ногах 13 и 14 DS3231 должно быть  3,3 вольта.

tanc13
Offline
Зарегистрирован: 23.04.2016

13 и 14?Это на самой Arduino или на RTC?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

RTC

tanc13
Offline
Зарегистрирован: 23.04.2016

Замерил,0 вольт...

Что может быть причиной?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Причину я Вам в первом посте своем озвучил.

Батарейка точно не дохлая ???

Ну сфоткайте Вы свою DS3231 ...

tanc13
Offline
Зарегистрирован: 23.04.2016

Да,дает стабильно 3,3 вольта. И новую покупал,пробовал. Я думаю,что дело в контакте.Спасибо за помощь!

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Прозвонить, не, зачем, проще на форум написать, пусть люди погадают....

Чечако
Offline
Зарегистрирован: 15.06.2018

Подниму тему, чтобы не плодить. Столкнулся со странным глюком - часы DS3231 (модуль от RobotDyn с CR1220 на борту) без внешнего питания перестали идти. Но и время не забывают. Просто останавливаются на том месте, где я обрубаю питание. При возвращении - идут с той же точки.

Единственное, до чего могу докопаться - батарейка под нагрузкой от часов быстро падает в район вольта. При вытаскивании - постепенно возвращается к трем. Т.е. явно уставшая.

Это нормальное поведение для такой ситуации? Я думал, если батарейка сядет, они на ноль сбрасываться будут, это хоть отловить программно можно и юзверю тревогу забить. А тут такая подстава. :(

 

sadman41
Offline
Зарегистрирован: 19.10.2016

https://datasheets.maximintegrated.com/en/ds/DS3231.pdf

Bit 7: Enable Oscillator (EOSC). When set to logic 0, the oscillator is started. When set to logic 1, the oscillator is stopped when the DS3231 switches to VBAT. 

Green
Offline
Зарегистрирован: 01.10.2015

Ой, неохота смотреть даташит, но идея должна быть понятна. Генератор перестаёт работать при пониженном напряжении батареи, тогда как всё остальное сохраняется. Там есть узел power control который этим всем рулит. Резюме - батарейка должна быть в норме.

Чечако
Offline
Зарегистрирован: 15.06.2018

(задумчиво) Ну, я когда-нить научусь сначала смотреть в даташит, а потом задавать вопросы...наверное. :) Спасибо. !

Надо подумать, как тогда реализовать механизм контроля даты малой кровью. Ибо я рассчитывал ловить заведомо невозможную дату (каковой она является после сброса), и в этом случае намекать пользователю на проверку даты и замену батарейки. А так - оно не прокатит. Разве что при выключении сохранять дату в eeprom, и если при повторном включении ничего +- не изменилось, то паниковать. Но тоже вопрос, что именно считать "+-не изменилось"... Пойду дальше даташит читать, может все за меня уже придумали.

sadman41
Offline
Зарегистрирован: 19.10.2016

А что такое "Невозможная дата"? МК не подвластен проедрассудкам - ему все даты ОК, даже дефолтовая. 

Самый простой способ контроля:

Bit 7: Oscillator Stop Flag (OSF). A logic 1 in this bit indicates that the oscillator either is stopped or was stopped for some period and may be used to judge the validity of the timekeeping data. This bit is set to logic 1 any time that the oscillator stops. The following are examples of conditions that can cause the OSF bit to be set: 1) The first time power is applied. 2) The voltages present on both VCC and VBAT are insufficient to support oscillation. 3) The EOSC bit is turned off in battery-backed mode. 4) External influences on the crystal (i.e., noise, leakage, etc.). This bit remains at logic 1 until written to logic 0

Чечако
Offline
Зарегистрирован: 15.06.2018

sadman41 пишет:

А что такое "Невозможная дата"? МК не подвластен проедрассудкам - ему все даты ОК, даже дефолтовая. 

Самый простой способ контроля:

Bit 7: Oscillator Stop Flag (OSF).  [cut] logic 1 until written to logic 0

Невозможная дата - это нулевой или первый год, например. :) Или просто тупо любая дата старше 2018 года. Потому как в моем случае задача RTC - текущее время для логов. И пока машину времени не изобрели, я смело могу считать любую дату ранее фактической реализации устройства невозможной. :) И требовать ввести дату или проверить баратейку. А тут - облом.

Я не вижу в вашей цитате никакого способа контроля, это просто перечисление факторов, при которых чип останавливает осциллятор.

Но - как только вернется нормальное питание, он его опять запустит.

Сейчас часы автоматом переходят на батарею при обесточивании устройства целиком, включая МК. Чип часов умеет орать о падении основного напряжения (Vcc) ниже power fail, судя по даташиту, но мне-то нужно контролировать Vbat.

А на Vbat он штатно переходит тогда, когда обрезана подача основного питания. Т.е. МК уже отключился. Получается, что надо городить аппаратное решение, которое будет проверять напряжение на батарейке, и если что - орать что ее пора заменить. Иначе никак. Либо требовать от пользователя регулярно проверять дату, потому как в моем случае - она на экран выводится только в настроечном меню, ибо не является важным параметром, кроме как для записи логов.

sadman41
Offline
Зарегистрирован: 19.10.2016

А чем 2018-й год хуже другого? Включат устройство в 2020-м и окажется, что год невалиден?

По моим экспериментам - проверка OSF на включении вполне себе нормально сигналит о том, что батареи нет или есть иные проблемы.

 

 

Чечако
Offline
Зарегистрирован: 15.06.2018

sadman41 пишет:

А чем 2018-й год хуже другого? Включат устройство в 2020-м и окажется, что год невалиден?

По моим экспериментам - проверка OSF на включении вполне себе нормально сигналит о том, что батареи нет или есть иные проблемы.

Тем, что логи пишутся в реальном времени, а до 2018 года этого устройства в природе не существовало. И любой год старше 2018 (2020 младше) будет невалидным. Я это приводил как пример определения сброса времени. При сбросе там первый или нулевой год получается,он априори старше 2018. :)

По проверке OSF при включении - да, надо будет проверить, спасибо за идею.