Смекни!
smekni.com

Микроконтроллеры AVR (стр. 4 из 15)

Сброс

Сброс – это, по сути, одна из форм прерываний, вызывающая перезапуск микроконтроллера (аппаратная инициализация всех регистров управления и периферийных устройств и выполнение программы, начиная с адреса 0x0000). Вектор сброса всегда расположен самым первым.

Возможны следующие варианты сброса:

-сброс при включении питания;

-внешний сброс – сигнал сброса подается на соответствующий вывод микроконтроллера;

-сброс от сторожевого таймера – микроконтроллер сбрасывается по истечению времени, заданного сторожевым таймером, если этот таймер был разрешен.

"Спящие" режимы процессора

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

Переход в "спящий" режим реализуется по ассемблерной команде sleep. В случае микроконтроллеров AVR, при этом должен быть предварительно установлен в лог. 1 разряд SE (разряд 5) регистра управления MCUCR.

Когда во время режима пониженного энергопотребления происходит прерывание, центральный процессор выходит из "спящего" режима, выполняет подпрограмму обработки прерывания и продолжает выполнение программы с команды, следующей после команды sleep. Если во время режима пониженного энергопотребления поступает сигнал сброса, то центральный процессор выходит из "спящего" режима и продолжает выполнение программы с команды, расположенной по адресу $000 в области команд.

Для микроконтроллеров AVR может быть выбран один из двух "спящих" режимов:

-В ждущем режиме (Idle Mode) работа процессора приостанавливается, но таймер/счетчик, сторожевой таймер, система прерываний и тактирования остаются активными. Благодаря этому, центральный процессор может быть возвращен в обычный режим работы с помощью сторожевого таймера, таймера/счетчика или внешнего прерывания.

-В режиме пониженного энергопотребления (Power Down Mode) системный осциллятор (а значит и весь микроконтроллер) находится в отключенном состоянии. В таком режиме с помощью внутреннего RC-генератора колебаний может включаться лишь сторожевой таймер со своим собственным обеспечением тактовой частотой. Активный сторожевой таймер по истечении времени задержки опять переводит микроконтроллер в нормальное состояние. Если сторожевой таймер также отключен, то в нормальное состояние его может перевести только внешний сигнал сброса или внешнее прерывание.

Выбор одного из "спящих" режимов в микроконтроллерах AVR осуществляется с помощью разряда SM (разряд 4) регистра управления MCUCR. Если разряд SM установлен в лог. 1, то микроконтроллер переводится в режим пониженного энергопотребления последующей командой sleep, если же разряд SM сброшен в лог. 0, то последующей микроконтроллер переводится в ждущий режим в том случае, если ранее в регистре MCUCR был установлен разряд SE.

Таймеры/счетчики

Таймеры/счетчики – это, наиболее часто используемые модули микроконтроллеров. С их помощью можно измерять промежутки времени и частоту, определять ширину импульсов, вычислять скорость и т.д. Хотя они и используются для измерения времени, на самом деле речь идет об обычных двоичных счетчиках.

В микроконтроллерах AVR и PIC используются как 8-ми, так и 16-ти разрядные таймеры/счетчики. Разрядность определяет момент переполнения счетчика (возврат в нулевое состояние). Так, для 8-разрядного счетчика переполнение наступает, когда счет достигает 255, а для 16-разрядного – 65535.

Количество таймеров/счетчиков и их разрядность в микроконтроллерах отличается в зависимости от модели, и потому в данном разделе будут рассмотрены только общие вопросы, имеющие отношение к использованию таймеров/счетчиков.

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

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

Таймеры/счетчики микроконтроллеров AVR

В микроконтроллерах AVR могут использоваться следующие таймеры/счетчики:

-8-ти или 16-ти разрядный Т/С0;

-16-разрядный Т/С1;

-8-ми или 16-ти разрядный Т/С2.

Регистры управления в этом случае называются TCCR0, TCCR1 и TCCR2 (расположены в области ввода/вывода), а режим работы и коэффициент деления частоты осциллятора определяется с помощью разрядов CSx2, CSxl и CSx0 этих регистров. К примеру, для таймеров/счетчиков Т/С0 и Т/С1 выбор режима и входного такта можно определить с помощью комбинаций разрядов, представленных в табл. 4.1.

Таблица 4.1. Выбор режима и входного такта для Т/С0 и Т/С1

CSx2 CSx1 CSxO Описание
0 0 0 Останов
0 0 1 Режим "Таймер", такт = такт системной синхронизации
0 1 0 Режим "Таймер", такт = такт системной синхронизации / 8
0 1 1 Режим "Таймер", такт = такт системной синхронизации / 64
1 0 0 Режим "Таймер", такт = такт системной синхронизации / 256
1 0 1 Режим "Таймер", такт = такт системной синхронизации /1024
1 1 0 Режим "Счетчик", такт – внешний на входе Т0 (Т1), активный фронт сигнала – ниспадающий
1 1 1 Режим "Счетчик", такт – внешний на входе Т0 (Т1), активный фронт сигнала – нарастающий

Для Т/С2 комбинации разрядов CS22, CS21 и CS20 могут иметь разное значение для различных моделей микроконтроллеров.

Т/С0

Схема работы таймера/счетчика Т/С0, представлена на рис. 4.1.

Как только с помощью разрядов CS00, CS01 и CS02 регистра TCCR0 (адрес 0x33 в области ввода/вывода, адрес 0x53 в SRAM) для делителя частоты будет установлена комбинация, отличная от 000, таймер/счетчик Т/С0 по каждому импульсу, поступающему на тактовый вход, начинает увеличивать на единицу содержимое регистра TCNT0 (адрес 0x32 в области ввода/вывода, адрес 0x52 в SRAM). Когда состояние счетчика в регистре TCNT0 изменяется с 0xFF на 0x00, в регистре TIFR (адрес 0x38 в области ввода/вывода) устанавливается флаг переполнения TOV0.

Рис. 4.1. Схема таймера/счетчика Т/С0

Кроме разрядов CS00, CS01 и CS02 регистра TCCR0 (разряды 0-2), никакие другие разряды этого регистра не используются.

Таймер/счетчик Т/С0 хорошо подходит для оценки временных интервалов. Для этого в ходе выполнения программы в регистр TCNT0 записывается исходное значение. Затем может быть запущен Т/С0 с требуемым входным тактом. Программа ожидает появления в регистре TIFR флага переполнения TOV0, указывающего на то, что требуемое время истекло.

Предположим частота системной синхронизации составляет 4 МГц, а некоторое действие должно выполняться программой каждые 0,5 с. В этом случае можно воспользоваться делением частоты на 8, что соответствует частоте тактирования 500 кГц или 2 мкс. Таким образом, на подсчет 256 тактовых импульсов счетчику потребуется 512 мкс. Это значение должно быть кратно 500 мкс, чтобы с помощью множителя 1000 в программе можно было реализовать требуемое действие в точности с периодом 500 мс. Для этого в счетчик перед началом каждого счета должно быть загружено значение 6, чтобы до переполнения выполнялся подсчет не 256, а только 250 тактовых импульсов.

Т/С1

16-разрядный таймер/счетчик Т/С1 гораздо сложнее Т/С1 (рис. 4.2).

Рис. 4.2. Схема таймера/счетчика T/C1

В дополнение к счетному регистру и регистру управления, он содержит регистр захвата по входу (ICR1) и два 16-ти разрядных регистра сравнения на выходе (в некоторых моделях микроконтроллеров регистр сравнения В отсутствует).

Рассмотрим назначение отдельных регистров:

-TCNT1 – счетный регистр (содержимое счетчика);

-TCCR1А – регистр управления для определения реакции выводов

-ОС1А/ОС1В в случае совпадения состояния счетчика в регистре TCNT1 с регистрами сравнения OCR1A/OCR1B, а также для выбора режима широтно-импульсной модуляции;

-TCCR1B – регистр управления для настройки делителя частоты, для разрешения подачи сигнала сброса для регистра TCNT1 и для управления захватом;

-ICR1 – регистр захвата по входу (при появлении на выводе ICP фронта входного сигнала, определенного как активный, текущее состояние счетчика будет перенесено в этот регистр);

-OCR1A, OCR1B – регистры сравнения; их содержимое постоянно сравнивается с состоянием счетчика. В случае совпадения выполняются действия, определенные регистром TCCR1A.

Регистр управления TCCR1A (рис. 4.3) находится в области ввода/вывода по адресу 0x2F (адрес 0x4F в SRAM).

7 6 5 4 3 2 1 0
COM1A1 COM1A0 COM1B1 COM1B0 PWM11 PWM10

Рис. 4.3. Регистр TCCR1A таймера/счетчика T/C1

Разряды СОМ1А1/СОМ1А0 и СОМ1В1/СОМ1В0 определяют состояние вывода ОС1 А/ОС 1В при совпадении содержимого регистра сравнения А/В с содержимым счетчика. Возможные настройки для режима сравнения показаны в табл. 4.2.


Таблица 4.2. Возможные варианты для работы в режиме сравнения