В предыдущем уроке мы вкратце рассмотрели среду программирования Algorithm Builder. В этом уроке мы создадим простой программатор для микроконтроллеров, а также напишем и проверим в работе первую программу.
Для начала немного теории
После компилирования (перевода на машинный язык), получается файл с расширением .hex. Этот файл называют прошивкой. Далее этот самый файл загружается в память микроконтроллера, при помощи программатора. Процесс загрузки прошивки в память микроконтроллера называют прошивкой (прожигом). Важно не путать эти два понятия!
- Прошивка (сущ.) — скомпилированная программа
- Прошивка (глагол) — процесс записи скомпилированной программы в память МК
Как я уже говорил, для загрузки прошивки в микроконтроллер необходим программатор. Самый простой вариант — это программатор на LPT порт.
Принципиальная схема программатора:
Вообще, резисторы можно и не ставить, но тогда риск спалить lpt порт становится ещё выше.
О том, как правильно подключить программатор к микроконтроллеру и прошить в него программу я расскажу в конце статьи. А пока что сосредоточимся на создании программы.
Кратко пробежимся по элементам, из которых строится алгоритм
Переходим к практике
- Открываем 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 порта. После этого можно снова подать питание микроконтроллера и наслаждаться работой устройства!
Прикрепленные файлы:
- Тест(3).rar (5 Кб)