Лекция №5
ТАЙМЕРЫ- СЧЕТЧИКИ
Общие сведения
Любой микроконтроллер серии АVR содержит несколько встроенных таймеров. Причем по своему назначению их можно разделить на две категории. К первой категории относятся таймеры общего назначения. Вторую категорию составляет сторожевой таймер. Сторожевой таймер предназначен для автоматического перезапуска микроконтроллера в случае «зависания» его программы.
Определение. Зависанием называют зацикливание программы в результате ошибки, допущенной программистом, либо в результате действия внешней помеxu.
Для каждой микросхемы нужен всего один сторожевой таймер. В любом микроконтроллере АVR такой таймер имеется.
Назначение: таймеры общего назначения используются для формирования различных интервалов времени и прямоугольных импульсов заданной частоты. Кроме того, они могут работать в режиме счетчика и подсчитывать тактовые импульсы заданной частоты, измеряя, таким образом, длительность внешних сигналов, а также при необходимости подсчитывать количество любых внешних импульсов.
По этой причине данные таймеры называют «таймеры/счетчики». В микросхемах АVR применяются как восьмиразрядные, так и шестнадцатиразрядные таймеры/счетчики. Их количество для разных микроконтроллеров изменяется от одного до четырех. Все таймеры обозначаются числами от 0 до 3.
Пример. Tiтer/Couпter0, Timer/Couпter1 и т. д. В русскоязычной литературе их чаще именуют сокращенно Т/С0, Т/С1, Т/С2, Т/СЗ. Таймеры Т/С0 и Т/С2 в большинстве микроконтроллеров - восьмиразрядные. Таймеры Т/С1 и Т/СЗ - шестнадцатиразрядные. Таймер Т/С0 имеется в любой микросхеме AVR. Остальные добавляются по мере усложнения модели.
Каждый восьмиразрядный таймер представляет собой один восьмиразрядный регистр, который для микроконтроллера является регистром ввода-вывода. Этот регистр хранит текущее значение таймера и называется счетным регистром. Шестнадцатиразрядные таймеры имеют шестнадцатиразрядный счетный регистр. Каждый счетный регистр имеет свое имя.
Счетный регистр восьмиразрядного таймера именуется TCNТx, где «х» - это номер таймера. Для таймера Т/С0 регистр называется TCNТ0. Для таймера Т/С2 - TCNТ2. Шестнадцатиразрядные регистры именуются похожим образом. Отличие в том, что каждый шестнадцатиразрядный счетный регистр для микроконтроллера представляет собой два регистра ввода-вывода. Один предназначен для хранения старших битов числа, а второй - для хранения младших битов. К имени регистра старших разрядов добавляется буква Н, а для регистра младших разрядов добавляется буква L. Таким образом, счетный регистр таймера Т/С1 - это два регистра ввода-вывода: TCNТ1H и TCNТ1L.
Счетный регистр таймера Т/С3 - это два регистра TCNТ3H и ТСNТ3L.
Микроконтроллер может записать в любой счетный регистр любое число в любой момент времени, а также в любой момент прочитать содержимое любого счетного регистра. Когда таймер включается в режим счета, то на его вход начинают поступать счетные импульсы. После прихода каждого такого импульса содержимое счетного регистра увеличивается на единицу. Счетными импульсами могут служить как специальные тактовые импульсы, вырабатываемые внутри самого микроконтроллера, так и внешние импульсы, поступающие на специальные входы микросхемы. При переполнении счетного регистра его содержимое обнуляется, и счет начинается сначала.
Любой таймер жестко завязан с системой прерываний. Вызвать прерывание может целый ряд событий, связанных с таймером. Например, существует прерывание по переполнению таймера, по срабатыванию специальной схемы совпадения. Отдельные прерывания может вызывать сторожевой таймер.
Предделители таймеров/счетчиков
Как уже говорилось ранее, каждый таймер микроконтроллера может работать от двух разных источников тактовых импульсов. Либо это внешние импульсы, либо импульсы, вырабатываемые внутренней схемой микроконтроллера. Какой бы источник сигналов ни был выбран, перед тем, как попасть на вход таймера, этот сигнал проходит схему предварительного делителя. Предварительный делитель предназначен для того, чтобы расширить диапазон формируемых частот и длительностей таймера. Каждая микросхема АVR имеет свою структуру предварительного делителя для таймеров/счетчиков. Упрощенная схема одного из вариантов предварительного делителя приведена на рис. 5.1.
Как видно из приведенных схем, в микроконтроллеры интегрированы 10- ступенчатый делитель и мультиплексоры, осуществляющие подключение соответствующего выхода делителя ко входу счетчиков.
С выходов делителя снимаются сигналы СLК/8, CLK/64, CLK/256 и CLK/1024. В схеме имеют место цепи, через которые на вход таймера могут поступать внешние импульсы Т0 и Т1.
Рис.5.2
В режиме работы «Счетчик», в качестве активного фронта с помощью мультиплексора может быть выбран нисподающий или нарастающий фронт внешнего импульса на входах Т0 и Т1. При таком режиме внешний сигнал Т0 (как и Т1) синхронизируется с тактом системной синхронизации СLК внутреннего кварцевого осциллятора. Для этого внешний сигнал проверяется в течение каждого нарастающего фронта СLК (рис.5.2).
Рис.5.2.
На рис. 5.2 показаны различные сигналы, синхронизируемые сигналом CLK, при этом необходимо отметить, что только сигнал А синхронизируется без потери информации. Это необходимо учитывать при выборе частоты работы МК.
Все счетные сигналы поступают на входы данных мультиплексора. На адресные входы мультиплексора поступают сигналы от трех разрядов регистра управления таймером (TCCRn).
Таким образом, записывая в разряды CSn0, CSnl, CSn2 различные значения, можно выбирать один из восьми режимов работы предделителя. В зависимости от выбранного режима, на выход схемы могут поступать сигнал с одного из выходов десятиразрядного делителя, прямой сигнал с тактового генератора либо нулевой логический уровень (входа D0). В последнем случае сигнал на входе таймера будет отсутствовать, и его работа приостанавливается.
-
CSn2
CSn1
CSn0
Описание
0
0
0
Источник тактирования не выбран. (Счетчик остановлен).
0
0
1
clkI/O/1 (Не предварительного деления).
0
1
0
clkI/O/8 (Тактовый сигнал с пред. делителя).
0
1
1
clkI/O/64 (Тактовый сигнал с пред. делителя).
1
0
0
clkI/O/256 (Тактовый сигнал с пред. делителя).
1
0
1
clkI/O/1024 (Тактовый сигнал с пред. делителя).
1
1
0
Внешнее тактирование с вывода Tn. Такт по спадающему фронту сигнала.
1
1
1
Внешнее тактирование с вывода Tn. Такт по нарастающему фронту сигнала.
Здесь величиной clkI/O обозначена частота тактирования процессора.
Таким образом, схемы предделителей обеспечивают следующие восемь различных вариантов формирования счетных импульсов:
-
0 - отсутствие импульсов;
-
1 - «таймер», прямой сигнал от внутреннего генератора;
-
2...5 - «таймер», один из сигналов с делителя;
-
6 - «счетчик», инверсный сигнал с внешнего входа (активный
ниспадающий фронт);
-
7 - «счетчик», прямой внешний сигнал (активный нарастающий
фронт).
Схема, приведенная на рис. 5.1, не является стандартом для всех микроконтроллеров серии АVR. Она отражает лишь общий принцип построения предделителей. В разных моделях это сделано немного по-разному.
Как уже отмечалось, способ тактирования определяется битами CSn2:0 (Clock Select), расположенными в регистре управления TCCRnB.
16-разрядный таймер/счетчик.
Более подробно рассмотрим схему таймеров/счетчиков МК ATmega 128 на примере 16-разрядного таймера/счетчика 1. Он имеет идентичную структуру с таймером/счетчиком 3.
Блок-схема таймера/счетчика 1 приведена на рис. 5.3. Буквой «x» обозначен номер рассматриваемого таймера/счетчика (x=1).
Рис. 5.3. Блок-схема таймера/счетчика 1, 3 МК ATmega 128.
Таймер/счетчик 1 содержит базовый счетчик TCNT1H:TCNT1L (Timer/Counter 1), имеющий шестнадцать разрядов. При поступлении тактирующего сигнала на вход схемы счетчика значение базового счетчика, в зависимости от выбранного режима работы, инкрементируется или декрементируется. Кроме того, в состав таймера-счетчика входят регистры управления TCCR1A, TCCR1B, TCCR1C (Timer/Counter 1 Control Register), два разряда регистра запросов, прерывания TIFR и столько же разрядов регистра маскирования прерываний TIMSK. Регистры TIFR и TIMSK являются общими для всех таймеров-счетчиков микроконтроллера.
Разряд регистра TIFR (Timer/Counter Interrupt Flag Register) устанавливается в единичное состояние при формировании в таймере-счетчике определенного запроса прерывания. В регистре масок прерываний TIMSK (Timer/Counter Interrupt Mask Register) устанавливаются разрешения/запрещения прерываний таймера/счетчика 1. Разряд регистра TIFR сбрасывается в нулевое состояние аппаратно при переходе микроконтроллера к выполнению соответствующей прерывающей программы или программно при выполнении команды установки бита в единичное состояние.
В состав таймера/счетчика, выполняющего функцию сравнения или ШИМ, входят регистры сравнения OCR1АH:OCR1АL, OCR1BH:OCR1BL, OCR1CH:OCR1CL (Output Compare Register), а в состав таймера/счетчика, выполняющего функцию захвата, — регистр захвата ICR1H:ICR1L (Input Capture Register). Разрядность регистров OCR1 и ICR1 равна разрядности базового счетчика TCNT1.
16-разрядный таймер/счетчик 1 может получать тактовый сигнал от СLК, СLК после предварительного делителя и от внешнего вывода. Кроме того, его можно остановить. При внешнем тактировании таймера/счетчика 1 внешний сигнал синхронизируется частотой тактового генератора CPU.
Наилучшие точность и разрешение 16-разрядный таймер/счетчик 1 обеспечивает при наименьшем коэффициенте предварительного деления. С другой стороны, высокий коэффициент предварительного деления удобен при реализации таймером/счетчиком 1 низкоскоростных функций или точной синхронизации редко происходящих действий. Таймер/счетчик1 поддерживает функции сравнения выхода, используя регистры сравнения выходов А, В и C - OCR1А, OCR1В, OCR1C в качестве источников данных, сравниваемых с содержимым таймера/счетчика 1.
Таймер/счетчик 1 может быть использован в качестве 8, 9 или 10-разрядного широтно-импульсного модулятора. В этом режиме счетчик и регистры OCR1A/OCR1B/OCR1С работают как сдвоенный самостоятельный ШИМ со сцентрированными импульсами, без формирования ложных импульсов.
Функция захвата входа таймера/счетчика 1 обеспечивает захват содержимого таймера/счетчика 1 в регистр захвата входа, запускаемый внешним событием на выводе входа захвата IC1. Реальные установки захвата события определяются регистром управления таймером/счетчиком 1 TCCR1B. Кроме того, для переключения входа захвата может быть использован аналоговый компаратор. Если разрешена функция подавления шума, действительные условия переключения события захвата тестируются четырьмя выборками, прежде чем захват будет активирован. Тестирование сигнала на входном выводе производится с частотой тактирования ядра МК.