AVR Course

Следваща режим таймер T0 - режим CTC (Clear Таймер за сравнение), или "при нулиране на случайност". Таймерът в този режим е както следва.

Когато се инициализира таймер ние изчистване на тезгяха регистрирате TCNT0, а в сравнение регистрационен номер OCR0 натоварване. След това настройте желания режим STS и делител.

Таймерът стартира. На всеки часовник импулсен брояч регистър се увеличава с едно. Когато стойността на брояча регистър съответства на регистъра сравнение, задайте OCF0 брояч флаг регистър се нулира и броенето продължава от нула. Ако прекъсне случайно активиран, след като зададете флага OCF0 започне обработване рутина. С сравнение регистър в същото време нищо не се случва, това няма да промени своята стойност. Графиката по-долу обяснява таймера работа T0 в режим на СТС.

AVR Course

Практически пример. Необходимо е да се генерира квадратна вълна с честота 70 кХц на ПИН-PB1. Микроконтролера ATmega16, тактовата честота на е на 16 MHz.


Най-лесният начин да се генерира квадратна вълна, е да се обърнете към състоянието на изхода на микроконтролера да се прекъсне таймер.

Меандър променя състоянието му на два пъти през този период. Първи превключва на 1, след това върнати към 0. Следователно, за да генерира сигнал с честота 70 кХц, е необходимо да се предизвика прекъсване още два пъти, т.е. с честота от 140 кХц.

Ние се изчисли необходимото прекъсване период.

Т = 1 / F = 1/140000 = 7.143 MS

Каква е честотата на часовника с таймер, така че да може да се измери интервал от 7.143 микросекунди? Ако една от часовников механизъм е

0.1 микросекунди, ще се поберат. 71 часовник даде 7.1 микросекунди.

Ние избираме делител. В момента има пет възможности за избор 1, 8, 64, 256, 1024. На 1 получаваме сигнал часовник със срок на 0.0625 милисекунди.

Tt0 = 1 / (Fcpu / к) = 1 / (16000000/1) = 0.0625 MS

С такъв период за образуване на интервал 7.143 MS трябва 7143 / 0.0625 = 114 цикъла. Следователно подходящо съотношение. И точност е добър и битов брояч регистър липсва.

114 - редица мерки, които следва да се отчитат таймер T0. За сравнение, същата нужда да се регистрирате, за да изтеглите една мярка е по-малко, което е 113. профил, след като започне с нулев цикъл.

Както можете да видите, за начина CTC за изчисляване на стойността на регистъра за сравнение е още по-лесно, отколкото в режим Обикновен:

-изчисляване на периода на един цикъл таймер Tt0 = к / Fcpu,
- изчисляване на необходимия брой на тактови цикъла за предварително определен интервал, п = т / TTO - 1

За да се оцени точността на приемания сигнал, че е възможно да се направи обратната процедура.

F = 1 / ((OCR0 + 1) * Tt0) = 1 / ((OCR0 + 1) * (1 / (Fcpu / к)) = Fcpu / ((OCR0 + 1) * к)
F = 16000000/114 = 140,351 Hz

Всички кода за нашия проблем ще изглежда така. (Кодът се дава за IAR`a. За други компилатори необходимостта от модифициране на заглавните файлове и прекъсват манипулатор).

OC0 терминал се управлява в режим на КС, точно както в нормален режим. Заключение OC0 променя състоянието на съвпадението на стойностите на брояч регистър и сравни регистрирате. Опциите за контрол са определени бита COM01 и COM00 TCCR0 регистър.

AVR Course


Разглеждане на по-горе програма може да се промени, за да генерира квадратна вълна на ПИН OC0. В този случай, не може да се използва за прекъсване.

Чрез автоматичното нулиране брояч регистър на КС режим таймер точно измерени интервали от време. Единственият улов - в някои микроконтролери, таймери, броячи T0 не разполагат такъв режим.

AVR Course