- •Микроконтроллеры
- •Базовая информация о микроконтроллерах
- •Сущность и назначение микроконтроллера. Семейства микроконтроллеров
- •Состав микроконтроллера
- •Назначение микроконтроллера
- •Cемейства микроконтроллеров
- •Отправная точка. Микроконтроллерi8051
- •Основные характеристики микроконтроллераi8051
- •Назначение выводовi8051
- •Структурная схемаi8051
- •Микроконтроллеры семействаavrкомпанииatmel
- •Общая характеристика архитектуры, системы команд и ассемблераAvr
- •Состав семейства и основные характеристики микроконтроллеровAvr
- •Структура ассемблерного кодаAvr
- •Группы команд микроконтроллеров avr
- •Директивы ассемблераAvr
- •Список директив ассемблераAvr
- •Директива byte
- •Директива cseg
- •Директива db
- •Директива def
- •Директива device
- •Директива dseg
- •Директива dw
- •Директивы macro иEndmacro
- •Директива equ
- •Директива set
- •Микроконтроллер atmega8535
- •Характеристики, назначение выводов и структура микроконтроллера aTmega8535
- •Характеристики микроконтроллера aTmega8535
- •Назначение выводов микроконтроллера aTmega8535
- •Структура микроконтроллера aTmega8535
- •Сброс микроконтроллера aTmega8535. Режимы пониженного энергопотребления. Сигналы запроса внешних прерываний. Регистры управления
- •Сброс микроконтроллера aTmega8535
- •Регистр mcucsr (mcu Control and Status Register)
- •Регистр mcucr (mcu Control Register)
- •Режимы пониженного энергопотребления
- •Форма сигналов запроса внешних прерываний
- •Регистры общего назначения, регистр состояния и указатель стека микроконтроллера aTmega8535
- •Регистры общего назначения
- •Регистр состояния (sreg)
- •Указатель стека
- •Ввод-вывод
- •Регистры и команды ввода-вывода
- •Порты ввода-вывода
- •Прерывания
- •Источники и таблица векторов прерываний
- •Регистр gicr (General Interrupt Control Register)
- •Внешние прерывания
- •Регистр gifr (General Interrupt Flag Register)
- •Таймеры микроконтроллера aTmega8535
- •Общая информация о таймерах микроконтроллера aTmega8535
- •Множество таймеров aTmega8535
- •Регистр timsk (Timer/Counter Interrupt Mask Register)
- •Регистр tifr (Timer/Counter Interrupt Flag Register)
- •Примеры программ работы с таймером
- •Таймер t0
- •Назначение и свойства таймера t0
- •Структура таймера t0
- •Регистры таймера t0
- •Регистр tccr0 (Timer/Counter Control Register)
- •Устройство сравнения таймера t0
- •Режимы работы таймера t0
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fastPwMmode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Таймер t1
- •Назначение и свойства таймера t1
- •Структура таймера t1
- •Регистры таймера t1
- •Регистр tccr1a (Timer/Counter1 Control Register a)
- •Регистр tccr1b (Timer/Counter1 Control Register b)
- •Задание режима генерации сигнала битами wgm13:0
- •Устройство захвата (Input Capture Unit)
- •Режимы работы таймера t1
- •Список режимов работы таймера t1
- •Режим быстрой шим (fast pwm mode) таймера t1
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode) таймера t1
- •Режим шим с корректировкой фазы и частоты (Phase and Frequency Correct pwm Mode) таймера t1
- •Таймер t2
- •Назначение и свойства таймера t2
- •Структура таймера t2
- •Регистры таймера t2
- •Регистр tccr2 (Timer/Counter Control Register)
- •Устройство сравнения таймера t2
- •Режимы работы таймера t2
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fast pwm mode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Асинхронный режим работы таймера t2. Регистр assr (Asynchronous Status Register)
Устройство сравнения таймера t0
Структура устройства сравнения приведена на рис.
Рис. Структура устройства сравнения
8-битный компаратор непрерывно сравнивает счетный регистр TCNT0 с регистром OCR0 (Output Compare Register). Флаг OCF0 (Output Compare Flag) устанавливается в следующем такте после того, как значения TCNT0 и OCR0 станут равны. Если I=1 и OCIE0=1, OCF0 генерирует соответствующее прерывание. Флаг OCF0 сбрасывается после перехода к обработчику прерывания. Также он может быть сброшен программно записью в него логической единицы.
Генератор сигнала использует сигнал совпадения для генерации сигнала на выходе в соответствии с режимом генерации сигнала, заданным битами WGM01:0, и режимом работы выхода, заданным битами COM01:0 (Compare Output mode).
В режимах, отличных от ШИМ, выход OC0 может быть принудительно активирован установкой бита FOC0 (Force Output Compare) регистра TCCR0. При этом флаг OCF0 не устанавливается, таймер не сбрасывается и не перезапускается.
Запись процессором регистра TCNT0 блокирует сравнение на один такт, даже если таймер остановлен. Это позволяет инициализировать OCR0 тем же значением, что и TCNT0.
Рис. Схема формирования сигнала на выходе OC0
Бит OC0 должен быть предварительно настроен на вывод с помощью регистра направления порта B DDRB.
Режимы работы определяются комбинацией битов WGM01:0 (Waveform Generation mode) и COM01:0 (Compare Output mode) регистра TCCR0.
Режимы работы таймера t0
Режим Normal
Самый простой режим — Normal (WGM01:0 = 0). В этом режиме счетчик считает вверх и никогда не сбрасывается. Счетчик просто переходит через максимальное значение 0xFF к 0x00 и начинает счет заново. В этом режиме флаг переполнения TOV0 будет установлен в такте, когда TCNT0 станет равным нулю. Новое значение TCNT0 может быть записано в него в любой момент. Использовать сравнение для генерации сигнала в нормальном режиме не рекомендуется, поскольку это занимает слишком много процессорного времени.
Режим ctc
В режиме CTC (рис.) (Clear Timer on Compare, сброс при совпадении) (WGM01:0 = 2) регистр OCR0 используется для управления разрешением счетчика, поскольку задает максимальное значение счета. В этом режиме TCNT0 сбрасывается, когда его значение становится равным OCR0. Этот режим удобен для управления частотой выходного сигнала и подсчета внешних событий.
Рис. Временная диаграмма режима CTC.
Горизонтальные штрихи на рисунке иллюстрируют совпадение значений регистров OCR0 и TCNT0.
При совпадении TCNT0 и OCR0 устанавливается флаг OCF0 и генерируется соответствующее прерывание. Обработчик прерывания может изменить значение OCR0.
Частота сигнала определяется следующей формулой:
,
где N — коэффициент деления частоты: 1, 8, 64, 256 или 1024.
Период сигнала может изменяться.
Прерывание по переполнению в этом режиме генерируется, если счетчик переходит максимальное значение.
Пример.
;осуществляется подсчет событий по входу T0
.include "m8535def.inc"
.equ cnt = 0x04
.org 0x000
rjmp RESET
.org 0x013
rjmp TIM0_COMP
.org 0x015
RESET: clr r17
ldi r18, 0x01
ser r16
out DDRB, r16
out DDRC, r16
ldi r16, low(RAMEND)
out spl, r16
ldi r16, high(RAMEND)
out sph, r16
ldi r16, cnt
out OCR0, r16
ldi r16, (1<<OCIE0)
out TIMSK, r16
ldi r16, 0x1E
out TCCR0, r16
sei
main: rjmp main
TIM0_COMP: in r19, SREG
out SREG, r18
rol r17
in r18, SREG
out PORTC, r17
out SREG, r19
reti