Table of Contents

Упражнения

Задания

Целью является составление программы, которая выполняет описанное задание.

Задание для разогрева

Для начинающих

  1. Вывести на LCD экран время с точностью в 100 мс, которое проходит между нажатиями двух любых кнопок. Осуществление измерения времени можно свободно выбрать.
  2. При нажатии кнопки S1, замедляется мигание всех трех LED-ов в 2 раза, нажимая на кнопку S3, учащается мигание в 2 раза, и, нажимая на кнопку S2, определяется частота мигания в 1 Hz. Использовать функции задержки или прерывания. (Задержки сложнее, но при функциях задержки создается дополнительная задержка вследствии функции фильтрации кнопок.)
  3. Воспроизвести частоту нажатия кнопки S1 в герцах на 7-сегментном LED индикаторе. Показатель частоты должен быть ограничен 0 внизу и 9 вверху.
  4. При нажатии на кнопку S1 программа считает секунды от 60 до 0 и затем зажигает красный LED. При нажатии на кнопку S2 время 30 секунд, после чего зажигается желтый LED. Время для кнопки S3 - 10 секунд и загорается зеленый LED. Все процессы должны проходить параллельно. LED-ы потухают при нажатии соответствующих кнопок.
  5. Показать на LCD экране время в формате „чч:мм:сс“. Использовать нужно аппаратный таймер 1 вместе с прерыванием и время должно настраиваться кнопками. Желательно использовать 3 кнопки, где S1 увеличивает вращательно часы, S2 минуты и S3 секунды.

Для успевающих

  1. Сделать секундомер, который воспроизводит на LCD экране часы, минуты, секунды и миллисекунды. Кнопка S1 начинает измерение, S2 останавливает измерение и S3 сбрасывает время. Следует использовать прерывание таймера.
  2. С 2-секундным перерывом загораются и плавно потухают подряд красный, желтый и зеленый LED. Ровное освещение получается при модуляции (очень быстрое зажигание и выключение) LED-а с частотой в несколько сотен герц и при изменении пропорций времени зажигания/потухания, в следствии чего глазам кажется, что яркость LED-а меняется (это широтно-импульсный модулятор).
  3. Написать раздел программы на языке Си, который создает задержку 10 μs ± 10 % при частоте 14,7456 MHz. Действие задержки доказать теоретически – комментируя инструкции языка ассамблер, находящиеся в .lss файле компилируемой программы.

 

Вопросы

  1. Какие методы существуют для создания задержки?
  2. Как создать программную задержку? От каких параметров зависит длительность программной задержки?
  3. Что принуждает использовать аппаратную задержку вместе с прерыванием?
  4. Вычислите период прерывания перегрузки 8-битного таймера, если тактовая частота 16 MHz и делитель частоты 1024.
  5. Что такое скрытое в компьютерах “RTC”?
  6. Что произойдет 19. Января 2038 года в мире компьютеров?
  7. Что еще можно делать с AVR таймером кроме счета времени?
  8. Какими регистрами можно настроить таймер 0 микроконтроллера ATmega128. Что можно настроить этими регистрами?
  9. Какова наибольшая точность времени задержки в миллисекундах, которую можно получить микроконтроллером ATmega128, который работает на тактовой частоте 14,7456 MHz? Покажите формулу вычисления.
  10. Если процессор сильно перегружен выполнением программы (к примеру, управляет несколькими моторами и постоянно контролирует значения многих датчиков), то это как то отражается на точности измерения времени? Объясните свой ответ.