Примеры программ на atmel studio

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

В данной статье будет описано построение двух очень похожих схем: одна для программирования ATmega328P, другая для программирования ATtiny45. В статье приведены полные схемы программирования, а также подробные фотографии макетов на беспаечных макетных платах. Кроме того, также приведено введение в интегрированную среду разработки Atmel Studio 7.

Во-первых, аппаратное обеспечение

ATmega328P – это 28-контактный микроконтроллер от Atmel, один из линейки AVR. Вероятно, он наиболее известен, как наиболее часто используемый микроконтроллер в отладочных платах Arduino, но AT328P способен на гораздо большее, чем то, насколько он используется в Arduino. Если вы хотите увидеть некоторые доказательства этого утверждения, посмотрите на 660-страничное техническое описание.

ATtiny45 – 8-выводный микроконтроллер, который может считаться «младшим братом» ATmega328P. Он обладает многими из тех же функций, но у него не так много контактов ввода/вывода.

Atmel Studio

Для программирования ATmega328P и ATtiny45 используется последовательный периферийный интерфейс SPI; это трехпроводная (плюс общий провод) шина, состоящая из сигналов «Выход ведущего, вход ведомого» (Master Out, Slave In – MOSI), «Вход ведущего, выход ведомого» (Master In, Slave Out – MISO) и «Тактовый сигнал» (Serial Clock – SCK). Тактовый сигнал генерируется ведущим устройством (мастером) и используется для обеспечения синхронной связи между ведущим и ведомым (или ведомыми); поэтому SPI является «синхронной» шиной связи.

Схемы программирования

Схемы программирования показаны ниже. Обратите внимание, что резистор R2 и LED1 не требуются для программирования, но включены в схемы для тестирования, что будет описано ниже.

Схема программирования ATmega328P с помощью AVR Pocket программатораСхема программирования ATtiny45 с помощью AVR Pocket программатора

Выбор программатора

Доступно несколько программаторов, работающих с ATmega328P и ATtiny45; Atmel-ICE находится в верхней части списка, является прекрасным программатором и будет рассмотрен в следующей статье. Пока что у нас есть менее дорогостоящие варианты, и скупым автором статьи использовался программатор Sparkfun AVR Pocket Programmer. Если вы предпочитаете что-то другое, не стесняйтесь выбирать тот, который соответствует вашим предпочтениям и вашему кошельку. Просто убедитесь, что он использует SPI интерфейс, как описано выше, и будьте готовы внести соответствующие изменения в информацию в этой статье.

Введение

Это краткое пошаговое руководство по созданию проекта в Atmel Studio. Мы разберем как создать проект, как добавить в него ASF библиотеки, как его скомпилировать и как записывать прошивку в микроконтроллер, используя аппаратный отладчик или программатор.

Getting started with AVR and Atmel Studio 7

Речь пойдет о создании проекта для ARM микроконтроллера SAM3S, но аналогичным образом создаются проекты и для других микроконтроллеров фирмы Atmel — xmega, atmega, attiny

Подразумевается, что у вас уже установлена среда разработки. Но если это не так, то самое время сделать это. Переходите на сайт Atmel, регистрируйтесь и скачивайте Atmel Studio.

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

Выбираем в верхнем меню пункт File > New > Project. или нажимаем комбинацию кнопок Ctrl + Shift + N.

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

Откроется окно, в котором нужно задать шаблон проекта, имя и место его хранения. Выбираем C/C++ > User Board > User Board SAM3S. Имя и место сохранения указываем по своему желания. Я назвал свой проект Test.

Выбираем тип шаблона

Последнее поле в этом окне — Solution name. Solution или решение — это некий «контейнер», который включает в себя один или несколько проектов Atmel Studio (аналог workspace или рабочего пространства в IAR). Такое объединение удобно использовать, когда идет работа над несколькими смежными проектами.

Если поставить галочку Create directory for solution, то будет создана директория с именем решения и файлами решения, в которой будет поддиректория, содержащая наш проект. Нам это сейчас не нужно, поэтому галочку можно снять.

Жмем ОК и в следующем диалоговом окне задаем тип микроконтроллера. Это нужно для того, чтобы Atmel Studio подключила к проекту требуемые заголовочные файлы.

Выбираем микроконтроллер

Выбираем SAM3S4B, жмем ОК и Atmel Studio создает проект с заданными параметрами.

Если мы заглянем в директорию проекта, то увидим следующий набор файлов.

Содержимое проекта

В папке Debug сохраняются результаты компиляции проекта — объектные файлы и прошивки в различных форматах. В папке src хранятся исходники проекта — C и C++ файлы.

Посмотрим на Atmel Studio. Перед нами созданный только что проект. С правой стороны у нас проводник, отображающий иерархию проекта. Чуть ниже окно — свойства. Там отображается информация о выбранном файле. С левой стороны — редактор кода, сейчас там открыт файл main.c.

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

Читайте также:
Забиндить кнопки на мышке программа

Atmel Studio

ASF библиотеки

Чтобы убедиться в работоспособности платы Karma-SAM3S, добавим в проект простой код. Для начала подключим к проекту несколько ASF библиотек.

ASF (Atmel Software Framework) — это бесплатный набор библиотек для Atmel микроконтроллеров, интегрированный в среду разработки. ASF включает в себя драйверы внутренней периферии, сервисы и библиотеки для внешних устройств. Каждая библиотека имеет документацию с описанием и примерами. Чтобы использовать ASF библиотеки нужно создавать проект на основе шаблона (board template) или ASF примера.

Чтобы добавить ASF библиотеки к проекту, запускаем ASF Wizard. Это можно сделать с помощью меню Project > ASF Wizard, комбинации Alt + W или одноименной кнопки в меню баре.

ASF Wizard

Для первого проекта понадобятся следующие драйвера:

PIO — Parallel Input/Output Controller
PMC — Power Management Controller
WDT — Watchdog Timer

Ищем их в списке, выделяем и добавляем в окно Selected Modules с помощью кнопки Add.

Добавление ASF драйвера

Когда нужные драйверы добавлены, нажимаем кнопку Apply. В следующих окнах жмем ОК и со всем соглашаемся.

Выбранные библиотеки появятся в проводнике и в заголовочном файле asf.h. Теперь их можно использовать в своем проекте.

Тестовый код

Закрываем ASF Wizard и копируем в main.c следующий код.

#include

#define ONE_SEC 250000
#define LED1 PIO_PA17

void Delay (uint32_t value);

/*программная задержка */
void Delay (uint32_t value)
volatile uint32_t a = value;
while(—a!=0);
>

int main (void)
<
/*настройка периферии*/
wdt_disable(WDT);
pmc_enable_periph_clk(ID_PIOA);
pio_set_output(PIOA, LED1, LOW, DISABLE, DISABLE);

while(1) /*моргаем светодиодом*/
Delay(ONE_SEC);
pio_set(PIOA, LED1);
Delay(ONE_SEC);
pio_clear(PIOA,LED1);
>

return 0;
>

Детально разбирать его не будем, но несколько комментариев сказать стоит.

В начале программы запрещается работа сторожевого таймера, разрешается тактирование контроллера ввода-вывода и вывод PA17 настраивается на выход. К этому выводу на плате Karma-SAM3S подключен светодиод.

Далее идет бесконечный цикл, в котором состояние вывода PA17 меняется на противоположное. Чтобы смена состояний не была слишком быстрой, используется программная задержка — Delay(). Значение задержки подобрано так, чтобы светодиод моргал с частотой единицы Гц.

Микроконтроллер SAM3S4B имеет гибкую систему тактирования, которая обычно настраивается в начале программы. В этом примере мы ее не трогаем, поэтому микроконтроллер тактируется от внутреннего низкочастотного генератора с частотой 4 МГц.

Обратите внимание, библиотечные функции имеют префикс, по которому легко понять к какой периферии они относятся. Чтобы получить информацию о любой функции или константе в программе, нужно кликнуть по ее имени правой кнопкой мыши и выбрать пункт Goto Implementation.

Компиляция проекта

Теперь нужно скомпилировать проект. Это можно сделать с помощью меню Build > Build Solution, кнопки F7 или одноименной иконки в меню баре.

Компиляция проекта

Если компиляция и сборка прошла успешно, в консоли появится сообщение Build succeeded.

В противном случае там будут отображены найденные ошибки.

Полученная прошивка лежит в папке проекта. Можно загрузить ее в микроконтроллер с помощью загрузчика, а можно с помощью аппаратного отладчика. В последнем случае, загрузка выполняется прямо из Atmel Studio.

Загрузка прошивки

Подаем на плату Karma-SAM3S питание, подключаем SAM-ICE (или J-link) и выбираем в меню Debug > Start Without Debugging.

Загрузка прошивки

При первом включении Atmel Studio предложит выбрать инструмент — аппаратный отладчик или симулятор. Но поскольку Atmel Studio пока что не поддерживает программную симуляцию ARM микроконтроллеров, выбора как такового нет.

Если выбрать в меню пункт Debug > Start Debugging and Break , то Atmel Studio перейдет в режим отладки кода. Откроются окна отображающие содержимое регистров и памяти микроконтроллера, а в редакторе кода появится указатель. При нажатии кнопки F11 код будет выполняться построчно.

Также есть другой вариант загрузки прошивки. Выбираем в меню Tools > Device Programming.

В открывшемся окне Device Programming выбираем отладчик, интерфейс и нажимаем кнопку Apply. Atmel Studio автоматически определит тип микроконтроллера. Выбираем пункт Memories и нажимаем кнопку Program, чтобы записать прошивку в микроконтроллер.

Загрузка прошивки

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

Источник: chipenable.ru

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

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

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

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

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

Итак, перейдем к делу. Данная программа является полностью бесплатной и скачать её можно как с официального сайта Atmel, так и с торрент трекера, например Rutracker.org. После установки и запуска программы открывается окно приветствия и мастера создания проектов. Окно приветствия и мастер создания проектов мы закрываем. В работе эта функция совершенно бесполезна.

Читайте также:
Как подобрать программу фитнес

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

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-файла

Не спешите нажимать «ОК» и закрывать окно. В графе «Name» мы видим, что программа подставила нам имя проекта автоматом. В данном случае это GccApplication1. Также мы можем выбрать папку, в которую мы сохраняем проект:

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

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

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

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

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

Так как мы с вами договорились использовать МК Tiny 2313, то нам нужно выбрать именно эту модель. Для этого выбираем семейство Tiny, 8-bit.

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

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

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

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

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

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

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

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

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

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

Строки 1…6 — это у нас комментарии. Все комментарии бывают выделены зеленым цветом в отличие от кода программы, переменных, функций, и т. д. В комментариях мы видим название исходника на СИ нашего проекта: файл Studio_6_Lesson_ 1.с. В нем хранится наш код и его мы можем, если хотим, посмотреть и уточниться, чтобы не открывать каждый раз тяжелую для запуска студию. Открывать в том же блокноте Wordpad.

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

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

#include //Подключаем библиотеку аппаратных описаний МК

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

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

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

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

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

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

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

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

#define F_CPU 8000000UL //Устанавливаем частоту для компилятора

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

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

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

#include //Подключаем библиотеку задержек

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

Читайте также:
Сколько лет попову ведущему программы 60 минут

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

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

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

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

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

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

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

Восемь цифр означают, что у нас 8 выводов порта В. Крайний правый — это В0, крайний левый — В7. Это обозначение означает 8 нулей после 0b, что по умолчанию у нас на всех выводах-ножках порта В установлен логический ноль, или говоря по-другому, они притянуты к нулю. Если говорить очень упрощенно, то это все равно, что они внутри МК соединены с землей устройства.

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-файла

Она означает, что в нашем проекте Студия ошибок не сумела найти. Но это не означает, что ваша прошивка автоматом будет работать, как вы рассчитывали, Студия просто проверила код на соответствие основным правилам написания кода и чем смогла — помогла.

Итак где же — где же наш долгожданный HEX файл, который нам уже не терпится прошить в наш микроконтроллер)? Проще всего открыть папку с нашим проектом, в которой и будет находиться наша прошивка. Жмем File=>Open=>File и попадаем в папку с нашим проектом.

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

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

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

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

Источник: www.ruselectronic.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru