Мы вкратце рассмотрели среду программирования 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) на выход
Как я уже говорил, регистр PORTC управляет состоянием ножек порта C, то есть задает 0 на ножке или 1. Записывая в бит 5 этого регистра единицу, на ножке 28(PC5) установится 1, записывая в бит 5 этого регистра ноль, на ножке 28(PC5) установится 0.
Мы сконфигурировали ножку порта на выход и вывели туда 1.
Теперь нужно сделать задержку.
Для создания задержек в папку с проектом нужно поместить специальный файл - waitings.alg(расширение.alg указывает, что это дополнительный алгоритм) и подключить его.
Подключается файл следующим образом. В верхней строке прописывается следующий код: +: Waitings.alg. Всё!
Задержка создается следующим образом:
где число в скобках - величина задержки (в миллисекундах)
Теперь можно написать полную программу:
Жмем кнопку (скомпилировать) - algorithm builder создаст файл прошивки в файлах проекта.
Полная схема устройства
Для прошивки достаточно просто соединить одноименные выводы программатора и микроконтроллера
Если две предыдущие программы я рекомендовал как оптимальный вариант для начала работы с электроникой вообще и микроконтроллерами в частности, то эта программа лишь мое личное предпочтение и честно говоря, для повторения конструкций с этого ресурса она Вам не понадобится. Но не упомянуть приятную во всех отношениях программу я не могу.
Итак что имеет Algorithm Builder в своем арсенале?
Полный цикл разработки.
Algorithm Builder предназначен для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла.
Algorithm Builder довольно нетрадиционная программа в плане языка программирования. Автор немного лукавит, называя программу Построителем Алгоритмов. На самом деле, алгоритма, в привычном понимании этого слова, нет. Есть ассемблер, завернутый в красивую обертку визуального программирования. Правильнее было бы назвать программу – визуальный ассемблер или построитель ассемблера. А раз это ассемблер то Вы получите на выходе максимально эффективный код.
Работа с переменными
и константами
организована гениально просто. Инициализация производиться в отдельном окне в виде таблицы – освобождая алгоритм от лишних записей. В буквальном смысле слова все разложено по полочкам. Удобно иметь в любой момент под рукой перечень всех переменных и констант.
Настройщик периферии. Algorithm Builder имеет удобный настройщик периферии (таймеры, UART, ADC, SPI и т.д.) позволяющий, не читая даташитов, просто выбрать необходимые параметры работы устройства в окне настройки. В этом же окне Билдер честно покажет набор инструкций, обеспечивающих эти параметры.
Переходы
осуществляются в программе очень наглядно – вектором. Если нужно перейти по условию в какую либо точку программы – просто проведите вектор в эту точку. Это освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Переходы по именованным меткам так же возможны.
Внутрисхемное программирование кристалла. При использовании внутрисхемного программатора микроконтроллер подключается к COM порту компьютера через несложный адаптер (три диода и несколько резисторов).Также есть вариант USB подключения. Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в кристалле. Процесс программирования кристалла очень прост — в два «тыка».
Мониторная отладка на кристалле. Algorithm Builder обеспечивает мониторную отладку на кристалле (On Chip debug) которая позволяет наблюдать содержимое реального кристалла в заданной точке останова. При этом для связи микроконтроллера с компьютером используется только один вывод, причем по выбору пользователя. Мониторная отладка может быть применена к любому типу кристалла, имеющего SRAM. Это софтверный вариант debugWIRE. Я без этой штуки просто не представляю себе отладку программ.
Так почему такая хорошая программа так малоизвестна?
Первая причина — программа до 2010 года была платной. Бесплатная демоверсия имела полную функциональность, но ограничивала код откомпилированной программы до 2 килобайт. В 2010 году автор программы сделал новогодний подарок – версия 5.43 вышла свободной от ограничений.
Вторая причина — отсутствие поддержки программы. Вы не найдете ни одного апнота производителя в котором бы использовался Билдер. Интернет ресурсы, посвященные данной программе, можно пересчитать по пальцам.
Жаль, конечно – программа действительно интересна.
Выводы:
Ассемблерщики при переходе на Algorithm Builder будут писать кипятком, так как они будут иметь все тот же ассемблер, но управляться им станет на порядок легче и наглядней. Одно плохо – придется распрощаться с наработанными библиотеками и писать новые.
Сишникам однозначно Билдер не понравится, так как придется опускаться до уровня ассемблера, а какому сишнику понравится возюкаться с регистрами.
Наверное, наилучшая целевая аудитория — начинающие осваивать микроконтроллеры. Программа проста и поэтому будет легко осваивать программирование.
В общем, конечно, выводы получились неоднозначные. Думайте сами… 🙂
Программа имеет мануал, написанный в форме обучающей статьи. В мануале рассмотрено создание простого проекта – вольтметра, даны схемы программаторов COM и USB. Скачать версию без ограничений можно здесь
Среда визуального программирования
Кому интересно посмотреть мануал, а устанавливать программу лениво – вот выкладываю его отдельно
Программа активно развивается, поэтому смотрите свежие версии на сайте программы www.algrom.net . Кроме того, там же есть небольшая подборка библиотек.
P.S. Программа портативная. Тесть после установки папку с программой скидываем на флешку и работаем с нее.
(Visited 17 675 times, 18 visits today)
Графический ассемблер
Программное обеспечение является источником жизни системы, основанной на микроконтроллере или микропроцессоре. Разработка его является центральным моментом общего процесса проектирования. Основным инструментом для профессиональной разработки программ является ассемблер, предполагающий детализацию на уровне команд микроконтроллера или микропроцессора. Только он позволяет максимально использовать ресурсы кристалла. Однако работать на ассемблере не слишком удобно. Существенным барьером между программистом и предметом программирования является текстовый редактор с его ограниченными возможностями.
В данной публикации я хотел поговорить о технологии графической разработки программного обеспечения для микроконтроллеров и микропроцессоров. Такая технология освобождает программиста от целого ряда неудобств, свойственных классическому ассемблеру, а также предполагает существенное упрощение работы при сохранении уровня его детализации. Рассмотрение темы я буду вести с использованием в качестве примера среды разработки "Algor ithm Builder", в частности адаптированной под микроконтроллеры фирмы ATMEL с архитектурой AVR.
Вначале немного о мнемонике. Мнемоника представляет собой короткий набор букв латинского алфавита, однозначно определяющий соответствующую ему операцию в ядре микропроцессора. Конечно, разработчики старались вложить в этот набор букв смысл выполняемой операции, чтобы максимально облегчить жизнь программисту. И в ряде случаев им это вполне удалось, например, MOV, CALL, ADD, JMP и так далее. Но таких ситуаций немного. А появившиеся позже команды SBI, XTHL, BRBC, ADIW, XCHD и другие начинают соперничать с китайской письменностью. Разумеется, можно попытаться их запомнить, но и без того проблем достаточно.
Кроме того, те, кто имел дело с разными микропроцессорами, конечно, обратил внимание, что общность мнемоник их ассемблеров составляет не более трети. Среди присутствующих практически во всех ассемблерах, можно перечислить MOV, ADD, SUB, CALL, AND, OR, INC, DEC, PUSH, POP и еще некоторые. Основная же масса представлений эксклюзивна даже для ряда совершенно одинаковых операций. Например, в одном случае операция "исключающее или" записывается как XOR, в других - EOR. В одном случае обозначение операций переходов построено на основе слова JUMP, в другом - на основе BRАNCH. И таких примеров можно привести множество. Но ведь редко кому удается пользоваться только одним ассемблером. В реальной жизни "коней" приходится менять, и с таким нежелательным разнообразием сталкиваешься неизбежно.
С учетом всего этого, в среде "Algor ithm Builder" представление операций микроконтроллера построено иначе - по визуально-функциональному принципу. Запись операции содержит образ выполняемого действия. Например:
вместо "MOV R0,R1" записывается
вместо "LDI R16,63" - "63->R16",
вместо "ST X,R2" - "R2->[X]",
вместо "LSR r7" - "r7>>",
вместо "SBI PortB,3" - "1->PortB.3" и так далее.
В результате, время освоения системы команд сокращается до минимума, а смысл операций становится понятным даже неподготовленному человеку. Кроме того, в среде предусмотрен оперативный вызов через меню таблицы шаблонов всех имеющихся операторов, который позволяет легко найти необходимый.
Одно из основных неудобств ассемблера (и не только его) состоит в том, что в редакторе программа записывается и отображается в виде одной сплошной вертикальной полосы. И логическая структура тех или иных фрагментов может быть построена только в воображении программиста. В особо сложных случаях приходится предварительно прорисовывать необходимую структуру на бумаге. Это дополнительно загружает программиста совершенно ненужной работой.
Главное предназначение графических сред - приведение интерфейса разработки в соответствие с природой человеческого восприятия, освобождение пользователя от лишних рутинных действий для чисто творческого процесса. Элементы этих технологий мы наблюдаем в таких языках программирования, как Visual Basic, C-Builder, Delphi и других. Но там этот процесс ограничивается в основном конструированием содержимого окна. А с полным правом к этой категории можно, пожалуй, отнести такие среды, как PCAD, OrCAD и прочие. Можно, конечно, электрическую схему описать в текстовом редакторе, вводя список соединений, но гораздо удобнее это делать в специализированном графическом редакторе.
Любая программа, написанная на уровне ассемблера, состоит из ряда законченных монотонных (или условно монотонных) цепочек, в которых ее исполнение возможно без ветвлений. Такие фрагменты всегда начинаются с метки (если это не само начало программы), а завершаются либо оператором безусловного перехода, либо оператором возврата из подпрограммы (RET или RETI), то есть оператором, который безо всяких условий осуществляет перевод хода исполнения программы в иной фрагмент. Такие участки программы представляют собой первичные логически завершенные блоки.
Например, приведенная ниже подпрограмма содержит три таких блока:
SubName: LDI XL,96 Label0: LD R16,X Label1: SBI PortA,0 Label2: SBI PortA,2 |
Первый блок начинается с оператора "LDI XL,$20" с меткой "SubName", а завершается оператором безусловного перехода "RJMP", два других - начинаются с оператора "SBI" с метками "Label1" и "Label2", соответственно, а заканчиваются оператором "RET".
Визуальное разделение таких блоков на плоскости является одним из принципов графических методов. Другим принципом является возможность графического отображения алгоритма программы. Благодаря этому, обеспечивается возможность ввода программы на плоскости в двух измерениях в виде алгоритма с древовидной структурой, с визуальным отображением направления условных и безусловных переходов. В результате - вся логическая структура как на ладони.
На рис. 1 показано отображение вышеприведенной программы в графической среде "Algorithm Builder".
Рис. 1. Отображение программы в среде "Algorithm Builder"
Поскольку основная масса условных и безусловных переходов вводится и отображается графически, программа освобождается от бесчисленных имен меток, которые в ассемблере являются неизбежным балластом, загромождающим текст программы. Необходимость имен для меток остается только для входов в подпрограммы.Графическая технология ассемблера в среде "Algorithm Builder" реализуется посредством нескольких базовых объектов, из которых выстраивается конструкция алгоритма. Среди них:
"Label" (метка) - отображается в виде вертикального штриха, расположенного на оси блока операторов. Метка может иметь необязательное имя, которое располагается слева или справа от штриха. Метки предназначены для подвода концов векторов переходов;
"Vertex" (вершина) используется в качестве начала блока, а по своему отображению и назначению аналогичен метке;
"Field" (поле) предназначен для записи операторов алгоритма и представляет собой отцентрированную строку в блоке;
"Condition" (условие) предназначен для обозначения операторов условных переходов. Конструктивно наиболее сложный. Графически представляет собой контур, располагающийся посредине блока, внутри которого вписывается текст с условием перехода и возможный вектор перехода в виде ломаной линии, исходящей от одного из краев контура, со стрелкой на конце, которая должна заканчиваться на метке или вершине. Действие интерпретируется как ветвление, если вписанное условие выполняется;
"JMP Vector" предназначен для представления безусловного перехода. Графически представляет собой ломаную линию, исходящую из середины блока операторов, аналогичную вектору объекта "Condition".
Для удобства, конец вектора ветвления разрешается останавливать на отрезке другого вектора, если конечно адрес у них общий. Но при большом нежелании рисовать вектор ветвления, либо, если это ветвление слишком длинное, всегда остается возможность адресовать переход классическим способом, на имя метки.
Рис. 2. Основное окно редактора
Рис. 3. Окно программиста
В целом данная среда программирования является самодостаточной системой. Она содержит в себе компилятор алгоритма, симулятор микроконтроллера и внутрисхемный программатор, обеспечивающий загрузку откомпилированного алгоритма в кристалл. Кроме того, обеспечивается режим мониторной отладки, при котором к откомпилированному коду программы добавляется скрытый код, обеспечивающий вывод всего внутреннего состояния реального микроконтроллера в заданных точках останова в соответствующие окна, как при работе в симуляторе. При работе мониторного отладчика и программатора микроконтроллер непосредственно подключается к параллельному порту LPT несколькими цепями.Рис. 4. Окно настройки таймеров
В числе дополнительных возможностей, не связанных непосредственно с графическими технологиями, можно назвать метки со стандартным именем прерывания. Встретив такую метку, компилятор автоматически вставит в соответствующее вектору прерывания место программы код необходимого безусловного перехода. Имя таких меток можно выбрать через соответствующий пункт меню. Реализован также удобный интерфейс настройки таймеров, который избавляет от необходимости помнить назначение каждого бита управляющего регистра и ряд других сервисных возможностей.Рис. 5. Работа симулятора
Среда "Algor ithm Builder" предна- значена для работы в операционной системе Windows 95/98.На рис. 6 приведен более сложный пример фрагмента программы. Слева - в классическом ассемблере, а справа - полная его копия в среде "Algor ithm Builder".
Рис. 6. Ассемблер: классика и графика
Конечно, в рамках одной статьи невозможно достаточно подробно описать все особенности работы в графической среде.В ближайшее время среда "Algor ithm Builder" будет адаптирована под иные типы микропроцессорных архитектур.
Переход к использованию такой среды труден психологически. В голове многих проскользнет мысль: "может, ассемблер и не располагает этими возможностями, но я к нему очень привык, мне и с ним хорошо". Это чем-то сродни переходу от командной (DOS) к графической оболочке (Windows). Однако, освоение этого инструмента и последующая работа с ним заметно проще классического ассемблера. Во всяком случае, те, кто его уже используют, пути назад не ищат.
Algorithm Builder fo AVR, Начинаем
Качаем и устанавливаем Algorithm Builder fo AVR http://algrom.net/russian.html
Внимательно читаем Manual.pdf
Algorithm Builder for AVR
Среда предназначена для производства полного цикла разработки начиная от ввода алгоритма, включая процесс отладки и заканчивая программированием кристалла. Разработка программы может быть как на уровне ассемблера, так и на макроуровне с манипуляцией многобайтными величинами со знаком.В отличие от классического ассемблера программа вводится в виде алгоритма с древовидными ветвлениями и отображается на плоскости, в двух измерениях. Сеть условных и безусловных переходов отображается графически, в удобной векторной форме. Это к тому же освобождает программу от бесчисленных имен меток, которые в классическом ассемблере являются неизбежным балластом. Вся логическая структура программы становися наглядной.
Графические технологии раскрывают новые возможности для программистов. Визуальность логической структуры уменьшает вероятность ошибок и сокращает сроки разработки. Появляется такое понятие, как дизайн алгоритма, проедполагающее некоторый художественный вкус программиста.
По оценке пользователей, по сравнению с классическим ассемблером, время на разработку программного обеспечения сокращается в 3-5 раз.
Поддерживается автоматическая перекодировка строк ANSI-кодов Windows в коды русифицированного буквенно-цифрового ЖКИ.
Среда объеденяет в себе графический редактор, компилятор алгоритма, симулятор микроконтроллера, внутрисхемный программатор.
При использовании внутрисхемного программатора Вы можете подключать микроконтроллер непосредственно к LPT компьютера без каких-либо дополнительных устройств. Программатор ведет подсчет числа перепрограммирований кристалла, сохраняя счетчик непосредственно в нем.
Среда предназначена для работы в ОС Windows 95/98/2000/NT/ME/XP.
Версия программы: 4.20
Размер программы: 1.15 Mb