Alt.F4
Dec 27 2015, 19:17
Здравствуйте.
Задача считать 5мс (кварц 1152кГц).
Настраиваю таймер в режим СТС (сброс при совпадении TCNT1 и OCR1A), т.е. надо насчитать 1152*5=5760 тактов.
Но никак не могу понять, всегда считал, что на сброс уходит один такт и по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.
Уже голову сломал, как такое получается?
Спасибо.
rx3apf
Dec 28 2015, 11:00
Каким образом измерялся интервал ? Может быть, проблема в измерении ? Или так неудачно выбраны нагрузочные конденсаторы опорного кварца, что отклонение столь велико (170E-6, если конденсаторы не поставить, вполне возможно, IMHO).
gerber
Dec 28 2015, 11:26
Цитата(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
Dec 28 2015, 14:30
И вот тот самый дополнительный цикл и появляется. Поэтому надо настраивать OCR на одну единицу меньше (т.е. на 5759 в данном случае). И в даташите этот момент тоже есть (см. формулу расчета частоты генерации в режиме CTC).
Цитата(Alt.F4 @ Dec 27 2015, 23:17)

по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.
Цитата(rx3apf @ Dec 28 2015, 18:30)

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

Потому и вопрос - как измерялся интервал времени. И нужно знать _точное_ значение опорной частоты (а не то, что написано на корпусе кварца). В самом тяжелом случае выявить проблемы можно, измеряя интервалы по тактам (формируя внешний клок и контролируя изменение состояния OCx на ноге), благо что архитектура статическая и нет ограничений на нижнюю границу тактовой. Зато вопрос снимается сразу и совершенно однозначно.
Alt.F4
Dec 28 2015, 20:59
Замерял осциллографом системную частоту с ножки CKOUT, в итоге период 867.8ns, что является частотой ~1152,339кГц.
Когда я щелкал по 5мс, то один шаг получался около ~200кГц, вот в итоге и вся магия.
Интересно только, почему такой большой ppm=294, вместо заявленных производителем +-20ppm?
з.ы. в камне настроен CKDIV8, может этот делитель так влияет? Надо попробовать посмотреть без него.
rx3apf
Dec 28 2015, 21:38
Этого, в общем-то, и следовало ожидать. Хотя да, отклонение от номинала устрашающее. Нагрузочные-то конденсаторы у кварца какого номинала ?
Alt.F4
Dec 29 2015, 16:13
Нагрузочная емкость по даташиту кварца 20pF.
На плате стоит по 18pF из расчета, что паразитная примерно 10pF.
rx3apf
Dec 29 2015, 17:37
Тогда просто неприлично большое отклонение. Или кварц исключительно паршивый, или, возможно, врет скоп...
Alt.F4
Dec 29 2015, 17:52
rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.
Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.
Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?
rx3apf
Dec 29 2015, 18:59
Я бы начал с контроля опорника по частотомеру (естественно, поверенному или откалиброванному любым доступным способом ну хотя бы до 1E-6). Только, конечно, не напрямую с ноги генератора, а включив буфер на отдельную ногу - во многих AVR такой есть. Как вариант - через другой таймер генерить удобный для измерения сигнал и проконтролировать. 100...200 ppm - такое допустимо для пьезорезонатора, но вот чтобы столь отвратительная точность именно кварца - это даже специально найти трудновато, это какое-то особо мерзкое подвальное творчество. При правильном выборе нагрузочных конденсаторов сразу должно бы попасть ну хоть в 50 ppm.
Удостовериться в правильности растактовки - тоже уже описывал метод, но это уже на совсем крайний случай.
Цитата(Alt.F4 @ Dec 29 2015, 20:52)

rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.
Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.
Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?
если "иногда проскакивает нормальная длительность" - предделитель сбрасываете? может какой другой фрагмент кода играется с предделителем?
У меня часы на кварце 14.ххх на атмеге 8а имеют нестабильность 2-3 с в месяц, подгоночный параметр примерно 10^-5.
Рядовым кварцам производитель, как правило, дает гарантированную нестабильность частоты; про точность установки оной скромно умалчивается. Вот
здесь на кварце написано 8.000к на самом деле 8'006'760Гц(конденсаторов нет, корпус кварца соединен с лапой GND контроллера).
rx3apf
Dec 30 2015, 19:14
Так и должно быть - если резонатор не в расчетном включении (без нагрузочных конденсаторов), то результат далек от написанного на корпусе. Приличные производители регламентируют как температурную стабильность, так и начальную точность. У топикстартера конденсаторы есть (даже если не вполне точно выбран номинал), поэтому отклонение больше 50 ppm совершенно неприлично.
Насколько мне известно, емкость на кварце нужна для гарантированного запуска оного и исключает возможность работы на не той гармонике, на саму частоту не влияют..
Влияют, да еще как ! И если не обеспечить требуемые нагрузки, частота генерации заведомо будет отличаться от маркировке на корпусе кварца.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.