DS3231 отстают на 1 минуту за сутки

letyagin
Offline
Зарегистрирован: 09.06.2016

Здравствуйте.Приобрёл модуль точности ds3231.установил время,но точность хода никакая.Отстают на 1 минуту за сутки.Может я сбил настройки потому что запускал скетч DS1307 RAM Demo.Можно ли их настроить поточнее?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

вытащите батарейку, и через 15 минут запустите, и настройте время, если не поможет то значит фиговая микросхема попалась, настроек коррекции частоты в ней нет

axill
Offline
Зарегистрирован: 05.09.2011

еще можео попробовать заменить батарейку, возможно ее напряжение ниже допустимого, что может давать такой эффект

если и это не поможет, то скорее всего микросхему мыли в УЗО ванне, у нее от этого разрушается резонатор

из моего опыта за два года уход часов менее одной минуты

reticular
Offline
Зарегистрирован: 09.06.2016

меняйте кварц. на старых материнках есть на 32 кгц

мне помогла замена кварца

axill
Offline
Зарегистрирован: 05.09.2011

reticular пишет:

меняйте кварц. на старых материнках есть на 32 кгц

мне помогла замена кварца

выковырять кварц из чипа?)) он там встроеный.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

reticular пишет:

меняйте кварц. на старых материнках есть на 32 кгц

мне помогла замена кварца

Интересно, как Вы это делали? Его ж там нету (в смысле, он на кристалле)!

letyagin
Offline
Зарегистрирован: 09.06.2016

Спасибо за советы,попробую вытащить батарейку на 15 минут,завтра напишу.Напряжение в норме 3.7 вольт.

letyagin
Offline
Зарегистрирован: 09.06.2016

Не помогло.Заказал ds1307 у другого продавца.

axill
Offline
Зарегистрирован: 05.09.2011

letyagin пишет:

Не помогло.Заказал ds1307 у другого продавца.

ох. Это теже грабли) лучше закажите у проверенного продавца ds3231

gena
Offline
Зарегистрирован: 04.11.2012

  Так, между прочим. А у батарейки напряжение 3,7 В - норма?

axill
Offline
Зарегистрирован: 05.09.2011

Для аккумулятора норма, для батарейки нет, вроде не более 3.2 должно быть

кстати я бы все жу другую батарейку попробовал по любому

letyagin
Offline
Зарегистрирован: 09.06.2016

 

При подключении к компу напряжение на батарейки поднимается до  4.36 В. Похоже плата расчитана на аккумулятор,но у меня пришла с батарейкой CR2032 3V.А заказал новый модуль здесь:ru.aliexpress.com/item/RTC-Real-Time-Clock-DS1307-module-with-battery/32530897478.html.Продовец провереный.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

вам же сказали, что 1307 хуже чем ваш отстающий, берите на ds3231sn

letyagin
Offline
Зарегистрирован: 09.06.2016

Думую надо выпаять элементы цепочки зарядки:диод,резистор и поставить перемычку.

 

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

letyagin пишет:

Думую надо выпаять элементы цепочки зарядки:диод,резистор и поставить перемычку.

 

Поставьте вместо батарейки ионистор и не майтесь. Резистор нижнего плеча убираем, вместо зарядного - или напрямую или ом 100 для порядка. Если все таки убитый кварц, то только перепайка чипа. 1307 лучше сразу в топку.

Кстати для 1307 такой вариант питания не прокатит, там должна быть разница напряжений между батареей и питанием.

axill
Offline
Зарегистрирован: 05.09.2011

Откуда информация про цепь заряда? Ее по идее там не должно быть

все же попробуйте с другой батарейкой

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

axill пишет:

Откуда информация про цепь заряда? Ее по идее там не должно быть

все же попробуйте с другой батарейкой

Часто аккумы литиевые стали лепить. Если схему от 1307 не изменили, то там дальше стоял делитель, чтобы получить корректное напряжение для BAT. На 3231 это не актуально.

P/S кстати и скетч ТС не грех глянуть.

letyagin
Offline
Зарегистрирован: 09.06.2016

Нашёл в интернете:

А что у вас в регистре по адресу 0x10 у DS3231?

Это регистр компенсации точности хода
Значения -127 … +127
Из даташтта:
Назначение регистра компенсации точности хода:
Регистр компенсации точности хода кристалла хранит 8-битовый код в формате «дополнение до двух» предназначенный для компенсации точности хода часов.
Результирующая частота = частота резонатора + значение регистра * 0.1ppm, где значение регистра может быть, как положительным, так и отрицательным.
Результирующую частоту можно отслеживать на выводе 32kHz.
Регистр доступен для записи и чтения.

Может по ошибке записали туда что то?

Joiner
Offline
Зарегистрирован: 04.09.2014

Так как являюсь фанатом часиков DS3231, не смог пройти мимо. У меня штук 5 таких модулей и 4 штуки микросхемы. Ни каких проблем не замечаю ни при использовании микросхем, ни при использовании модулей. Но так было не всегда. В какой-то теме уже писал, что нужно переделать немного в самом модуле, а имменно, достаточно отпаять и выбросить диод. После этого забыл про все проблеммы. Почему-то в модуле схема отличается от даташита на микросхему. Какого-то хрена там подали напряжение на батарейку, чем ее и убивали. Батарейка на модуле мгновенно умирала и даже вспучилась немного. Теперь все хорошо и даже отлично. Надеюсь теперь батарейка прослужит долго, как обещают в даташите (если память не изменяет) 3 года. А часики мои опережают атомные часы всего примерно на одну-полторы секунды за один месяц.

letyagin
Offline
Зарегистрирован: 09.06.2016

Выпаял диод.Купил новую батарейку (напряжение 3.3 в),поставил,идут секунда в секунду.Вывод:при покупки модуля DS3231 выпаиваем диод (чтобы не было перенапряжения на CR2032),а уже потом подключаем к плате ардуино.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

letyagin пишет:

Вывод:при покупки модуля DS3231 выпаиваем диод (чтобы не было перенапряжения на CR2032),а уже потом подключаем к плате ардуино.

Вывод странный. Более правильно выглядит так: "при покупке модуля DS3231, ставим туда аккумулятор LIR2032 и радуемся жизни" :)))

Joiner
Offline
Зарегистрирован: 04.09.2014

ЕвгенийП пишет:

letyagin пишет:

Вывод:при покупки модуля DS3231 выпаиваем диод (чтобы не было перенапряжения на CR2032),а уже потом подключаем к плате ардуино.

Вывод странный. Более правильно выглядит так: "при покупке модуля DS3231, ставим туда аккумулятор LIR2032 и радуемся жизни" :)))

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

Joiner
Offline
Зарегистрирован: 04.09.2014

letyagin пишет:

Выпаял диод.Купил новую батарейку (напряжение 3.3 в),поставил,идут секунда в секунду.Вывод:при покупки модуля DS3231 выпаиваем диод (чтобы не было перенапряжения на CR2032),а уже потом подключаем к плате ардуино.

 

Не правильно. Сначала подключаем к Ардуино, потом выпаиваем диод и покупаем новую батарейку :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Joiner пишет:

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

Шоб ничего не выпаивать.

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

letyagin
Offline
Зарегистрирован: 09.06.2016

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

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

ЕвгенийП пишет:

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

На модулях 1307 они себя плохо вели. На 3231 не знаю, модули давно не брал, хотя вряд ли что то изменилось. Если бы переделывал сейчас, то уменьшил зарядный резистор и поставил ионистор.
Кстати на 1307 был еще резистор нижнего плеча в схеме с аккумулятором, для 3231 он не нужен, так что не знаю, ставят китайцы в эти модули с  или нет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

модули давно не брал

Да, уж, завидую. Я тоже стараюсь модули никогда не брать, когда есть выбор. Но 3231 в DIP не бывает. А эти корпуса ... и как вы все их, блин, паяете? :))))))) Я не могу. Помню как-то нужно было 100-ногую Мегу 2560 впаять. После двух угробленных мег, я просто пошёл в мастерскую и мне ребята там запаяли. Тоже. кончено, решение :))) 

Joiner
Offline
Зарегистрирован: 04.09.2014

bwn пишет:

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

Ребята, зачем?! Разработчики микросхемы все продумали. Батарейка включается в работу только в случае отключения основного питания, и включается, между прочим, самой микросхемой без всякого дополнительного обвеса. Когда появляется питание VCC, батарейка отключается, между прочим, самой микросхемой без дополнительного на то обвеса. Получается, что батарейка используется в экстренных, коротких случаях, в случаях отключения основного питания. Нахрена городить огород и что-то еще изобретать?

axill
Offline
Зарегистрирован: 05.09.2011

ЕвгенийП пишет:

Да, уж, завидую. Я тоже стараюсь модули никогда не брать, когда есть выбор. Но 3231 в DIP не бывает. А эти корпуса ... и как вы все их, блин, паяете? :))))))) Я не могу. Помню как-то нужно было 100-ногую Мегу 2560 впаять. После двух угробленных мег, я просто пошёл в мастерскую и мне ребята там запаяли. Тоже. кончено, решение :))) 

Ds3231 жирнющая) ее легко паять. Причем можно даже большим жалом, главное флюса не жалеть. Ставим ровно, придавливаем сверху пинцетом, хватаем по ноге по диагонали, а потом просто водим жалом туды-сюды с каждого бока. Все

 

axill
Offline
Зарегистрирован: 05.09.2011

Joiner есть свои плюсы у батарейки и у ионистора. 

Плюс батарейки в простоте решения. И долгая автономность. Минус в необходимости обслуживать. Три года всегда заканчиваются не вовремя

плюс в ионисторе - полное отсутствие обслуживания на весь срок службы. Минус в малой автономности. У меня в контроллере ионнообменного фильтра в доме часы на ионисторе и когда свет отрубают на несколько часов они сбрасываются, надо заново ставить. Уж лучше раз в три года батарейку менять) но это не всегда и не везде так

аккумулятор спорное решение. Если через него постоянно течет ток (в схеме с диодом именно так) врядли он прослужит дольше батарейки. Я поставил в двух устройствах аккумуляторы, но со схемой ltc4054, т.е. Зарядка идет только до заданного уровня и отключается. Включается при разрядке. Тоесть при питании от сети за год будет какое то небольшое число циклов, это дает шанс проработать в разы дольше батарейки. Два года уже работают. Часы утикали на несколько секунд. Посмотрим дальше

a5021
Offline
Зарегистрирован: 07.07.2013

axill пишет:
плюс в ионисторе - полное отсутствие обслуживания на весь срок службы. Минус в малой автономности. У меня в контроллере ионнообменного фильтра в доме часы на ионисторе и когда свет отрубают на несколько часов они сбрасываются, надо заново ставить.

Если ионисторы китайские, то у них обычно высокие токи саморазряда. Жалобы такого рода на али часто можно видеть в отзывах. Встречал ионисторы 0.33F в эпсоновских струйниках, которые как раз на часовой микрухе стоят. Не знаю, правда, на сколько их должно хватать, но скорее всего на срок больше нескольких часов.

Ионистор не очень удобен в часах тем, что напряжение на нем падает, в отличие от батареек и аккумуляторов, почти линейно по мере исчерпания емкости. Если на литиевой батарейке после уполовинивания емкости будет 2.95в (примерно), то на ионисторе при тех же условиях 1.5 - 2в (опять же примерно). Понятно, что часовая микруха окуклится гораздо раньше, чем ионистор отдаст бОльшую часть энергии.

Цитата:
аккумулятор спорное решение. Если через него постоянно течет ток (в схеме с диодом именно так) врядли он прослужит дольше батарейки.

Я покупал модули с LIR2032 на борту. Если такой модуль, вытащенный из часов, полежит на столе с недельку, он забывает все, что помнил. А может и гораздо раньше забывает, я точно не выяснял. Вобщем, как-то я не особо впечатлился этими аккумами.

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

ЕвгенийП пишет:

 А эти корпуса ... и как вы все их, блин, паяете? :))))))) Я не могу.

Не в обиду,проблема в жале или коротких руках? ))). У меня от коротких рук настольная китайская лупа с подсветкой, проблемы  исчезли. Правда мелкие, с шагом <1,25, пока не пробовал.

axill
Offline
Зарегистрирован: 05.09.2011

a5021 в приведенном мной примере контроллер с ионистором не китайская поделка, а фирменное изделие

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

bwn пишет:

Не в обиду,проблема в жале или коротких руках? ))). 

Думаю, что в кривых руках (включая и голову) . Если с руками и головой всё нормально, то проблемы оборудования решаются просто - деньгами. А я даже не знаю, что не так с оборудованием и что надо купить - просто не получается и всё. Может потому, что я полный самоучка - никто и никогда не показывал. Я вон слово "диод" долгое время не с тем ударением произносил, потому что видел его только в книге, но никогда не слышал.

axill
Offline
Зарегистрирован: 05.09.2011

Самоучек кому никто не показывал как правильно большинство

по моему единственная вещь которая необходима - желание. Все остальное решаемо

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

ЕвгенийП пишет:

А я даже не знаю, что не так с оборудованием и что надо купить - просто не получается и всё.

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

axill
Offline
Зарегистрирован: 05.09.2011

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

идеальным для меня стала лупа с кольцевой подсветкой на регулируемом кронштейне, но наверно сейчас весьма недешева

насчет фена. Приятно когда он есть под рукой, но smd можно легко паять без него. По крайней мере tqfp/lqfp sop/tssop легко

a5021
Offline
Зарегистрирован: 07.07.2013

axill пишет:
a5021 в приведенном мной примере контроллер с ионистором не китайская поделка, а фирменное изделие

"Фирменное изделие", которе "забывает" правильное время за несколько часов --  это не очень хорошее "фирменное изделие".

axill
Offline
Зарегистрирован: 05.09.2011

a5021 пишет:

"Фирменное изделие", которе "забывает" правильное время за несколько часов --  это не очень хорошее "фирменное изделие".

не страдайте ерундой

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

a5021
Offline
Зарегистрирован: 07.07.2013

Я и говорю, что плохое решение. Даже хуже, чем у "китайских инженеров и самодельщиков". Я пробовал питать ионисторами беспроводной сенсор. С емкости 1F, заряженной до 3.2в, он отработал у меня 31 час, передавая данные 1 раз в минуту. Усредненное потребление больше, чем на порядок, если сравнивать с потреблением микрухи RTC. Фирмачам нужно было сильно постараться, чтобы высадить ионистор часовой микрухой за несколько часов.

axill
Offline
Зарегистрирован: 05.09.2011

Не берусь судить фирмачей. Решение их действительно не самое удачное. Но факт в том, что каждый из нас позавидовал бы продавать такие девайсы за такие деньги) а это у них по факту получается хорошо

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

с технической точки зрения решение такой проблемы рассмешило бы любого даже начинающего ардуинщика. Но факт - сбрасывается

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

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

axill пишет:

насчет фена. Приятно когда он есть под рукой, но smd можно легко паять без него. По крайней мере tqfp/lqfp sop/tssop легко

Я по нему загрустил, когда понадобилось выпаивать.((( Строительный слишком брутально.)))

alexxx7
Offline
Зарегистрирован: 08.11.2018

letyagin пишет:

Нашёл в интернете:

А что у вас в регистре по адресу 0x10 у DS3231?

Это регистр компенсации точности хода
.......
Может по ошибке записали туда что то?


Камрады, подскажите плиз, как вообще правильно опросить DS3231, чтобы получить эти данные?
Я же правильно понимаю, оно должно вернуть сразу весь байт (8 бит) ?
Дайте пример плиз, как это правильно запросить.
И как потом правильно записать туда изменения?

И еще вопрос: верно ли я понимаю, что нельзя выборочно изменить значение конкретного бита, а надо пихать целиком байт ?

Дайте пожалуйста пример, как мне допустим изменить только 7 бит регистра 0Е.

И еще вопрос: в каком виде функции Wire.write() нужно указывать этот байт/бит(если его можно отдельно менять)? единичками или как-то в HEX ?

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

Из даташита:
"EOSC: Enable oscillator. When set to logic 0, the oscillator is started. When set to logic 1, the oscillator isstopped when the device switches to VBAT. This bit is clear (logic 0) when power is first applied. When thedevice is powered by VCC, the oscillator is always on regardless of the status of the EOSC bit. When the oscillator is disabled, all register data is static." 

Может ли быть причиной беды, что в 7м бите записана 1 и поэтому часы засыпают, когда выключаешь питание внешнее ?
Батарейка 2032 свежая стоит. мерял - напряжение норм.

 

 

 

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

alexxx7 пишет:
Я же правильно понимаю, оно должно вернуть сразу весь байт (8 бит) ? Дайте пример плиз, как это правильно запросить. И как потом правильно записать туда изменения?
Считали байт, изменили нужный бит, записали обратно.
alexxx7 пишет:
И еще вопрос: в каком виде функции Wire.write() нужно указывать этот байт/бит(если его можно отдельно менять)? единичками или как-то в HEX ?
Без разницы. Если вы - робот, пишите единичками. HEX, BIN, DEC - это просто представления числа для человекочитаемости.
alexxx7 пишет:
Ну и самый главный вопрос: часики у меня засыпают(не идут) судя по всему при выключении внешнего питания. Стартуют с того же момента, когда выключишь. Может ли быть причиной беды,
Может.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Лучше бы Вам не трогать регистр 0x10, пока точно не понимаете, что делаете - он нужен для температурной компенсации и прочих тонких вещей.

alexxx7 пишет:

как вообще правильно опросить DS3231, чтобы получить эти данные? ... как это правильно запросить. И как потом правильно записать туда изменения?

Зависит от того, как Вы с нею работаете (какая библиотека и т.п.). В общем случае, нужно сказать часам адрес регистра и прочитать байт - это и будет тот самый регистр. Например, читаем регистр 0x0F

// Указать адрес
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(uint8_t(0x0f));
Wire.endTransmission();
// Прочитать байт
Wire.requestFrom(CLOCK_ADDRESS, 1);
uint8_t reg0F = Wire.read();

Для записи нужно сделать тоже самое - записать адрес и писать новое значение регистра. Опять же для 0x0F

Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(uint8_t(0x0f));
Wire.write(reg0F);
Wire.endTransmission();

alexxx7 пишет:
верно ли я понимаю, что нельзя выборочно изменить значение конкретного бита, а надо пихать целиком байт ?

Верно.

alexxx7 пишет:
Дайте пожалуйста пример, как мне допустим изменить только 7 бит регистра 0Е

Ну, так и изменить – прочить регистр 0E в переменную, в этой переменной поменять нужный бит, и записать её «взад».

uint8_t reg0E;
// Указать адрес
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(uint8_t(0x0e));
Wire.endTransmission();
// Прочитать байт
Wire.requestFrom(CLOCK_ADDRESS, 1);
reg0E = Wire.read();	
//
// Прописываем 0 в бит 7 (не глядя, что там было раньше)
reg0E &= ~bit(7);
//
// Задаём адрес
Wire.beginTransmission(CLOCK_ADDRESS);
Wire.write(uint8_t(0x0e));
// Пишем reg0E в регистр
Wire.write(reg0E);
Wire.endTransmission();

alexxx7 пишет:
Может ли быть причиной беды, что в 7м бите записана 1 и поэтому часы засыпают, когда выключаешь питание внешнее ?

Ну, да – это их нормальное поведение. Как только батарея хоть раз сдохла до нуля, туда прописывается 1 и пока Вы её не сбросите, она там будет оставаться и часы от батареи работать не будут. Я этот бит на всякий случай всегда сбрасываю в 0  при включении питания.

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

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

Евгений, а вопрос, в чтении-записи, строка 3 и строка 2, у Вас явное указание типа, это с чем-то связано?

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

А это чтобы Wire.write() не сыпало варнингами, по-моему. Ну и так, на всякий случай - там же константа стоит, она поди сразу в int законвертируется. 

alexxx7
Offline
Зарегистрирован: 08.11.2018

ЕвгенийП пишет:

Лучше бы Вам не трогать регистр 0x10, пока точно не понимаете, что делаете - он нужен для температурной компенсации и прочих тонких вещей.


Не, не собираюсь пока туда. Это он просто отквотился от сообщения выше.

ЕвгенийП пишет:
Зависит от того, как Вы с нею работаете (какая библиотека и т.п.). В общем случае, нужно сказать часам адрес регистра и прочитать байт - это и будет тот самый регистр. Например, читаем регистр 0x0F

Через Wire.h

ЕвгенийП пишет:

 ... сами разберётесь, идею Вы поняли)

Да, суть ясна, буду ковыряться...

alexxx7
Offline
Зарегистрирован: 08.11.2018

sadman41 пишет:

 Если вы - робот, пишите единичками. HEX, BIN, DEC - это просто представления числа для человекочитаемости. 


ну восемь единичек то наколотить - не проблема наверное ?
Напомните плиз, они же с права на лево читаются? Справа нулевой, слева 7 бит. правильно?

alexxx7
Offline
Зарегистрирован: 08.11.2018

А! вспомнил еще одну вещь!
Я сдуру вчера в весь байт нолик фиганул. Могли бы вы мне рабочий байт регистра 0Е дать, чтоб я восстановил этот регистр...