Целью является составление программы, которая выполняет описанное задание.
Задание для разогрева
Заставить мигать красный 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? Покажите формулу вычисления.
Если процессор сильно перегружен выполнением программы (к примеру, управляет несколькими моторами и постоянно контролирует значения многих датчиков), то это как то отражается на точности измерения времени? Объясните свой ответ.