Перейти к содержанию
    

Настройка TCNT1 и регистр сравнения OCR1A

Здравствуйте.

 

Задача считать 5мс (кварц 1152кГц).

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

 

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

Уже голову сломал, как такое получается?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каким образом измерялся интервал ? Может быть, проблема в измерении ? Или так неудачно выбраны нагрузочные конденсаторы опорного кварца, что отклонение столь велико (170E-6, если конденсаторы не поставить, вполне возможно, IMHO).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте.

 

Задача считать 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 периодов (интервалов), и всё сначала от нуля.

Изменено пользователем gerber

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вот тот самый дополнительный цикл и появляется. Поэтому надо настраивать OCR на одну единицу меньше (т.е. на 5759 в данном случае). И в даташите этот момент тоже есть (см. формулу расчета частоты генерации в режиме CTC).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее надо писать OCR1A=5759, однако ровно 5мс получаю только при OCR1A=5760.

Поэтому надо настраивать OCR на одну единицу меньше (т.е. на 5759 в данном случае).

:wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:wacko:

Потому и вопрос - как измерялся интервал времени. И нужно знать _точное_ значение опорной частоты (а не то, что написано на корпусе кварца). В самом тяжелом случае выявить проблемы можно, измеряя интервалы по тактам (формируя внешний клок и контролируя изменение состояния OCx на ноге), благо что архитектура статическая и нет ограничений на нижнюю границу тактовой. Зато вопрос снимается сразу и совершенно однозначно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Замерял осциллографом системную частоту с ножки CKOUT, в итоге период 867.8ns, что является частотой ~1152,339кГц.

Когда я щелкал по 5мс, то один шаг получался около ~200кГц, вот в итоге и вся магия.

 

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

 

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

 

WP_20151228_002.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этого, в общем-то, и следовало ожидать. Хотя да, отклонение от номинала устрашающее. Нагрузочные-то конденсаторы у кварца какого номинала ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нагрузочная емкость по даташиту кварца 20pF.

На плате стоит по 18pF из расчета, что паразитная примерно 10pF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда просто неприлично большое отклонение. Или кварц исключительно паршивый, или, возможно, врет скоп...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.

Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.

Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы начал с контроля опорника по частотомеру (естественно, поверенному или откалиброванному любым доступным способом ну хотя бы до 1E-6). Только, конечно, не напрямую с ноги генератора, а включив буфер на отдельную ногу - во многих AVR такой есть. Как вариант - через другой таймер генерить удобный для измерения сигнал и проконтролировать. 100...200 ppm - такое допустимо для пьезорезонатора, но вот чтобы столь отвратительная точность именно кварца - это даже специально найти трудновато, это какое-то особо мерзкое подвальное творчество. При правильном выборе нагрузочных конденсаторов сразу должно бы попасть ну хоть в 50 ppm.

 

Удостовериться в правильности растактовки - тоже уже описывал метод, но это уже на совсем крайний случай.

Изменено пользователем rx3apf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

rx3apf, вручную по скопу особо не определить по рискам, сколько там тиков, но в авто режиме видно, что иногда проскакивает нормальная длительность, а иногда меньше, ну и в общей сумме частота все-таки съезжает в большую сторону.

Заводил эти тики на часовой таймер, за пару часов набегала разница, поэтому все-таки кварц такой, может уронили где, хотя перепаял на другой, картина особо не изменилась.

Я вот никогда измерял частоту кварцев, как и большинство скорее всего, может это нормальная вообще практика у дешевых кварцев иметь разбежку в 100-200ppm?

если "иногда проскакивает нормальная длительность" - предделитель сбрасываете? может какой другой фрагмент кода играется с предделителем?

У меня часы на кварце 14.ххх на атмеге 8а имеют нестабильность 2-3 с в месяц, подгоночный параметр примерно 10^-5.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рядовым кварцам производитель, как правило, дает гарантированную нестабильность частоты; про точность установки оной скромно умалчивается. Вот здесь на кварце написано 8.000к на самом деле 8'006'760Гц(конденсаторов нет, корпус кварца соединен с лапой GND контроллера).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так и должно быть - если резонатор не в расчетном включении (без нагрузочных конденсаторов), то результат далек от написанного на корпусе. Приличные производители регламентируют как температурную стабильность, так и начальную точность. У топикстартера конденсаторы есть (даже если не вполне точно выбран номинал), поэтому отклонение больше 50 ppm совершенно неприлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...