Для всех вариантов:
Y – первая цифра номера группы + 1
G – последняя цифра номера группы
- Собрать в Proteus схему, включающую микроконтроллер ATmega32 и два семи сегментных 7SEG-BCD индикатора, подключенных к выводам порта A. При необходимости использования внешнего прерывания подключить к соответствующему выводу микроконтроллера ключ с внешним подтягивающим резистором. В случае генерации ШИМ сигнала подключить к соответствующим выводам виртуальный осциллограф.
- Составить программу на языке ассемблер, реализующую следующий функционал:
№ вар. | Задание |
Генерировать быстрый ШИМ сигнал с помощью таймера 0. Предделитель отключен. Каждые 1000*G циклов таймера увеличивать скважность импульсов на Y (использовать обработчик прерывания таймера 0), выводить текущую скважность на индикаторы. | |
Запустить таймер 1, по каждому Y прерыванию захвата выводить на индикаторы старший байт числа, деленный на 2^G. | |
Таймер 0 работает в режиме счетчика нарастающих фронтов сигнала. По сравнению с Y сбросить счетчик и увеличить число на индикаторах на G. | |
Обрабатывать внешнее прерывание int0. По убывающему фронту запустить таймер 1 в режиме СТС, предделитель 1/64, сравнение с числом 0х15*Y, считать число циклов таймера, по нарастающему фронту int1 остановить таймер, вывести число прошедших циклов таймера, деленное на 2^G. | |
Обрабатывать внешнее прерывание int0. По нарастающему фронту запустить таймер 0, считать число циклов таймера, по Y убывающему фронту int0 остановить таймер, вывести число прошедших циклов таймера, деленное на 2^G. | |
Генерировать ШИМ сигнал с фазовой коррекцией с помощью таймера 0. Предделитель 1/256. Каждые G секунд увеличивать скважность на 3*Y (использовать задержку в основном цикле программы), выводить текущую скважность на индикаторы. | |
Обрабатывать внешнее прерывание int1. По нарастающему фронту запустить таймер 0 с предделителем 1/128 в режиме быстрого ШИМ со скважностью 0x20*G, считать число циклов таймера, по Y убывающему фронту int1 остановить таймер. | |
Генерировать быстрый ШИМ сигнал с помощью таймера 0. Предделитель 1/256. Каждые G*2 секунды увеличивать скважность на Y*3 (использовать задержку в основном цикле программы), выводить текущую скважность на индикаторы. | |
Генерировать два быстрых ШИМ сигнала с помощью таймера 1. Предделитель отключен. Скважность ШИМ2 0x00FF, каждые 1000*G циклов таймера увеличивать скважность импульсов ШИМ1 на Y. | |
Запустить таймер 1 с предделителем 1/1024, по прерыванию переполнения вывести на индикаторы 0x00, по совпадению с числом, вывести данное число. В основном цикле увеличивать число на Y каждые G секунды. | |
Обрабатывать внешнее прерывание int0. По Y убывающему фронту запустить таймер 0, считать число циклов таймера, после этого по G нарастающему фронту int1 остановить таймер, вывести число прошедших циклов таймера. | |
Таймер 0 работает в режиме счетчика нарастающих спадающих фронтов сигнала. По сравнению с Y+5 сбросить счетчик и увеличить число на индикаторах на G. | |
Запустить таймер 1, по Y прерыванию захвата выводить на индикаторы младший байт числа, деленный на 2^G. | |
Обрабатывать внешнее прерывание int1. По G нарастающему фронту запустить таймер 1 в режиме СТС (сравнивать с число 100*Y), считать число циклов таймера, по убывающему фронту int1 остановить таймер, вывести число прошедших циклов таймера. | |
Запустить таймер 0 с предделителем 1/1024, по прерыванию переполнения вывести на индикаторы 0x00, по совпадению с числом, вывести данное число. В основном цикле уменьшать число на Y каждую G секунду. | |
Генерировать три быстрых ШИМ сигнала при помощи таймеров 1 и 2. В основном цикле каждую секунду увеличивать скважность ШИМ1 на 0x30, ШИМ2 на 0x20*G, ШИМ3 на 0x05*Y. | |
Генерировать ШИМ сигнал с коррекцией фазы с помощью таймера 0. Предделитель 1/64. Каждые 100*G циклов таймера увеличивать скважность импульсов на Y (использовать обработчик прерывания таймера 0), выводить текущую скважность на индикаторы. | |
Таймер 1 работает в режиме счетчика спадающих фронтов сигнала. По сравнению с G запустить таймер с предделителем 1/1024, по переполнению увеличивать число на индикаторах на Y. | |
Генерировать два быстрых ШИМ сигнала при помощи таймеров 0 и 1. В основном цикле каждую секунду увеличивать скважность на 0x10*G и 0x10*Y соответственно. | |
Таймер 0 работает в режиме счетчика нарастающих фронтов сигнала, таймер 1 - спадающих. По сравнению с G таймера 0 вывести на индикаторы число G, по сравнению с Y*4 таймера 1 вывести на индикаторы число Y*4 и сбросить оба таймера. | |
Генерировать два быстрых ШИМ сигнала с помощью таймера 1. Предделитель 1/128. Скважность ШИМ1 0x0FFF, каждые 100*G циклов таймера увеличивать скважность импульсов ШИМ2 на Y. | |
Обрабатывать внешнее прерывание int1. По G убывающему фронту запустить таймер 1 в режиме СТС, предделитель 1/256, сравнение с числом 0х20*Y, считать число циклов таймера, по нарастающему фронту int1 остановить таймер, вывести старший байт числа прошедших циклов таймера. | |
Генерировать два быстрых ШИМ сигнала при помощи таймеров 0 и 2. В основном цикле каждую секунду увеличивать скважность на 0x10*G и 0x10*Y соответственно. | |
Обрабатывать внешнее прерывание int0. По G нарастающему фронту запустить таймер 1 в режиме СТС (сравнивать с число 100*Y) с предделителем 1/8, считать число циклов таймера, по убывающему фронту int1 остановить таймер, вывести число прошедших циклов таймера. | |
Генерировать два ШИМ сигнала с коррекцией фазы при помощи таймеров 0 и 1. В основном цикле каждую секунду увеличивать скважность на 0x08*G и 0x04*Y соответственно. | |
Запустить таймер 1 с предделителем 1/8, по G прерыванию переполнения вывести на индикаторы 0x00, по совпадению с числом, вывести старший байт данного числа. В основном цикле уменьшать число на 0x10*Y каждую секунду. | |
Обрабатывать внешнее прерывание int1. По Y нарастающему фронту запустить таймер 0 с предделителем 1/128, считать число циклов таймера, после чего по G убывающему фронту int1 остановить таймер, вывести число прошедших циклов таймера. | |
Таймер 0 работает в режиме счетчика спадающих фронтов сигнала. По сравнению с Y+5 сбросить счетчик и увеличить число на индикаторах на G. | |
Генерировать два ШИМ сигнала с коррекцией фазы помощью таймера 1. Предделитель отключен. Скважность ШИМ1 0x00FF, каждые 1000*G циклов таймера увеличивать скважность импульсов ШИМ2 на Y. | |
Генерировать быстрый ШИМ сигнал с помощью таймера 0. Предделитель 1/1024. Каждые G секунд увеличивать скважность на Y (использовать задержку в основном цикле программы), выводить текущую скважность на индикаторы. |
Контрольные вопросы:
|
|
|
|
1. Механизм прерываний.
|
|
2. Вектор прерываний микроконтроллера AVR, приоритет выполнения прерываний.
3. Система таймеров/счетчиков микроконтроллеров AVR.
4. Устройство таймера-счетчика 0.
5. Устройство таймера-счетчика 1.
6. Устройство таймера-счетчика 2.
7. Режимы работы ШИМ, СТС.