Управление таймером attiny13. Использование таймера timer0

В этой статье я подробно разберу таймер микроконтроллера attiny13 (он же attiny13a) он же обладает единственным восьмибитным таймером timer0, у которого настооолько много всяких режимов, что эта мнимая восьмибитная простота превращается только в одно слово - ашалеть.
Статья разбита на раздел с общим описанием и поэтапных программ, который тестирует различные режимы таймера. Активно представлены ассоциации в виде животных для лучшего запоминания структуры регистров таймера.
Если вам нужны быстрые примеры, а не этот datasheet, то вам сюда: Задержка времени на attiny13
Что такое таймер Timer0 в микроконтроллере attiny13
Timer0 - это набор адресов регистров в памяти микроконтроллера, которые каким-либо образом связаны с таймером. Для attiny13 это довольно незначительное количество. Перечислю ниже.
Регистры таймера Timer0 (TC0) микроконтроллера attiny13
Таблица 1 - Все зависимые регистры таймера timer0 для микроконтроллера attiny13 (в порядке упоминания в datasheet)
| Название в файле tn13def.inc | Описание |
| |
Управление таймером (начало) - Настройка спец режимов шим - Настройка Канал А и канала Б для дрыгоножки |
| |
Управление таймером (середина) - Настройка источника тактовых импульсов - Настройка делителя частоты для увеличения значения таймера |
| |
Собственно значение таймера, которое можно прочитать в основном потоке программы или установить его. Так как таймер у нас 8 битный значения в нем изменяются от 0 до 255 |
| |
Для сравнения значения таймера со значением этого регистра и вызова прерывания (Канал A) |
| |
Для сравнения значения таймера со значением этого регистра и вызова прерывания (Канал B) |
| |
Управление таймером (конец) - Все что связанно с настройкой прерываний |
| |
Посмотреть от какого прерывания сработал таймер |
TCCR0A - регистр управления
Регистр управляет настройками режимов
ШИМ генерации и для управление передачей состояния
ШИМ на ножки 5 и 6 микроконтроллера attiny13. Итак посмотрим на детальную расшифровку.
- контролировать, от слова control
- ШИМ, сигнал ШИМ больше похож на червяка
TCCR0A (Timer/Counter Control Register) регистр управления, который делится на три абстрактных подрегистра по 2 бита. Структура регистра выглядит следующим образом:

Коротко о каждом подрегистре представлена в таблице ниже
| WGM0 | Задает спец режимы работы таймера (нормальный, дрыгоног, дрыгосравнить, и т.д.) |
| COM0A | Настройка режима работы ножки OC0A для работы жабы |
| COM0B | Настройка режима работы ножки OC0B для работы жабы |
WGM0 - подрегистр TCCR0A и TCCR0B, режимы таймера

Отвечает за режим генерации формы импульсов таймера при различных обстоятельствах. Поэтому раскинулся аж на два регистра TCCR0A и TCCR0B, который итого занимает 3 бита (а находится в двух по 8 бит каждый). Поэтому рассматривается в общей таблице. Но часть таблицы будет выделанная серым цветом, она отвечать только за то, что включен доп вариант работы WGM00, WGM01 в регистре TCCR0B установлен бит WGM02. Полное описание режимов в datasheet (11.7 Modes of Operation).
Отдельно коснусь обозначений
TOP - где брать значения для сработки, может напрямую из константы 0xFF или из регистра жабы
OCR0
MAX - для tiny 0xFF, т.е. максимальное для одного байта
BOTTOM - 0x00, т.е. просто 0
| Режим | WGM02 | WGM01 | WGM00 | Описание | TOP | Когда обновить OCR0 | Установка флага TOV на |
| 0 | 0 | 0 | 0 | Normal (по умолчанию) Счетчик |
0xFF | немедленно | MAX |
| 1 | 0 | 0 | 1 | PWM ШИМ, возможен с коррекцией фазы |
0xFF | TOP | BOTTOM |
| 2 | 0 | 1 | 0 | CTC Очистить таймер в режиме сравнения |
OCRA | немедленно | MAX |
| 3 | 0 | 1 | 1 | Fast PWM Быстрый ШИМ |
0xFF | TOP | MAX |
| 4 | 1 | 0 | 0 | Reserved Зарезервировано (ничего не делает) |
- | - | - |
| 5 | 1 | 0 | 1 | RWM ШИМ, возможен с коррекцией фазы |
OCRA | TOP | BOTTOM |
| 6 | 1 | 1 | 0 | Reserved Зарезервировано (ничего не делает) |
- | - | - |
| 7 | 1 | 1 | 1 | Fast PWM Быстрый ШИМ |
OCRA | TOP | TOP |
COM0A регистр конфигурации ноги OC0A

Конфигурируется при различных режимах Обычный (таб. 1), ШИМ (таб. 2), ШИМ коррекцией фаз (таб. 3)
Таблица 1 - Режим обычный WGM02 0x0
| COM0A1 | COM0A0 | Состояние ноги OC0A (ножка номер 5) |
| 0 | 0 | Ножка выключена (туда не подаются импульсы) |
| 0 | 1 | Если изменяет состояние ножки 5 на противоположное (0 на 1, 1 на 0) |
| 1 | 0 | Если установить ножку 5 в 0 (сбросить) |
| 1 | 1 | Если установить ножку 5 в 1 (установить) |
Таблица 2 - Режим ШИМ (PWM)
| COM0A1 | COM0A0 | Состояние ноги OC0A (ножка номер 5) | |
| 0 | 0 | Ножка выключена (туда не подаются импульсы) |
|
| 0 | 1 | Ножка выключена (туда не подаются импульсы) |
Только когда WGM02 0x0 |
| 0 | 1 | Если изменяет состояние ножки 5 на противоположное (0 на 1, 1 на 0) |
Только когда WGM02 0x1 |
| 1 | 0 | Если установить ножку 5 в 1 (установить) Если установить ножку 5 в 0 (сбросить) |
Неинверсный режим
|
| 1 | 1 | Если установить ножку 5 в 0 (сбросить) Если Установить ножку 5 в 1 (установить) |
Инверсный режим
|
Таблица 3 - Режим ШИМ c коррекцией фазы (PWM)
| COM0A1 | COM0A0 | Состояние ноги OC0A (ножка номер 5) | |
| 0 | 0 | Ножка выключена (туда не подаются импульсы) |
|
| 0 | 1 | Ножка выключена (туда не подаются импульсы) |
Только когда WGM02 0x0 |
| 0 | 1 | Если изменяет состояние ножки 5 на противоположное (0 на 1, 1 на 0) |
Только когда WGM02 0x1 |
| 1 | 0 |
Если Если |
|
| 1 | 1 |
Если Если |
COM0B регистр конфигурации ноги OC0B

Конфигурация и описание этого регистра идентична конфигурации COM0A, поэтому здесь я ничего писать не буду.
Единственное что там нужно заменить:
COM0A0 - COM0B0
COM0A1 - COM0B1
Ножка 5 - Ножка 6
OCR0A - OCR0B
TCCR0B - регистр управления
Самый важный регистр из всех которые тут тока есть. Собственно отсюда и происходит включение таймера. Сердце от которого запитывается timer0. Так как для включения таймера нужен источник сердцебиения, то выбором его он и занимается.
- контролировать, от слова control
- сердце, бьется в такт

TCCR0B состоит из 3 спаянных регистров, регистр WGM02 который вообще начинается в регистре
TCCR0A,
регистр CS0 который выбирает источник тактирования или выключает таймер.
CS0 - регистр включения и выбор источника тактирования

Что нужно чтобы сердце работало? Правильно, включить его. Вот для этих целей служит таблица выбора источника тактирования с внутренним предделителем. Для настройки предделителя и за одно включения и служит этот регистр.
| CS02 | CS01 | CS00 | Описание |
| 0 | 0 | 0 | Таймер выключен (по умолчанию) |
| 0 | 0 | 1 | подключить источник тактирования к внутреннему тактовому генератору CLK Увеличение |
| 0 | 1 | 0 | CLK/8 Увеличение |
| 0 | 1 | 1 | CLK/64 Увеличение |
| 1 | 0 | 0 | CLK/256 Увеличение |
| 1 | 0 | 1 | CLK/1024 Увеличение |
| 1 | 1 | 0 | Внешний источник тактирования от 7 (T0) ножки attiny13 по спаду сигнала |
| 1 | 1 | 1 | Внешний источник тактирования от 7 (T0) ножки attiny13 по нарастанию сигнала |
(статья недописана)
Для того чтобы задать вопрос автору, заходи и напиши комментарий в нашу группу Телеграмм https://t.me/esp32stm32attiny13