Характеристики таймера/счетчика T1 (16 бит):
- Два независимых выхода по совпадению
- Таймер сброса при совпадении
- Один вход захвата
- Блок шумоподавления входа захвата
- Изменяемый период ШИМ сигнала
- Фазовый корректор ШИМ сигнала
- Изменяемый период ШИМ сигнала
- Тактовый генератор
- Три независимых источника прерывания
Регистры таймера/счетчика T1:
- TCNT1 - счетный регистр таймера/счетчика T1 (16 бит)
- OCR1A - регистр сравнения A (16 бит)
- OCR1B - регистр сравнения B (16 бит)
- TIMSK1 - регистр маски прерываний для таймера/счетчика T1
- TIFR1 - регистр флагов прерываний для таймера/счетчика T1
- TCCR1A - регистр управления A
- TCCR1B - регистр управления B
- TCCR1C - регистр управления C
- ICR1 - регистр захвата (16 бит)
Источником тактового сигнала для таймера/счетчика T1 может быть как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий на вход T1 (11 ножка). Если не выбрано ни одного источника тактового сигнала, то таймер/счетчик останавливается.
Регистр TCCR1A:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
COM1A1
|
COM1A0
|
COM1B1
|
COM1B0
|
-
|
-
|
WGM11
|
WGM10
|
Режим работы таймера/счетчика T1 устанавливается регистрами TCCR1A и TCCR1B
Биты COM1A1 (7) и COM1A0 (6) влияют на то, какой сигнал появится на выводе OC1A (15 ножка) при совпадении с A (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1A):
1. Обычный режим
1. Обычный режим
- 00 - вывод OC1A не функционирует
- 01 - изменение состояния вывода OC1A на противоположное при совпадении с A
- 10 - сброс вывода OC1A в 0 при совпадении с A
- 11 - установка вывода OC1A в 1 при совпадении с A
2. Режим ШИМ
- 00 - вывод OC1A не функционирует
- 01 - если биты WGM13 - WGM10 установлены в (0000 - 1101), вывод OC1A не функционирует
- 01 - если битыWGM13 - WGM10 установлены в 1110 или 1111, изменение состояния вывода OC0A на противоположное при совпадении с A
- 10 - сброс вывода OC1A в 0 при совпадении с A, установка вывода OC1A в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
- 11 - установка вывода OC1A в 1 при совпадении с A, установка вывода OC1A в 0 если регистр TCNT1 принимает значение 0x00 (инверсный режим)
3. Режим коррекции фазы ШИМ
- 00 - вывод OC1A не функционирует
- 01 - если биты WGM13 - WGM10 установлены в (0000 - 1100, 1010, 1100 - 1111), вывод OC1A не функционирует
- 01 - если битыWGM13 - WGM10 установлены в 1101 или 1011, изменение состояния вывода OC1A на противоположное при совпадении с A
- 10 - сброс вывода OC1A в 0 при совпадении с A во время увеличения значения счетчика, установка вывода OC1A в 1 при совпадении с A во время уменьшения значения счетчика
- 11 - установка вывода OC1A в 1 при совпадении с A во время увеличения значения счетчика, сброс вывода OC1A в 0 при совпадении с A во время уменьшения значения счетчика
Биты COM1B1 (5) и COM1B0 (4) влияют на то, какой сигнал появится на выводе OC0B (12 ножка) при совпадении с B (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1B):
1. Обычный режим
- 00 - вывод OC1B не функционирует
- 01 - изменение состояния вывода OC1B на противоположное при совпадении с B
- 10 - сброс вывода OC1B в 0 при совпадении с B
- 11 - установка вывода OC1B в 1 при совпадении с B
2. Режим ШИМ
Биты WGM13 (4) , WGM12 (3) регистра TCCR1B и биты WGM11 (1) , WGM10 (0) регистра TCCR1A устанавливают режим работы таймера/счетчика T1:
Биты FOC1A (7) и FOC1B (6) регистра TCCR1С принудительно устанавливают значение на выводах OC1A и OC1B.
Биты ICF1 (5), OCF1B (2), OCF1A (1) и TOV1 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - захват, совпадение с A, B или переполнение.
- 00 - вывод OC1B не функционирует
- 01 - вывод OC1B не функционирует
- 10 - сброс вывода OC1B в 0 при совпадении с B, установка вывода OC1B в 1 если регистр TCNT1 принимает значение 0x00 (неинверсный режим)
- 11 - установка вывода OC1B в 1 при совпадении с B, установка вывода OC1B в 0 если регистр TCNT1 принимает значение 0x00 (инверсный режим)
3. Режим коррекции фазы ШИМ
- 00 - вывод OC1B не функционирует
- 01 - вывод OC1B не функционирует
- 10 - сброс вывода OC1B в 0 при совпадении с B во время увеличения значения счетчика, установка вывода OC1B в 1 при совпадении с B во время уменьшения значения счетчика
- 11 - установка вывода OC1B в 1 при совпадении с B во время увеличения значения счетчика, сброс вывода OC1B в 0 при совпадении с B во время уменьшения значения счетчика
Регистр TCCR1B:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
ICNC1
|
ICES1
|
-
|
WGM13
|
WGM12
|
CS12
|
CS11
|
CS10
|
Биты WGM13 (4) , WGM12 (3) регистра TCCR1B и биты WGM11 (1) , WGM10 (0) регистра TCCR1A устанавливают режим работы таймера/счетчика T1:
- 0000 - обычный режим
- 0001 - коррекция фазы PWM, 8-бит
- 0010 - коррекция фазы PWM, 9-бит
- 0011 - коррекция фазы PWM, 10-бит
- 0100 - режим счета импульсов (OCR1A) (сброс при совпадении)
- 0101 - PWM, 8-бит
- 0110 - PWM, 9-бит
- 0111 - PWM, 10-бит
- 1000 - коррекция фазы и частоты PWM (ICR1)
- 1001 - коррекция фазы и частоты PWM (OCR1A)
- 1010 - коррекция фазы PWM (ICR1)
- 1011 - коррекция фазы и частоты PWM (OCR1A)
- 1100 - режим счета импульсов (ICR1) (сброс при совпадении)
- 1101 - резерв
- 1110 - PWM (ICR1)
- 1111 - PWM (OCR1A)
Бит ICNC1 (7) регистра TCCR1B управляет схемой подавления помех блока захвата (0 - выключена / 1 - включена).
Бит ICES1 (6) регистра TCCR1B выбирает активный фронт регистра захвата (0 - по спадающему фронту сигнала / 1 - по нарастающему фронту сигнала).
Бит ICES1 (6) регистра TCCR1B выбирает активный фронт регистра захвата (0 - по спадающему фронту сигнала / 1 - по нарастающему фронту сигнала).
Биты CS12 (2), CS11 (1), CS10 (0) регистра TCCR1B устанавливают режим тактирования и предделителя тактовой частоты таймера/счетчика T1:
- 000 - таймер/счетчик T1 остановлен
- 001 - тактовый генератор CLK
- 010 - CLK/8
- 011 - CLK/64
- 100 - CLK/256
- 101 - CLK/1024
- 110 - внешний источник на выводе T1 (11 ножка) по спаду сигнала
- 111 - внешний источник на выводе T1 (11 ножка) по возрастанию сигнала
Регистр TCCR1C:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
FOC1A
|
FOC1B
|
-
|
-
|
-
|
-
|
-
|
-
|
Биты FOC1A (7) и FOC1B (6) регистра TCCR1С принудительно устанавливают значение на выводах OC1A и OC1B.
Регистр TIMSK1:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
ICIE1
|
-
|
-
|
OCIE1B
|
OCIE1A
|
TOIE1
|
Управление прерываниями от таймера осуществляется в регистре TIMSK1.
Бит ICIE1 (5) разрешает прерывание по захвату, биты OCIE1B (2) и OCIE1A (1) разрешают прерывания при совпадении с A и B, бит TOIE1 (0) разрешает прерывание по переполнению при установке 1. Если в эти биты записать 0, прерывания от таймера/счетчика будут запрещены.
Также есть регистр флагов прерываний TIFR1, который показывает какое прерывание поступило от таймера/счетчика T0.
Регистр TIFR1:
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
-
|
-
|
ICF1
|
-
|
-
|
OCF1B
|
OCF1A
|
TOV1
|
Биты ICF1 (5), OCF1B (2), OCF1A (1) и TOV1 (0) устанавливаются в 1 в зависимости от того, какое прерывание поступило - захват, совпадение с A, B или переполнение.
Спасибо... Сижу изучаю... Почти понимаю, начинаю понимать.
ОтветитьУдалитьА какой все-таки надо задать параметр, чтобы таймер просто вызывал функцию, в которой count++ и больше ничего? Чтобы просто узнать время, которое проработал таймер до отключения?
ОтветитьУдалитьнадо не параметр задавать а настроить таймер на срабатывание по событию которое будет переходить в секцию программы обслуживания прерывания...например в вашем частном случае возможно настроить и включить таймер на режим *захват по событию* - будет считать тики опрон.частоты таймера и сохранять количество тиков в спец регистре захвата при определенных событиях - у гугла спросить он это знает...
Удалитьв тесте ошибка.
ОтветитьУдалитьВ абзаце "Биты COM1B1 (5) и COM1B0 (4) влияют на то, какой сигнал появится на выводе OC0B (12 ножка) при совпадении с B (совпадение значения счетного регистра TCNT1 со значением регистра сравнения OCR1B):" должно быть не "OC0B (12 ножка)", а "OC1B (16 ножка)"