Часы DS1302 сильно отстают

На этом форуме Вы можете задать вопросы знатокам программы и автору.
AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#1

Сообщение AlexRyg » 23.05.2020{, 06:45}

Помогите понять проблему с часами DS1302 .
Сделал проект для Ардуино Мега 2560, дисплей OLED I2C дисплея с размером экрана 0,96″, в проекте есть таймер. Для более точного отсчета времени использовал Часы DS1302. В FLProg установил реальное время, несколько часов понаблюдал - часы работают нормально, без отставаний и опережений. Но в проекте, часы отстают на 13-15 сек в минуту!
Как такое может быть? Это же не зависимый блок со своим кварцем. Если код программы тормозит время, то почему код программы влияет на точность хода часов? Как этого избежать?
Пробовал вместо Часы DS1302 организовать таймер на системных часах ардуины - тоже отстают..
И код не сложный (Су-видницу делаю), настройка температур (воды и продукта внутри термощупом), реле включения тэна и таймер на отключение через заданное время, если готовить не по температуре, а по времени.
Дисплей OLED I2C отгребает много памяти, поэтому на НАНО и УНО не получается, на весь код памяти не хватает, поэтому делаю на Мега 2560.
Так почему сами по себе часы работают точно, а с программой сильно отстают? Это можно побороть?

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Часы DS1302 сильно отстают

#2

Сообщение Dragony » 23.05.2020{, 08:17}

"Задержки" в программе есть?

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#3

Сообщение AlexRyg » 23.05.2020{, 11:50}

Dragony писал(а):
23.05.2020{, 08:17}
"Задержки" в программе есть?
Программа не простая, задержки есть, при расчете температуры с термистора в цикле снимаются 5 показаний с задержкой в 10 млсек. между снятием, чтоб расчитать среднее значение, вычислить логарифм, чтоб получить температуру.
Но если эти задержки влияют на работу часов (у которых свой независимый кварц), тогда какой смысл от модуля часов? С таким успехом можно и системный таймер пользовать.
Разве модуль часов не тикает на своем кварце и чипе, не зависимо что там происходит в программе?

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Часы DS1302 сильно отстают

#4

Сообщение dizzyy » 23.05.2020{, 11:56}

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

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#5

Сообщение AlexRyg » 23.05.2020{, 12:41}

dizzyy писал(а):
23.05.2020{, 11:56}
можете посидеть и выяснить что у вас или поменять часы
Проверил я модуль, запустив скетч установки времени через настройки в ФЛПрог. Более часа поработал не отстал ни на секунду. Значит модуль в порядке.
Главный вопрос в том, что зависит ли работа модуля от сложности программы для Ардуино?
dizzyy писал(а):
23.05.2020{, 11:56}
ставьте DS1307
Этот модуль подключается к I2C (пин 20 и 21), но они заняты дисплеем OLED I2C 0,96″. Можно было бы заморочиться и подключить параллельно. Но будет ли толк? Или тоже будет отставать из-за работы программы?

max38
Рядовой
Сообщения: 39
Зарегистрирован: 17.08.2018{, 13:38}
Репутация: 1
Откуда: Ангарск
Имя: Makcим

Часы DS1302 сильно отстают

#6

Сообщение max38 » 23.05.2020{, 13:36}

AlexRyg писал(а):
23.05.2020{, 12:41}
Более часа поработал не отстал ни на секунду.
Столкнулся с той же проблемой в своей "звонилке" ставил 1302, отставали за 3 дня, пока я не на смене минуты на 3-4. Поменял на DS3231 за 2 месяца не отстали ни на минуту. :smile44:
Этот модуль, кстати не на много дороже. Если корректировка требуется постоянная, может костыль попробовать поставить. Что нибудь эдакое здесь обсуждали
Последний раз редактировалось max38 23.05.2020{, 13:47}, всего редактировалось 1 раз.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#7

Сообщение AlexRyg » 23.05.2020{, 13:43}

max38 писал(а):
23.05.2020{, 13:36}
ставил 1302, отставали за 3 дня, пока я не на смене минуты на 3-4.
В моем случае отставание даже на 10-15 мин в сутки не критично. Я модуль использую как таймер обратного отсчета готовки. Например, поставил су-видницу, настроил Т на 68 грд и время готовки 4 часа. После запуска пошел обратный отсчет. Как время вышло, отключается готовка.
Но отставание на 15 сек в минуту это слишком! Еще раз повторюсь, без программы работает нормально, во время работы программы - отстают.

Аватара пользователя
nalnik
Подполковник
Сообщения: 1324
Зарегистрирован: 14.05.2016{, 17:12}
Репутация: 100
Откуда: Кисловодск
Имя: Александр

Часы DS1302 сильно отстают

#8

Сообщение nalnik » 23.05.2020{, 13:45}

AlexRyg писал(а):
23.05.2020{, 13:43}
Я модуль использую как таймер обратного отсчета готовки. Например, поставил су-видницу, настроил Т на 68 грд и время готовки 4 часа. После запуска пошел обратный отсчет. Как время вышло, отключается готовка.
И для этого Ардуино Мега 2560? :smile453:
Я хочу быть добрее, но люди сами нарываются.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#9

Сообщение AlexRyg » 23.05.2020{, 19:57}

nalnik писал(а):
23.05.2020{, 13:45}
И для этого Ардуино Мега 2560?
Изначально я сделал на НАНО. Но выскочила проблемка. дисплей OLED I2C отгребает бльше половины памяти. В итоге компилятор пишет типа недостаточно памяти, программа может работать не корректно. Ну я урезал все свои хотелки из программы максимально, но проблема не исчезла. Но я собрал, испытал, и оказалось работает не стабильно.
Есть еще и УНО, но там с памяти столько же как и в НАНО.. Так что принял решение делать на Мега, заодно и хотелки реализовать, не переживать о нехватке памяти

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Часы DS1302 сильно отстают

#10

Сообщение Dragony » 24.05.2020{, 08:50}

Дисплей нужен вот прямо-таки именно OLED?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Часы DS1302 сильно отстают

#11

Сообщение Sancho » 24.05.2020{, 09:03}

AlexRyg писал(а):
23.05.2020{, 06:45}
OLED I2C отгребает много памяти
https://wiki.iarduino.ru/page/OLED_trema/ бибка для txt
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Часы DS1302 сильно отстают

#12

Сообщение dizzyy » 24.05.2020{, 10:58}

AlexRyg писал(а):
23.05.2020{, 12:41}
Этот модуль подключается к I2C (пин 20 и 21), но они заняты дисплеем OLED I2C 0,96″. Можно было бы заморочиться и подключить параллельно. Но будет ли толк?
там просто адреса будут разные и все
если часы точно идут, тоим пофигу как загруженна программа ..
почитайте в нете лечение этих часом, может и вам поможет..

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Часы DS1302 сильно отстают

#13

Сообщение Labu559 » 24.05.2020{, 11:01}

AlexRyg, Соберите более менее не противоречивую статистику и тогда можно попробовать решить эту проблему (ссылка), которая возможно присутствует не только у Вас одного и не только с DS1302.
Последний раз редактировалось Labu559 24.05.2020{, 11:13}, всего редактировалось 1 раз.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#14

Сообщение AlexRyg » 24.05.2020{, 11:09}

Dragony писал(а):
24.05.2020{, 08:50}
Дисплей нужен вот прямо-таки именно OLED?
А это одна из моих хотелок. Тем более у меня 2 таких дисплея
Sancho писал(а):
24.05.2020{, 09:03}
https://wiki.iarduino.ru/page/OLED_trema/ бибка для txt
А вот это интересно. Спасибо. Нужно потестить как оно сработает

Отправлено спустя 3 минуты 29 секунд:
dizzyy писал(а):
24.05.2020{, 10:58}
если часы точно идут, тоим пофигу как загруженна программа ..
И я так думаю. Поэтому и вопрос появился. Повторюсь, как уже писал.
Загружаю в FLProg скетч установки часов, идут точно довольно долго. А в связке со всей программой ужасно отстают, порядка на 15 сек в минуту.

Отправлено спустя 7 часов 57 минут 51 секунду:
Labu559 писал(а):
24.05.2020{, 11:01}
Соберите более менее не противоречивую статистику
Думаю Вы не совсем поняли суть вопроса. Модуль часов работает безупречно, но только если без блока дисплея. Если задействую дисплей, отстает на 15 а то и 20 сек В МИНУТУ! Не за сутки, В МИНУТУ.
Вот код, при котором приводит к проблемам:

Код: Выделить всё

#include <SoftwareSerial.h>
#include <OLED_I2C.h> //Библиотека дисплея

#include <iarduino_RTC.h> //Библиотека часов
SoftwareSerial Serial100(15, 1);

iarduino_RTC   _RTC1(RTC_DS1302, 4, 2, 3);

byte NumDisp; //Переменные строк дисплея
String Strk1E1;
String Strk2E1;
String Strk3E1;
String Strk4E1;
String Strk5E1;
OLED myOLED(SDA, SCL, 8); //подключение к пинам 
extern uint8_t SmallFont[]; //Шрифты из библиотеки
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t UkrFont[];
extern uint8_t TinyFont[];
String _RTC1_GetTime1_StrOut;

void setup()
{

_RTC1.begin();
_RTC1.period(1);
Serial100.begin(9600);
  myOLED.begin();
  myOLED.setFont(SmallFont);
  myOLED.update();
 

}
void loop()
{

//Плата: МОДУЛЬ ЧАСОВ
_RTC1_GetTime1_StrOut = _RTC1.gettime("H:i:s");
if (1){Serial100.println(_RTC1_GetTime1_StrOut);}

//Плата:Дисплей
NumDisp = 0;           // номер экрана
Strk1E1 = String("");   
Strk2E1 = String("");   // вторая строка
Strk3E1 = String("");    
Strk4E1 = String("");    
Strk5E1 = String("");    
//Первый экран. 

if ( NumDisp  == 1 ) {  //номер экрана
myOLED.setFont(SmallFont);
myOLED.print ( Strk1E1 , CENTER, 2); // первая строка
myOLED.print ( Strk2E1 , CENTER, 14); //строка, по центру, отступ с верху
myOLED.print ( Strk3E1 , CENTER, 28); // третья строка
myOLED.print ( Strk4E1 , CENTER, 40); // четвертая
myOLED.print ( Strk5E1 , CENTER, 52); // // пятая

}

myOLED.update(); //обновление екрана
myOLED.clrScr();  // очистка экрана

}
Так вот, с этим кодом часы отстают на 15-20 сек в МИНУТУ. Если из кода убрать строку myOLED.update(); //обновление екрана, то дисплей просто темный, но просматривая через ком-порт Serial100, то часы не отстают.
У меня 2 таких модуля и оба отстают с указанным кодом. Вот в чем вопрос.
Почему часы так реагируют на код myOLED.update();, если они должны работать автономно?

Отправлено спустя 3 минуты 11 секунд:
И еще, пробовал использовать системные часы, с этим кодом тоже сильно отстают, тоже порядка 15-20 сек в минуту.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Часы DS1302 сильно отстают

#15

Сообщение Alias » 24.05.2020{, 19:34}

А как часто обновляются данные на экране? Думаю, даже для внимательного наблюдения 1-2 экрана в секунду - это предел.

Dragony
Сержант
Сообщения: 133
Зарегистрирован: 02.01.2020{, 11:55}
Репутация: 2
Имя: Александр

Часы DS1302 сильно отстают

#16

Сообщение Dragony » 25.05.2020{, 06:37}

А там что, секунды выводятся? (может, отказаться от них? хотя бы для эксперимента)

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#17

Сообщение AlexRyg » 25.05.2020{, 09:40}

Alias писал(а):
24.05.2020{, 19:34}
А как часто обновляются данные на экране? Думаю, даже для внимательного наблюдения 1-2 экрана в секунду - это предел.
Не совсем понятен вопрос. Глядя на код, там нет специальных указаний по обновлению экрана. Получается в каждом цикле.
Вы имеете ввиду добавить delay (500);? Но эта команда останавливает весь цикл на пол секунды.

Отправлено спустя 3 минуты 10 секунд:
Dragony писал(а):
25.05.2020{, 06:37}
А там что, секунды выводятся? (может, отказаться от них? хотя бы для эксперимента)
Изначально было задумано не выводить секунды. Т.к. время готовки довольно большое 3 часа и более. Но при испытании в деле, я заметил, что таймер сильно отстал от реального времени. Т.е. на часах прошло 3 часа, а на таймере 2. Вот я и стал исследовать - почему. Вывел секунды и даже на глаз видно как медленно работает таймер

dsfbuy
Сержант
Сообщения: 171
Зарегистрирован: 03.11.2018{, 12:40}
Репутация: 21
Откуда: Братск
Имя: Виктор

Часы DS1302 сильно отстают

#18

Сообщение dsfbuy » 25.05.2020{, 09:55}

AlexRyg, Выложили-бы проектик какой, где часы отстают.

AlexRyg
Рядовой
Сообщения: 18
Зарегистрирован: 19.04.2020{, 19:35}
Репутация: 0
Имя: Алексей

Часы DS1302 сильно отстают

#19

Сообщение AlexRyg » 25.05.2020{, 09:59}

Sancho писал(а):
24.05.2020{, 09:03}
https://wiki.iarduino.ru/page/OLED_trema/ бибка для txt
Переделал под эту библиотеку, таймер стал работать корректно. Отставания в часах нет. Может и будет на 1-2 сек в час, но это ваще не парит.
Один недостаток заметил, экран медленно обновляется, но это тоже не принципиально, т.к. обновление сделал только при смене экрана

Отправлено спустя 10 минут 39 секунд:
dsfbuy писал(а):
25.05.2020{, 09:55}
AlexRyg, Выложили-бы проектик какой, где часы отстают.
Выше я дал полный код проекта, где часы не просто отстают, а ОТСТАЮТ!
Вопрос решил текстовой библиотекой для экрана (выше писал об этом).
Но вопрос заключался в том, что независимый модуль реального времени никак НЕ ДОЛЖЕН зависеть от кода программы, библиотек... Модуль имеет батарейку, собственный кварц, его задача не читать код программы, а выдавать дату и время. И ему должно быть начхать, читает программа его данные или нет...
Вопрос был в том, какой смысл тогда от модуля, если он может тикать, может не тикать в зависимости от тяжести кода и библиотек.
Вопрос был в том, можно ли заставить модуль часов тикать, не обращая внимания на то, успела прочитать программа данные с модуля или нет.
Но, повторюсь, вопрос решил текстовой библиотекой для дисплея.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Часы DS1302 сильно отстают

#20

Сообщение Alias » 25.05.2020{, 11:33}

AlexRyg писал(а):
25.05.2020{, 09:44}
Но эта команда останавливает весь цикл на пол секунды.
Я имел в виду то, что блок вывода на экран можно вынести на отдельную плату и вызывать один раз в секунду. Я давно уже практикую исполнение большинства плат по условию и тормоза были только при работе с Nextion, но это отдельная история.

Ответить

Вернуться в «Спросить у знатоков»