Режим Phase and Frequency correct PWM
Отличие этого режима от предыдущего состоит только в том, что запись нового значения в регистр сравнения производится не при максимальном значении счетчика, а при нулевом. Это позволяет исключить искаженные периоды ШИМ в момент смены значения в регистре сравнения.
Таймеры Т1 (Т3) имеют две разновидности режима (режим 8 и режим 9). Оба режима позволяют программно изменять разрешающую способность. И отличаются регистром, хранящим максимальные значения счета. Для режима 8, это регистр захвата ICRn. Для режима 9, это регистр сравнения OCRnA.
Пример выполнения задания:
;***** Реализация временной задержки через прерывание от таймера T1
; частота процессора 7.3728 МГц
.include "m128def.inc"
;***** Инициализация регистров
jmp RESET
.ORG 0x18 ;18(h) - Вектор прерывания таймера T1 при совпадении
jmp T1_Comp ;адрес подпрограммы обработки прерывания при
;совпадении таймера Т1
RESET:
ldi r19,0xC0
out DDRD,r19 ;биты D7,D6 порта D на вывод
ldi r19,0x10 ;Инициализация указателя стека
out SPH,r19
ldi r19,0xFF
out SPL,r19
ldi r19, 0b00010000 ;Разрешение прерывания по совпадению T1
out TIMSK, r19
sei ;разрешение глобальных прерываний
;(флаг I=1 в регистре SREG)
;**** Программирование таймера
ldi r19, 0b00001101 ;Режим CTC (сброс при совпадении)
out TCCR1B, r19 ;коэф. предделителя 1024
;3840(h) при частоте 7.3728МГц и предделителе 1024 равно 2 сек.
;14400=3840(h)
;Расчёт задержки таймера Т1 (1/(7372800/1024*14400)=2 сек.)
ldi r19, 0x38 ;Занесение значения FF
out OCR1AH, r19 ;в регистр совпадений таймера T1
ldi r19, 0x40 ;Занесение значения FF
out OCR1AL, r19 ;в регистр совпадений таймера T1
ldi r18, 0
;**** Основная программа
loop:
rjmp loop ;повторение бесконечного цикла
;**** Прерывание по совпадению таймера Т1
T1_Comp:
com r18 ;Инверсия содержимого r18
out PORTD, r18
sei
reti ;Выход из прерывания
1. Реализовать подпрограмму обработки прерывания по совпадению таймера Т1 (режим СТС). Интервал прерывания и управление состоянием светодиодов порта A внутри подпрограммы осуществлять в соответствии с вариантом:
а) Интервал прерывания 0,25 с. В подпрограмме реализовать «бегущий огонь» в сторону больших разрядов.
б) Интервал прерывания 4 с. В подпрограмме реализовать инвертирование состояния всех светодиодов.
в) Интервал прерывания 2 с. В подпрограмме реализовать противофазное включение 4-х старших и 4-х младших разрядов светодиодного порта A. (старшие не горят, младшие горят и наоборот).
г) Интервал прерывания 0,5 с. В подпрограмме реализовать эффект разбегания от центра. (В исходном состоянии горят светодиоды PA4, PA3. Через полсекунды PA5,PA2 и так далее. После зажигания светодиодов PA7, PA0 цикл повторяется.).
д) Интервал прерывания 1 с. В подпрограмме реализовать эффект перекрещивания двух световых потоков. (В исходном состоянии горят светодиоды PA7, PA0. Через полсекунды PA6,PA1 и так далее. Потоки набегают друг на друга и удаляются в противоположные стороны. После зажигания светодиодов PA0, PA7 цикл повторяется.).
е) Интервал прерывания 3 с. В подпрограмме реализовать противофазное включение светодиодов порта A через разряд. (чётные не горят, нечётные горят и наоборот).
Литература
1. Евстифеев А. В. Микроконтроллеры AVR семейств Tiny и Mega фирмы «ATMEL» - М.; Издательский дом «Додэка-XXI», 2004.-560 с.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.