вторник, 12 марта 2013 г.

Таймер/счетчик 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:
7
6
5
4
3
2
1
0
COM0A1
COM0A0
COM0B1
COM0B0
-
-
WGM01
WGM00

Биты 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:
7
6
5
4
3
2
1
0
FOC0A
FOC0B
-
-
WGM02
CS02
CS01
CS00

Биты 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:
7
6
5
4
3
2
1
0
-
-
-
-
-
OCIE0B
OCIE0A
TOIE0

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

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

Регистр TIFR0:
7
6
5
4
3
2
1
0
-
-
-
-
-
OCF0B
OCF0A
TOV0

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