====== Упражнения ====== ===== Задания ===== Целью является составление программы, которая выполняет описанное задание. ===== Задание для разогрева ===== * Заставить мигать красный LED с 10 секундным периодом (полупериод 5 с). Для выполнения создать функцию программной задержки, параметром которой является число секунд. ===== Для начинающих ===== - Вывести на LCD экран время с точностью в 100 мс, которое проходит между нажатиями двух любых кнопок. Осуществление измерения времени можно свободно выбрать. - При нажатии кнопки S1, замедляется мигание всех трех LED-ов в 2 раза, нажимая на кнопку S3, учащается мигание в 2 раза, и, нажимая на кнопку S2, определяется частота мигания в 1 Hz. Использовать функции задержки или прерывания. (Задержки сложнее, но при функциях задержки создается дополнительная задержка вследствии функции фильтрации кнопок.) - Воспроизвести частоту нажатия кнопки S1 в герцах на 7-сегментном LED индикаторе. Показатель частоты должен быть ограничен 0 внизу и 9 вверху. - При нажатии на кнопку S1 программа считает секунды от 60 до 0 и затем зажигает красный LED. При нажатии на кнопку S2 время 30 секунд, после чего зажигается желтый LED. Время для кнопки S3 - 10 секунд и загорается зеленый LED. Все процессы должны проходить параллельно. LED-ы потухают при нажатии соответствующих кнопок. - Показать на LCD экране время в формате „чч:мм:сс“. Использовать нужно аппаратный таймер 1 вместе с прерыванием и время должно настраиваться кнопками. Желательно использовать 3 кнопки, где S1 увеличивает вращательно часы, S2 минуты и S3 секунды. ===== Для успевающих ===== - Сделать секундомер, который воспроизводит на LCD экране часы, минуты, секунды и миллисекунды. Кнопка S1 начинает измерение, S2 останавливает измерение и S3 сбрасывает время. Следует использовать прерывание таймера. - С 2-секундным перерывом загораются и плавно потухают подряд красный, желтый и зеленый LED. Ровное освещение получается при модуляции (очень быстрое зажигание и выключение) LED-а с частотой в несколько сотен герц и при изменении пропорций времени зажигания/потухания, в следствии чего глазам кажется, что яркость LED-а меняется (это широтно-импульсный модулятор). - Написать раздел программы на языке Си, который создает задержку 10 μs ± 10 % при частоте 14,7456 MHz. Действие задержки доказать теоретически – комментируя инструкции языка ассамблер, находящиеся в .lss файле компилируемой программы. ===== Вопросы ===== - Какие методы существуют для создания задержки? - Как создать программную задержку? От каких параметров зависит длительность программной задержки? - Что принуждает использовать аппаратную задержку вместе с прерыванием? - Вычислите период прерывания перегрузки 8-битного таймера, если тактовая частота 16 MHz и делитель частоты 1024. - Что такое скрытое в компьютерах "RTC"? - Что произойдет 19. Января 2038 года в мире компьютеров? - Что еще можно делать с AVR таймером кроме счета времени? - Какими регистрами можно настроить таймер 0 микроконтроллера ATmega128. Что можно настроить этими регистрами? - Какова наибольшая точность времени задержки в миллисекундах, которую можно получить микроконтроллером ATmega128, который работает на тактовой частоте 14,7456 MHz? Покажите формулу вычисления. - Если процессор сильно перегружен выполнением программы (к примеру, управляет несколькими моторами и постоянно контролирует значения многих датчиков), то это как то отражается на точности измерения времени? Объясните свой ответ.