Отставание секунд millis()
- Войдите на сайт для отправки комментариев
Вс, 26/10/2014 - 18:15
Приветствую.
У меня проблема. В моем скетче сильно отстает время. Примерно 10 сенунд в минуту.
В скетче используется <TimerOne.h> и прерывания на 5 таймере ардуино мега.
Не могу понять откуда берется отставание. Подскажите где туплю.
Если дуина не фирменная, я бы для начала померил чудесный китайский кварц. Ибо часто написано одно, а на деле совсем другое.
Дык если прошито обычным скетчем, то всё норм. Время идёт точно. Думаю, тут всё же дело в timerOne, потому что на другой меге, где нет прерывания по ИК датчик, но также есть TimerOne также идёт отставание.
За 7 часов 31 минуту отставание на 3 727 398 миллисекунд, то есть примерно на час и 3 минуты.
Ну тады не знаю, с этой библой не работал. А чем DS1307 и пр. не катят?
Да блин, нету их под рукой. Заказывать долго. До сибири больше месяца идут товары с китая.
А заказал бы сразу, уже в пути были бы.
Вроде и в Челябе с Новосибом есть.
Подскажите где можно в Новосибе найти?
rtc ds1307 новосибирск купить
Да блин, нету их под рукой. Заказывать долго. До сибири больше месяца идут товары с китая.
сибирь большая, если норильск и т.п. то согласен долго, очень, если нет в городе спец магазинчиков.
точность DS1307 тоже неслабо зависит от китайскости использованного кварца. одно радует, это никак не зависит от хода основной программы.
Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.
Есть же часы со встроенным в чип кварцем и стоят примерно столько же.
Есть же часы со встроенным в чип кварцем и стоят примерно столько же.
что за часы?
http://www.ebay.com/itm/DS3231-AT24C32-I2C-RTC-Clock-Module-Precision-Re...
Вот да. Именно они.
Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.
Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?
Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?
прибавляйте каждые сутки по 5 минут или каждый час по 5*60/24 секунд вот вам и автокоррекция. Либо прикрутите ethernet шилд и синхронизируйте по NTP
Увы с ds1307 иначе высокой точности не добиться. Другое дело ds3231
А это отставание всегда примерно стабильно? Или сегодня оно отстает на 5 минут, а завтра на 10?
Ну тады не знаю, с этой библой не работал. А чем DS1307 и пр. не катят?
Тогда вообще в чём смысл этого устройства? не могу понять. Если, с примерно такой же точностью можно реализовать через millis().. Я прям вообще в негодовании. Поставил его, установил, доверился, а оно отстает.
ds3231 тогда. Стоит примерно столько же.
Точность DS1307 сильно зависит от кварца и места его установки. У 3231 кварц внутри.
ошибка более менее стабильная, но уплывание времени все равно будет. Вы далеко непервый кто жалуется на неточность хода часов DS1307, только на этом форуме наверно не меньше десятка таких недовольных. Вполне могли узнать о проблеме до покупки))
ds3231 тогда. Стоит примерно столько же.
Точность DS1307 сильно зависит от кварца и места его установки. У 3231 кварц внутри.
кварц да, но не только. Еще очень важно, что у DS3231 обеспечена термостабильность, для этого у нее есть еще и встроенный датчик температуры
Синхронизацию времени по интернету совсем не просто так придумали.
ошибка более менее стабильная, но уплывание времени все равно будет. Вы далеко непервый кто жалуется на неточность хода часов DS1307, только на этом форуме наверно не меньше десятка таких недовольных. Вполне могли узнать о проблеме до покупки))
У человека была проблема с закупкой из китая. Поэтому посоветовал 1307. Они в любом городке валяются. У меня такого бешеног убегания нет. 3-4 штуки подключал. На одной -2сек в сутки корректировал, на других и того меньше.
Автокоррекция неплохо помогает. Зато никаких плясок с бубном не требуется.
Поставил DS1307, идёт отставание минут на 5 в сутки. Что за автокоррекция?
Покажите код, который у вас с часами работает.
Покажите код, который у вас с часами работает.
Код для часов вот такой:
А вообще там ещё ипользуется Timer1, прерывание на 5 таймере, датчик температуры и давления и ещё куча кода отрисовки на модуле P10 через библиотеку DMD
А как зависит работа модуля от температуры? У меня подключен датчик, так что я мог бы корректировать в зависимости от неё.
И как зависит выполнение функций millis() и micros() от температуры, и от чего они вообще зависят?
В этих часах при изменении данных извне (при корректировке и т.п.) происходит останов отсчета. Если вы это делаете достаточно часто, а корректировка не срабатывает, вы их за сутки весьма сильно замедлите. Попробуйте запустить часы со стандартным примером на сутки или померьте частоту на выходе SQ (32768Гц).
Любой кварц меняет свои резонансные свойства в зависимости от температуры, RLC цепочка делает это еще сильнее. Соответственно идет отклонение от заданной частоты. 5 минут за сутки это очень-очень много, обычно речь о секундах. Такая микруха с корявой разводкой и китайскими кварцами стоит в эл.счетчиках, минуты набегают за месяцы работы (при живой батарее). Для millis и micros это правило действует точно так же.
Сделать самому термокоррекцию - промерить отклонение частот кварца от температур и вносить соотв.поправку, но боюсь для каждой партии она будет своя. В DS3231 это сделали за нас.
Для DS1307 или корректная синхронизация с эталонными или вычисленная поправка за сутки. При возможности подключения к сети синхронизация с эталоном надежнее.
А как зависит работа модуля от температуры?
такая информация может быть в даташите на кристал, но думаю найти такой даташит на ваш кристал будет проблематично. Можно конечно сделать таблицу зависимости самому, только это грозит полномоштабным околонаучным исследованием))
Согласен с bwn, наиболее разумны три варианты - 1. замер ухода часов без привязки к температуре и учет этого ухода в скетче (корректировка в течении суток или раз в сутки) 2. замена модуля на модуль с микросхемой DS3231 3. настройка синхронизации через Интернет. Не обязательно именно к этому устройству подключать интернет, можно подключить радио модуль и отдельно поставить другую ардуину с радиомодулем и либо ethernet модулем или wifi
способы 2 и 3 можно комбинировать. Я так и сделал. У меня есть одна ардуина подключенная к интернет которая раздает по радио точное время (включая дату и время с учетом часовой зоны). И Есть двое часов с DS3231 которые пару раз в сутки чинхронизируют время. На самих часах даже нет возможности выставлять время. Вот недавно когда время перевели - поменял настроку на основной ардуине и через несколько часов часы везде стали показывать по новому. Уход обоих часов за счет комбинации DS3231 и синхронизации абсолютный ноль вот уже за почти год
В этих часах при изменении данных извне (при корректировке и т.п.) происходит останов отсчета. Если вы это делаете достаточно часто, а корректировка не срабатывает, вы их за сутки весьма сильно замедлите. Попробуйте запустить часы со стандартным примером на сутки или померьте частоту на выходе SQ (32768Гц).
Любой кварц меняет свои резонансные свойства в зависимости от температуры, RLC цепочка делает это еще сильнее. Соответственно идет отклонение от заданной частоты. 5 минут за сутки это очень-очень много, обычно речь о секундах.
Корректировка производится только при необходимости, когда часы сбиваются. А так часы работают и работают.
Но раз в 15 секунд я делаю синхронизацию с модулем
Это может плохо на них влиять?
Отставание в несколько секунд меня бы устроило. Но вот один модуль у меня работает нормально. А другой скачками, то 3 минуты, то 5 минут, то 1 час 3 минуты (это меня вообще убило). Но это всё информация со слов человека, которому я этот модуль поставил. А он находится в 400 км от меня. Так что нормально адаптировать модуль не получится, только там на месте.
Вот такая беда. Не знаю даже что с этим делать :-(
Ну без модуля в руках даже не знаю что предложить. Проскакивала инфа, что на модулях с аккумулятором (вместо CR2032) они из-за некорректного делителя иногда останавливались без сброса данных. По синхронизации не скажу, но если она делает RTC.stop, то отклонение возможно.
Здравствуйте!!!
У меня на китайской УНО - MsTimer2 и millis() отстают в минуту почти на 15 секунд :(
В моём пректе это не допустимо - если бы на 15 сек в час я бы не заморачивался.
Я так понял что проблема в кварце - можно его измерить не выпаивая ? (есть ms6100 но кварцы никогда не мерил)
может просто не 1000мс задать а меньше или всё таки купить оригинальную УНО с Амперки?
Небось кварц на 12MHz вместо 16 стоит.
Небось кварц на 12MHz вместо 16 стоит.
Написано 16000
Через делитель показал на одной ноге 16,04 мГц на другой 17,98 мГц - вот какая из них кварца?
Возьмите атомные часы например http://www.insidegnss.com/node/2446
Не подскажите код скидочки на Амперке?
Решил всё-таки оригинал взять - что не нравится мне как работает клон
Дмитрий, на оригинале стоит точно такой же китайский кварц и получение большей точности, вопрос весьма дискуссионный. Ставьте модуль нормальных часов и юзайте.
На оригинале тоже не проверяют что ставят?
У меня на lcd 1602 иногда мусор проскакивает - не Уно случаем виновата или просто надо почаще чиститьтить экран?
ПС: Во вторник закажу JY-MCU mini_RTCpro DS3231
Упс
Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?
Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?
Подскажите : С DS3231 можно настроить чтоб таймер2 и миллис поточней работали или придётся переписывать всю программу?
millis это millis, часы это часы. Основные временные промежутки придется брать от часов. Не зная, что вы делаете сложно что то сказать.
millis это millis, часы это часы. Основные временные промежутки придется брать от часов. Не зная, что вы делаете сложно что то сказать.
Тестер ввсокоамперных аккумуляторов с последующим рисованием графика. За основу взят этот проект http://arrduinolab.blogspot.ru/2014/07/blog-post_19.html?m=1
Замер напряжения акка каждую секунду и с последующей записью на SD
Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.
Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.
Спасибо.
А меньше секунды не получится сделать?
ПС: В нете полно проектов-секундомеров даже с микросекундами - да кому и зачем он с такой погрешностью нужен?
Так и берите секундные интервалы от часов. Погрешность небольшая будет, но думаю это не критично. Главное, чтобы основной цикл у вас не длился больше секунды. Без delay-ев этого достичь сложно.
Вы заказали секунду, я по ней ответил в наиболее простой реализации. А так на том модуле должен быть выход SQ (может ошибаюсь) на нем можете получить такты от 32768 до 1Гц и использовать их как опорные.
Кварц, даже самый гнилой и самый китайский, не может ошибаться на "примерно 10 сенунд в минуту" или "в минуту почти на 15 секунд".
Я бы, всё-таки, постарался выяснить в чём дело. Там или действительно кварц не на ту частоту, или частота неправильно указана в настройках проекта, или этот кварц вообще отключен какими-нибудь фьюзами.
Ну, или программа написана всё же неправильно - бывает и такое, в конце концов.
Ещё раз спасибо. Меньше секунды возможно понадобятся в будующих проектах.