Не думаю что это прям такая глобальная проблема. Раз в неделю на одну минуту можно и отключить чтоб пыль протереть)Ммм... А пыль вытирать как?
входное напряжение вы имеете ввиду в блоке питания? 5.1в@gcat, входное напряжение (измеренное, а не предполагаемое Вами), установлен ли входной электролитический конденсатор, греется ли что-либо из DC/DC преобразователя, какие элементы применены (дроссель, MOSFET, диод)? Какое сопротивление в аноде ламп (перед оптронами)? Как организована точка?
В схеме Гайвера есть входной "опциональный" конденсатор (в цепи 5В) - он установлен?все остальное как в схеме гайвера
??? Имеется в виду неоновая лампа (или лампы) между группами цифр или светодиод.Как организована точка?
Прошу уточнить: напряжение меняется при изменении duty?апряжение на конденсаторе не поднимается выше 166в. пробовал и duty выставлять и 220 и 250 -
все-равно 166в и хоть тресни.
470мкф 6.3в? да установлен правда, 470мкф 16в, что было под рукой от старой материнки.В схеме Гайвера есть входной "опциональный" конденсатор (в цепи 5В) - он установлен?
неоновая точка, но я ее не впаивал. то есть, оптрон стоит, но точку я неоновую не стал запаивать.??? Имеется в виду неоновая лампа (или лампы) между группами цифр или светодиод.
напряжение под нагрузкой с верхней платой с лампами при изменении duty не меняется и остается в районе 166вПрошу уточнить: напряжение меняется при изменении duty?
Какой скетч используете?
Скорее всего мосфет помер, если с Китая брали то это он 100%. Было такое, большое внутренне сопротивление. Есть чем протестить мосфет?напряжение под нагрузкой с верхней платой с лампами при изменении duty не меняется и остается в районе 166в
Прошивка последняя от Гайвера,плата тоже.пробовал другие прошивки.все тоже самое.@prohstw, на какой плате и с какой прошивкой сделаны часы?
По описанным Вами симптомам модуль времени как раз работает нормально (иначе бы после перезагрузки часов время было бы сбито), а вот почему не идёт локальное время в Ардуино - нужно смотреть.
if (minsCount >= 15) { // каждые 15 мин
minsCount = 0;
DateTime now = rtc.now(); // синхронизация с RTC
secs = now.second();
mins = now.minute();
hrs = now.hour();
}
if (secs > 59) {
newTimeFlag = true; // флаг что нужно поменять время
secs = 0;
mins++;
minsCount++;
/*
if (minsCount >= 15) { // каждые 15 мин
minsCount = 0;
DateTime now = rtc.now(); // синхронизация с RTC
secs = now.second();
mins = now.minute();
hrs = now.hour();
}
*/
if (mins % BURN_PERIOD == 0) burnIndicators(); // чистим чистим!
/*if (!alm_flag && alm_mins == mins && alm_hrs == hrs && true) {
mode = 0;
alm_flag = true;
almTimer.start();
almTimer.reset();
}*/
}
if ((secs==23) && (minsCount >= 15)) { // каждые 15 мин
minsCount = 0;
DateTime now = rtc.now(); // синхронизация с RTC
secs = now.second();
mins = now.minute();
hrs = now.hour();
}
if (mins > 59) {
mins = 0;
hrs++;
if (hrs > 23) hrs = 0;
changeBright();
}
if (newTimeFlag) setNewTime(); // обновляем массив времени
сделал как Вы написали.время меняется раз в 3 минуты.причем если реальное время 36 минут показывают 33 минуты. при передергивании питания время верное.Причем первая минута после включения нормально меняется а дальше раз в 3 минутыУ Гайвера в 2.5 синхронизация с RTC через 15 минут:
Если какой артефакт в отсчёте времени и возникает из-за возможного рассинхрона внутренних часов (счёта времени в программе) и RTC, то не каждые 2 минуты он должен проявляться.void calculateTime() (timeTicker.ino):if (minsCount >= 15) { // каждые 15 мин minsCount = 0; DateTime now = rtc.now(); // синхронизация с RTC secs = now.second(); mins = now.minute(); hrs = now.hour(); }
Если выделенные строки закомментировать, отсчёт нормально идёт?
Или если эти строки закомментировать, а чуть ниже вставить проверку в таком виде (выделены добавленные строки):
(На 23-й секунде синхронизация, чтобы на границу минут не попасть.)void calculateTime() (timeTicker.ino):if (secs > 59) { newTimeFlag = true; // флаг что нужно поменять время secs = 0; mins++; minsCount++; /* if (minsCount >= 15) { // каждые 15 мин minsCount = 0; DateTime now = rtc.now(); // синхронизация с RTC secs = now.second(); mins = now.minute(); hrs = now.hour(); } */ if (mins % BURN_PERIOD == 0) burnIndicators(); // чистим чистим! /*if (!alm_flag && alm_mins == mins && alm_hrs == hrs && true) { mode = 0; alm_flag = true; almTimer.start(); almTimer.reset(); }*/ } if ((secs=23) && (minsCount >= 15)) { // каждые 15 мин minsCount = 0; DateTime now = rtc.now(); // синхронизация с RTC secs = now.second(); mins = now.minute(); hrs = now.hour(); } if (mins > 59) { mins = 0; hrs++; if (hrs > 23) hrs = 0; changeBright(); } if (newTimeFlag) setNewTime(); // обновляем массив времени
Если помогло, отпишись. Будет понятно, что исправлять в программе. Если не помогло, тоже отпишись, чтобы заблуждения развеять.
if (newTimeFlag) setNewTime();
заменить на setNewTime();
. Но что-то здесь не так...328p по частоте не подскажуЗабавно... А процессор на Ардуине какой и кварц на какую частоту?
По поводу передёргивания питания соглашусь с @poty: похоже, RTC работает.
Ну ещё заплатка "в лоб": последнюю строку процитированного кодаif (newTimeFlag) setNewTime();
заменить наsetNewTime();
. Но что-то здесь не так...