Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройка TCNT1 и регистр сравнения OCR1A
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Alt.F4
Здравствуйте.

Задача считать 5мс (кварц 1152кГц).
Настраиваю таймер в режим СТС (сброс при совпадении TCNT1 и OCR1A), т.е. надо насчитать 1152*5=5760 тактов.

Но никак не могу понять, всегда считал, что на сброс уходит один такт и по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.
Уже голову сломал, как такое получается?
Спасибо.
rx3apf
Каким образом измерялся интервал ? Может быть, проблема в измерении ? Или так неудачно выбраны нагрузочные конденсаторы опорного кварца, что отклонение столь велико (170E-6, если конденсаторы не поставить, вполне возможно, IMHO).
gerber
Цитата(Alt.F4 @ Dec 27 2015, 22:17) *
Здравствуйте.

Задача считать 5мс (кварц 1152кГц).
Настраиваю таймер в режим СТС (сброс при совпадении TCNT1 и OCR1A), т.е. надо насчитать 1152*5=5760 тактов.

Но никак не могу понять, всегда считал, что на сброс уходит один такт и по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.
Уже голову сломал, как такое получается?
Спасибо.

Всё правильно. Сброс счётчика в 0 происходит при совпадении TCNT1 и OCR1A, изначально счётчик в нуле, считаем интервалы:
0->1->2->3 ... ->5759->(5760/0)->1->2 ...
Когда счётчик должен быть равен 5760 (а он в этот момент сбрасывается в 0) - отсчитано ровно 5760 периодов (интервалов), и всё сначала от нуля.
rx3apf
И вот тот самый дополнительный цикл и появляется. Поэтому надо настраивать OCR на одну единицу меньше (т.е. на 5759 в данном случае). И в даташите этот момент тоже есть (см. формулу расчета частоты генерации в режиме CTC).
zombi
Цитата(Alt.F4 @ Dec 27 2015, 23:17) *
по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.

Цитата(rx3apf @ Dec 28 2015, 18:30) *
Поэтому надо настраивать OCR на одну единицу меньше (т.е. на 5759 в данном случае).

wacko.gif
rx3apf
Цитата(zombi @ Dec 28 2015, 17:43) *
wacko.gif

Потому и вопрос - как измерялся интервал времени. И нужно знать _точное_ значение опорной частоты (а не то, что написано на корпусе кварца). В самом тяжелом случае выявить проблемы можно, измеряя интервалы по тактам (формируя внешний клок и контролируя изменение состояния OCx на ноге), благо что архитектура статическая и нет ограничений на нижнюю границу тактовой. Зато вопрос снимается сразу и совершенно однозначно.
Alt.F4
Замерял осциллографом системную частоту с ножки CKOUT, в итоге период 867.8ns, что является частотой ~1152,339кГц.
Когда я щелкал по 5мс, то один шаг получался около ~200кГц, вот в итоге и вся магия.

Интересно только, почему такой большой ppm=294, вместо заявленных производителем +-20ppm?

з.ы. в камне настроен CKDIV8, может этот делитель так влияет? Надо попробовать посмотреть без него.


rx3apf
Этого, в общем-то, и следовало ожидать. Хотя да, отклонение от номинала устрашающее. Нагрузочные-то конденсаторы у кварца какого номинала ?
Alt.F4
Нагрузочная емкость по даташиту кварца 20pF.
На плате стоит по 18pF из расчета, что паразитная примерно 10pF.
rx3apf
Тогда просто неприлично большое отклонение. Или кварц исключительно паршивый, или, возможно, врет скоп...
Alt.F4
rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.
Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.
Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?
rx3apf
Я бы начал с контроля опорника по частотомеру (естественно, поверенному или откалиброванному любым доступным способом ну хотя бы до 1E-6). Только, конечно, не напрямую с ноги генератора, а включив буфер на отдельную ногу - во многих AVR такой есть. Как вариант - через другой таймер генерить удобный для измерения сигнал и проконтролировать. 100...200 ppm - такое допустимо для пьезорезонатора, но вот чтобы столь отвратительная точность именно кварца - это даже специально найти трудновато, это какое-то особо мерзкое подвальное творчество. При правильном выборе нагрузочных конденсаторов сразу должно бы попасть ну хоть в 50 ppm.

Удостовериться в правильности растактовки - тоже уже описывал метод, но это уже на совсем крайний случай.
Onkel
Цитата(Alt.F4 @ Dec 29 2015, 20:52) *
rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.
Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.
Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?

если "иногда проскакивает нормальная длительность" - предделитель сбрасываете? может какой другой фрагмент кода играется с предделителем?
У меня часы на кварце 14.ххх на атмеге 8а имеют нестабильность 2-3 с в месяц, подгоночный параметр примерно 10^-5.
akl
Рядовым кварцам производитель, как правило, дает гарантированную нестабильность частоты; про точность установки оной скромно умалчивается. Вот здесь на кварце написано 8.000к на самом деле 8'006'760Гц(конденсаторов нет, корпус кварца соединен с лапой GND контроллера).
rx3apf
Так и должно быть - если резонатор не в расчетном включении (без нагрузочных конденсаторов), то результат далек от написанного на корпусе. Приличные производители регламентируют как температурную стабильность, так и начальную точность. У топикстартера конденсаторы есть (даже если не вполне точно выбран номинал), поэтому отклонение больше 50 ppm совершенно неприлично.
Alt.F4
Насколько мне известно, емкость на кварце нужна для гарантированного запуска оного и исключает возможность работы на не той гармонике, на саму частоту не влияют..
rx3apf
Влияют, да еще как ! И если не обеспечить требуемые нагрузки, частота генерации заведомо будет отличаться от маркировке на корпусе кварца.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.