Программирование микроконтроллеров. Часть 8-1


Режимы работы таймеров-счетчиков

Сначала решил, что эта часть будет под номером 7-2, но, когда начал писать статью, понял, что статья получиться большой и поэтому я ее решил разбить на две статьи. Соответственно у них будут номера 8-1 и 8-2.

В микроконтроллере ATmega328 есть три таймера. 2 из них по 8 бит (T0, T2) и один 16 бит (T1). Для них всех есть одинаковые режимы работы:

  • Обычный режим работы. Самый распространенный режим, когда таймер просто считает приходящие импульсы и при переполнении счетного регистра устанавливает флаг прерывания по переполнению. При этом счетный регистр сбрасывается в 0 и подсчет импульсов начинается сначала.
  • Режим подсчета импульсов (Сброс при совпадении). Также называется CTC. В этом режиме при совпадении счетного регистра с одним из регистров сравнения выставляется флаг прерывания по совпадению, счетный регистр обнуляется и подсчет начинается сначала. При этом по совпадению может меняться сигнал на выходе таймера, соответствующего используемому регистру совпадения.
  • Режим ШИМ. В данном режиме изменяется ширина импульса в зависимости от значения, записанного в регистр совпадения. Для 8-битного таймера, к примеру, если записать в регистр совпадения число 10, состояние логической единицы на выходе совпадения будет 10 тактов из 256, а логический 0 246 тактов из 256 (для не инверсного режима). В инверсном же режиме 10 тактов будет состояние логического 0 и 246 тактов логической единицы.
  • Режим коррекции фазы ШИМ. В обычном режиме ШИМ мы получаем плавающую фазу выходного сигнала. Для того, чтобы этого избежать, в режиме коррекции фазы ШИМ при достижении максимального значения, счетный регистр таймера/счетчика начинает уменьшатся. Это происходит циклически.

Это все основные режимы работы таймеров/счетчиков. К примеру, у таймера/счетчика T0 присутствуют только они.

Дополнительные режимы работы таймера/счетчика T2:

  • Асинхронный режим работы. В асинхронном режиме работы к микроконтроллеру подключается внешний кварцевый резонатор 32 кГц. Чаще всего этот режим используется для работы таймера/счетчика T2 в качестве часов реального времени.

Дополнительные режимы работы таймера/счетчика T1:

  • Режим коррекции фазы и частоты ШИМ. Отличается от режима коррекции фазы ШИМ лишь моментом обновления регистра сравнения. Регистр сравнения обновляется, когда значение счетного регистра достигает минимума.

    • Режим захвата. При поступлении сигнала от аналогового компаратора, а также на вывод ICP1 (14 ножка) значение счетного регистра сохраняется в регистре захвата, устанавливая при этом флаг прерывания по захвату.

Таймер-счетчик T0 (8 бит)

Характеристики таймера/счетчика T0 (8 бит):

  • Два независимых выхода по совпадению
  • Таймер сброса при совпадении
  • Изменяемый период ШИМ сигнала
  • Фазовый корректор ШИМ сигнала
  • Тактовый генератор
  • Три независимых источника прерывания

Регистры таймера/счетчика T0:

  • TCNT0 - счетный регистр таймера/счетчика T0
  • OCR0A - регистр сравнения A
  • OCR0B - регистр сравнения B
  • TIMSK0 - регистр маски прерываний для таймера/счетчика T0
  • TIFR0- регистр флагов прерываний для таймера/счетчика T0
  • TCCR0A - регистр управления A
  • TCCR0B - регистр управления B

Источником тактового сигнала для таймера/счетчика T0 может быть, как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий на вход T0 (6 ножка). Если не выбрано ни одного источника тактового сигнала, то таймер/счетчик останавливается.

Режим работы таймера/счетчика T0 устанавливается регистрами TCCR0A и TCCR0B.

Регистр TCCR0A:

Биты COM0A1 (7) и COM0A0 (6) влияют на то, какой сигнал появится на выводе OC0A (12 ножка) при совпадении с A (совпадение значения счетного регистра TCNT0 со значением регистра сравнения OCR0A):

1. Обычный режим

  • 00 - вывод OC0A не функционирует
  • 01 - изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC0A в 0 при совпадении с A
  • 11 - установка вывода OC0A в 1 при совпадении с A

2. Режим ШИМ

  • 00 - вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 1, изменение состояния вывода OC0A на противоположное при совпадении с A
  • 10 - сброс вывода OC0A в 0 при совпадении с A, установка вывода OC0A в 1 если регистр TCNT0 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC0A в 1 при совпадении с A, установка вывода OC0A в 0 если регистр TCNT0 принимает значение 0x00 (инверсный режим)

3. Режим коррекции фазы ШИМ

  • 00 - вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, вывод OC0A не функционирует
  • 01 - если бит WGM02 регистра TCCR0B установлен в 0, изменение состояния вывода OC0A на противоположное
  • 10 - сброс вывода OC0A в 0 при совпадении с A во время увеличения значения счетчика, установка вывода OC0A в 1 при совпадении с A во время уменьшения значения счетчика
  • 11 - установка вывода OC0A в 1 при совпадении с A во время увеличения значения счетчика, сброс вывода OC0A в 0 при совпадении с A во время уменьшения значения счетчика

Биты COM0B1 (5) и COM0B0 (4) влияют на то, какой сигнал появится на выводе OC0B (11 ножка) при совпадении с B (совпадение значения счетного регистра TCNT0 со значением регистра сравнения OCR0B):

1. Обычный режим

  • 00 - вывод OC0B не функционирует
  • 01 - изменение состояния вывода OC0B на противоположное при совпадении с B
  • 10 - сброс вывода OC0B в 0 при совпадении с B
  • 11 - установка вывода OC0B в 1 при совпадении с B

2. Режим ШИМ

  • 00 - вывод OC0B не функционирует
  • 01 – резерв
  • 10 - сброс вывода OC0B в 0 при совпадении с B, установка вывода OC0B в 1 если регистр TCNT0 принимает значение 0x00 (неинверсный режим)
  • 11 - установка вывода OC0B в 1 при совпадении с B, установка вывода OC0B в 0 если регистр TCNT0 принимает значение 0x00 (инверсный режим)

3. Режим коррекции фазы ШИМ

  • 00 - вывод OC0B не функционирует
  • 01 – резерв
  • 10 - сброс вывода OC0B в 0 при совпадении с B во время увеличения значения счетчика, установка вывода OC0B в 1 при совпадении с B во время уменьшения значения счетчика
  • 11 - установка вывода OC0B в 1 при совпадении с B во время увеличения значения счетчика, сброс вывода OC0B в 0 при совпадении с B во время уменьшения значения счетчика

Биты WGM01 (1), WGM00 (0) регистра TCCR0A устанавливают режим работы таймера/счетчика T0:

  • 00 - обычный режим
  • 01 - режим коррекции фазы ШИМ
  • 10 - режим подсчета импульсов (сброс при совпадении)
  • 11 - режим ШИМ

Регистр TCCR0B:

Биты FOC0A (7) и FOC0B (6) регистра TCCR0B принудительно устанавливают значение на выводах OC0A и OC0B.

Биты CS02 (2), CS01 (1), CS00 (0) регистра TCCR0B устанавливают режим тактирования и предделителя тактовой частоты таймера/счетчика T0:

  • 000 - таймер/счетчик T0 остановлен
  • 001 - тактовый генератор CLK
  • 010 - CLK/8
  • 011 - CLK/64
  • 100 - CLK/256
  • 101 - CLK/1024
  • 110 - внешний источник на выводе T0 (6 ножка) по спаду сигнала
  • 111 - внешний источник на выводе T0 (6 ножка) по возрастанию сигнала
    Управление прерываниями от таймера осуществляется в регистре TIMSK0.

Регистр TIMSK0:

Биты OCIE0B (2) и OCIE0A (1) разрешают прерывания при совпадении с A и B, а бит TOIE0 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.

Также есть регистр флагов прерываний TIFR0, который показывает какое прерывание поступило от таймера/счетчика T0.

Регистр TIFR0:

Биты OCF0B (2), OCF0A (1) и TOV0 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - совпадение с A, B или переполнение.


Продолжение описания работы таймеров-счетчиков Т1 и Т2 смотрите в следующей части.


Если есть вопросы и предложения по этому уроку, пишите комментарии буду рад ответить на ваши вопросы.


Часть 1
Часть 2-1 Часть 2-2
Часть 3-1 Часть 3-2
Часть 4-1 Часть 4-2
Часть 5
Часть 6-1 Часть 6-2
Часть 7


Comments 0


Привет!

Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.

Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧

14.03.2017 16:21
0