Консольное приложение synchroTime для калибровки RTC DS3231 (ZS-042) модулей.

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018
В общем, предыстория проекта такова.. Еще весной я приобрел у китайцев более 20-ти модулей RTC DS3231 (ZS-042) тремя партиями. После краткого теста оказалось, что половина из модулей негодные. Один модуль вообще никак не определяется, еще 5-ть отстают более чем на одну секунду в час. Остальные тоже врут, но не так нагло. В чем там дело выяснять не стал, благо цена была копеечная. Меня интересовал другой вопрос: Как отсортировать годные модули от бракованных? По ТХ DS3231 дрейф времени не должен превышать +-2ppm, но Как измерить дрейф за самое короткое время? Сколько нужно для этого ждать? Можно ли откалибрировать осциллятор часов?
 
Так родилась идея написать небольшую тулзУ, чтобы она могла тестить модули и время по эталонним часам сверяла, и автоматически модули калибровала (в известных пределах).
 
В общем, то что у меня получилось, я выношу на суд community. Пользуйтесь и не забывайте оставлять ваши feedbackИ.
 
Здесь страничка с моим проектом на GitHub.com. Здесь же ссылки на скетч и на консольный вариант тулзы: под линукс 32-бит и 64-бит, и под  32-х битные винды. Да, для точности измерений, а это порядка 1-й - 2-х микросекунд, важна постоянная синхронизация с серверами точного времени. Для счастливых обладателей линукса нет никаких проблем. синхронизация происходит автоматически по протоколу ntp. Для сторонников Гейтса придется синхронизировать время каждый раз вручную или лезть в системный реестр. Мне было очень интересно видеть в живую, как быстро уплывает время на виндовс-машине. На винде заявленная точность калибровки не гарантируется.
 
Пока всё, остальное найдете в документации на странице проекта SynchroTime.
b707
Offline
Зарегистрирован: 26.05.2017

интересно, спасибо!

сразу возникает мысль - а накой тут линукс? Время с серверами и крохотный ESP синхронизировать умеет - получился бы мобильный девайс...

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

b707 пишет:

интересно, спасибо!

сразу возникает мысль - а накой тут линукс? Время с серверами и крохотный ESP синхронизировать умеет - получился бы мобильный девайс...

точная синхронизация на удалённом NTP? Это навряд ли, даже локальному NTP чтобы войти в синхронизм с определённой точностью (зависит от марки сервера)   нужны сутки... да и в локальной сети время прохождения пакета конечно... оно конечно меньше 1 мс, а вот насколько - вопрос...
А в часовых девайсах частота кварцевого генератора 32768 выгоняется простым частотомером с периодом счёта 10 секунд, так на стадии калибровки  часов в СССР было...
я для своих модулей брал системное время компьютера, точности для бытовых нужд хватает, модулей было 5, брака не было

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

Сутки? Не многовато-ли? У ntpdate что-ли... есть ключик для форсажа.

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

sadman41 пишет:

Сутки? Не многовато-ли? У ntpdate что-ли... есть ключик для форсажа.

Это у меня сейчас Дэлы, а раньше было интелеевское железо от РС, там сутки как раз, пока устаканится прыгать, про ключики не знал и, не пробовал, надо поэкспериментировать...
Всё таки одна микросекунда очень высокий показатель, интересно, зачем ТСу такая точность потребовалась?
PS  DS3231 похоже не калиброванные к нему пришли

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

SergejEU пишет:
приобрел у китайцев более 20-ти модулей RTC DS3231 (ZS-042) тремя партиями. После краткого теста оказалось, что половина из модулей негодные. Один модуль вообще никак не определяется, еще 5-ть отстают более чем на одну секунду в час. Остальные тоже врут
Где Вы их такие берёте? Сколько ни покупал - никогда ни одного нарекания. Выбирал чаще всего по принципу "если на рубль дешевле, значит лучше". Я что-то не так делаю?

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

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

SergejEU пишет:
приобрел у китайцев более 20-ти модулей RTC DS3231 (ZS-042) тремя партиями. После краткого теста оказалось, что половина из модулей негодные. Один модуль вообще никак не определяется, еще 5-ть отстают более чем на одну секунду в час. Остальные тоже врут
Где Вы их такие берёте? Сколько ни покупал - никогда ни одного нарекания. Выбирал чаще всего по принципу "если на рубль дешевле, значит лучше". Я что-то не так делаю?

"к пище и бабам неприхотлив" ... видимо )))

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

b707 пишет:
сразу возникает мысль - а накой тут линукс? Время с серверами и крохотный ESP синхронизировать умеет - получился бы мобильный девайс...

на линуксе есть служба ntpd и консольные утилиты, которые показывают статистику по синхронизации с серверами точного времени. На самом деле здесь точной синхронизации не требуется, достаточно знать смещение и дисперсию (offset и jitter) для NTP сервера, отмеченного звездочкой. Если в сумме ошибка укладывается в интервал 10-ть мс, можно калибровать не меняя параметров. Если смещение + дисперсия превышает этот порог, нужно пересчитать время для накопления дрейфа.

ESP интересное решение, но он жрёт много и поэтому не во врех проектах применим. Потом возникает постоянная зависимость от сети и т.д.
SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

ЕвгенийП пишет:
Где Вы их такие берёте? Сколько ни покупал - никогда ни одного нарекания. Выбирал чаще всего по принципу "если на рубль дешевле, значит лучше". Я что-то не так делаю?

покупал из принципа, что это был единственный продавец, который гарантировал доставку за 17-ть дней, не смотря на пандемию и ограничения. вопрос цены вторичен, тем более, что деньги за бракованные китаец вернул. Самые дорогие предложения отнюдь не гарантируют, что со временем частота вашего кварца поплывет, что побежите в гешефт покупать новый? А здесь же можно просто еще раз откалибровать и все дела.

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

SergejEU пишет:
со временем частота вашего кварца поплывет
А, так у Вас какие-то особые DS3231 - с кварцем. Я таких и не видел.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

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

Где Вы их такие берёте? Сколько ни покупал - никогда ни одного нарекания. Выбирал чаще всего по принципу "если на рубль дешевле, значит лучше". Я что-то не так делаю?

Эххх, если нужны, могу поделиться :-)
Купил в корпусе so8, 2 партии 10 и 5 штук, у разных продавцов, и все бракованные. Те что в корпусе so16 все нормальные.
В so8 сразу видно что косячные, если получить температуру от "встроенного термометра", то она или 8 градусов или 46. Может как раз в этом и есть косяк, отбраковку продали. 

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

Под ядром Гавера один килобайт памяти программ экономится, просто реплика

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

ЕвгенийП пишет:
А, так у Вас какие-то особые DS3231 - с кварцем. Я таких и не видел.

а разве кварц уже не считается диоксидом кремния?

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

SergejEU пишет:

а разве кварц уже не считается диоксидом кремния?

Не знаю. Я последние поправки к конституции так и не удосужился прочитать, а там до хрена чего нового ввели.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
-bagnikita.com   89.109.251.24    2 u    5  128  377   29.847   -5.492   3.432
-stratum2-1.ntp. 195.91.239.8     2 u   68  128  377   28.786   -2.399   7.162
*ntp1.doorhan.ru .SOCK.           1 u   75  128  377   28.764   -6.507   4.652
-host55.rax.ru   88.212.202.5     3 u   74  128  377   21.746   -2.942   1.908
-78-36-18-184.dy .GPS.            1 u   74  128  377   49.392   -2.221   2.256
#91.206.16.3 (tm 40.52.66.2       2 u   10  128  377   51.718   -1.755 237.039
-nag.aleksdem.co 194.190.168.1    2 u   12  128  377   22.227   -3.425  31.409
+ntp3.aas.ru     .GPS.            1 u  136  128  377   28.432   -3.693   6.409
#rnis-app.rnis66 89.109.251.23    2 u   69  128  377   47.959   -0.758   2.881
+time100.stupi.s .PPS.            1 u  135  128  377   41.380   -3.141  14.216
+ground.corbina. 89.109.251.24    2 u    8  128  377   22.603   -2.448   8.360
#ns.aksinet.net  194.58.202.148   2 u   51  128  377   34.825   -8.624   2.068
#ntp.truenetwork 46.254.241.74    2 u   64  128  377   72.579   -1.797  12.383
#alphyn.canonica 142.3.100.2      2 u   43  128  377  141.761   -5.436   1.406
-193.109.84.119  89.109.251.23    2 u   66  128  377   21.496   -2.678  13.119
#pugot.canonical 17.253.108.125   2 u   39  128  377   79.012   -4.730   1.598

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

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

SergejEU пишет:
со временем частота вашего кварца поплывет
А, так у Вас какие-то особые DS3231 - с кварцем. Я таких и не видел.

не нужно ничего там видеть, достаточно посмотреть даташит на DS3231S/SN. Там все черным по белому написано, что за технологии применяются и что стоит внутри чипа:

The DS3231 is a low-cost, extremely accurate I²C real-time clock (RTC) with an integrated temperaturecompensated crystal oscillator (TCXO) and crystal...

Описание технологии TCXO (temperature compensated crystal oscillator):

Термокомпенсированные генераторы (TCXO) — это кварцевые генераторы, температурный уход частоты которых скомпенсирован специальной схемой. Коэффициент компенсации составляет обычно 10…30, что позволяет получить температурную нестабильность в пределах от ±0,5х10-6 до ±5х10-6 в широком интервале температур.

Термокомпенсированные кварцевые генераторы применяются в устройствах, где требуется быстрый выход в рабочий режим и повышенная стабильность частоты (радиолокационные станции, опорные генераторы мобильных и переносных радиопередающих устройств и т. п.

Гриша
Offline
Зарегистрирован: 27.04.2014

1) вопрос, как говорится сходу, вы какую батарейку поставили? диод выкусили? какой номинал сопротивления на подзаряде? 

 у всех без лития, нужно либо диод выкусывать, либо сопротивление менять на 0,5М и выше (только для компенсации токов утечки... ).  

2) какая буковка на корпусе (пост 1031)?

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Если вопрос ко мне, то:

to (1) Батарейки ставил литиевые CR2032. Оба сопротивления (по 100 Ом) на светодиод и в цепи подзарядки выпаял. Диоды оставил на месте.

to (2) DS3231SN

DS3231М это совсем иная технология - MEMS осциллятор, на поликристалле кремния.

Гриша
Offline
Зарегистрирован: 27.04.2014

пост 17...

это печально... теперь и эти микросхемы покупать с большой оглядкой... как косоглазые достали, специально косячат. Пишут одно, а лепят другое. 

DS3231SN из старых запасов четко работают, а вот с новой некоторые трудности, аналогично вашим. Думал мой косяк, выходит китайсы гады, не я один попался на брак... 

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018


после калибровки модуля уход времени не превышает 3 мс в сутки

user@LIFEBOOK:~/SynchroTime/build$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp2.ig-haase.d 192.53.103.108   2 u   67 1024  377   29.671   -1.450   2.437
+ntp01.frosteri. 124.216.164.14   2 u   53 1024  377   26.571   -2.128   4.122
-kyou.thehomeofa 130.149.17.8     2 u 1062 1024  377   25.732    4.489   4.353
 tor-relais1.lin 131.188.3.223    2 u 185m  512    0   55.654   13.821   0.000
+chilipepper.can 131.188.3.220    2 u   49 1024  277   30.217    3.092   2.683
user@LIFEBOOK:~/SynchroTime/build$ ./synchroTime -i
DS3231 clock time	1600781314880 ms: 22.09.2020 15:28:34.880
System local time	1600781314883 ms: 22.09.2020 15:28:34.883
Difference between	-3 ms
Offset reg. in ppm	-1.7 ppm
Time drift in ppm	-0.031814 ppm
last adjust of time	1600687016000 ms: 21.09.2020 13:16:56.000

 

 

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018
где китайцы берут такие чипы для меня тоже загадка. Производитель с лета прекратил производство DS3231S#
 
Part Number  
Status Explanations for product status codes Part Number Second Source Option
NRND DS3231MZ/V+  
NRND DS3231MZ/V+T  
NLA DS3231N/DIP  
NLA DS3231S  
NLA DS3231S#-W  
NLA DS3231S#C14  
NLA DS3231S/T&R  
NLA DS3231S/T&R#C15  
NLA DS3231SN  
NLA DS3231SN-C16  
NLA DS3231SN/T&R

No Longer Available (NLA)The product has been discontinued and is not available for purchase. We list recommended replacements when possible.

           

 

apg_777
Offline
Зарегистрирован: 22.09.2020

А есть принципиальная разница MZ+ и SN? У меня почему-то MZ+ не желает программироваться на выход прерывания, с SN проблем нет.

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

apg_777 пишет:
А есть принципиальная разница MZ+ и SN? У меня почему-то MZ+ не желает программироваться на выход прерывания, с SN проблем нет.

какое у вас исполнение модуля? Насколько я знаю, на микро модулях выход SQW может быть не соединен с ногой чипа (Pin 3). 

В принципе, у DS3231SN сигнал должен быть явно активирован при инициализации RTC модуля и может быть параметризован на разные частоты 8k, 4k и 1kHz. На DS3231M он жёстко установлен на 1 Гц и не может быть изменен. 

apg_777
Offline
Зарегистрирован: 22.09.2020

А никакое. Просто микросхема, подключение по даташит. Связь есть, сигнала прерывания нет.
Просто из 16 ног всё равно 8 лишних, на одной платке можно уместить и часы и атмегу.

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018
Radan
Offline
Зарегистрирован: 11.11.2020

Уважаемый  SergejEU! Большое спасибо за ваш труд.
На github Добавлен GUI версии 1.1.2 для Линукса. Какое отличие от версии 1.1.0 и стоит ли ожидать релиз для Виндоус?
p.s. Программу  версии 1.1.0 я опробовал, модуль синхронизируется и калибруется. Завтра хочу разработать и сделать модули с ZIF панельками для 16 и 8 ногих чипов, чтобы можно было до монтажа на плату отбраковывать микросхемы.

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Radan пишет:

Уважаемый  SergejEU! Большое спасибо за ваш труд.
На github Добавлен GUI версии 1.1.2 для Линукса. Какое отличие от версии 1.1.0 и стоит ли ожидать релиз для Виндоус?

Всегда пожалуйста!

отличие версий чисто техническое, они отличаются лишь способом сборки и линковки приложения. В ранней версии используется динамическая сборка, которая предполагает наличие dll/so Qt-библиотек. В последней версии все необходимые библиотеки прилинкованы статически и собраны в один бинарник, что позволило ужать размер в 3 раза.
 
Делать ли подобное с виндовс релизом? Думаю, что нет. Там выигрыша ждать не стоит, т.к. Qt-библиотеки уже хорошо упакованы не такие рыхлые как под линукс.
Radan
Offline
Зарегистрирован: 11.11.2020

SergejEU, спасибо за ответ. 

Хочу сделать макеты для отдельных чипов с панелями. Можно ли как то обойтись на этих макетах без м/с памяти? Например, запомнить время, в которое сделали синхронизацию и посчитать коррекцию вручную?

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Radan пишет:

Можно ли как то обойтись на этих макетах без м/с памяти? Например, запомнить время, в которое сделали синхронизацию и посчитать коррекцию вручную?

Для хранения метки времени (4 байта) можно воспользоваться EEPROM ардуино. Для этого нужно отредактировать скейч, переписав функции работы с флеш памятью AT24C256. Я бы воспользовался библиотекой EEPROM.h и функциями EEPROM.get(address, byte) и EEPROM.put(address, byte) вместо функций i2c_eeprom_read_byte, i2c_eeprom_write_byte. Остается только сообразить как связать адрес начала данных с конкретным модулем или чипом. И здесь вариантов море. Можно использовать регистр будильника DS3231 или в терминале вводить адрес вручную, или на крайний случай прописать непосредственно в скетче..

Radan
Offline
Зарегистрирован: 11.11.2020

SergejEU, можно вас попросить добавить в приложение выбор часового пояса (TIME_ZONE), чтобы не изменять его в скетче?

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Radan пишет:

SergejEU, можно вас попросить добавить в приложение выбор часового пояса (TIME_ZONE), чтобы не изменять его в скетче?

я подумаю над этим. Если же изменять часовой пояс непосредственно в самом приложении, то нужно будет расширить протокол еще на одну команду, плюс проверка валидности входящих данных на стороне микроконтроллера. Обмен времени между устройствами осуществляется в UTC и по стандартам UTC - МК никаких данных о часовом поясе источника точного времени знать не обязан. Так исключается ненужная редундантность данных. Если  же поменять ч. пояс в процессе калибровки, то сохраненные данные придется модифицировать. Последнее хотелось бы избежать.

SergejEU
SergejEU аватар
Offline
Зарегистрирован: 05.11.2018

Radan пишет:
SergejEU, можно вас попросить добавить в приложение выбор часового пояса (TIME_ZONE), чтобы не изменять его в скетче?

В версии 2.0 реализована возможность выбора часового пояса в настройках программы. Модифицировать скетч для ардуино больше не нужно, но скетч придется обновить на новый!

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

Хороший проект!

Один из модулей показал великолепный результат:
Уход часиков за период с 08.07.22 по 21.08.22 составил - (минус) 34 миллисекунды (после калибровки)

saint_byte
Offline
Зарегистрирован: 19.08.2022

Не трогай линь , Линь это вам не винда. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Согласен

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

Один модуль из имеющихся очень даже ничего!

-65 миллисекунд за без малого 3 месяца...