Algorithm Builder. Урок 2 — О создании первой программы

В предыдущем уроке мы вкратце рассмотрели среду программирования Algorithm Builder. В этом уроке мы создадим простой программатор для микроконтроллеров, а также напишем и проверим в работе первую программу.

Для начала немного теории

После компилирования (перевода на машинный язык), получается файл с расширением .hex. Этот файл называют прошивкой. Далее этот самый файл загружается в память микроконтроллера, при помощи программатора. Процесс загрузки прошивки в память микроконтроллера называют прошивкой (прожигом). Важно не путать эти два понятия!

  • Прошивка (сущ.) — скомпилированная программа
  • Прошивка (глагол) — процесс записи скомпилированной программы в память МК

Как я уже говорил, для загрузки прошивки в микроконтроллер необходим программатор. Самый простой вариант — это программатор на LPT порт.

Принципиальная схема программатора:

Вообще, резисторы можно и не ставить, но тогда риск спалить lpt порт становится ещё выше.  

О том, как правильно подключить программатор к микроконтроллеру и прошить в него программу я расскажу в конце статьи. А пока что сосредоточимся на создании программы.

Кратко пробежимся по элементам, из которых строится алгоритм

  • Текст. Представляет из себя текстовую строку, в которую записываются некоторые команды для algorithm builder.
  • Вершина блока. Алгоритм в Algorithm Builder делится на блоки. Для создания такого блока и служит этот элемент.
  • Поле. Представляет из себя отцентрированную в блоке строку. Предназначен для записи большинства команд микроконтроллеру. (создается при нажатии клавиши ENTER).
  • Метка. Просто вертикальная черта. Не несет в себе никакой информации микроконтроллеру,
  • Условный переход. Просто говоря — условие. Если то, что записано в прямоугольнике правда, идем по стрелке вправо, если ложь — вниз.
  • Безусловный переход. Просто стрелка, для перехода между элементами алгоритма.
  • Настройщик управляющих регистров. Элемент, позволяющий удобно настраивать периферию микроконтроллера
  • Переходим к практике

    • Открываем Algorithm Builder
    • Создаем новый проект (Файл-Новый. Перед созданием нового проекта нужно закрыть старый!)
    • Клик правой кнопкой мыши по рабочей области — опции проекта. В выпадающем списке выбираем контроллер(Atmega88). В поле тактовая частота вводим 1000000 (Это 1 МГц). И жмем применить.

    ​Теперь все готово для написания программы!

    Начнем с классики — мигание светодиодом

    Последовательность действии очень проста: 

    • Включить светодиод
    • Подождать немного
    • Выключить светодиод
    • Ещё немного подождать

    ​Начнем по-порядку — как включить светодиод? (т.е установить логическую 1 на ножке)

    Ответ:  Все действия с периферией микроконтроллера (В т.ч с портами ввода/вывода) осуществляются через регистры.

    Регистр — набор из 8 бит. Бит — элементарная единица информации, может быть 1 либо 0

     1 
     0 
     0 
     1 
     1 
     1 
     0 
     1 

    Это — пример регистра. Самый левый бит называется старшим, и имеет номер 7, самый правый — младшим, имеет номер 0. Не 1, а 0, это важно! Каждый бит регистра за что-либо отвечает. К примеру, за запуск таймера. Так что регистр можно сравнить с набором тумблеров.

    Запись значения в бит регистра осуществляется следующим образом:

     

    Большинство ножек микроконтроллера Atmega88 разделены на 3 порта ввода/вывода. Ножка может настраиваться как на выход, так и на вход. Мы будем работать с портом с индексом C

    Каждый регистр имеет свое название

    Нас интересуют два регистра — PORTC и DDRC. 

    • DDRC отвечает за то, будет ли ножка входом или выходом
    • PORTC управляет состоянием ножки, то есть задает 0 на ножке или 1.

    Посмотрим на распиновку микроконтроллера:

    Нас интересует 6 ножек с 23 по 28. Это и есть порт C. Светодиод будем подключать к выводу 5 порта C (PC5, 28 ножка)

    Итак, нужно:

    • Настроить ножку PC5 на выход
    • Установить единицу на ножке PC5.

    За то, будет ли ножка порта C входом или выходом отвечает регистр DDRC. Что бы ножка PC5 была входом, нужно записать в бит №5 лог. «0». Что бы ножка PC5 была выходом, нужно записать в бит №5 лог. «1».

    «NOP» удаляем, он нам пока не нужен

    Выделяем вершину блока, идем в раздел элементы-прерывания, выбираем из списка Reset

    Жмем кнопку «S» (настройщик), выбираем Stack Pointer.

    О том, зачем это нужно, я расскажу позднее.

    Ставим элемент «label», жмем Enter

    Вместо «NOP» пишем следующее:

    То есть мы конфигурируем ножку 5 порта C (PC5) на выход

    Жмем «L»(метка), далее Enter, набираем следующее:

    Как я уже говорил, регистр PORTC управляет состоянием ножек порта C, то есть задает 0 на ножке или 1. Записывая в бит 5 этого регистра единицу, на ножке 28(PC5) установится 1, записывая в бит 5 этого регистра ноль, на ножке 28(PC5) установится 0. 

    Мы сконфигурировали ножку порта на выход и вывели туда 1.

    Теперь нужно сделать задержку.

    Для создания задержек в папку с проектом нужно поместить специальный файл — waitings.alg(расширение .alg указывает, что это дополнительный алгоритм) и подключить его.

    Подключается файл следующим образом. В верхней строке прописывается следующий код: +: Waitings.alg. Всё!

    Задержка создается следующим образом:

    где число в скобках — величина задержки (в миллисекундах)

    Теперь можно написать полную программу:

    Жмем кнопку  (скомпилировать) — algorithm builder создаст файл прошивки в файлах проекта.

    Полная схема устройства

    Для прошивки достаточно просто соединить одноименные выводы программатора и микроконтроллера

    Теперь прошивку нужно загрузить в микроконтроллер. Для этого нам понадобится программа Uniprof.

    Открываем Uniprof, настраиваем по картинке (для LPT программатора)

    Подключаем схему к lpt порту, подаем питание. Жмем на красную системную частоту для установки связи с микроконтроллером

    Нажимаем на   , выбираем файл с прошивкой. Жмем на , прошивка начинает загружаться в микроконтроллер. Чтобы удалить прошивку из микроконтроллера, нажмите . Перед тем, как загружать новую прошивку, нужно удалить старую. 

    После прошивки снимаем с микроконтроллера питание, закрываем UniProf, отсоединяем программатор от LPT порта. После этого можно снова подать питание микроконтроллера и наслаждаться работой устройства!

    Прикрепленные файлы:

    Добавить комментарий

    Ваш адрес email не будет опубликован.