Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КР2 / КР2 (Влада)

.pdf
Скачиваний:
23
Добавлен:
08.04.2022
Размер:
2.12 Mб
Скачать

1. Таймеры-счётчики. Источники тактовой частоты. Регистры,

определяющие работу таймера. Предделитель таймера. Основные режимы работы таймера: стандартный счётный режим (Normal), режим сброса при совпадении. Источники прерываний таймера.

Таймеры-счётчики.

Отсчитывает время независимо от работы МК ядра и позволяет в любое время пользоваться результатами счета. Входит в состав стандартной периферии любого 8-битного МК семейства AVR. Кол-во варьируется от 1 (в мл. линейке Tiny) до 6 (в ст. линейке AtXmega).

Во всех более старших моделях как минимум 2 таймера-счетчика – Т0

и Т1.

Таймер Т0:

минимальный набор функций, зависящий от модели МК

в одних моделях может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий

в других: к этим функциям добавляется возможность генерации сигналов с ШИМ фиксированной разрядности, а также возможность работать

васинхронном режиме в качестве часов реального времени

Таймер Т1:

может использоваться как для отсчета временных интервалов, так и в качестве счетчика внешних событий

ещё может выполнять запоминание своего состояния по внешнему

сигналу

может работать в качестве ШИМ, НО уже переменной разрядности и многоканального

Таймер Т2: полностью аналогичен Т0

При наличии обоих, один может работать в асинхронном режиме,

другой – в качестве счетчика внешних событий.

1

Таймер Т3: идентичен Т1 по функциональным возможностям

Всоставе всех МК семейства имеется сторожевой таймер (Watch Dog Timer). Он позволяет избежать несанкционированного зацикливания программы, возникающего по тем или иным причинам.

ВAttiny104 таймер только один: 16-битный!!!! Поэтому всё, что тут дальше на его примере описано, за подробностями по другим МК в даташит:)

Источники тактовой частоты.

Для работы любого микроконтроллера его необходимо обеспечить стабильным источником тактовых импульсов. Для МК Atmel возможно несколько вариантов:

1. Внутренний генератор на RC-цепочке.

самый простой (+)

не требует дополнительных внешних компонентов (+)

особой точности от такого генератора ждать не стоит (-), его частота может меняться в зависимости от внешних условий в пределах 3 – 5

процентов

Для приложений, не требующих точного измерения временных интервалов, этого вполне достаточно. Для тех случаев, когда важна каждая микросекунда, стоит обратиться ко второму варианту.

2. Внешний кварцевый резонатор (или керамический, для любителей экзотики).

максимальная поддерживаемая частота – 16 МГц (помним, что энергопотребление микроконтроллера значительно возрастает с увеличением рабочей частоты)

для подключения используются специальные выводы –

XTAL1 и XTAL2

также для подключения используются дополнительные

конденсаторы емкостью в 15 – 30 пФ, в зависимости от частоты (хотя

2

существуют изощренные трёхвыводные модели резонаторов с уже встроенными конденсаторами, (+) удобно, (-) сложно купить их).

Пример подключения кварцевого резонатора приведен на рис. 1.

Рис. 1. Схемы тактирования микроконтроллера

Столь неровное значение частоты кварца (11.76 МГц) на рисунке необходимо для реализации передачи данных по последовательному интерфейсу UART на высоких скоростях.

3. Внешний генератор на RC-цепочке (вместо резонатора)

вариант, нетребовательный к точности задаваемой системной

частоты

для подключения используются те же самые выводы, что и в предыдущем случае

тактовая частота, которую даёт такая RC-цепочка, приблизительно описывается следующим выражением:

f = 1/3RC

емкость конденсатора RC-цепочки должна быть не ниже 22пФ

также, с помощью фьюз-бита CKOPT (Бит CKOPT задает размах тактового сигнала. Т.е. амплитуду колебаний на выходе с кварца) мы можем подключить между выводом XTAL1 и землёй внутренний конденсатор емкостью 36 пФ, что позволяет избавиться от внешнего конденсатора

Более подробно информация о тактировании МК с помощью RC-

цепочки описана в фирменной документации.

3

4. Внешний генератор

подключаем выход генератора к выводу XTAL1

подобный способ тактирования микроконтроллера обеспечивает максимальную точность (+)

подобные генераторы имеют достаточно высокую стоимость (-)

Для некоторых приложений (например, часы) нам может понадобиться низкочастотный кварц на 32,768 кГц. 16-битный таймер может считать до 65536 тиков, а частота часового кварца составляет половину этого значения. С помощью такого кварца можно с высокой точностью отсчитывать секундные интервалы.

Для подключения часового кварца используются отдельные выводы TOSC1 и TOSC2, причём использование дополнительных внешних конденсаторов не требуется (рис. 2).

Рис. 2 Альтернативные схемы тактирования микроконтроллера Регистры, определяющие работу таймера.

(все примеры приводятся для 16-битного таймера T1)

Основными управляющими регистрами являются регистры TCCRxn (Timer/Counter Control Register) которые определяют

1)режим работы таймера

2)значение коэффициента предделителя.

Для МК AtTiny2313 предусмотрено три управляющих регистра –

TCCR0A, TCCR0B и TCCR0C.

4

Предделитель

Тактовые импульсы нашего микроконтроллера перед тем, как они попадут в счётный регистр таймера, можно пропустить через предделитель с фиксированными значениями: 8; 32; 64; 128; 256 и 1024.

Вспомним часовой кварц с частотой в 32,768 кГц. Если эту частоту пропустить через делитель с коэффициентом 128 и подать на 8-битный таймер, то точно раз в секунду будет происходить прерывание таймера по переполнению (32768/128=256), что позволяет быстро и эффективно организовать часы реального времени.

Значение предделителя можно изменить в регистре TCCR1B, за него отвечают три бита: CS12:CS11:CS10 (Clock Select), которые как раз и определяют коэффициент деления тактовых импульсов микроконтроллера.

5

Режим работы таймера T1

Определяется состоянием четырех битов WGM10WGM13, которые

находятся в двух разных управляющих регистрах TCCR0A и TCCR0B.

6

Основные режимы работы.

Режим Normal.

наиболее простой режим работы таймеров

единственный режим в младших моделях семейства

в этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала осуществляется инкремент счетного регистра. При переходе через значение

$FF возникает переполнение, и счет продолжается со значения $00

в том же такте сигнала, в котором обнуляется регистр TCNTn,

устанавливается в «1» флаг переполнения счетного регистра TOVn

(Timer Overflow)

при равенстве счетного регистра и регистра сравнения устанавливается флаг прерывания OCFn и, если разряд OCIEn

регистра TIMSK установлен в «1», генерируется соответствующее прерывание

наряду с установкой флага при равенстве счетного регистра и регистра сравнения может изменяться состояние вывода OC0x

микроконтроллера. Это определяется разрядами COM0x1и

COM0x1 регистра TCCR0A

Режим CTC (сброс при совпадении).

счетный регистр функционирует как обычный суммирующий счетчик, инкремент которого осуществляется по каждому импульсу

тактового сигнала на входе таймера

7

(НО) максимально возможное значение счетного регистра и разрешающая способность счетчика определяется регистром сравнения

OCR1A и OCR1B

после достижения значения, записанного в регистре сравнения, счет продолжается со значения 0x0000. В том же такте сигнала, в котором обнуляется счетный регистр, устанавливается флаг прерывания TOV1 регистра TIFR

при достижении счетчиком максимального значения устанавливается флаг OCF0x регистра TIFR.

одновременно с установкой флага может изменяться состояние вывода OC0x МК. Поведение выводов определяется разрядами COM0х1 и

COM0х0 регистра TCCR0A и полностью совпадает с табличными данными,

приведёнными для предыдущего режима работы таймера

Счетный регистр.

Счётный регистр TCNT1 – именно в нём накапливаются тактовые импульсы. Поскольку используем 16-битный таймер, его счётный регистр по сути делится на два регистра – младший (TCNT1L) и старший (TCNT1H).

(!) В счётные регистры в любой момент времени можно как записывать нужные численные значения, так и считывать их. Но так как регистр состоит из двух половинок, эти операции невозможно провести за одну команду – а

8

при чтении/записи отдельных половинок может измениться значение одной из них.

(Решение) Запись в старший регистр (TCNTxH) ведется вначале в регистр TEMP. Это служебный регистр, и для пользователя он недоступен.

Затем в регистр TCNTxL записывается младший байт. В этот момент в

реальный TCNTxH заносится ранее записанное (автоматически) в регистр

TEMP значение. Получается, что два байта, старший и младший,

записываются одновременно, при этом порядок записи изменять нельзя –

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

CLI

 

// Запрещаем прерывания

OUT

TCNT1H, R16

//Старший байт записан в регистр TEMP

OUT

TCNT1L, R17

// Запись сразу в обе половинки

SEI

 

// Разрешаем прерывания

При чтении регистра TCNTx операции выполняются в обратном порядке: сначала читаем младший регистр, потом старший. Эти правила чтения/записи распространяются и на все остальные 16-битные регистры,

состоящие из двух частей.

Источники прерываний таймера.

Как только происходит переполнение счетного регистра или ещё какое-

нибудь событие, сразу же происходит вызов прерывания.

За прерывания от таймеров отвечают регистры:

TIMSK (Timer/Counter Interrupt Mask)

TIFR (Timer/Counter Interrupt Flag Register).

TIMSK – это регистр масок, биты, находящиеся в нем, локально разрешают прерывания. Если бит установлен, значит конкретное прерывание разрешено. Если бит сброшен в ноль, значит данное прерывание запрещено.

По умолчанию после системного сброса все биты регистра TIMSK сброшены в ноль.

9

Задавая коэффициент предделителя таймера и используя TOIE1 (т. е.

прерывание по переполнению таймера), мы можем с достаточно большой точностью отсчитывать необходимые нам временные интервалы.

TIFR – это непосредственно флаговый регистр. Когда какое-то прерывание срабатывает, устанавливается соответствующий ему флаг (то есть каждому из четырех прерываний регистра TIMSK соответствует свой собственный флаг регистра TIFR, так прерыванию TOIE1 соответствует флаг TOV1). Этот флаг сбрасывается на аппаратном уровне, когда программа совершает переход по вектору прерываний. Если прерывания запрещены, то флаг так и будет стоять до тех пор, пока прерывания не разрешат и программа не уйдет на их обработку.

10

Соседние файлы в папке КР2