То есть изменение на единицу значения коррекции даёт изменение количества импульсов в минуту на 0.1.
ты не прав. 0.1ppm не имеет отношения к минуте. ppm - это число миллионных долей. 0.1ppm - это одна десятимиллионная часть. в сутках 3600 * 24 = 86400 секунд. делим на 10 миллионов и получаем 86400 / 10000000 = 0,00864 секунды в сутки. итого, 2 сек за 28 дней => 2/28 = 0.0714 сек за сутки => 0.0714/0.00864 = 8.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
А оно точно от суток считается? Кстати, в процентах это будет вот так:
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Последний раз редактировалось HardWareMan Ср янв 08, 2025 14:27:30, всего редактировалось 2 раз(а).
с чего ты это взял? сутки, как и минуты, тут ни при чем. если ppm - это одна миллионная, то это одна миллионная к любому периоду времени. и если не лень, можешь посчитать сколько будет одна миллионная за год.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
То есть изменение на единицу значения коррекции даёт изменение количества импульсов в минуту на 0.1.
ты не прав. 0.1ppm не имеет отношения к минуте. ppm - это число миллионных долей. 0.1ppm - это одна десятимиллионная часть. в сутках 3600 * 24 = 86400 секунд. делим на 10 миллионов и получаем 86400 / 10000000 = 0,00864 секунды в сутки. итого, 2 сек за 28 дней => 2/28 = 0.0714 сек за сутки => 0.0714/0.00864 = 8.
Понятно. Я думал, что это что-то типа аббревиатуры для pulses per minute
P.S. Забавно, что 32768*60 почти равно 2 миллионам, и ошибочный результат почти ровно вдвое некорректен
Последний раз редактировалось WiseLord Ср янв 08, 2025 14:25:16, всего редактировалось 1 раз.
Регистр старения кристалла хранит 8-битовый код в формате «дополнение до двух» предназначенный для компенсации точности хода часов. Результирующая частота = частота резонатора + значение регистра * 0.1ppm, где значение регистра может быть, как положительным, так и отрицательным.
то есть мне нужно конвертировать обычные десятичные значения в 8-битовый код в формате «дополнение до двух"?
если тебе не нужен будильник, совсем необязательно использовать формат bcd. регистру будильника пофигу, в каком формате записано в него число. на счет "НУ ЕГО НАФИК!!!". ну, прочитал ты из будильника tik_correc, все равно это число нужно записать в регистр старения. так что, твоя затея с регистром будильника - совершенно лишняя работа.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
да нет не надо записывать число в регистр старения. я вообще больше в регистр 10h (Aging offset) не полезу делаем так:
Код:
//если время 00 : 00 : 30 : понедельник if (hour == 0 && minute == 0 && second == 30 && Wday == 1) { if (millis() - timing > 10000) { // 10 seconds пауза if (tik_correc >= 3) { //четвертая неделя или нет
//корректируем секунды прибавляя или отнимая число TIME_CORRECT (от - 5 сек. до +5 сек.) NowSecond = second + TIME_CORRECT; setRTCTime(); tik_correc = 0; set_tik_correc(); } //обнуляем неделю и записываем в ds 3231 новые секунды и счетчик недель.
else { tik_correc++; // прибавляем счетчик недель set_tik_correc(); //и запись в ds 3231 } timing = millis(); } }
на четвертой неделе прибавим (или убавим ) секунды и все
Добавлено after 2 minutes 14 seconds:
Цитата:
совсем необязательно использовать формат bcd. регистру будильника пофигу,
это для себя, чтобы понятнее было в мониторе пота смотреть Serial.println(tik_correc);
//======== Режим корректировки секунд,один раз в каждую четвертую неделю (от - 5 сек. до 5 сек.)
case 16: { setups[10] = PressingButton(setups[10], 0, 10);// кнопки диопазон 0-10 switch (setups[10]) { case 0: TIME_CORRECT = 5; var = 5; break; case 1: TIME_CORRECT = 4; var = 4; break; case 2: TIME_CORRECT = 3; var = 3; break; case 3: TIME_CORRECT = 2; var = 2; break; case 4: TIME_CORRECT = 1; var = 1; break; case 5: TIME_CORRECT = 0; var = 0; break; case 6: TIME_CORRECT = -1; var = 1; break; case 7: TIME_CORRECT = -2; var = 2; break; case 8: TIME_CORRECT = -3; var = 3; break; case 9: TIME_CORRECT = -4; var = 4; break; case 10: TIME_CORRECT = -5; var = 5; break; } if (setups[10] <= 5) { DigitOut(14, 11, PROBEL, var , 0, led_color); //вывод на экран положитетельной коррекции } else { DigitOut(14, 11, 15, var, 0, led_color);//вывод на экран отрицательной коррекции } break; }
в программе TIME_CORRECT принимает отрицательное число и храниться еероре
Код:
//корректируем секунды прибавляя или отнимая число TIME_CORRECT (от - 5 сек. до +5 сек.) NowSecond = second + TIME_CORRECT;
а tik_correc только считает недели
Цитата:
Кстати, а зачем вообще счётчик недель нужен? Вычислить номер недели вполне можно и по дате и применять коррекцию, когда N % 4 == 0.
интересно надо подумать.
Цитата:
регистр 10h (Aging offset), записывая в который число от -128 до 127, можно влиять на используемую в DS3231
а с этим делом у меня не получается вот почему:
Если число неотрицательное, то в старший разряд записывается ноль, далее записывается само число. например число 12 = 7 бит 0 число положительное 0001100 остальные не инвертированы
Если число отрицательное, то все биты модуля числа инвертируются например число -12 = 7 бит 1 означает минус 1110011 остальные инвертированы
да записать отрицательное число не проблема Wire.write(11110011 ); но работать с такими числами (в формате двоичного целого числа со знаком с дополнением до 2, где бит 7 представляет бит знака числа.) неудобно. а преобразовать из Десятичных в Двоичное NEG (n) и обратно я не соображу как (в институтах не учился, да и в школе тройки ) https://studfile.net/preview/5398032/page:4/
В чём неудобство? Наоборот же, никаких не нужно преобразований - складывай-вычитай-умножай-не-хочу. Положительное записать - Wire.write(12), отрицательное - Wire.write(-12).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения