Я ниче не корректирую. Часовой кварц в RTC наверно есть, но я ж ясно писал, к нему обращение раз в сутки (и прни включении устройства разумеется). У Вас в коде ошибко дающая такую фигню, в начале темы есть старый скетч, но лучше дафай актуальный скетч, покажу где поправить и Вы не будете корректировать. Ну разумеется если китайцы не впаяли вместо кварца чето по цвету подходящее ))
ПС. Думал на прошлой странице Вас убедили хоть в этом, выходит нет ;)
уберите millis(); (я там рыбу заворачивал) и читайте дальше, кстати проверил, раскомментировал чистый millis() и с ним работает, НАСТОЯЩУЮ ПРОФЕССИОНАЛЬНУЮ РАБОТУ сраный millis() не испортит )))
*так и подмывает спросить у этих шустрых и невнимательных: вами в постели довольны жёны? потому, как 30 секунд - это дурь какая-то, а не секс.
...Академическим виделся текст, а на поверку про секс...
Вас всегда на секс тянет когда на простой вопрос - к каким ногам подключаем часовой кварцевый резонатор в предложенном Вами решении, ежели стандартный уже подключен...
Или когда понимате, что это из области абстракции решение? К реальности не имеющем никакого отношения... с программистами так бывает...витают в виртуальных мирах... а мы тут куём железом по железу
Вас всегда на секс тянет когда на простой вопрос - к каким ногам подключаем часовой кварцевый резонатор в предложенном Вами решении, ежели стандартный уже подключен...
меня всегда тянет дать по ебалу тупице, которого носом в ссылку тыкаешь, что бы оно прочитало... но, нет - тупице важен процесс, а не результат.
Протестировал я счёт времени средствами самой ардуины, вот с таким кварцем, фото :
за три часа время отстало на 12 секунд. По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог - это не кварц а жуткое говно.
А вот такой обычный кварц-лодочка
и такой кварцевый генератор
не дали отклонений за 3 часа. Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету. В качестве образцового источника времени использовался ds3231, + дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.
В среднем 30ppm т.е. 2,5сек/сутки. Любые существенные отклонения возможны по двум причинам: 1. криворукость разраба 2. китайцы впаяли хрень. Все приезжающие платы я на такое не тестирую, но те 2 промини что попали в устройства с часами ведут себя отлично.
Протестировал я счёт времени средствами самой ардуины, вот с таким кварцем, фото :
за три часа время отстало на 12 секунд. По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог - это не кварц а жуткое говно.
А вот такой обычный кварц-лодочка
и такой кварцевый генератор
не дали отклонений за 3 часа. Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету. В качестве образцового источника времени использовался ds3231, + дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.
Я сегодня передёрну экран на другую плату, возможно что и кварц, но по жизни он там есть и подозревать, что перевели на RC...я так понимаю китайцам нужно было другой бутлоадер перешивать...
Вопрос остался, можно ли в mega328 перевести кварц таймеров на другие пины, в частности мне не нужны A6 и A7
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
и на ардуине используя функцию millis() это достижимо )))
Недостижимо даже близко. И пробовать не стоит. Объяснять долго, почему получится совсем плохо.
Что то похожее на часы можно сделать на таймерных прерываниях, как делают рукожопы практически в большинстве автомагнитол.
Но о точности хода - секунда в сутки речь не идёт.
Даже если каллибровать по эталону и корректировать поправками на точность хода, то тоже не поможет.
Только если по радио/gps/ntp/sntp синхронизировать. Кстати по sntp накладные расходы микроскопические.
Дело в том, что часовые кварцы делают с очень малым дрейфом частоты в зависимости от температуры и времени работы.
Чем 16МНz китайский кварц похвастаться не может, впрочем он и не для часов.
В китайских платах часов, которые неточно идут, кстати очень помогает замена кварца.
С некитайским кварцем от найденных на помойке/чердаке старых наручных часов, даже DS1307 идёт нормально, хотя лучше повнимательнее присмотреться к DS3231.
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером, и традиционным методом начинающих ардуинщиков миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон. Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис) время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.
Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.
dimax, у Вас в коде алгоритмическая ошибка - поэтому и отстает на 22 сек.
Перед 30 строкой нужно один раз считать и запомнить значение millis() в локальной переменной, чтобы затем в строках 30 и 31 использовать одно и то же значение. Иначе при вклинивании прерывания между строками 30 и 31 теряем приращение счетчика времени (1 или 2).
andriano, ну ошибка то не моя, а того, кто придумал что так можно время считать :) , PS: previousMillis +=1000 ; Это сделать? Попробую ради интереса, но мне кажется в лучшем случае ошибка уменьшится на каждой итерации, но не исчезнет. PS: запустил, через часик наверное будет результат.
Удивительно, но факт. Прошёл час, но с поправкой от andriano счётчик миллис не отстал, одновременно все счтчики показали 3600. значит всё таки можно использовать миллис для счёт времени, если конечно loop сильно не перегружать..
andriano, поставил на тестирование вариант с arduino.cc , уже через минуту стала вырисовываться тенденция оставания счётчика миллис, посмотрим итоги через час :)
добавлено:
Нет смысла ждать час, эта конструкция из примера arduino.cc дала отставание в 7 секунд уже за 30минут.
void loop(){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
previousMillis = currentMillis; tim0++;
}
Стало быть вариант из #70 на данный момент самый верный.
Да. Для счета времени именно так. В условии > или >= не существенно, == нельзя. Вариант с previousMillis = millis(); годится для формирования временного интервала, когда важно что до следующего входа в условие прошло не менее времени чем задано. Правильный подход вызывать millis(); один раз при входе в луп и сохранять даже не в локальной а в глобальной переменной (лишний параметр в функции не будет передаватся), и использовать везде где надо, разумеется это при быстром лупе.
И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером, и традиционным методом начинающих ардуинщиков миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон. Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис) время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.
Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.
После первого импульса от ds3231 все переменные обнуляются, чем обеспечивается очень высокая синхронность старта счётчиков.
previousMillis = millis(); tim0++; }
Дмитрий! Это в Вашем коде повторяется у всех )))
Оно и будет накапливаться правильней по моему мнению:
previousMillis = previousMillis + 1000;
Нас же интересует само событие, что оно перешло через секундный барьер, а насколько нас не интересует? Отбрасывая это НАСКОЛЬКО мы сами вносим ошибку, разве не так?
Поэтому увеличиваем на секунду, а так как millis() шлёпает от таймера, а у нас в этом случае счет последовательный и непрерывный и всё должно быть КАРАСО
Кварцы оказались дерьмо, в другой ардуине попало ровно в 500 миллисекундный участок (на 10 минутном цикле проверки время не ушло), посмотрим 24 часовой прогон. Понятно что с часами на миллис не всё так гладко (вероятная область применения), вот дособираю по кускам всё что задумал добавить в скетч Индийца, выложу )))
мы наверно об одном и том же )))
Что-то сдуплил мой комп, звиняйте
А на хреновый кварц изменяем эту тыщу на сколько надо +- , у меня 6 миллисекунд в минус позволили вывести суточный уход в точность 1 секунда
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Так ТС и делает часы нереального времени.
Мастера говорили так нельзя, пришёл колхозник и сделал, я выложу картинки до и после суточного прогона )))
языком звиздеть это не мешки ворочать, а тем паче ковать железом по железу ...
Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды, сейчас рассчитаю поправки, внесу, перезалью и по нулям поставлю на прогон...посмотрим, что день грядущий нам готовит
Кстати, часы компьютера тоже улетели на 1.71 секунды
так писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. "
Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.
Предлагаю для точности греть/охлаждать кварц элементом Пельтье)))
Проще, берём обычный TCXO c 0,5 ppm (такие у меня во всех шарабанах стоят) и будет ЩАСТЕ,
Но мы же лёгких путей не ищем )))
Да и смотрю - столько голосистых и залихватских из щелей повылазило... на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
так писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. "
Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.
Я же сказал уже, у меня и на дерьме уже получилось лучше секунды
Кстати утилита D4 всё еще актуальна однако )))
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Так ТС и делает часы нереального времени.
Мастера говорили так нельзя
Почему нельзя? Часы нереального времени можно сделать из чего-угодно.
ua6em Вы писали "Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды". Про ", у меня и на дерьме уже получилось лучше секунды" явно не по теме Вопрос похоже исчерпан не Ваше ж дерьмо обсуждать.
У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.
У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.
А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...
А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...
Мной принято.
Тем, что я установил коэффициент деления 2273 для частоты 1 МГц. Если округлять не до целых, а до сотых, получается 439.95. Но никак не 437. И частота Шумана не имеет е этому факту никакого отношения.
Единственное объяснение сему феномену я вижу в том, что мегагерц какой-то слишком китайский.
каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))
Поздравляю Вас господа с очередным форумным пиздаболом отмечающимся во всех темах и озаряющий их феерической безграмотностю :( Нас ждут пару увлекательных месяцев пока у него пройдет обострение.
"Правильная частота для резонанса частицы цезия сегодня определена международным соглашением и составляет 9 192 631 770 герц, поэтому при делении выходного сигнала на это число должен получаться 1 Гц, или 1 цикл в секунду." 30 колебаний - 3,26нсек. Это минимальная еденица? На всяк случай планковское время 5*10е-44 сек. Применяемые в лазерной технике импулсы бывают пикосекундные, и даже доли пикосекунд.
ПС. Ширина телефонного канала по стандарту 300-3400Гц. К 45 бодам отношения не имеет.
каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))
Не берусь анализировать аналогию между частотой фльфа-ритма для мозга и тактовой частоты для процессора, но что частота альфа-ритма не имеет никакого отношения к работе процессора - это очевидно (по крайней мере, именно из этого исходят как разработчики аппаратных средств, так и программисты).
ua6em пишет:
nik182 пишет:
Есть такая штука, камертон называется. 440 Гц. Ни поделишь. Ни округлишь. Можно кварцы подстраивать :-,
В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
Если 7 Гц от упомянутых 440 Гц, то это порядка 25 центов - ничего удивительного: дифференциальная чувствиетльнось к частоте "простых смертных" составляет в среднем от 6 до 40 центов, а музыкантов - 3-4 цента.
Если же речь о частоте 1 кГц, то все равно 7 Гц составляет 10-12 центов, что вполне естественно даже для нетренированного уха.
на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?
по цезию - если вы этого не знаете, то вам эти знания вредны
Что, на себе заметил вредность своих знаний? Тогда бегом от них! Куй железо и мешки ворочай! )))
Тем более, что минимальная единица времени не равна вышенаписанному бреду с цезием.
я добиваюсь этого корректируя 2 раза в секунду
у тебя секунда равна реальной секунде?
почему два раза секунду корректируешься, а не каждую микросекунду?
Я ниче не корректирую. Часовой кварц в RTC наверно есть, но я ж ясно писал, к нему обращение раз в сутки (и прни включении устройства разумеется). У Вас в коде ошибко дающая такую фигню, в начале темы есть старый скетч, но лучше дафай актуальный скетч, покажу где поправить и Вы не будете корректировать. Ну разумеется если китайцы не впаяли вместо кварца чето по цвету подходящее ))
код изменился только в поправочных коэффициентах:
я добиваюсь этого корректируя 2 раза в секунду
у тебя секунда равна реальной секунде?
почему два раза секунду корректируешься, а не каждую микросекунду?
1. конечно не равна, она равна millis*1000
Там где millis(); //запуcкаем таймер
))) неее... давайте шото более адекватное.
ПС. Думал на прошлой странице Вас убедили хоть в этом, выходит нет ;)
Похоже "крепкий орешек" ;) Ну удачи, удачи...
Там где millis(); //запуcкаем таймер
))) неее... давайте шото более адекватное.
ПС. Думал на прошлой странице Вас убедили хоть в этом, выходит нет ;)
уберите millis(); (я там рыбу заворачивал) и читайте дальше, кстати проверил, раскомментировал чистый millis() и с ним работает, НАСТОЯЩУЮ ПРОФЕССИОНАЛЬНУЮ РАБОТУ сраный millis() не испортит )))
К каким ногам ардуино нано подключаем правильный резонатор 32768, если XTAL подключен 16 мегагерц?
#5
*так и подмывает спросить у этих шустрых и невнимательных: вами в постели довольны жёны? потому, как 30 секунд - это дурь какая-то, а не секс.
...Академическим виделся текст, а на поверку про секс...
Вас всегда на секс тянет когда на простой вопрос - к каким ногам подключаем часовой кварцевый резонатор в предложенном Вами решении, ежели стандартный уже подключен...
Или когда понимате, что это из области абстракции решение? К реальности не имеющем никакого отношения... с программистами так бывает...витают в виртуальных мирах... а мы тут куём железом по железу
Вас всегда на секс тянет когда на простой вопрос - к каким ногам подключаем часовой кварцевый резонатор в предложенном Вами решении, ежели стандартный уже подключен...
меня всегда тянет дать по ебалу тупице, которого носом в ссылку тыкаешь, что бы оно прочитало... но, нет - тупице важен процесс, а не результат.
я спрашивал как перевести на RC?
Протестировал я счёт времени средствами самой ардуины, вот с таким кварцем, фото :
за три часа время отстало на 12 секунд. По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог - это не кварц а жуткое говно.
А вот такой обычный кварц-лодочка
и такой кварцевый генератор
не дали отклонений за 3 часа. Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету. В качестве образцового источника времени использовался ds3231, + дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.
//потребуется несколько дней что б их измерить.
На сутках вылезут. Только в чем смысл экспериментальной проверки даташита )
Вот типичные, там и лодочка есть. http://www.quartz1.com/price/group.php?p1=14745%2C6&group=430
В среднем 30ppm т.е. 2,5сек/сутки. Любые существенные отклонения возможны по двум причинам: 1. криворукость разраба 2. китайцы впаяли хрень. Все приезжающие платы я на такое не тестирую, но те 2 промини что попали в устройства с часами ведут себя отлично.
Протестировал я счёт времени средствами самой ардуины, вот с таким кварцем, фото :
за три часа время отстало на 12 секунд. По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог - это не кварц а жуткое говно.
А вот такой обычный кварц-лодочка
и такой кварцевый генератор
не дали отклонений за 3 часа. Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету. В качестве образцового источника времени использовался ds3231, + дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.
Я сегодня передёрну экран на другую плату, возможно что и кварц, но по жизни он там есть и подозревать, что перевели на RC...я так понимаю китайцам нужно было другой бутлоадер перешивать...
Вопрос остался, можно ли в mega328 перевести кварц таймеров на другие пины, в частности мне не нужны A6 и A7
Вопрос остался, можно ли в mega328 перевести кварц таймеров на другие пины, в частности мне не нужны A6 и A7
от тупица упоротый. :D
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Недостижимо даже близко. И пробовать не стоит. Объяснять долго, почему получится совсем плохо.
Что то похожее на часы можно сделать на таймерных прерываниях, как делают рукожопы практически в большинстве автомагнитол.
Но о точности хода - секунда в сутки речь не идёт.
Даже если каллибровать по эталону и корректировать поправками на точность хода, то тоже не поможет.
Только если по радио/gps/ntp/sntp синхронизировать. Кстати по sntp накладные расходы микроскопические.
Дело в том, что часовые кварцы делают с очень малым дрейфом частоты в зависимости от температуры и времени работы.
Чем 16МНz китайский кварц похвастаться не может, впрочем он и не для часов.
В китайских платах часов, которые неточно идут, кстати очень помогает замена кварца.
С некитайским кварцем от найденных на помойке/чердаке старых наручных часов, даже DS1307 идёт нормально, хотя лучше повнимательнее присмотреться к DS3231.
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Так ТС и делает часы нереального времени.
И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером, и традиционным методом начинающих ардуинщиков миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон. Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис) время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.
Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.
После первого импульса от ds3231 все переменные обнуляются, чем обеспечивается очень высокая синхронность старта счётчиков.
dimax, у Вас в коде алгоритмическая ошибка - поэтому и отстает на 22 сек.
Перед 30 строкой нужно один раз считать и запомнить значение millis() в локальной переменной, чтобы затем в строках 30 и 31 использовать одно и то же значение. Иначе при вклинивании прерывания между строками 30 и 31 теряем приращение счетчика времени (1 или 2).
PS. Подумал: лучше в 31 строке прибавлять 1000.
andriano, ну ошибка то не моя, а того, кто придумал что так можно время считать :) , PS: previousMillis +=1000 ; Это сделать? Попробую ради интереса, но мне кажется в лучшем случае ошибка уменьшится на каждой итерации, но не исчезнет. PS: запустил, через часик наверное будет результат.
Удивительно, но факт. Прошёл час, но с поправкой от andriano счётчик миллис не отстал, одновременно все счтчики показали 3600. значит всё таки можно использовать миллис для счёт времени, если конечно loop сильно не перегружать..
Конечный вариант тестового скетча:
andriano, ну ошибка то не моя, а того, кто придумал что так можно время считать :)
Попытался выяснить, откуда ноги растут. Сперва подумал, что отсюда: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Ан, нет, там, что удивительно, данный фрагмент написан правильно.
У Клапауция в титановой кнопке - тоже правильно.
А вот в прикрепленной теме "Работа с кнорпками. В помощь новичку" содержится именно такая ошибка.
Как бы ее исправить? Нехорошо новичнов учить сразу неправильно.
andriano, поставил на тестирование вариант с arduino.cc , уже через минуту стала вырисовываться тенденция оставания счётчика миллис, посмотрим итоги через час :)
добавлено:
Нет смысла ждать час, эта конструкция из примера arduino.cc дала отставание в 7 секунд уже за 30минут.
Стало быть вариант из #70 на данный момент самый верный.
Думаю, это вариант не выдержит сильно нагруженного loop().
Мне кажется, что наиболее надежный вариант:
Да. Для счета времени именно так. В условии > или >= не существенно, == нельзя. Вариант с previousMillis = millis(); годится для формирования временного интервала, когда важно что до следующего входа в условие прошло не менее времени чем задано. Правильный подход вызывать millis(); один раз при входе в луп и сохранять даже не в локальной а в глобальной переменной (лишний параметр в функции не будет передаватся), и использовать везде где надо, разумеется это при быстром лупе.
И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером, и традиционным методом начинающих ардуинщиков миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон. Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис) время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.
Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.
После первого импульса от ds3231 все переменные обнуляются, чем обеспечивается очень высокая синхронность старта счётчиков.
previousMillis = millis(); tim0++; }
Дмитрий! Это в Вашем коде повторяется у всех )))
Оно и будет накапливаться правильней по моему мнению:
previousMillis = previousMillis + 1000;
Нас же интересует само событие, что оно перешло через секундный барьер, а насколько нас не интересует? Отбрасывая это НАСКОЛЬКО мы сами вносим ошибку, разве не так?
Поэтому увеличиваем на секунду, а так как millis() шлёпает от таймера, а у нас в этом случае счет последовательный и непрерывный и всё должно быть КАРАСО
Кварцы оказались дерьмо, в другой ардуине попало ровно в 500 миллисекундный участок (на 10 минутном цикле проверки время не ушло), посмотрим 24 часовой прогон. Понятно что с часами на миллис не всё так гладко (вероятная область применения), вот дособираю по кускам всё что задумал добавить в скетч Индийца, выложу )))
Думаю, это вариант не выдержит сильно нагруженного loop().
Мне кажется, что наиболее надежный вариант:
мы наверно об одном и том же )))
Думаю, это вариант не выдержит сильно нагруженного loop().
Мне кажется, что наиболее надежный вариант:
мы наверно об одном и том же )))
Что-то сдуплил мой комп, звиняйте
А на хреновый кварц изменяем эту тыщу на сколько надо +- , у меня 6 миллисекунд в минус позволили вывести суточный уход в точность 1 секунда
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Так ТС и делает часы нереального времени.
Мастера говорили так нельзя, пришёл колхозник и сделал, я выложу картинки до и после суточного прогона )))
языком звиздеть это не мешки ворочать, а тем паче ковать железом по железу ...
ua6em Читаем выборочно? См. http://arduino.ru/forum/programmirovanie/prostye-chasy-nerealnogo-vremeni?page=1#comment-237523
"счётчик миллис не отстал, одновременно все счтчики показали 3600." ;)
Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды, сейчас рассчитаю поправки, внесу, перезалью и по нулям поставлю на прогон...посмотрим, что день грядущий нам готовит
Кстати, часы компьютера тоже улетели на 1.71 секунды
так писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. "
Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.
Предлагаю для точности греть/охлаждать кварц элементом Пельтье)))
Проще, берём обычный TCXO c 0,5 ppm (такие у меня во всех шарабанах стоят) и будет ЩАСТЕ,
Но мы же лёгких путей не ищем )))
Да и смотрю - столько голосистых и залихватских из щелей повылазило... на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
ЗАТТО АНАЛИТЕГИ
так писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. "
Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.
Я же сказал уже, у меня и на дерьме уже получилось лучше секунды
Кстати утилита D4 всё еще актуальна однако )))
Зачет. Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.
Так ТС и делает часы нереального времени.
Мастера говорили так нельзя
Почему нельзя? Часы нереального времени можно сделать из чего-угодно.
на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?
ua6em Вы писали "Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды". Про ", у меня и на дерьме уже получилось лучше секунды" явно не по теме Вопрос похоже исчерпан не Ваше ж дерьмо обсуждать.
Кварцы оказались дерьмо...
Кварцы - это песня!
У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.
ua6em Вопрос похоже исчерпан не Ваше ж дерьмо обсуждать.
Ну да, мы обсуждали то дерьмо, что переходило со страницы на страницу уже много лет вместо правильного алгоритма: (не берём во внимание константу)
Дальше пытать безсмысленно, теоретическая точность алгоритма - 2 миллисекунды в сутки на родном кварце, остальное детали )))
Кварцы оказались дерьмо...
Кварцы - это песня!
У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.
А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...
Есть такая штука, камертон называется. 440 Гц. Ни поделишь. Ни округлишь. Можно кварцы подстраивать :-,
А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...
Мной принято.
Тем, что я установил коэффициент деления 2273 для частоты 1 МГц. Если округлять не до целых, а до сотых, получается 439.95. Но никак не 437. И частота Шумана не имеет е этому факту никакого отношения.
Единственное объяснение сему феномену я вижу в том, что мегагерц какой-то слишком китайский.
каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))
В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
Это смотря в каком частотном диапазоне.
на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?
В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
Это смотря в каком частотном диапазоне.
на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?
на стандартной - 45 бод, 300-3000 - ширина стандартного канала, вроде как
по цезию - если вы этого не знаете, то вам эти знания вредны )))
Поздравляю Вас господа с очередным форумным пиздаболом отмечающимся во всех темах и озаряющий их феерической безграмотностю :( Нас ждут пару увлекательных месяцев пока у него пройдет обострение.
"Правильная частота для резонанса частицы цезия сегодня определена международным соглашением и составляет 9 192 631 770 герц, поэтому при делении выходного сигнала на это число должен получаться 1 Гц, или 1 цикл в секунду." 30 колебаний - 3,26нсек. Это минимальная еденица? На всяк случай планковское время 5*10е-44 сек. Применяемые в лазерной технике импулсы бывают пикосекундные, и даже доли пикосекунд.
ПС. Ширина телефонного канала по стандарту 300-3400Гц. К 45 бодам отношения не имеет.
каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))
Не берусь анализировать аналогию между частотой фльфа-ритма для мозга и тактовой частоты для процессора, но что частота альфа-ритма не имеет никакого отношения к работе процессора - это очевидно (по крайней мере, именно из этого исходят как разработчики аппаратных средств, так и программисты).
В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
Если 7 Гц от упомянутых 440 Гц, то это порядка 25 центов - ничего удивительного: дифференциальная чувствиетльнось к частоте "простых смертных" составляет в среднем от 6 до 40 центов, а музыкантов - 3-4 цента.
Если же речь о частоте 1 кГц, то все равно 7 Гц составляет 10-12 центов, что вполне естественно даже для нетренированного уха.
на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...
Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?
по цезию - если вы этого не знаете, то вам эти знания вредны
Что, на себе заметил вредность своих знаний? Тогда бегом от них! Куй железо и мешки ворочай! )))
Тем более, что минимальная единица времени не равна вышенаписанному бреду с цезием.