Как в atmel studio создать hex файл

Обновлено: 02.07.2024

В этом материале вы узнаете, как использовать AVR IDE для создания проектов, базовых схем и программирования ваших цепей.

Комплектующие

Микроконтроллеры AVR имеют некоторые преимущества по сравнению с другими аналогичными микросхемами, включая более высокую MIPS и более дружественную архитектуру. В этой статье мы узнаем, как использовать AVR IDE, как создать исполняемый проект, построить базовую схему AVR, а затем запрограммировать ее. Для этого нам понадобится набор компонентов, а также некоторое программное обеспечение.

Оборудование:

  • ATMEGA168 DIP IC x 1
  • Кварцевые резонаторы, кристалл (4-20 МГц) x 1
  • 20 пФ конденсатор x 2
  • 680 резистор x 1
  • 5.6K резистор x 1
  • Светодиод LED x 1
  • Источник 5 В (цепь 7805, плавное регулирование и т.д.) x 1
  • Провода

Программное обеспечение:

  • USBASP
  • WINAVR (20100110)
  • Atmel Studio 7

Схема


Построение схемы довольно простое и может быть выполнено с использованием большинства методов построения схем, включая макет, картон, монтажную плату и печатную плату.

Схема в этом проекте показывает использование простой цепи регулятора мощности (с использованием 7805), которую обеспечивает устройство ATMEGA 5В, но оказывается, что программатор USBASP обеспечивает приблизительно 3,3 В. Несмотря на это, лучше обеспечить внешнее питание, чтобы USBASP не потреблял слишком много тока из любого USB-порта.


Программатор USBASP, который я купил, также шел с конвертером, который преобразует 10-контактный разъем в более удобный 6-контактный программный разъем. Тем не менее, header использует двухрядный шаг 2,54 мм, что означает, что он не может быть подключен к макету. Чтобы обойти это, я просто подключил разъем к проводам, которые соединяются с различными пинами на макете.

Как установить AVR Studio

Устройства AVR программируются с использованием специально модифицированной Visual Studio 2015 под названием AVR Studio 7, которую можно найти на сайте AVR. Первым шагом в программировании устройств AVR является скачивание установщика (небольшого приложения, которое загружает потом необходимые файлы). После скачивания нужно запустить установщик.

Первое, что он вас спросит, будет текст лицензионного соглашения и вопрос про отправку анонимной информации. Я лично рекомендую вам не отправлять анонимные данные по ряду причин (из-за крайней паранойи).



После выбора поддерживаемого устройства на следующей странице будет задан вопрос про расширения - Atmel Software Framework и примеры проектов. Убедитесь, что галочка стоит.


Следующая страница просто проверяет ваш компьютер на наличие потенциальных проблем, таких как отложенный перезапуск (из-за обновления), или если система не сможет запустить IDE. Если все проверено и ОК, жмите «Далее».


Если вы уже установили более раннюю версию AVR IDE, вы можете увидеть следующее окно. Если это так, просто нажмите «Установить».


Теперь нужно подождать пока IDE загрузит все необходимые компоненты и установит их.


После этого вам будет предложено запустить Atmel Studio 7.0. Убедитесь, что стоит галочка перед закрытием окна установки.

Как установить WINAVR

Хотя Atmel Studio 7 полезная штука для написания кода, она не самый лучший выбор, когда речь идет о программировании устройств AVR с использованием инструментов с открытым исходным кодом. Поэтому, чтобы сделать жизнь проще на этапе компиляции и/или программирования, мы будем использовать WINAVR, которая также поставляется с AVRDUDE для загрузки нашего кода на устройства Atmega. Чтобы скачать WINAVR для Windows, просто нажмите на эту ссылку и выберите исполняемый exe-файл.


После скачивания запустите установщик и просмотрите все предложенные опции, пока программа не спросит вас про место установки.

Лучшее место для установки WINAVR - это рекомендуемое расположение: C:\WinAVR-20100110 . Следующая опция спросит про компоненты и вы должны убедиться, что установлены все галочки (показано ниже).


После того, как кнопка установки нажата, установщик выполнит остальную часть работы, после чего установщик закроется.

Как подключить USBASP и установить драйвер для Windows

Если вы используете Windows, вам необходимо изменить драйвер USB для USBASP. Это сделать не сложно с помощью инструмента под названием Zadig. Проще говоря:

  • загрузите Zadig,
  • подключите устройство USBASP к компьютеру,
  • дождитесь пока Windows автоматически установит USBASP,
  • запустите Zadig,
  • найдите устройство USBASP в раскрывающемся списке,
  • выберите драйвер libusb-win32 (v1.2.6.0).

После того, как вы нажмете «Заменить драйвер» (или Переустановить драйвер), Zadig автоматически установит драйвер, необходимый для работы USBASP в Windows.


Как настроить Atmel Studio 7 и WinAVR

Atmel Studio 7 не будет изначально использовать WINAVR или AVRDUDE, поэтому мы должны настроить её для этого. Это может показаться пугающим, но не паникуйте; для программирования устройства AVRDUDE необходима только одна строка инструкций, и только один каталог требуется определить. Фактически, вы должны быть в состоянии скопировать и вставить код в этой статье для любого проекта на базе ATMEGA168.


Итак, первый шаг - сообщить Atmel Studio 7 какой компилятор она должна использовать. Для этого откройте Atmel Studio 7 (если она еще не открыта) и нажмите: Инструменты -> Параметры (англ.: Tools -> Options).



Предполагая, что вы установили WINAVR в папку по умолчанию на диске C и что у вас та же версия, что и в WINAVR, как в этой статье, во всплывающем окне мы пишем так, как показано ниже. После заполнения полей нажмите «Добавить» (англ. add), а когда вы вернетесь в предыдущее окно, нажмите «ОК».


Atmel Studio 7 теперь может использовать WINAVR для компиляции программ AVR, но все равно не может программировать устройства. Для этого нам нужно добавить внешний инструмент в Atmel Studio 7 и настроить его для устройства ATMEGA168.

Первый шаг - перейти в: Инструменты -> Внешние инструменты (англ. Tools -> External tools). Открывшееся окно - единственное окно, необходимое для работы программатора USBASP. Скрин ниже показывает большинство деталей, которые вам нужно будет заполнить.


Поле "Аргументы" (англ. Arguments) не полностью отображает всю информацию, которая необходима, и поэтому приведу ниже то, что было заполнено:

avrdude -c usbasp -p atmega168 -U lfuse:w:0x26:m -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i

Большая часть информации в этом не важна для нас, кроме двух фрагментов текста. Первый - это -p atmega168;, который говорит AVRDUDE, что мы программируем ATMEGA168. Если в вашем проекте используется другой чип, замените текст atmega168 на используемое вами устройство (например, atmega88).

Второй параметр -U lfuse:w:0x26:m, который специфичен для ATMEGA168. Эта инструкция указывает AVRDUDE настроить устройство на использование внешнего кристалла, и после программирования устройство будет работать только при подключении к схеме кристалла. Обратите внимание, что это также означает, что устройству требуется кристалл при программировании. Этот аргумент будет работать только для ATMEGA168.

Создание первого проекта

Следующая задача состоит в том, чтобы создать проект на основе AVR микроконтроллера и протестировать схему, компилятор и программатор.

Сначала перейдите в: Файл -> Создать -> Проект (англ. File -> New -> Project) и в открывшемся окне выберите: Исполняемый проект GCC C (англ. GCC C Executable Project), а в текстовом поле Имя (англ. Name) дайте любое название вашему проекту.


Следующее окно, которое должно появиться, - это окно выбора устройства. Из списка выберите Atmega168. Насколько мне известно, это окно не имеет никакого смысла, так как мы все равно передаем имя устройства в AVRDUDE вручную (пока я не могу найти способ заставить Atmel Studio 7 автоматически отправлять имя устройства в AVRDUDE через аргументы).


Результатом должен стать файл main.c, содержащий код нашей программы, который будет запускать AVR. Однако сгенерированный код ничего не делает, поэтому замените все содержимое файла main.c с помощью приведенной ниже программы (обязательно сохраните файл после ввода нового кода).

Теперь пришло время скомпилировать код и загрузить его на устройство AVR. Первый шаг - убедиться, что наш проект использует компилятор WINAVR. Щелкните правой кнопкой мыши проект и выберите «Дополнительно» (англ. - Advanced) в окне свойств.


В окне «Дополнительно» убедитесь, что в поле «Набор инструментов» (англ. - Toolchain Flavour) выбран WINAVR.


Это означает, что наш проект успешно скомпилирован и готов к передаче на наш чип. Чтобы запрограммировать устройство, убедитесь, что USBASP подключен как к ПК, так и к цепи Atmega, к цепи подано питание и что к микросхеме подключен кристалл (в случае, если микросхема была настроена для использования внешнего кристалла).

Затем, после всего этого, нажмите: Инструменты -> USBASP (англ. Tools -> USBASP), и все будет работать автоматически.


Если все хорошо, светодиод в вашей цепи должен начать мигать. Ниже приведен вывод AVRDUDE в Atmel Studio 7, показывающий, как выглядит успешная программа.

Заключение

Начало работы с устройствами AVR может показаться несколько сложным, если вы не используете официальный программатор, который может работать «из коробки» с Atmel Studio 7. Однако в инструментах программирования требуется определить только одну командную строку (тип устройства, биты и т.п.). И все будущие проекты могут использовать один и тот же инструмент/компилятор, который нужно настроить только один раз.

Т.е. следующий проект ATMEGA168, который вы будете делать, сможет использовать тот же компилятор и внешний инструмент, что и в этом проекте и не потребуется никаких дополнительных настроек. Конечно, в более сложных проектах может потребоваться замена бит (англ. fuse), например, но в данном материале я хотел просто помочь вам освоить работу с устройствами AVR.

Следуя пожеланиям читателей, мы будем вести разработку проектов в более современной и удобной программе: Atmel Studio 6.

Atmel Studio 6. Создание HEX-файла

У нее есть один существенный недостаток, который не позволяет воспользоваться этой программой на относительно слабых машинах. Это программа очень ресурсоемкая и она будет сильно тормозить на слабых компьютерах с двухъядерным процессором младших моделей и 2 гигабайтами ОЗУ. Сразу скажу, владельцы старых моделей компьютеров не будут забыты и для них будут выпущены обзоры по программам WinAVR и AVR Studio 4, чтобы они не чувствовали себя в чем-то ущемленными. Эти программы очень слабо нагружают процессор и требуют намного меньше памяти для работы.

Немного Вас отвлеку, прочитайте еще статью интересную про машину Тесла.

В результате остается одна рабочая область (кликните для увеличения картинки):

Atmel Studio 6. Создание HEX-файла

Для того, чтобы создать прошивку, то есть тот самый HEX файл, мы должны написать код, скомпилировать его и “собрать” проект. После этого у нас в папке с проектом, появится нужный нам файл с расширением *.HEX. Давайте разберем, как это делается на практике. Погнали!

Для создания проекта мы нажимаем в левом верхнем углу кнопки File => New => Project:

Atmel Studio 6. Создание HEX-файла

И видим следующее окно:

Atmel Studio 6. Создание HEX-файла

Здесь нам нужно выбрать СС++ и GCC C Executable Project:

Atmel Studio 6. Создание HEX-файла

Atmel Studio 6. Создание HEX-файла

Так как имя файла мне не нравится, то меняем его на Studio_6_Lesson_ 1. Путь для сохранения проекта я оставил по умолчанию. В данном случае в папке 6.2 у нас создастся папка с названием Studio_6_Lesson_ 1. В ней и будут находиться все необходимые нам файлы, имеющие отношение к нашему проекту:

Atmel Studio 6. Создание HEX-файла

Ну а теперь жмем ОК. Что мы видим дальше? А дальше открывается следующее окно:

Atmel Studio 6. Создание HEX-файла

Ну а потом выбираем наш МК Attiny 2313:

Atmel Studio 6. Создание HEX-файла

Здесь же можно вкратце ознакомиться с характеристиками на данную модель МК, узнать объем Flash памяти, ОЗУ, и EEPROM памяти. Также здесь можно скачать даташит на данную модель МК и ознакомиться со всеми характеристиками этого микроконтроллера.

После того как выбрали, жмем ОК. Перед нами открывается рабочее окно программы (для увеличения кликните мышкой)

Atmel Studio 6. Создание HEX-файла

А вот и самое главное окно:

Atmel Studio 6. Создание HEX-файла

Как мы видим, здесь уже автоматически что-то уже сгенерировалось. Перейдем непосредственно к коду.

Что же мы видим здесь?

Итак, давайте разберем, что же обозначают все остальные строчки. Читаем комментарий, идущий после кода в каждой строчке. Комментарии у нас отделяются от кода, двумя символами знака деления(//). Правильно же это называется прямой двойной слэш.

Что же мы видим? Смотрим строку под номером 9. С нее начинается сама программа:

Эту строчка должна присутствовать абсолютно в любом проекте на любом МК AVR Mega и Tiny. Смысл этих команд я написал в комментариях, идущих после команды.

Atmel Studio 6. Создание HEX-файла

Здесь я хочу сделать небольшое отступление и разобрать отличия Atmel Studio 6.2 от той же WinAVR. В шестой студии есть очень удобная функция. Называется она автоподставления команд. Проявляется это в том, что как только мы начали набирать команду известную Студии, она сама предложит нам все возможные варианты команд на выбор, какие только есть в её памяти по нескольким первым буквам.

Atmel Studio 6. Создание HEX-файла

Нам достаточно нажать лишь клавиши ТАВ или ENTER и команда у нас подставится автоматически.

Разбираем строчку №10

Atmel Studio 6. Создание HEX-файла

Этой строчкой мы объявлем библиотеку задержек

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

Идем дальше. Смотрим строчку №11:

Atmel Studio 6. Создание HEX-файла

Этой командой мы “говорим” МК, что у нас в программе будет использоваться функция задержек работы микроконтроллера , или иначе говоря, режима холостой работы. В это время не будут выполняться никакие другие действия. На какое-то заданное время, МК, условно говоря, для нас как-бы зависнет.

Идем дальше. Мы видим строчку int main(void) //Основное тело программы под строкой №13:

Atmel Studio 6. Создание HEX-файла

После нее, собственно, и начинается наша основная программа. Мы видим в строке 14 фигурную скобку, открывающую место под программу, и такую же, только повернутую в другую сторону скобку, закрывающую место под программу уже в строке 19. Эти скобки предназначены для основного тела программы. Также мы видим соединяющую их вертикальную черту, показывающую нам, что они одно целое.

Также можно увидеть и фигурные скобки для while. Открывающая скобка находится в строке 16, а закрывающая в строке 18.

Давайте напишем программу для мигания одним светодиодом. Для этого добавляем строчки:

PORTB=0b0000000 0; //Притягиваем все 8 выводов порта В к 0

DDRB=0b11111111 ; // Конфигурируем все выводы порта В на выход

Единички у нас после этой команды означают, что все ножки у нас работают на выход, а не на вход. Иначе говоря, в этом режиме с их помощью мы можем управлять чем-либо. Если бы там были нули, то мы напротив могли бы снимать информацию с них, например, опрашивая кнопку на нажатие.

Далее идет собственно программа (кликните для увеличения):

Atmel Studio 6. Создание HEX-файла

PORTB=0b0000000 1; //Подаем на порт В0 логическую единицу (зажигаем светодиод)

Итак мы видим, что крайняя справа у нас стоит единичка. Как мы помним из выше сказанного, это значит что мы на порт В0 вывели 1, или по другому говоря, на этом выводе у нас сейчас +5 вольт.

_delay_ms(500); //Ждем 500 миллисекунд (0.5 секунды)

Эта команда означает, что процессор должен крутить у нас холостой цикл, в течение пол секунды, или иначе говоря, как бы зависнуть на полсекунды для нас.

Что означают ниже приведенные две строчки кода, вы наверное уже догадались сами:

PORTB=0b0000000 0; //Подаем на порт В0 логический ноль (гасим светодиод)

_delay_ms(500); //Ждем 500 миллисекунд (0.5 секунды) Мы подаем ноль на ножку В0 и затем ждем пол секунды.

Но такая программа у нас длилась бы всего секунду, а что потом? А потом нам нужно вернуться к началу нашего бесконечного цикла, который мы объявляем командой While:

Atmel Studio 6. Создание HEX-файла

while(1) //Начинаем бесконечный цикл

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

И наконец, в конце нашей программы мы видим две фигурные скобки, по одной на каждый цикл программы, основной и бесконечный через While, читаем комментарий к последней скобке:

> //Возвращаемся к началу выполняемого тела программы, к строке 13

Уфф))… программа вроде бы написана, но как скормить этот код микроконтроллеру ? Он же не понимает код, написанный в понятных нам словах и командах? А для этого нам нужно сначала скомпилировать прошивку. Делается это следующим образом.
Кликаем Build=>Compile и прошивка у нас будет скомпилирована.

Atmel Studio 6. Создание HEX-файла

Жмем Build=>Build Studio_6_Lesson_ 1 и считаем количество ошибок)), а они при самостоятельном написании первой программы скорее всего будут у начинающих кодеров.

Atmel Studio 6. Создание HEX-файла

Внизу под окном для написания кода есть окошко. В нем бегут какие-то непонятные для вас слова и строчки. В данный момент нам это не так важно. Важна только последняя итоговая строчка:

Atmel Studio 6. Создание HEX-файла

Atmel Studio 6. Создание HEX-файла

В той папке, где лежит проект, у нас находится исходник на СИ

Atmel Studio 6. Создание HEX-файла

Все, теперь этот файл можно скармливать как любому программатору для МК AVR, так и программе Proteus, если вы вдруг захотите перед сборкой конкретного устройства посмотреть, как это будет выглядеть в эмуляторе. Работу в эмуляторе Proteus можно прочитать в этой статье.

Сегодня мы научимся создавать проекты в среде программирования Atmel Studio. Делается это не очень сложно.

Запускаем Atmel Studio.

Если Вы запускаете Atmel Studio в первый раз, у Вас скорее всего появится сначала стартовое окошко, которое можно свободно отключить, сняв галочку создадим новый проект с помощью команды меню File -> New -> Project

015

У нас откроется диалог, в котором будет 5 вариантов проектов на C/C++, один вид проекта на ассемблере, а также есть вариант создание пустого решения, в которое уже потом добавлять проекты. Мы будем писать именно на языке C. С помощью кнопки "browse" в данном диалоге мы выбираем папку, в которой будем создавать свои проекты, выберем вариант проекта "GCC C Executable Project", дадим проекту имя, например "Test01". Галочка слева от надписи "Create directory for solution" означает, что будет создаваться папка для проекта, то есть данную папку заранее создавать не нужно. Нажмем "OK"

016

В следующем диалоге выберем наш контроллер Atmega8A, впечатав это в соответствующем окошке. Мы видим здесь справа также несколько интересных вещей, в том числе Datasheet на наш контроллер (ссылка на техническую документацию), который мы отсюда спокойно можем скачать.

Здесь мы также нажимаем "OK"

017

Проект создан. Мы должны увидеть окно с проектом приблизительно следующего вида


Теперь немного настроим наш проект.

Зайдём в его свойства с помощью меню Project -> Test01 Properties

0019

Затем в открывшемся диалоге перейдём во вкладку Tool и выберем там в качестве отладчика Simulator, а если у кого поддерживатеся программатор в качестве отладчика, то свой программатор. Мой программатор не может выступать в качестве отладчика, так как нет драйвера для Atmel Studio. В свойствах проекта есть огромный ряд настроек (настройки оптимизации, включение операций с плавающей точкой и т.д.), которые мы рассмотрим в более поздних занятиях. А пока нажмём кнопку "сохранить всё" в панели управления в виде нескольких дискет (на картинку можно нажать для увеличения)

0020_0500

0021

Теперь другой вид комментария. Если мы хотим написать комментарий в виде одной строки, то целесообразно отметить этот комментарий специальным значком в виде двух обычных слешей, предназначенных именно для обозначения однострочного комментария. Данный значек ставится вначале строки и действует до конца строки. У нас также есть с вами для этого уже пример в коде. Здесь среда нам подсказывает, где именно следует начинать писать свой код

0022

Данный комментарий можно будет также удалить.

0023_0500

Решил начать осваивать микроконтроллеры (далее МК) AVR. Думал что все просто раз и прошил микроконтроллера, но не так все просто как казалось на первый взгляд. В процессе прошивки контроллера возникли ряд трудностей о которых я хочу описать в этом посте. Я сам начинающий в этом нелегком деле, поэтому если увидели ошибки или другие косяки то прошу сообщить.

Подопытным МК будет Atmega8. Для того чтобы ее прошить нужна будет ее распиновка выводов представлена ниже. Распиновку также можно посмотреть тут. Нам нужно понимать куда подключать программатор куда подавать напряжение.

Распиновка микроконтроллера Atmega8

Далее нам необходимо определиться с программатором которым будем шить МК. Я взял USBasp программатор, самый простой программатор. Они бывают с разными разъемами, какой взять не принципиально. Главное правильно подключить выводы MOSI, MISO, RST, SCK а также питалово VCC и GND к микроконтроллеру. Также нужно установить под этот программатор драйвера, без них ПК просто не поймет что это за устройство такое мы подключили. Ссылка на драйвера для программатора USBasp приложена в конце статьи.

USBasp программатор и распиновка выводов

После того как мы выбрали программатор и МК нам нужно их соединить) Вот схема подключения программатора и микроконтроллера

Схема подключения программатора USBasp и микроконтроллера Atmega8

Создание проекта в Atmel Studio

Вывод AVCC подключать не обязательно, у меня камень прошивался спокойно и без этого провода. После того как мы подключили нашего подопытного и программатор. Приступаем к написанию программы и ее компиляции.

Запускам среду Atmel Studio и создаем новый проект.

Создание проекта в Atmel Studio

И выбираем в списке устройств наш камень Atmega8

Создание проекта в Atmel Studio, выбор микрокнтроллера

И пишем программу, в качестве примера возьмем код мигания светодиодом. Так же вот есть проект мигалки на микроконтроллере с 4-мя светодиодами.

Код программы в Atmel Studio

Следует обратить внимание вот на первые 2 две сточки:

Компиляция программы

И так поздравляю Вас с успешной компиляции программы. Далее нам нужно найти файл hex который появляется после компиляции программы. Его можно найти в папке с проектом, лежит он в папке , в моем случае папка проект Led blink и там в папке Debug находится наш долгожданный файл hex.

Расположение файла hex в папке проекта

Загрузка прошивки в микроконтроллер

Остается только залить этот файл в память прошиваемого микроконтроллера. Для этого я использовал программу Khazama AVR Programmer на мой взгляд очень удобная программа.

Для загрузки прошивки в МК делаем следующее:

  1. Запускаем программу и устанавливаем состояние fuse битов. Что такое фьюз биты мы говорили ранее. Для того чтобы установить их сначала нужно считать, для это жмем Command->Fuses and Lock Bits и далее во всплывающем окне жмем Read All

Установка фьюз битов микроконтроллера

Тут выставляем нужные нам Fuse биты Lock биты лучше пока не трогать если не знаете какой бит за что отвечает.

Fuse биты CKSEL 0. 3 отвечающие за настройку частоты тактирования

После того как выставили Fuse биты нажимаем кнопку Write All после чего биты установятся в МК.

Ну и последний этап это загружаем hex файл сначала в буфер программы и далее заливаем в микроконтроллер.

Запись прошивки в микроконтроллер

После загрузки прошивки, микроконтроллер автоматом запуститься и начнет мигать светодиодом, который подключен к порту выводу порта C.

Читайте также: