Характеристики таймера/счетчика T0 (8 бит):
Биты COM0A1 (7) и COM0A0 (6) влияют на то, какой сигнал появится на выводе OC0A (12 ножка) при совпадении с A (совпадение значения счетного регистра TCNT0 со значением регистра сравнения OCR0A):
1. Обычный режим
- Два независимых выхода по совпадению
- Таймер сброса при совпадении
- Изменяемый период ШИМ сигнала
- Фазовый корректор ШИМ сигнала
- Тактовый генератор
- Три независимых источника прерывания
Регистры таймера/счетчика 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. Режим ШИМ
Биты FOC0A (7) и FOC0B (6) регистра TCCR0B принудительно устанавливают значение на выводах OC0A и OC0B.
Биты OCIE0B (2) и OCIE0A (1) разрешают прерывания при совпадении с A и B, а бит TOIE0 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.
Биты OCF0B (2), OCF0A (1) и TOV0 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - совпадение с A, B или переполнение.
- 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 или переполнение.
01 - если бит WGM02 регистра TCCR0B установлен в 0, вывод OC0A не функционирует
ОтветитьУдалить01 - если бит WGM02 регистра TCCR0B установлен в 0, изменение состояния вывода OC0A на противоположное
Что то мне подсказывает, что во втором абзаце нужно отредактировать на "установлен в 1"