Вы находитесь на странице: 1из 33

Лекция 7

Таймеры и формирование
временных интервалов. ШИМ-
режим и сторожевой таймер

Проф. Олег Непомнящий


План лекции

1. Принципы функционирования таймеров.


2. Таймеры-счетчики внешних событий ATMega32
3. Сторожевой - WatchDog таймер
4. Таймер реального времени (RTC-timer)
5. Широтно-импульсная модуляция
6. Полезные ссылки

2
Таймеры
Таймеры предназначены для отчета временных интервалов. В
микроконтроллерах этот интервал задается записью некоторого числа в
регистр данных таймера, например в регистр TMR0. После того как таймер
стартовал он увеличивает (или уменьшает) свое значение с каждым
синхросигналом. Синхросигнал поступает на таймер через
предварительный делитель частоты (Prescaller). Причем поступает он либо
от высокостабильного, встроенного на кристалл генератора частоты (Clock
Signal), либо от внешнего источника сигнала, например от датчика приходят
импульсы (External signal). В последнем случае таймер называется
счетчиком внешних событий. После отсчета временного интервала
(достижения нуля или переполнения), таймер перезагружается
автоматически «старым числом» и вновь начинает отчет. При переполнении
он может формировать запрос на прерывание или выдавать выходной
сигнал (Overflow).
3
Что такое таймер?
Таймер/счетчик/счетчик внешних событий
Предделитель
Если таймер считает
импульсы от внешнего
тактового генератора,
или от своего
внутреннего, то их еще
можно пропустить через
предделитель. Делить
можно на 8, 32, 64, 128,
256, 1024. Также удобно
использовать
предделитель когда надо
просто получить
большую задержку.

4
Таймеры ATMega32(L)
1. На кристалле ATMega32 имеется четыре таймера:
• 8 - битный таймер - счетчик 0 (Т0)
• 16 - битный таймер - счетчик 1 (Т1)
• 8 - битный таймер - счетчик 2 (Т2)
• 8- битный сторожевой WatchDog timer

Пины T0 и T1 – это входы для тактирования Timer 0 и


Timer. При соответствующих настройках таймеры будут
тактироваться либо от встроенного на кристалл
генератора, либо от этих входов. Причем можно
настроить каким фронтом (нарастающим или
падающим) таймеры будут считать.
Timer 2 может тактироваться от внешнего кварцевого
резонатора, который подключается к выходам TOSC1 и
TOSC2 и он может работать как часы реального
времени.

5
Таймер T0 - одноканальный 8-битный
таймер-счетчик общего назначения.
Основные возможности таймера:
- Работает как обычный счетчик если тактируется от встроенного генератора;
- Можно сбрасывать при достижении заданного значения (режим сравнения);
- Можно использовать как широтно-импульсный модулятор в ШИМ-режиме.
В этом случае он работает как генератор частоты;
- Можно использовать как счетчик внешних событий;
- Можно использовать подключенный к нему 10-битный делитель частоты от
встроенного генератора;
- Может генерировать прерывания по переполнению (TOV0) и прерывание по
совпадению в режиме сравнения (OCF0).

6
Таймер T0 - одноканальный 8-битный
таймер-счетчик общего назначения.
Для работы с таймером используются следующие регистры:
TCCR0 (Timer / Counter Control Register), Это регистр управления таймером. В
нем задаётся источник частоты и режим работы;
TCNT0 (Timer / Counter Register), Регистр данных таймера. Собственно сам
счетчик в него записывается число с которого таймеру предстоит начать считать.
Он увеличивается по тактовым сигналам от встроенного генератора или от
внешнего входа T0 (Задается в регистре TCCR0);
OCR0 (Output Compare Register), регистр сравнения, содержит число, которое
сравнивается со значением TCNT0 в каждом такте, если сравниваемые значения
совпадают, то может быть следующее:
А) сгенерировано прерывание по совпадению
Б) Сигнал на пине OC0 будет инвертирован (перевернут).

7
16-разрядный таймер T1 обладает большим
функциями
Основные характеристики следующие:
- 16-битная счетчик, может работать в ШИМ - режиме;
- два независимых регистра для сравнения (A и B);
- встроенное устройство захвата числа;
- можно сбросить таймер при совпадении (автоматический перезапуск);
- встроенный ШИМ с фазовой коррекцией;
- Можно настроить ШИМ с переменным периодом;
- Можно использовать встроенный на кристалл генератор частоты;
- Можно использовать как счетчик внешних событий;
- Генерирует четыре независимых прерывания (TOV1 – по переполнению,
OCF1A и OCF1B – по двум регистрам сравнения ICF1 – по захвату).
8
Регистры для работы с 16-битным таймером T1:
- T1TCCR1A / B (Timer / Counter Control Register), два 8-битных регистра
управления таймером задают источник входного сигнала тактирования и
режимы работы;
- TCNT1 (Timer / Counter Register), a 16-ти битный регистр данных
таймера – собственно сам таймер T1;
- OCR1A / B (Output Compare Register), два 16-ти битовых регистра
сравнения. Их содержимое сравнивается с TCNT1 в каждом такте и если
значения совпадают, то в зависимости от настроек либо вызывается
прерывание либо изменяется сигнал на выходе OC1;
- ICR1 (Input Capture Register), a 16-ти битовый регистр захвата. В него
переписывается содержимое TCNT1 в момент изменения сигнала на
входе ICP1 или на выходе аналогового компаратора. Кроме того этот
регистр используется и для задания максимального числа счета - TOP.
9
Таймер T2 8-битовый таймер общего назначения с
возможностью подключения внешнего резонатора
Можно использовать как:
1.Обычный таймер счетчик;
2.Тайме со сбросом по достижению заданного значения (режим сравнения);
3.Генератор импульсов в ШИМ - режиме;
4. Источник прерываний по переполнению (TOV2) и по сравнению (OCF2).
5.Таймер с асинхронным режимом работы. То есть тактироваться не от
процессора, а от внешнего кварцевого резонатора.
В отличие от таймера T0, таймер T2 не имеет входа для приема внешнего
сигнала и, соответственно, не может использоваться в качестве внешнего
счетчика событий. Но с другой стороны, у него есть внутренний источник
тактирования с выводами для подключения кварцевого резонатора с
частотой 32 кГц, поэтому его можно использовать как - Real time clock (RTC-
timer) см. ниже. 10
Регистры для работы с таймером T2
• TCCR2 (Timer / Counter Control Register), Это регистр управления
таймером. В нем задаётся источник частоты и режим работы;
• TCNT2 (Timer / Counter Register), Регистр данных таймера. Собственно
сам счетчик в него записывается число с которого таймеру предстоит
начать считать. Он увеличивается по тактовым сигналам от встроенного
генератора;
• OCR2 (Output Compare Register), регистр сравнения, содержит число,
которое сравнивается со значением TCNT2 в каждом такте, если
сравниваемые значения совпадают, то может быть следующее:
А) сгенерировано прерывание по совпадению
Б) Сигнал на пине OC2 будет инвертирован (перевернут).
• ASSR (Asynchronous Status Register), Регистр управления асинхронным
режимом работы.
11
Вектора прерываний от таймеров ATMega32(L)
Address Labels Code Comments
0x000 rjmp RESET ; Reset Handler
0x001 rjmp EXT_INT0 ; IRQ0 Handler
0x002 rjmp EXT_INT1 ; IRQ1 Handler
0x003 rjmp TIM2_COMP ; Timer2 Compare Handler
0x004 rjmp TIM2_OVF ; Timer2 Overflow Handler
0x005 rjmp TIM1_CAPT ; Timer1 Capture Handler
0x006 rjmp TIM1_COMPA ; Timer1 Compare A Handler
0x007 rjmp TIM1_COMPB ; Timer1 Compare B Handler
0x008 rjmp TIM1_OVF ; Timer1 Overflow Handler
0x009 rjmp TIM0_OVF ; Timer0 Overflow Handler
0x00A rjmp SPI_STC ; SPI Transfer Complete Handler
0x00B rjmp USART_RXC ; USART RX Complete Handler
0x00C rjmp USART_UDRE ; UDR Empty Handler
0x00D rjmp USART_TXC ; USART TX Complete Handler
0x00E rjmp ADC ; ADC Conversion Complete Handler
0x00F rjmp EE_RDY ; EEPROM Ready Handler

12
Управляем 8-битовым таймером Т0

Нам понадобятся:
1. TIMSK (Timer/Counter Interrupt Mask Register), Здесь мы будем разрешать
или запрещать прерывания от таймера.
2. TCCR0 (Timer/Counter Control Register 0), Здесь мы будет включать нужные
режимы и задавать опорную частоту для таймера.
3. TCNT0 (Timer/Counter 0), В этот регистр мы запишем число начального
счета.
4. Бит I в регистре статуса процессора SREG будем устанавливать для
включения всех прерываний (не только от таймера).
5. Можно отслеживать прерывания от таймера в регистре TIFR
(Timer/Counter Interrupt Flag Register) но на первом этапе этот регистр нам
пожалуй не нужен.

13
8-bit timer 0
Регистр управления прерываниями таймеров
TIMSK (Timer/Counter Interrupt Mask Register)

Bit 7 — OCIE2 (разрешить прерывание по совпадению для таймера 2);


Bit 6 — ТOIE2 (разрешить прерывание по переполнению таймера 2);
Bit 5 — TICIE1 (разрешить прерывание по захвату для таймера 1);
Bit 4 — OCIE1A (разрешить прерывание по совпадению для таймера 1A);
Bit 3 — OCIE1B (разрешить прерывание по совпадению для таймера 1B);
Bit 2 — ТOIE1 (разрешить прерывание по переполнению таймера 1);
Bit 1 — OCIE0 (разрешить прерывание по совпадению для таймера 0);
Bit 0 — ТOIE0 (разрешить прерывание по переполнению таймера 0).

OCIE2 ТOIE2 TICIE1 OCIE1A OCIE1B ТOIE1 OCIE0 ТOIE0

7 0

14
8-bit timer 0
Регистр управления TCCR0 (Timer/Counter Control Register 0)
Бит 7 — FOC0 (Force Output Compare) – При записи лог. 1 в этот бит состояние вывода
микроконтроллера ОС0 изменяется в соответствии с установками битов СОМ01:СОМ00. В ШИМ -
режимах этот бит должен быть сброшен в 0.
Биты 3-6 — WGM01:0 (Waveform Generation Mode), Задают режим работы для таймера 1
Номер режима WGM0l WGM00 Режим работы таймера/счетчика Т0
1 0 0 Normal
2 0 1 ШИМ с коррекцией фазы
3 1 0 СТС (сброс при совпадении)
4 1 1 Быстрый ШИМ

Биты 5,4 — COM01:0 (Compare Match Output Mode), Определяют поведение таймера по
совпадению (см далее);
Биты 2-0 — CS02:0 (Clock Select), Выбор опорной тактовой частоты (см далее).

COM01 COM00

FOC0 WGM11 WGM10 WGM01 WGM00 CS02 CS01 CS00

7 6 5 4 3 2 1 0 15
8-bit timer 0
TCCR0 (Timer/Counter Control Register 0)
Биты 2-0 — CS02:0 (Clock Select), Выбор источника тактовой частоты.

- - - - - CS02 CS01 CS00

7 0 16
8-bit timer 0
TCCR0 (Timer/Counter Control Register 0)
Биты 5-4 — Биты 5,4 — COM01:0 (Compare Match Output Mode), Определяют поведение
таймера по совпадению

- - COM01 COM00 - - - -

7 6 5 4 3 2 1 0 17
8-bit Timer 0 – Простая программа
.include “m32adef.inc”
.org $000 rjmp Init ;Вектора ;продолжение программы
.org $009 rjmp T_OWF; переполнение Т0
Init: out TCNT0,r20
ldi r20,0 ; Timer 0 ldi r20,0b00000101 ;Т0 – включить
out TCCR0,r20 ; стоп машина out TCCR0,r20 ; с опорной
ldi r16,high(RAMEND) ;Установка ; частотой СК/1024
out SPH,r16 ;указателя ldi r20,0b11001100 ; 4 LED вкл 4 выкл
ldi r16,low(RAMEND) ;стека sei ;включить все прерывания
out SPL,r16 main:
ser r20 ;r20:=255 out PORTB,r20 ; на светодиоды
out DDRB,r20 ;LED rjmp main
out PORTB,r20 ;выключить
ldi r20,0b00000001 ;Timer 0 ;Прерывание по переполнению таймера
;вкл прерывания
out TIMSK,r20 ; T_OWF:
ldi r20,200 ; задать число com r20 ;инвертировать R20
; начального счета reti ;выход из прерывания
18
Как рассчитать таймер ?
Задача - организовать задержку длительностью 10мс (0.001сек) в системе с
опорной частотой 10 МГц и использовать при этом 8-битный таймер.
Решение - Сколько раз должен переключится таймер при тактовой частоте 10
МГц. Переведем в герцы и рассчитаем
10 000 000 (Гц)* 0,001(сек) = 10 000 (раз) !!! НО это невозможно, так как таймер 8-
битный, то есть он может считать только 256 раз.
Выбираем коэффициент деления: 10 000 / 64 = 156,25 — это приемлемо для 8-
битного таймера, так как 64 x 156 = 9984, что близко к желаемому значению.
Остается еще подождать (Задержать таймер) на 16 тактов до 10 000. Это можно
сделать если поместить 16 команд NOP в подпрограмму обслуживания
прерывания от таймера. Одна команда NOP выполняется за 1 такт и … НИЧЕГО
НЕ ДЕЛАЕТ – Очень полезно не правда ли?
Что бы таймер «считанул» 156 раз нам нужно записать в него число 100, потому
что 256 - 156 = 100. Это и позволит таймеру отсчитать 156 раз.
Ответ В таймер нужно записать число 100 и задать коэффициент деления 64. При
этом необходимо добавить задержку на 16 тактов.
19
Изготовление тахометра

Сигнал внешнего события — это сигнал от датчика, который установлен на валу двигателя и
генерирует импульс для каждого оборота вала. Таймер TMR0 - отсчитывает 1 минуту, а
таймер TMR1 - считает входящие импульсы в течение этой минуты. Через минуту таймеры
ТМR0 переполнится и сформирует запрос на прерывание в процессор. Процессор
остановит все таймеры и считывает содержимое TMR1. Получаем количество оборотов в
минуту. Остается только вывести результат на панель
20
Широтно-импульсная модуляция (PWM)

ШИМ – это сигнал с различными интервалами ON и


OFF сигнала (различными продолжительностями
включения). Время, в течение которого сигнал
имеет высокий уровень, называется временем
включения (“on time”), а время, в течение которого
сигнал имеет низкий уровень - время выключения
(“off time”). Коэффициент заполнения (скважность)
ШИМ – Это процент времени, в течение которого ШИМ
сигнал имеет высокий уровень
Быстрый ШИМ - Fast PWM

В этом режиме счетчик ведет отсчет от нуля до 255 (8-битный таймер),


после достижения переполнения он сбрасывается до нуля и счет
начинается снова. Когда значение в счетчике достигает значения
регистра сравнения, соответствующий вывод OCxx сбрасывается в
ноль. Когда счетчик очищается, этот вывод устанавливается на 1.
22
ШИМ с коррекцией фазы Phase Correct PWM

В этом режиме таймер работает


аналогично, но здесь счетчик считает
немного иначе - сначала от 0 до 255,
затем от 255 до 0. Выходной сигнал
OCxx очищается при первом
совпадении и устанавливается при
втором.
Но частота ШИМ при этом падает
вдвое, за счет более длительного
периода.

23
Сравнение ШИМ

При быстром ШИМе если мы начнем изменять число сравнения, то есть менять
ширину импульса мы увидим сдвиг фазы – сигнал начнется раньше или позже, хотя
закончится в то же самое время, то есть фаза (центр сигнала) сдвинется. При
коррекции фазы такого не происходит.
24
Сторожевой таймер
Сторожевые таймеры (watchdog) используются, чтобы избавится от «зависания»
программы. Если сторожевой таймер включен и загружен начальным числом, то он
начинает отсчёт от заданного значения до нуля. Если таймер достигает нуля до того,
как изменится содержимое программного счетчика, то есть процессор перейдет к
следующей команде, то произойдет общий сброс системы. Если программный
счетчик изменился то сторожевой таймер начнет отчет сначала (сбросится) и система
продолжит работу. Некоторые сторожевые таймеры имеют встроенные в них
дополнительные возможности, такие как мониторинг температуры и напряжения
питания.
Часы реального времени RTC (Real Time Clock)
Иногда возникают ситуации, когда необходимо точно
спланировать выполнение различных операций во
времени, не только в секундах и часах, но и в днях.
Несмотря на то, что часы реального времени могут
быть реализованы без использования
специализированных устройств, использование
специализированной схемы для RTC позволяет добиться
меньшего энергопотребления, освободить центральный
процессор для критичных по времени задач и обеспечить
более высокую точность.
Например, приемники GPS могут ускорить процесс
активации, сравнив время в своих часах реального
времени со временем последнего приема сигнала со
спутника (если предыдущая активация была несколько
часов назад, то ранее найденные спутники все еще могут
быть и определение координат начнется быстрее).
26
Часы реального времени RTC (Real Time Clock)
Иногда требуется отследить конкретное время наступления
события. Модуль часов реального времени на литиевой батарее
позволяет сохранять текущую дату независимо от наличия питания
на самом устройстве.
Модуль часов представляет собой небольшую плату, которая
содержит микросхему (DS1307, DS1302, DS3231), а также механизм
для установки аккумулятора. Часы ведут обратный отсчет в удобных
для человека единицах измерения - минутах, часах, днях недели и
других, в отличие от обычных счетчиков и генераторов часов,
которые считывают «тики».

27
Где вам пригодятся часы реального времени? В каких
приложениях ?

Почему тактовый кварцевый


резонатор, подключенный к
тактовому таймеру, имеет
строго определенную тактовую
частоту 32 768 Гц?

LET’S FIND OUT!


28
Объяснение!
• Почему кварцевые резонаторы с частотой 32768Гц
называют часовыми? Да, все очень просто - 32768 -
это двойка в пятнадцатой степени. Следовательно,
пятнадцатиразрядный счетчик, работающий на
частоте 32768 Гц, будет переполняться раз в секунду.

!"
32 768 = 2

29
Определения
Таймер - устройство, способное отсчитывать временной интервал и
генерировать сигнал по его завершении;
RTC (Real Time Clock) - электронное устройство, предназначенное для
регистрации хронометрических данных (текущее время, дата, день
недели и т. д.);
ШИМ (широтно-импульсная модуляция) - это режим работы таймера в
котором он генерирует выходной сигнал (импульс) переменной ширины.
Коэффициент заполнения (скважность) ШИМ – Это процент времени, в
течение которого ШИМ сигнал имеет высокий уровень.

Скважность = Ширина импульса/период импульса * 100%

30
Определения
Watch Dog Timer - Сторожевой таймер - это таймер, используемый для
обнаружения зависания программы. В нормальном режиме этот таймер
сбрасывается при переходе от команды к команде. Но как только в
течение заданного интервала времени такого перехода не происходит,
этот таймер генерирует сигнал СБРОС и вся система перезапускается.
Переход отслеживается по изменению содержимого программного
счетчика, который хранит адрес текущей исполняемой команды. Если он
долгое время (которое задается содержимым Watch Dog) не меняется
происходит сброс. Обычно – это время равное четырехкратному времени
исполнения самой «длинной» команды.
Режим захвата — это особый режим работы таймера, суть которого в
следующем, при изменении логического уровня на определённом выводе
микроконтроллера, содержимое таймера переписывается в другой
регистр, который именуют регистром захвата.
31
Полезные ссылки

• https://circuitdigest.com/tutorial/what-is-pwm-pulse-width-modulation
• https://exploreembedded.com/wiki/AVR_Timer_programming
• http://www.avrbeginners.net/architecture/timers/timers.html
• https://www.maximintegrated.com/en/design/technical-documents/app-
notes/1/101.html
• http://ww1.microchip.com/downloads/en/Appnotes/Atmel-1259-Real-Time-
Clock-RTC-Using-the-Asynchronous-Timer_AP-Note_AVR134.pdf

32
Спасибо за внимание

33

Вам также может понравиться