T0 8-ми разрядный таймер/счетчик может использоваться для отсчета временных интервалов, как счетчик внешних событий или в качестве двухканального генератора 8-ми битного ШИМ сигнала.

Выводы микросхемы ATtiny13

7pin T0 Вход внешнего сигнала таймера/счетчика T0
6pin OCR0B Выход B схемы сравнения таймера T0/счетчика
5pin OCR0A Выход A схемы сравнения таймера/счетчика T0

Примечание, далее со знаком $ указан адрес регистра ввода/вывода. В адресном пространстве ОЗУ к этому адресу необходимо добавить $20. В () указан номер бита в регистре.

Надо знать:

SREG $3F - Регистр состояния

I (7) Флаг I общее разрешение прерываний

DDRB $17 - Регистр направления данных порта B

DDB0 (0) Флаг определяет направление передачи на ножке PB0. Если установлен, то выход.
DDB1 (1) Флаг определяет направление передачи на ножке PB1. Если установлен, то выход.

На ножках PB0(OC0A), PB1(OC0B) изменяется состояние при наступления прерывания по событию «Совпадение», если соответствующая ножка настроена как выход.

Регистры

TCNT0 $32 Счетный регистр
OCR0A $36 Регистр сравнения
OCR0B $29 Регистр сравнения

TCCR0A $2F - Регистр управления

COM0A1  (7)  Флаг определяет состояние вывода OC0A при наступлении события «Совпадение»
COM0A0  (6)  Флаг определяет состояние вывода OC0A при наступлении события «Совпадение»
COM0B1  (5)  Флаг определяет состояние вывода OC0B при наступлении события «Совпадение»
COM0B0  (4)  Флаг определяет состояние вывода OC0B при наступлении события «Совпадение»
  (3)  
  (2)  
WGM01  (1)  Флаг определяет режим работы таймера/счетчика
WGM00  (0)  Флаг определяет режим работы таймера/счетчика

TCCR0B $33 - Регистр управления

FOC0A  (7) Флаг Принудительное изменение состояния вывода OC0A 
FOC0B  (6)  Флаг Принудительное изменение состояния вывода OC0B
  (5)  
  (4)  
WGM02  (3)  Флаг определяет режим работы таймера/счетчика
CS02  (2)  Флаг Определяет источник тактового сигнала микроконтроллера
CS01  (1)  Флаг Определяет источник тактового сигнала микроконтроллера
CS00  (0)  Флаг Определяет источник тактового сигнала микроконтроллера

GTCCR $28 - Регистр управления предделителем таймера/счетчика

PSR10 (0) Флаг сброса предделителя
TSM (7) Флаг остановки предделителя

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

WGM02 WGM01 WGM00 Режим Модуль счета (TOP) Обновление регистров OCR0x Установка TOV0 
0 0 0 0  Normal  $FF  Немедленно  $FF
1 0 0 1  Phase correct PWM $FF  TOP  $00 
2 0 1 0  CTC (сброс при совпадении) OCR0A  Немедленно  $FF 
3 0 1 1  Fast PWM $FF  TOP  $FF 
4 1 0 0  Зарезервировано      
5 1 0 1  Phase correct PWM OCR0A  TOP  $00 
6 1 1 0  Зарезервировано      
7 1 1  Fast PWM  OCR0A TOP  TOP 

Управление выводами OC0A/OC0B

В режиме Normal, CTC

COM0A1
(COM0B1)
COM0A0
(COM0B0)
 
0 0 Таймер/счетчик ТО отключен от вывода ОС0А (OC0B)
0 1 Состояние вывода меняется на противоположное (переключение)
1 0 Вывод сбрасывается в 0
1 1 Вывод устанавливается в 1

В режиме Fast PWM

COM0A1
(COM0B1)
COM0A0
(COM0B0)
 
0 0 Таймер/счетчик ТО отключен от вывода ОС0А (OC0B)
0 1 Состояние вывода OC0A меняется на противоположное при равенстве регистров TCNT0 и OCR0A. Если WGM02=1
1 0 Вывод сбрасывается в 0 при равенстве регистров TCNT0 и OCROx. Устанавливается в 1 при достижении счетчиком максимального значения (неинвертированный ШИМ-сигнал)
1 1 Вывод устанавливается в 1 при равенстве регистров TCNT0 и OCROx. Сбрасывается в 0 при достижении счетчиком максимального значения (инвертированный ШИМ-сигнал)

Выбор источника тактового сигнала

CS02 CS01 CS00  
0 0 0 Таймер/счетчик остановлен
0 0 1 Системный тактовый сигнал (clkT0 = clkI/0)
0 1 0 clkI/O / 8
0 1 1 clkI/O / 64
1 0 0 clkI/O / 256
1 0 1 clkI/O / 1024
1 1 0 Вывод T0, счет осуществляется по спадающему фронту импульсов
1 1 1 Вывод T0, счет осуществляется по нарастающему фронту импульсов

В режиме CTC для генерации сигнала заданной частоты необходимо записать в биты СОМ0А1:СОМ0А0 значение 01. Частота генерируемого сигнала будет определяться выражением:

fOC0A=fclkI/O / 2*N*(1+OCR0A)

В режиме Fast PWM Частота генерируемого сигнала определяется выражением:

fOC0x=fclkI/O / N*256

В режиме Phase correct PWM Частота генерируемого сигнала определяется выражением:

fOC0x=fclkI/O / N*512

где N - коефициент деления предделителя (1, 8, 64, 256, 1024).

Прерывания

TIMSK0 $39 - Регистр разрешения прерываний таймера/счетчика

OCE0A (3) Флаг разрешения прерывания по событию «Совпадение А» таймера/счетчика
OCE0B (2) Флаг разрешения прерывания по событию «Совпадение B» таймера/счетчика
TOIE0 (1) Флаг разрешения прерывания по переполнению таймера/счетчика

TIFR0 $38 - Регистр флагов прерываний таймера/счетчика

OCF0A (3) Флаг наступления прерывания по событию «Совпадение А» таймера/счетчика
OCF0B (2) Флаг наступления прерывания по событию «Совпадение B» таймера/счетчика
TOV0 (1) Флаг наступления прерывания по переполнению таймера/счетчика

Векторы прерываний

TIMER0OVF $2 Прерывание №2 Переполнение таймера/счетчика Т0
TIMER0COMPA $6 Прерывание №6 Совпадение А таймера/счетчика Т0
TIMER0COMPB $7 Прерывание №7 Совпадение B таймера/счетчика Т0