Отставание секунд millis()

leds
Offline
Зарегистрирован: 20.10.2014

Приветствую.

У меня проблема. В моем скетче сильно отстает время. Примерно 10 сенунд в минуту.

В скетче используется <TimerOne.h> и прерывания на 5 таймере ардуино мега.

Не могу понять откуда берется отставание. Подскажите где туплю.

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

Если дуина не фирменная, я бы для начала померил чудесный китайский кварц. Ибо часто написано одно, а на деле совсем другое.

leds
Offline
Зарегистрирован: 20.10.2014

Дык если прошито обычным скетчем, то всё норм. Время идёт точно. Думаю, тут всё же дело в timerOne, потому что на другой меге, где нет прерывания по ИК датчик, но также есть TimerOne также идёт отставание.

За 7 часов 31 минуту отставание на 3 727 398 миллисекунд, то есть примерно на час и 3 минуты.

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

Ну тады не знаю, с этой библой не работал. А чем DS1307 и пр. не катят?

leds
Offline
Зарегистрирован: 20.10.2014

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

Radjah
Offline
Зарегистрирован: 06.08.2014

А заказал бы сразу, уже в пути были бы.

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

Вроде и в Челябе с Новосибом есть.

leds
Offline
Зарегистрирован: 20.10.2014

Подскажите где можно в Новосибе найти?

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

rtc ds1307 новосибирск купить

VampII
Offline
Зарегистрирован: 07.11.2014

leds пишет:

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

сибирь большая, если норильск и т.п. то согласен долго, очень, если нет в городе спец магазинчиков.

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

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

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

Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.

Radjah
Offline
Зарегистрирован: 06.08.2014

Есть же часы со встроенным в чип кварцем и стоят примерно столько же.

leds
Offline
Зарегистрирован: 20.10.2014

Radjah пишет:

Есть же часы со встроенным в чип кварцем и стоят примерно столько же.

что за часы?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
Radjah
Offline
Зарегистрирован: 06.08.2014

Вот да. Именно они.

leds
Offline
Зарегистрирован: 20.10.2014

bwn пишет:

Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.

 

Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?

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

leds пишет:

Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?

прибавляйте каждые сутки по 5 минут или каждый час по 5*60/24 секунд вот вам и автокоррекция. Либо прикрутите ethernet шилд и синхронизируйте по NTP

Увы с ds1307 иначе высокой точности не добиться. Другое дело ds3231

leds
Offline
Зарегистрирован: 20.10.2014

А это отставание всегда примерно стабильно? Или сегодня оно отстает на 5 минут, а завтра на 10?

leds
Offline
Зарегистрирован: 20.10.2014

bwn пишет:

Ну тады не знаю, с этой библой не работал. А чем DS1307 и пр. не катят?

Тогда вообще в чём смысл этого устройства? не могу понять. Если, с примерно такой же точностью можно реализовать через millis().. Я прям вообще в негодовании. Поставил его, установил, доверился, а оно отстает.

Radjah
Offline
Зарегистрирован: 06.08.2014

ds3231 тогда. Стоит примерно столько же.

Точность DS1307 сильно зависит от кварца и места его установки. У 3231 кварц внутри.

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

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

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

Radjah пишет:

ds3231 тогда. Стоит примерно столько же.

Точность DS1307 сильно зависит от кварца и места его установки. У 3231 кварц внутри.

кварц да, но не только. Еще очень важно, что у DS3231 обеспечена термостабильность, для этого у нее есть еще и встроенный датчик температуры

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Синхронизацию времени по интернету совсем не просто так придумали.

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

axill пишет:

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

У человека была проблема с закупкой из китая. Поэтому посоветовал 1307. Они в любом городке валяются. У меня  такого бешеног убегания нет. 3-4 штуки подключал. На одной -2сек в сутки корректировал, на других и того меньше.

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

leds пишет:

bwn пишет:

Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.

 

Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?

Покажите код, который у вас с часами работает.

leds
Offline
Зарегистрирован: 20.10.2014

bwn пишет:

Покажите код, который у вас с часами работает.

 

Код для часов вот такой:

void setup() {    
  Wire.begin();// We start the I2C on the Arduino for communication with the BMP180 sensor.
  setSyncProvider(RTC.get);
}

void loop(){ // цикл программы 
 if (timeStatus() == timeSet) {.
    incTime();//Если синхронизированы, вызываем функцию для показа времени
} else {
   //Если не синхронизированы, сообщим об этом
   Serial.println("The time has not been set.  Please run the Time");
   Serial.println("TimeRTCSet example, or DS1307RTC SetTime example.");
   Serial.println();
   delay(4000);
}
 if ((millis() - currentTime) >= deration) {
      currentTime = millis();{
      setSyncProvider(RTC.get); // синхронизируем время
   }
}

void incTime(){ //# Время
//return;
hours = hour();
minutes = minute();
Serial.print(hours);
Serial.print(":");
Serial.print(minutes);
Serial.print(":");
Serial.println(second());
}//#

А вообще там ещё ипользуется Timer1, прерывание на 5 таймере, датчик температуры и давления и ещё куча кода отрисовки на модуле P10 через библиотеку DMD 

leds
Offline
Зарегистрирован: 20.10.2014

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

И как зависит выполнение функций millis() и  micros() от температуры, и от чего они вообще зависят?

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

В этих часах при изменении данных извне (при корректировке и т.п.) происходит останов отсчета. Если вы это делаете достаточно часто, а корректировка не срабатывает, вы их за сутки весьма сильно замедлите. Попробуйте запустить часы со стандартным примером на сутки или померьте частоту на выходе SQ (32768Гц).

Любой кварц меняет свои резонансные свойства в зависимости от температуры, RLC цепочка делает это еще сильнее. Соответственно идет отклонение от заданной частоты. 5 минут за сутки это очень-очень много, обычно речь о секундах. Такая микруха с корявой разводкой и китайскими кварцами стоит в эл.счетчиках, минуты набегают за месяцы работы (при живой батарее). Для millis и micros это правило действует точно так же.

Сделать самому термокоррекцию - промерить отклонение частот кварца от температур и вносить соотв.поправку, но боюсь для каждой партии она будет своя. В DS3231 это сделали за нас.

Для DS1307 или корректная синхронизация с эталонными или вычисленная поправка за сутки. При возможности подключения к сети синхронизация с эталоном надежнее.

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

leds пишет:

А как зависит работа модуля от температуры?

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

Согласен с bwn, наиболее разумны три варианты - 1. замер ухода часов без привязки к температуре и учет этого ухода в скетче (корректировка в течении суток или раз в сутки) 2. замена модуля на модуль с микросхемой DS3231 3. настройка синхронизации через Интернет. Не обязательно именно к этому устройству подключать интернет, можно подключить радио модуль и отдельно поставить другую ардуину с радиомодулем и либо ethernet модулем или wifi

способы 2 и 3 можно комбинировать. Я так и сделал. У меня есть одна ардуина подключенная к интернет которая раздает по радио точное время (включая дату и время с учетом часовой зоны). И Есть двое часов с DS3231 которые пару раз в сутки чинхронизируют время. На самих часах даже нет возможности выставлять время. Вот недавно когда время перевели - поменял настроку на основной ардуине и через несколько часов часы везде стали показывать по новому. Уход обоих часов за счет комбинации DS3231 и синхронизации абсолютный ноль вот уже за почти год

leds
Offline
Зарегистрирован: 20.10.2014

bwn пишет:

В этих часах при изменении данных извне (при корректировке и т.п.) происходит останов отсчета. Если вы это делаете достаточно часто, а корректировка не срабатывает, вы их за сутки весьма сильно замедлите. Попробуйте запустить часы со стандартным примером на сутки или померьте частоту на выходе SQ (32768Гц).

Любой кварц меняет свои резонансные свойства в зависимости от температуры, RLC цепочка делает это еще сильнее. Соответственно идет отклонение от заданной частоты. 5 минут за сутки это очень-очень много, обычно речь о секундах. 

Корректировка производится только при необходимости, когда часы сбиваются. А так часы работают и работают. 

Но раз в 15 секунд я делаю синхронизацию с модулем 

setSyncProvider(RTC.get)

Это может плохо на них влиять?

 

Отставание в несколько секунд меня бы устроило. Но вот один модуль у меня работает нормально. А другой скачками, то 3 минуты, то 5 минут, то 1 час 3 минуты (это меня вообще убило). Но это всё информация со слов человека, которому я этот модуль поставил. А он находится в 400 км от меня. Так что нормально адаптировать модуль не получится, только там на месте.

Вот такая беда. Не знаю даже что с этим делать :-(

 

 

 

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

Ну без модуля в руках даже не знаю что предложить. Проскакивала инфа, что на модулях с аккумулятором (вместо CR2032) они из-за некорректного делителя иногда останавливались без сброса данных. По синхронизации не скажу, но если она делает RTC.stop, то отклонение возможно.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Здравствуйте!!!

У меня на китайской УНО -  MsTimer2 и millis() отстают в минуту почти на 15 секунд :(

В моём пректе это не допустимо - если бы на 15 сек в час я бы не заморачивался.

Я так понял что проблема в кварце - можно его измерить не выпаивая ? (есть ms6100 но кварцы никогда не мерил)

может просто не 1000мс задать а меньше или всё таки купить оригинальную УНО с Амперки?

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Небось кварц на 12MHz вместо 16 стоит.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Radjah пишет:

Небось кварц на 12MHz вместо 16 стоит.

 

Написано 16000

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Через делитель показал на одной ноге 16,04 мГц на другой 17,98 мГц - вот какая из них кварца?

fagci
Offline
Зарегистрирован: 12.01.2015

Возьмите атомные часы например http://www.insidegnss.com/node/2446

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Не подскажите код скидочки на Амперке?
Решил всё-таки оригинал взять - что не нравится мне как работает клон

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

Дмитрий@ пишет:
Не подскажите код скидочки на Амперке? Решил всё-таки оригинал взять - что не нравится мне как работает клон

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

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

На оригинале тоже не проверяют что ставят?
У меня на lcd 1602 иногда мусор проскакивает - не Уно случаем виновата или просто надо почаще чиститьтить экран?
ПС: Во вторник закажу JY-MCU mini_RTCpro DS3231

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Упс

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?

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

Дмитрий@ пишет:
Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?

millis это millis, часы это часы. Основные временные промежутки придется брать от часов. Не зная, что вы делаете сложно что то сказать.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

bwn пишет:

Дмитрий@ пишет:
Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?

millis это millis, часы это часы. Основные временные промежутки придется брать от часов. Не зная, что вы делаете сложно что то сказать.


Тестер ввсокоамперных аккумуляторов с последующим рисованием графика. За основу взят этот проект http://arrduinolab.blogspot.ru/2014/07/blog-post_19.html?m=1
Замер напряжения акка каждую секунду и с последующей записью на SD

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

Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

bwn пишет:

Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.

Спасибо.

А меньше секунды не получится сделать?

ПС: В нете полно проектов-секундомеров даже с микросекундами - да кому и зачем он с такой погрешностью нужен?

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

Дмитрий@ пишет:
bwn пишет:

Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.

Спасибо. А меньше секунды не получится сделать? ПС: В нете полно проектов-секундомеров даже с микросекундами - да кому и зачем он с такой погрешностью нужен?

Вы заказали секунду, я по ней ответил в наиболее простой реализации. А так на том модуле должен быть выход SQ (может ошибаюсь)  на нем можете получить такты  от 32768 до 1Гц и использовать их как опорные.

Datak
Offline
Зарегистрирован: 09.10.2014

Кварц, даже самый гнилой и самый китайский, не может ошибаться на "примерно 10 сенунд в минуту" или "в минуту почти на 15 секунд".
Я бы, всё-таки, постарался выяснить в чём дело. Там или действительно кварц не на ту частоту, или частота неправильно указана в настройках проекта, или этот кварц вообще отключен какими-нибудь фьюзами.

Ну, или программа написана всё же неправильно - бывает и такое, в конце концов.

Дмитрий@
Offline
Зарегистрирован: 04.01.2015

Ещё раз спасибо. Меньше секунды возможно понадобятся в будующих проектах.