Что то вас, коты, совсем понесло. Все же просто, блин.
BOB51 писал(а):
Речь идет об ошибке, накапливаемой последующими счетчиками, для которых уже чистого секунд (маркер) интервала не будет из-за задержек, вносимых той самой реакцией на прерывание
Ну как же не будет? Еще как будет, если счетчик таймера сам перезагружается (или переполняется), то никакая задержка перед входом в прерывание не будет вносить погрешность в счет таймера. Представьте, что произошло прерывание таймера - он отсчитал одну секунду. Перезагрузился и считает дальше. В этот момент выполняется какая-то команда программы... идет процесс перехода программного счетчика на метку начала обработчика прерывания. Это длится сколько-то там Х тактов. Эти Х тактов не повлияют на момент следующего прерывания, поскольку таймер как считал, так и считает дальше. просто с момента входа в прерывание до момента следующего прерывания пройдет не 1 секунда, а 1 секунда минус Х тактов. Главное, чтобы Х тактов не превысили интервал 1 секунда, поскольку иначе мы просто пропустим прерывание.
BOB51, вы явно решили потроллить. Я уж думал все успокоилось. Причем здесь время выполнения команд? и у вас на рисунке что-то не то с масштабом. в одну секунду при тактировании от 32768Гц кварца влезет ровно столько же тактов микроконтроллера(32768). У вас же нарисовано так, как будто в секунду может выполнится не более 20 команд... Вы все еще не понимаете, что аппаратный таймер не останавливается в момент прерывания и продолжает дальше считать? приведите наконец кусок кода, который вызовет то, что вы описываете на картинке.
Графка - всего лишь принцип появления ошибки, как там указано график весьма условный... Для прерываний по таймеру она будет усредненной постоянной только в случае исключительного примненния в программе однословных команд (относительно AVR), а для последующих счетчиков вероятно уже накапливаемой.
_________________ Когда уже ничего не помогает - прочтите, наконец, инструкцию. Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII) Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Интересно как BOB51 представляет себе работу асинхронного таймера. Ну например ATmega8 может тактироваться от внутреннего RC скажем на 1 МГц и в то же время один из таймеров может работать от внешнего кварца на ногах 9 и 10. Причем может продолжать работу и генерировать прерывания даже в режимах сна когда остановлено ядро и прочие таймеры. Если время обработки его прерывания меньше чем период частоты его возникновения (а это обычно так и есть, было бы чего там обрабатывать) то накапливаться ошибка не будет. А постоянную ошибку, а это меньше секунды, человек и не заметит. Есть, конечно, искусственные способы накопления ошибки. Например, предложенный программный перезапуск таймера или задержки в обработчике (ага, больше чем на секунду или сколько там). Кстати из гифки так и не понял где же эта накапливающаяся ошибка и как ее получили.
А вот как раз о подобных аппаратных системах уже ранее говорилось - встроенные генераторы или полные RTC у некоторых мег (в частности у 162 и 128) и у пиков. Графка касается применения 32768 в качестве внешнего кварца основного генератора. Хоша также и работы асинхронника, но там уже две точки - первая это сама синхронизация входного сигнала с тактовым в МК и вторая - интервал между установкой флага прерывания и началом исполнения самого прерывания. А эти интервалы уже зависят от длительности тактов главного генератоора системы, а не от точности асинхронного счетчика. Да и от кода эти задержки не зависят - особенность построения и аппаратной обработки прерываний практически у всех МК одинакова.
А причем код - то, да еще и конкретный? Речь то о том, что часики собранные на основе ATtiny2313 (или по подобному принципу - с единым генератором тактового сигнала для ядра МК и для тайаера опорного интервала) будут показывать более точное время в случае, ежли будет применен более высокочастотный кварц ( в примере 8МГц), чем кварц 32768Гц. И причины данное утверждение объясняющие. А поскольку причины аппаратного происхождения, то какой-бы котд там не применялся результат будет одинаков.
Стартёр не появляется в ветке, видимо, как-то для себя решил вопрос. Но, я не об этом. В качестве пятничной развлекухи сделал прогу - генератор 10 секундного импульса на ATtiny2313 с кварцем "8.000" для демонстрации отсутствия накопления ошибок. Спойлер
Код:
; ’…‘’-®ЇаҐ¤Ґ«ҐЁҐ з бв®вл Єў а楢®Ј® ЈҐҐа в®а AT90S2313 Fclk=8000000kHz
.INCLUDE "2313def.inc"
.CSEG .def _FF=R1 .equ Fo=8002729 ; 8002729 в этой строке пользователем устанавливается ; частота кварца
RESET: RJMP START ; On Reset COMP_A: SET ; On Interrupt 0 RETI ; On Interrupt 1 RETI ; Timer 1 capture
После программной коррекции частоты генератора, были получены следующие результаты Спойлер9'999'999.82 мкс 10'000'000.13 10'000'000.51 10'000'001.01 10'000'001.01 10'000'001.05 10'000'001.16 отсутствовал 10'000'001.30 10'000'001.26 10'000'001.32 отсутствовал 10'000'000.06 10'000'000.05 10'000'000.13 отсутствовал 9'999'999.92 9'999'999.91 9'999'999.95 9'999'999.97 10'000'000.04 9'999'999.97 10'000'000.01 9'999'999.97 Как всегда, кварц в корпусе HC49C не имеет конденсаторной обвязки и его корпус соединен напрямую с 10 лапой ATtiny2313.
Да что же вы тогда нам всем тут голову морочили с временем выполнения команд и реакцией на прерывание???? признайте же уже, что лохонулись.... А с утверждением, что значение ppm будет делиться на бОльшее число при использовании более высокочастотного кварца никто и не спорил!
тема интересная!!! значит тини просто так не заставишь работать от кварца 32768,а если и заставишь то тинька будет медленно работать? а если завести частоту 32768(генератор любой,на к176ла7 к примеру) на т0 или т1,а там делить на нужное число,получится? изучаю даташит... минимум 400 кгц и то от керамического резонатора,температурная нестабильность которого 0,5 процентов-больно много...
Да можно вешать на выводы любой кварц, чего извращаться-то. Единственное что tn2313 не поддерживает - отсутствия конденсаторов. Точнее ни один контроллер этого не поддерживает для всего диапазона кварцев, но некоторые поддерживают специальные для часового. В tn2313 этого нет, придется ставить внешние, вот и все. Ошибка, разумеется. не накапливается
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения