Микроэлектроника и Робототехника

...мы делаем сложные вещи простыми

  • Increase font size
  • Default font size
  • Decrease font size

УПРАВЛЕНИЕ СВЕТОДИОДОМ МИКРОПАСКАЛЬ

E-mail Print PDF

На рисунке можно видеть фрагмент схемы робототехнической платформы "Мой первый робот":

 

Как видно, за управление светодиодом отвечает нулевой вывод  порта Б (PORT B).

Когда в нулевой разряд порта записана единица, на ножке номер 21 микроконтроллера присутствует напряжение питания (5 вольт в нашем случае), ток течет через светодиод и вызывает его свечение. Резистор R2 ограничивает значение этого тока на уровне 5 миллиампер для предотвращения выхода из строя микроконтроллера и светодиода. Если в нулевой разряд порта Б записан ноль, то напряжение на 21 ножке равно нуля. Ток не течет - светодиод не светит. Все просто.

Теперь разберемся, как это сделать на программном уровне. Используем оператор присваивания (:=). Команда

PORTB.0 := 1;

записывает в нулевой разряд порта Б единицу и зажигает светодиод. А команда

PORTB.0 := 0;

записывает ноль и гасит светодиод.

Однако, операции в микроконтроллере происходят очень быстро и приходится их замедлять для того, что бы человек смог увидеть изменения. Для этого в программу вставляют паузы, используя библиотечную функцию:

DELAY_MS(время задержки в миллисекундах);

Таким образом, код включения и выключения светодиода с задержкой в пол секунды будет иметь вид:

PORTB.0 := 1;              // включаем светодиод

DELAY_MS(500);          // пауза в пол секунды

PORTB.0 := 0;              // выключаем светодиод

DELAY_MS(500);          // пауза в пол секунды

Но если вставить его в программу, то мы увидим только одно мигание. Нужно "закольцевать" этот участок программы. Для этого применим цикл с предусловием:

WHILE УСЛОВИЕ DO ОПЕРАТОР;

В нем оператор выполняется, пока значение условия истинно. Подставим вместо условия служебное слово TRUE - истина, и цикл будет выполняться бесконечно.

А поскольку для мигания светодиодом мы использовали четыре оператора, а не один, заключим наш код в операторные скобки BEGIN END. Вот так:

WHILE TRUE DO // всегда выполнять

BEGIN

PORTB.0 := 1;              // включаем светодиод

DELAY_MS(500);          // пауза в пол секунды

PORTB.0 := 0;              // выключаем светодиод

DELAY_MS(500);          // пауза в пол секунды

END;

 

ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ:

Запрограммируйте своего робота так, что бы он светодиодом с помощью азбуки Морзе передавал  Ваше имя. Длительность точки сделайте 0,5 секунды, длительность тире - 1 секунда, пауза между точками и тере - 0, 5секунды, пауза между буквами - 1 секунда.

 


 

Last Updated on Sunday, 23 October 2016 16:15  
Яндекс.Метрика