Программирование на с avr: AVR Пишем код на СИ. Зажигаем светодиод

Содержание

AVR Пишем код на СИ. Зажигаем светодиод

&nbsp

&nbsp

&nbsp

Урок 3

 

 

Сегодня мы научимся писать код на C в среде Atmel Studio, для примера мы возьмём тот же проект, который мы создали на прошлом занятии.

Прежде чем мы начнём непосредственно заниматься написанием кода, мы изучим те строки кода, которые нам уже сгенерировала студия в нашем файле Test01.c.

В самом начале кода мы видим строку в виде следующей директивы

#include <avr/io.h>

Посмотрим определение данной директивы

Директива #include просит препроцессор (компилятор) включить файл, объявленный после нее в исходный код. Имя файла может заключаться либо в треугольные скобки <> либо в кавычки ””. Треугольные скобки используются в случае включения в код файла из самой среды разработки, а кавычки – пользовательского файла.

#include <имя файла>

В нашем случае в текст кода включается файл io.h. Если мы откроем данный файл, то мы увидим, что в зависимости от каких-то условий в наш код включаются ещё определённые заголовочные файлы. В нашем частном случае условием является использование нами определённого микроконтроллера. Так как мы используем Atmega8a, то соответственно включится следующий файл:

#elif defined (__AVR_ATmega8A__)
# include <avr/iom8a.h>

В данном файле находятся макросы для векторов прерываний, для определённых шин. Что такое макросы и как их использовать, мы разберём немного позднее. Движемся дальше по файлу

io.h и видим, что в него также включены ещё 3 файла, но нам будет интересен следующий файл:

#include <avr/portpins.h>

В данном файле находятся также макроподстановки для наших лапок портов и прочей периферии, чтобы нам было удобнее писать и читать наш код. Откроем данный файл и изучим в нём данные строки

/* Port Data Register (generic) */
#define PORT7  7
#define PORT6  6


#define PORT5  5
#define PORT4  4
#define PORT3  3
#define PORT2  2
#define PORT1  1
#define PORT0  0

Данные строки нам говорят о том, что, например, если при компиляции проекта препроцессор (интерпретатор команд) встретит в коде слово PORT4, то он его сразу заменит на цифру 4.

Тем самым мы постепенно с вами подошли к изучению ещё одной директивы

Директива #define

Просит препроцессор (компилятор) в случае появления в тексте кода буквосочетания 1 заменить его на буквосочетание 2.

Данная директива используется для удобства чтения кода.

#define <буквосочетание 1> <буквосочетание 2>

Вернёмся в наш код. Далее мы видим следующее

int main(void)
{

}

То, что мы с вами наблюдаем в языке C и C++ называется функция. Функциями мы будем пользоваться постоянно. Функция – это такая подпрограмма, которая вызывается из какого-нибудь участка кода. Самое важное у функции – это её имя (в нашем случае

main). По имени мы будем вызывать функцию из другого участка кода. Также у функции существуют входные аргументы, возвращаемые аргументы, а также тело. Входные аргументы находятся сразу после имени в скобках и перечисляются один за другим, а разделяются запятыми. В нашем случае стоит один тип «void», обозначающий, что у нашей функции вообще нет входных аргументов. Поэтому если мы подобную функцию будем вызывать в другом участке кода, то мы в скобках вообще ничего не ставим. Возвращаемый аргумент у функции один. Если нам потребуется больше чем один тип переменных, то мы будем пользоваться глобальными переменными, о которых мы узнаем позже.
Изучение переменных вообще не входит в рамки наших уроков, как правило это объясняется непосредственно в уроках и литературе по языкам программирования. Тип возвращаемого аргумента указывается перед именем функции. В нашем случае – это int (целочисленная знаковая переменная). Также у функции существует тело – это участок кода, находящийся между открывающей и закрывающей фигурными скобками. Вот этот участок кода и будет выполняться в случае вызова функции.

Функцию main мы явно нигде не вызываем. Это главная функция нашего приложения, недаром она и называется main, что по английски значит главный. Встретив данное имя, компилятор и начинает выполнение программы с данного места. То есть это своего рода входная точка нашей программы. Отсюда всё и начинается. Сюда мы и начинаем писать свой код.

Давайте же что-нибудь сюда и напишем. Мы пока не будем обращать внимание на строки, уже содержащиеся в теле данной функции.

У программистов, которые пишут программы под ПК, начинать занятия принято с вывода строки «Hello World!», а у тех программистов, которые пишут под мелкие чипы, принято начинать работу с подключения и управления свечением светодиодами. Затем они учат их мигать просто, мигать по очереди, а уже после этого приступать к программированию каких-то более серьёзных вещей. Мы также не будем отступать от данного правила.

Давайте сначала подключим светодиод к какой-нибудь ножке контроллера, например к ножке 0 порта D

 

У порта D, как мы видим из данной распиновки, существует как раз 8 ножек, что соответствует байту (8 бит). Также как биты в байты, ножки портов отсчитываются от 0.

Напишем мы сначала следующую строку

int main(void)
{

DDRD = 0xFF;

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

DDRD – это команда, которая устанавливает состояние лапок порта D. Состояние лапки порта – это то, в каком направлении данная лапка будет работать – на выход или на вход, что соответствует установке определённого бита в 0 или в 1. Но так как мы будем зажигать светодиод, мы должны на определённой ножке порта выставить высокий логический уровень (в нашем случае 5 вольт). А чтобы управлять уровнями ножки, она должна быть определена, как работающая на выход или на вывод. То есть состоянием лапки мы будем управлять из контроллера, а не из внешнего источника уровня. Так как у нас лапка нулевая, то и бит мы и должны выставить в ноль нулевой бит нашего байта, соответствующего нашему порту D. Так как мы не пользуемся сегодня остальными лапками порта, то нам их состояние будет не важно и мы выставляем все лапки портов на вывод. Поэтому мы присваиваем переменной

DDRD значение 0xFF. Данное значение мы написали в шестнадцатиричном виде. Этот вид очень удобен для программистов, так как визуально о многом говорит. FF – это в десятичной системе 255, а в двоичной – 11111111, что говорит о том, что все биты в данном числе выставлены в единицу. Также мы видим, что наша строка заканчивается точкой с запятой (
;
). Данный оператор – это разделитель команд, так как в одной строке мы можем писать не обязательно одну только команду, а можем и несколько, если они небольшие. Также в данной строке мы видим оператор «=» (знак равенства). Данный оператор заставляет наш препроцессор присвоить значение, находящееся справа возле него переменной, находящейся слева.

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

PD0 высокий логический уровень. Сделать это мы можем следующей командой:

DDRD = 0xFF;

PORTD = 0b00000001;

 

 

Данная команда или переменная PORTD управляет записью или считыванием значений в порт или из порта в зависимости от состояния. То есть данной командой мы включили нулевую лапку в высокое логическое состояние (в единицу). Здесь мы с вами уже попробуем использовать написание значения в двоичном виде. Чтобы писать значения в данном виде, мы используем префикс 0b. Данный вид удобен тем, что мы здесь видим полностью, как выглядит наш байт побитно.

Лапки портов в байте, также как и биты считаются справа налево. То есть данной командой мы выставили в высокое состояние нулевую лапку порта D, а остальные мы выставили в низкое. Вообщем, арифметическо-логическое устройство микроконтроллера сначала включит все ножки порта на выход, а затем установит на нулевой ножке высокое логическое состояние, и после этого у нас должен будет зажечься светодиод, так как через токоограничивающий резистор мы его анодом подключим к данной ножке, а катодом к общему проводу. Тем самым на контактах светодиода появится разность потенциалов, которая заставит его светиться. Кроме написанных нами двух строк далее в коде присутствует команда while. Данная команда является командой условного цикла.

PORTD = 0b00000001;
while(1)
{

}

В скобочках указывается условие, которое должно либо выполняться либо не выполняться. Также как у функции есть тело, то у условия также есть тело, также заключенное в фигурные скобки. И код, находящийся в теле цикла, будет выполняться бесконечно, пока условие, находящееся в скобках будет выполняться, то есть будет истинным. Как только условие перестанет выполняться, а проверяется это тогда, когда код выполнится до конца (до закрывающей фигурной скобки), то мы выходим из цикла и код продолжает выполняться уже дальше тот, который находится уже не в теле цикла, а после закрывающей фигурной скобки. А истина в информатике – это TRUE или 1. Поэтому в данном случае цикл будет бесконечным, так как там стоит единице, а единица всегда равна единице. Бесконечный цикл организован для того, чтобы код, написанный для контроллера, выполнялся постоянно, то есть чтобы наш контроллер постоянно работал и не останавливался. В нашем случае тело пустое, и наш контроллер, вернее его АЛУ, будет всё время висеть в данном цикле и ничего не делать до тех пор, пока мы не отключим питание, либо нам его не отключат в розетке, либо, не дай Бог, сгорит контроллер. То есть светодиод наш будет светиться постоянно.

Сегодня мы не будем пробовать нашу программу прошивать в микроконтроллер, и даже не будем пробовать ещё в виртуальном контроллере, то есть в программе симуляции, а попробуем симуляцию запустить в самой студии, так как на прошлом занятии мы в качестве отладчика и выбрали симулятор. Двойным щелчком мыши либо клавишей F9 мы установим точку останова на команде PORTD = 0b00000001; и, когда мы запустим отладку, то отладчик, как только увидит данную точку, должен будет в этом месте остановить выполнение программы, и мы сможем посмотреть, какие уровни и где у нас установились.

Чтобы запустить отладку, мы нажмём кнопку в виде зелёного треугольника и дождёмся, когда отладчик остановится на нашей красной точке

Здесь мы наблюдаем, что ещё у нас открылась карта нашей памяти, в которой нам пока ещё ничего не понятно. Если бы мы писали на ассемблере либо на машинном коде, то нам бы это было понятнее. Поэтому нас интересует другая. Карта. Для этого мы нажмём вот эту кнопочку

Данная кнопочка (I/O View) откроет нам окно с данными наших портов ввода-вывода и прочей периферии

 

Нажмем в данном окне на строку PORTD и увидим в нижней половине окна, что весь наш регистр DDRD, отвечающий за направление отдельных ножек порта выставился весь в единички, то есть на выход

А дальше уже проблема. Чтобы нам посмотреть, как сработает следующая команда, которая включит нам нулевую ножку, отладчику необходимо остановиться на следующей строке кода, а у нас её нет, у нас только бесконечный цикл, который для отладчика – не строка. Поэтому мы пока остановим отладчик следующей кнопкой

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

PORTD = 0b00000001;

PORTD = 0b00000010;

Конечно всё это на практике у нас не сработает, так как мы не успеем заметить свечение предыдущего светодиода. Чтобы задумка заработала практически, мы должны ещё с вами включить между данными командами задержку, а это тема уже других более поздних занятий. Но тем не менее мы данную команду включим, чтобы отладчику было где остановиться. Затем мы запустим заново отладку. Точка останова у нас также находится пока на той строке, на какой и была до этого. Запустим опять отладчик. Собирать проект перед отладкой необязательно, так как отладчик сам его пересоберет. Дожидаемся остановке отладчика на точке. В окошке с вводом-выводом опять нажмём на строке с нашим портом. Дальше начинаем шагать по программе. Для этого нажимаем следующую кнопку или функциональную клавишу F10, о чем нам подсказывает студия, как только мы подносим указатель мыши к данной кнопке

Теперь отладчик остановится на следующей строке

И теперь в окне ввода-вывода мы видим уже следующую картину

Мы видим, что самый левый бит, соответствующий нулевой ножке порта переключился в высокое логическое состояние, причём мы это видим не только в регистре PORTD, но и в регистре PIND, который отвечает за считывание состояния ножек порта D при его работе на ввод. Вот таким вот образом мы и отлаживаем наши программы.

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

После этого текст кода у нас должен будет остаться вот таким

 

Предыдущий урок Программирование МК AVR Следующий урок

 

Исходный код

 

 

Купить программатор можно здесь (продавец надёжный) USBASP USBISP 3.3

 

Смотреть ВИДЕОУРОК

 

 

Post Views: 35 052

Вострухин А.В. Вахтина Е.А. Введение в программирование микроконтроллера AVR на языке Ассемблера

Вострухин А.В. Вахтина Е.А. Введение в программирование микроконтроллера AVR на языке Ассемблера

Введение

Современные электронные устройства работают под управлением микроконтроллеров, основой функционирования которых является программное обеспечение. Его разработка становится необходимой составляющей инженерной деятельности. Об этом убедительно и образно писал в 1984 году Ч.А.Р. Хоар, профессор Оксфордского университета, ученый с мировым уровнем признания: «. ..программирование… подобно открытию древними греками аксиоматической геометрии – оснований для землемерной и картографической деятельности, а затем для проектирования и возведения зданий и мостов. Оно подобно открытию законов Ньютона и дифференциального исчисления – оснований для астрономии, а также для таких мирских начинаний, как навигация и управление артиллерийским огнем. Оно подобно открытию сопромата – основания для надежного и экономичного строительства железобетонных зданий, мостов и нефтехранилищ…»

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

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

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


Ревич Ю.В. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера

Ревич Ю.В. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера

Введение

Микроконтроллеры, их возникновение и применение

Говорят, что в 1960-е годы, наблюдая за участниками студенческих демонстраций протеста, Гордон Мур заметил: «Истинные революционеры – это мы». Ученик и сотрудник одного из изобретателей транзистора У. Шокли, в числе прочего считающегося основателем знаменитой Кремниевой долины, в свою очередь основатель и лидер компаний, которым суждено было сыграть ведущую роль в развитии микроэлектроники, Мур знал, что говорил. Парадоксальным образом именно изобретениям Мура и его сотрудников было суждено стать основой того мира, в котором впоследствии сконцентрировалась деятельность «бунтующей молодежи» 1960-х. Современные хакеры (не компьютерные хулиганы из газет, а настоящие увлеченные своим делом компьютерщики) — прямые идеологические наследники сорбоннских студентов и американских демонстрантов, сменившие девиз «Make love not war» на «Не пишите лозунги – пишите код». Неслучайно многие известные деятели электронно-компьютерной индустрии, авторы изобретений, сформировавших лицо современного мира, – выходцы из среды, близкой той самой «бунтующей молодежи».

Наша история о микроконтроллерах началась с того, что в 1957 г. Гордон Мур совместно с Робертом Нойсом, ставшим впоследствии одним из изобретателей микросхемы, и еще шестью сотрудниками Shockley Semiconductor Labs (Шокли назвал их «предательской восьмеркой»), основал компанию Fairchild Semiconductor. Ей мы обязаны не только развитием полупроводникового рынка и внедрением микросхем в инженерную практику, но и тем, что она стала своеобразной кузницей кадров и генератором идей для молодой отрасли.

Вот только некоторые из исторических фактов. Сам Мур с Нойсом в конце 1960-х создали фирму Integrated Electronics, которая под сокращенным названием Intel сейчас знакома каждому школьнику. Джереми Сандерс, основатель другой известнейшей компании – AMD, также вышел из Fairchild, где отличился открытием современной экономической модели производства и продаж полупроводниковых компонентов, в которой себестоимость изделия стремится к нулю по мере повышения объема партии. Чарли Спорк, один из ключевых менеджеров Fairchild, в 1967 г. стал директором National Semiconductor, которой впоследствии руководил четверть века. Половина «предательской восьмерки» — Джин Хоерни, Евгений Клайнер, Джей Ласт и Шелдон Робертс – в 1961 г. основала компанию Amelco, из которой впоследствии выросли всем известные теперь Intersil, Maxim и Ixys. Сотруднику Fairchild Роберту Видлару мы обязаны изобретением операционных усилителей — разновидности микросхем, и по сей день уступающей по популярности разве что микропроцессорам. Мало того, с историей Fairchild связано возникновение известной венчурной (т. е. «рисковой») модели финансирования, сыгравшей определяющую роль в развитии всех отраслей, связанных с электроникой, компьютерами и телекоммуникациями. Недаром Fairchild нередко называют «праматерью всей электроники».


Программирование AVR урок 1 — введение

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

Можно задать логичный вопрос, почему из ряда других микроконтроллеров (далее — МК) в качестве подопытного выбран именно МК AVR. На это есть несколько причин:

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

Как говорил ранее, в качестве подопытного будем использовать МК Atmega8. Почему именно его?

Данный микроконтроллер может похвастаться наличием 3 портов ввода/вывода. Кроме этого он довольно дешевый.

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

У Atmega8 3 порта. Порт B состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7). Порт С состоит из 7 ножек-выводов (нумерация 0,1,2,3,4,5,6). Порт D состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7).

Запитывать микроконтроллер можно от 3,3 и 5 В. При напряжении питания 5 В максимальная частота тактирования составляет 16 МГц, а при напряжении питания 3,3 В – максимальная частота тактирования 8 МГц. Пока не будем заморачиваться относительно частот тактирования.

Питания подаётся на 7 ножку-вывод, а «земля» подводится к 8 ножке.

Несколько слов о программной среде (далее — ПС) для работы с МК AVR. Для данный марки МК существует специальная ПС Atmel Studio.

Скачивается бесплатно. Скачали, установили, запустили 🙂

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

Выбираем File -> new -> project .

Откроется окно выбора. Выбираем папку «Browse», в которой будем сохранять написанные проекты. Папку для проектов создал заранее.

Присваиваем имя проекту, в моём случае lesson_avr_1

Обратите внимание на галочку «create directory for solution». Если отметка стоит, то в той папке, которую мы выбрали для сохранения проектов, будет создана отдельная папка под текущий проект.

Жмём ок.

Дальше появится окно выбора микроконтроллера. В поисковой строке пишем Atmega8. В информационном окне есть ссылка на datasheet для данной модели МК.

На этом всё – проект создан.

Займемся настройкой созданного нами проекта. Нажимаем Projest -> lesson_avr_1 properties или (alt+F7)

Переходим на вкладку Tool. Выбираем – симулятор. Совершенные нами действия сделают возможным отлаживать написанный код. Сохраняем изменения. Можно сохранить изменения в одном (текущем) файле или же во всех файлах проекта сразу. Закрываем настройки.

Комментарии бывают двух видов, с помощью одних можно «закомментировать» одну строку, а с помощью других «закомментировать» целые куски кода.

  • /*…………………*/ — текст между указанными границами;
  • // одна строка;

Откомпилируем проект (соберём его). Нажмём «build solution» или F7.

После удачной компиляции мы увидим следующее сообщение)

На этом пока всё. Продолжении следует)

Картотека программирования

Использование MS Visual Studio IDE для программирования AVR/Arduino | avr

Я не очень большой фанат компании Microsoft, однако следует признать, что они сделали действительно потрясающую среду разработки Visual Studio. Особенно мне нравится в Visual Studio фича intellisense, которая автоматически дает подсказки по именам членов классов, функциям и полям структур, и для проектов AVR большого размера действительно предпочтительнее использовать Visual Studio IDE в сравнении с простым текстовым редактором.

Здесь приведена краткая инструкция (перевод статьи [1]) — как настроить среду Visual Studio 2008/2010 для использования тулчейна WinAVR и компилирования Ваших программ AVR для получения файлов в формате Intel Hex [2] (прошивка кода firmware микроконтроллера). Этот формат подходит для загрузки программы в память AVR/Arduino с использованием AVRDUDE и/или другого Вашего программатора (например, USBasp, AVRISP-mkII, JTAGICE mkII [3]). 

Примечание: предполагается, что у Вас уже установлены тулчейн AVR GCC (в составе пакета WinAVR или Atmel Studio), и конечно же среда разработки Microsoft Visual Studio.

[Шаг 1. Создание Makefile-проекта]

Запустите Visual Studio, зайдите в меню Файл -> Создать -> Проект…, выберите раздел Установленные шаблоны -> Visual C++ -> Проект, использующий makefile:

Введите имя проекта (Имя:), выберите папку, где будет расположен каталог проекта (Расположение:), уберите галочку «Создать каталог для решения», кликните OK.

Запустится мастер настройки проекта (см. скриншоты).

Настройте в окне «Параметры конфигурации отладки» следующие опции:

1. Командная строка построения: make

2. Команды очистки: make clean

3. Командная строка перестроения: make all

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

4. Вывод (для отладки): имя для выходного файла прошивки. Обязательно укажите расширение файла *.hex (GenericHID.hex, к примеру).

5. Путь поиска включений: %AVR32_HOME%\avr\include

Примечание: здесь %AVR32_HOME% это переменная окружения, в которой задан каталог установки WinAVR (например, C:\WinAVR-20100110) или тулчейна из Atmel Studio (например, c:\Program Files\Atmel\AVR Tools\AVR Toolchain). Вместо переменной окружения можно указать просто реальный путь до тулчейна.

Кликните Далее. В окне «Параметры конфигурации выпуска» поставьте галочку «Как в конфигурации отладки». Кликните Готово.

[Шаг 2. Сконфигурируйте проект]

Среда Visual Studio автоматически создала для Вас пустой makefile-проект. Теперь его нужно немного настроить, чтобы можно было начать писать программу для AVR.

Сделайте правый клик на названии проекта (myAVRproj) в дереве Обозревателя решений, и выберите в контекстном меню Свойства. Откроется окно редактирования свойств проекта с активной конфигурацией Debug.

В разделе Свойства конфигурации -> Общие из выпадающего списка «Поддержка общеязыковой среды выполнения (CLR)» (Common Language Runtime Support (/clr)) выберите вариант Поддержка общеязыковой среды выполнения (CLR). Включение этой опции предоставляет изящную поддержку со стороны Intellisense.

Перейдите в раздел Свойства конфигурации -> NMake и убедитесь, что введенные здесь значения соответствуют необходимым командам make для сборки, очистки и перестроения (часто проекты поставляются с готовым Makefile, и команды в них могут отличаться). Также проверьте имя выходного hex-файла и убедитесь, что пути поиска включаемых файлов соответствуют ожидаемым или добавлены в соответствующие поле ввода. В строке ввода может быть несколько путей поиска, отделенных друг от друга точкой с запятой ‘;’. Если что-то не так, то исправьте.

[Шаг 3. Создание и добавление Makefile]

Создайте файл Makefile для проекта, как Вы это обычно делаете. Лично я предпочитаю использовать готовые Makefile, которые генерирует система AVR Studio, или беру готовый Makefile из разных опубликованных AVR-проектов. Например, множество проектов с отличными Makefile можно найти в составе библиотек V-USB и LUFA [4]. В этом примере я буду использовать готовый Makefile проекта USB HID устройства из библиотеки LUFA-140928. Сам проект и его makefile находятся в папке Demos\Device\ClassDriver\GenericHID. Сделайте копию содержимого этой папки в папку Вашего проекта, который Вы только что создали. В моем примере папка проекта находится в каталоге c:\TEMP\myAVRproj (у Вас это может быть любой другой каталог на диске).

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

Перед использованием makefile проверьте все его опции, чтобы они соответствовали Вашему компилируемому проекту. Опции makefile редактируются простым текстовым редактором. Здесь я рассмотрю в качестве примера настройку опций для микроконтроллера AT90USB162 и тактовой частоты 16 МГц (макетная плата AVR-USB162).

LUFA_PATH. здесь должен быть указан полный или относительный путь до каталога lufa-LUFA-140928/LUFA. Пример:

LUFA_PATH = c:/asm/lufa-LUFA-140928/LUFA

MCU. Здесь нужно указать тип микроконтроллера. Название микроконтроллера нужно вводить маленькими буквами. Пример:

BOARD. Здесь указывается символическое название целевого устройства, для которого компилируется проект. Для макетной платы это MICROSIN162:

F_CPU. Здесь указывается тактовая частота микроконтроллера в Герцах. Она зависит от установленного кварцевого резонатора и коэффициента деления прескалера AVR. Для приложений устройств USB на микроконтроллере AT90USB162 допустимы тактовые частоты ядра 8 или 16 МГц. Пример установки тактовой частоты 16 МГц:

После того, как Вы скопировали файл makefile в каталог проекта, добавьте его в каталог Файлы ресурсов проекта Visual Studio. Для этого в Обозревателе решений сделайте правый клик на папке Файлы ресурсов в дереве проекта, и выберите Добавить -> Существующий элемент, и затем в открывшемся диалоге выбора файла выберите файл makefile проекта и кликните на кнопку Добавить.

Как вариант можно просто перетащить в Проводнике файл makefile в папку проекта Файлы ресурсов.

После этого будут работать команды меню Построение -> Очистить решение, Построение -> Построить решение (F7). Однако для удобства редактирования модулей кода их следует добавить в проект.

[Шаг 4. Добавление файлов исходного кода]

Перетащите файлы исходного кода с расширением *.c (для нашего примера Descriptors.c, GenericHID.c) в папку «Файлы исходного кода» Обозревателя решений. Заголовочные файлы с расширением *.h (Descriptors.h, GenericHID.h) перетащите в папку «Заголовочные файлы» Обозревателя решений.

[Шаг 5. Перепрошивка микроконтроллера]

Теперь для полного счастья осталось настроить функцию перепрограммирования микроконтроллера прямо из среды Visual Studio. Для этого через меню Сервис -> Внешние инструменты нужно добавить запуск утилиты для программатора [3]. В этом примере вместо программатора я буду использовать встроенный загрузчик (USB bootloader) Atmel DFU, а в качестве утилиты программирования буду использовать утилиту командной строки Flip DFU (batchisp.exe [5]).

Зайдите в меню Сервис -> Внешние инструменты, нажмите кнопку Добавить.

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

Название: введите Flip DFU (можно ввести произвольное имя).

Команда: введите %ProgramFiles(x86)%\Atmel\Flip 3.4.7\bin\batchisp.exe — это полный путь до утилиты batchisp.exe в каталоге установки утилиты Atmel Flip.

Аргументы: введите -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer GenericHID.hex program verify

Исходный каталог: введите $(ProjectDir)

Поставьте галочку «Использовать окно вывода».

После этих действий в меню Сервис появится дополнительный пункт Flip DFU, запускающий программирование памяти контроллера файлом GenericHID. hex через USB-загрузчик. Пример вывода после успешной операции программирования:

Примечание: для программирования плат Arduino, metaboard, AVR-USB-MEGA16 вместо batchisp.exe можно использовать утилиту AVRDUDE, она подойдет не только для работы с загрузчиками, но и с программаторами ISP. Для управления программатором JTAGICE mkII можно использовать утилиту jtagiceii.exe.

[Ссылки]

1. Use Visual Studio IDE to Program AVR/Arduino site:instructables.com.
2. Intel HEX: описание формата файла.
3. Программаторы для AVR.
4
. LUFA — бесплатная библиотека USB для микроконтроллеров Atmel AVR.

 

Простой и недорогой способ программирования AVR ATtiny214, ATtiny414, ATtiny814 и Atmega через интерфейс UPDI

&nbsp &nbspТеперь перейдем к подготовке рабочего места. Условно разделим это мероприятие на 2 пункта. 1 пункт — это установка необходимого программного обеспечения на компьютер. 2 пункт — это подготовка «железной» части для программирования микроконтроллеров.
1 Сначала необходимо установить на компьютер программное обеспечение.
1.1 Первым делом устанавливаем официальную версию Atmel Studio https://www.microchip.com/mplab/avr-support/atmel-studio-7. На данный момент доступна Atmel Studio 7. Здесь стоит отметить, что Atmel Studio 7 устанавливается достаточно долго. Но не переживайте, Atmel Studio 7 установиться.
1.2 После установки Atmel Studio 7. Нам потребуется установить язык программирования Python свежей версии https://www.python.org/downloads. На данный момент доступна версия 3.7.3. Python является кроссплатформенным и открытым языком программирования. Установка Python необходима только для запуска рабочего скрипта на компьютере. Скрипт будет прошивать микроконтроллер Attiny нашим файлом с расширением hex, который мы получим с помощью Atmel Studio 7 при компиляции нашей программы. Программировать на Python в данном случае не потребуется.
1.3 Скачиваем Проект updipy с https://github.com/mraardvark/pyupdi. На этой странице вверху (выше середины страницы) справа будет вкладка «Clone or Download». Нажимаем на нее. Вкладка раскроется и там будет ссылка «Download ZIP». Нажимаем на нее и скачиваем проект на свой компьютер. Мы рекомендуем распаковать проект в директорию С:\Users\User. Это делается для простоты. Так как в командной строке по умолчанию указана именно эта директория. Все файлы и папки проекта должны быть в одной директории. Запуск программы pyupdi осуществляется через скрипт pyupdi.py через командную строку компьютера. Конечно, можно создать переменную окружения для того чтобы туда прописать директорию пути скрипта. Для updipy потребуется установить также дополнительные модули: intelhex, pylint, pyserial. Установить эти модули можно через командную строку компьютера с помощью команды “pip install pylint” для модуля pylint. Аналогичная команда потребуется для установки других модулей. \.include » %f — находит строчку начинающуюся на .include, опция -m 1 указывает что не стоит продолжать поиск, если хотя бы 1 строка уже найдена.
sed -r -e ‘s/.*include «(.+)def\.inc».*/\1/’ — из найденной строки с помощью шаблона вычленяется название контроллера (все что после кавычки и перед def.inc).
sed «s/tn/t/g» — заменяет tn на t. так как в аппноутах Tiny2313, например, зовется tn2313, а avrdude ее понимает как t2313. 

Чтобы Geany сам распознавал тип микроконтроллера и менял опцию -p в команде avrdude нужно в исходном файле анализировать строки вида .include «m8def.inc», которые указывают тип используемого микроконтроллера и присутствуют в каждом asm файле.

Полезная и приятная особенность данного скрипта: так как для связки команд используется операнд &&, то следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если строка .include не была найдена в файле, или при прошивке что-то пошло не так — терминал останется открытым и мы сможем прочитать сообщения о случившихся ошибках. \.include » %f | sed -r -e ‘s/.*include «(.+)def\.inc».*/\1/’ | sed «s/tn/t/g»` && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit отличается от наличествующих в интернете подобных описаний Geany. Отличается в лучшую сторону: во-первых она действительно работает (LinuxMint15), во-вторых корректно распознает все имена поддерживаемых контроллеров.



Учебное пособие по

AVR — Как работает программирование

Итак, у вас есть этот чип и его программируемый. Но как поместить свою программу на этот чип?

комментариев? Предложения? Напишите на форум!

Когда код компилируется в программу Windows, он превращается в «двоичный», что означает, что он не читается человеком (что трудно понять машинам), вместо этого он машиночитаемый. В Windows эти программы (часто называемые приложениями или исполняемыми файлами ) часто называются с окончанием . exe (например, notepad.exe или winword.exe ), на компьютерах Mac их имена часто заканчиваются на .App (хотя Finder это скрывает).

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

Ваш компилятор сгенерирует файл .hex из кода, а затем все, что вам нужно сделать, это передать этот .шестнадцатеричная программа на чип!

Как обсуждалось в разделе «Что это такое?», Микросхема AVR имеет небольшой объем флэш-памяти. В этой памяти хранится программа. Когда чип запускается (вы даете ему питание), он запускает любую программу во флеш-памяти. Итак, все, что нам нужно сделать, это выяснить, как записать на флэш-память

.

Хороший способ подумать о вспышке — это изучить ее так, как вы, вероятно, знакомы с ней. Флэш-память также используется в картах MMC / SD, которые обычно используются в MP3-плеерах или цифровых камерах.Если вы посмотрите на нижнюю часть карточки, вы увидите маленькие золотые пальчики. Это контактные площадки.


Задняя часть мультимедийной карты. Анджей Барабаш.

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

Штифт # Имя контакта Функция контактов
1 #CS Chip Select (Активировать)
2 SI Серийный вход
3 GND Земля
4 VCC Мощность
5 SCK

Часы данных

6 Не подключен Не подключен
7

СО

Последовательный выход

Контакты питания и заземления используются для подключения питания к микросхеме. Вывод Chip Select используется для того, чтобы сообщить микросхеме, что он должен проснуться, вывод Serial In используется для отправки данных на карту, Serial Out — как данные отправляются с карты, а Data Clock — как мы сообщаем карте, как быстро мы хотим, чтобы данные были сохранены или получены. Данные выталкиваются из чипа по одному биту за раз, поэтому, если тактовая частота составляет 100 кГц, это означает, что в секунду передается 100 000 бит.

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

Ладно, при чем тут программист? Что ж, микроконтроллер похож на флешку, а кардридер — на программатор. Когда вы вставляете чип в программатор (или, что более вероятно, кабель программатора в печатную плату, которая содержит чип), это позволяет программному обеспечению на вашем компьютере взаимодействовать с чипом через программатор. Обычно вы можете просто дать простую команду, например «отправить эту программу», и программист сделает всю тяжелую работу по программированию и проверке данных.

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

Например, я большой поклонник микросхемы ATtiny2313, поэтому давайте откроем «сводную» таблицу (всего лишь дюжина страниц вместо стандартных 250.На первой странице есть всякая информация о том, что находится в чипе.

Quick Quiz: Сколько EEPROM имеет чип? Как насчет флеш-памяти? ОЗУ?

На второй странице распиновка. Мы будем иметь дело с пакетом PDIP (пластиковый двухрядный пакет), который выглядит следующим образом:

Распиновка воспроизводится здесь

Микросхема имеет 20 контактов. Посмотрите внимательно, и вы заметите, что 6 из этих контактов эквивалентны контактам карты SD / MMC.Есть вывод питания ( VCC ) и вывод заземления ( GND ), также есть вывод SCK (почему-то он называется UCSK ), вывод Serial Out ( MISO — Master In Serial Out ) и Serial In pin ( MOSI — Master Out Serial In) . Единственное, чего нет, так это вывода / ChipSelect. Вместо этого он имеет вывод / RESET , который действует аналогичным образом. Когда на выводе / RESET находится положительное напряжение (такое же, как у VCC ), микросхема запускает программу, когда вывод / RESET находится на земле (такое же напряжение, как GND ), тогда микросхема останавливается. и слушает инструкции по программированию на выводах программирования.

У всех SD-карт одинаковые пальцы в одном и том же месте, поэтому, когда вы вставляете их в кардридер, подключаются правильные контактные площадки. Программирование AVR работает аналогичным образом. Вместо контактных площадок микросхему часто помещают в печатную плату, которая имеет выводы заголовка, в которые вставляется программатор, распиновка заголовка стандартизирована, так что любой программист может использоваться после правильного подключения заголовка.

Существует два стандарта для внутрисистемного программирования AVR:

Слева — стандартный 6-контактный разъем, справа — стандартный 10-контактный, заголовки выглядят следующим образом:

Вот пример фотографии, показывающий, как это выглядит, когда микросхема подключена с 6-контактным разъемом


Фото любезно предоставлено EvilMadScientistLabs

Черная метка на печатной плате и заголовок обозначают контакт №1.Вы можете проследить провода, чтобы сопоставить контакты микросхемы с контактами заголовка и убедиться, что эта макетная плата правильная.

Упражнение: проверьте распиновку для этой целевой платы

Чтобы узнать, как сделать «целевую плату», которая позволит вам программировать AVR (в частности, как сказал ATtiny2313), посетите учебник EvilMadScientistLab. Это довольно просто и будет покрывать часть того же материала.

Теперь, когда вы знаете, как работает программирование, пора выбрать программатора weapon .

Учебные руководства по программированию микроконтроллеров Atmel AVR

Микроконтроллер AVR от Atmel (теперь Microchip) — один из наиболее широко используемых 8-битных микроконтроллеров. Arduino Uno основан на микроконтроллере AVR; это недорого и общедоступно во всем мире.

В этой книге авторы используют пошаговый и систематический подход для демонстрации программирования микросхемы AVR. Примеры как на языке ассемблера, так и на C объясняют, как программировать многие функции AVR, такие как таймеры, последовательная связь, ADC, SPI, I2C и PWM.

Текст состоит из двух частей:

  1. Первые шесть глав используют программирование на языке ассемблера для изучения внутренней архитектуры AVR.
  2. В главах 7-18 используется как сборка, так и C, чтобы показать периферийные устройства AVR и интерфейс ввода-вывода с реальными устройствами, такими как ЖК-дисплей, двигатель и датчик.

В первом издании этой книги, опубликованном Pearson, использовался ATmega32. Он по-прежнему доступен для покупки на Amazon. Это новое издание основано на Atmega328 и плате Arduino Uno.

Дополнительная информация …


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

При этом вы приблизитесь к чипу и сможете выжать из него больше мощности и функций.

Каждая глава этой книги посвящена проектам, которые включают эту конкретную тему микроконтроллеров. Каждый проект включает схемы, код и иллюстрации рабочего проекта.

Дополнительная информация …


Используя популярный и экономичный встроенный контроллер Atmel AVR в качестве платформы и приложения для обучения, Embedded C Programming и Atmel AVR являются идеальным выбором для новичков. Эта новаторская книга, содержащая множество полнофункциональных примеров приложений, позволяет пользователям применять подход «учиться на собственном опыте» по мере развития знаний и навыков, необходимых для достижения профессионального уровня.

После знакомства с RISC-процессорами Atmel AVR читатели сразу же переходят к учебному пособию по встроенному языку C.

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

В дополнение к исчерпывающему справочнику по библиотечным функциям, целая глава, посвященная компилятору CodeVision AVR C, содержит подробные пошаговые инструкции по установке и работе IDE, смешиванию Assembler с C и использованию генератора кода Code Wizard. Использование периферийных устройств, таких как клавиатуры, ЖК-дисплеи и другие стандартные устройства, связанные со встроенными микроконтроллерами, также полностью исследуется в этом всеобъемлющем современном руководстве и справочном руководстве для программистов.

Дополнительная информация …


STK128 + — это полноценная экономичная плата разработки для ATmega128. Он предназначен для того, чтобы дать разработчикам возможность быстро разрабатывать код для микроконтроллера ATmega128, ускоряя разработку прототипов устройств ATMega 128.

Микросхема ATmega128 установлена ​​на плате устройства, которую можно отделить от материнской платы, что обеспечивает безопасную замену микроконтроллера. Чип ATmega128 поставляется в корпусе TQFP64 и может быть ATmega128-16AU, ATmega128L-8AU или ATmega128A-AU.

В комплект STK128 + входит плата устройства ATmega128, дополнительная запасная плата устройства ATmega128 и пакет Experiment Fittings Pack.

Дополнительная информация . ..

Что нужно для программирования микроконтроллеров AVR? | Орвин Демси

Компьютер
Если вы живете в 20 веке, вы должны знать, что такое компьютер.Если нет, то вы можете легко погуглить. О, убедитесь, что на вашем компьютере установлена ​​ОС Windows (операционная система), так как это руководство будет работать в Windows.

Программист
Программист! Да, «эр» в конце слова «программист» относится к вещам, которые выполняют действие глагола, например, к слову «игрок», «микшер», «мститель» и т. Д. Программист AVR означает устройство, которое может программировать AVR. В Интернете есть разные программисты AVR, на самом деле, у каждого микроконтроллера есть свой программатор, так что их будет много.Но в этом уроке мы будем использовать USBasp.

Мой программатор USBasp

Плата разработки
Плата разработки — это в основном инструмент, который позволяет микроконтроллеру взаимодействовать с программистом. Согласно моим выводам, отладочную плату можно также назвать минимальной системной или целевой платой. Причина, по которой ее называют минимальной системой, потому что это в основном система, которая позволяет микроконтроллерам работать минимально. Что значит минимальный? Мы вернемся к этому позже.А пока просто помните, что отладочная плата / целевая плата / минимальная система подключает ваш микроконтроллер к вашему программатору. Кстати, вот мой:

Моя 40-контактная плата разработки AVR uC

Драйвер USBasp
Драйвер нужен, чтобы ваш компьютер мог распознавать USBasp. Если он не установлен, ваш компьютер не сможет распознать ваш программатор (USBasp), что сделает программирование в MCU невозможным.

Вот ссылка на драйвер USBasp, который я использовал, или вы можете найти его в Google:

https: // www.fischl.de/usbasp/

Загрузите драйвер и сохраните его в любом месте. Попробуйте вставить USBasp в порт USB, затем, чтобы проверить, распознает ли его компьютер, перейдите в Диспетчер устройств.

Вы увидите, что в разделе «Другие устройства» рядом с USBasp отображается небольшое желтое предупреждение. Это означает, что драйвер еще не установлен. Далее нам нужно установить драйвер.

Если драйвер был успешно установлен, вы увидите, что предупреждение исчезло.

Если драйвер не был успешно установлен, обычно вы все равно видите предупреждающий символ на символе USBasp. Чтобы решить эту проблему, попробуйте переустановить драйвер, в большинстве случаев это будет основной причиной.Другой причиной может быть повреждение USBasp, поэтому вам может понадобиться новый, но это случается редко.

Теперь ваш компьютер распознал USBasp, мы в основном готовы программировать MCU. Но нам нужно программное обеспечение, которое могло бы запускать и компилировать код C. Это программное обеспечение, которое мы собираемся использовать в этом руководстве, называется AVR Studio 7. AVR Studio — это IDE (интегрированная среда разработки), созданная в соответствии с требованиями AVR. AVR Studio можно бесплатно скачать здесь.

Сам AVR Studio 7 должен быть настроен так, чтобы он распознавал USBasp.Для получения информации о том, как настроить что-либо в AVR Studio, проверьте следующее.

WinAVR
WinAVR — это инструментальные средства разработки программного обеспечения для микропроцессоров Atmel. WinAVR можно бесплатно скачать здесь. WinAVR включает компилятор GNU GCC для C ++ и C, Блокнот программиста, MFile и AVRdude. «GNU GCC» может показаться устрашающим, но это просто компилятор для нашего кода C. Чтобы получить более интуитивное понимание того, как программировать MCU, рекомендуется начинать программирование с помощью блокнота программиста.Учебник по этому поводу будет доступен здесь.

AVRdude
AVRdude — это программа для загрузки и выгрузки программы во встроенную память микроконтроллеров AVR с использованием техники внутрисистемного программирования (ISP). Он может программировать Flash или EEPROM. AVRdude необходим, если вы хотите программировать микроконтроллер AVR. Чтобы проверить, установлен ли AVRdude, перейдите в командную строку, затем введите «avrdude», если на экране появится список команд AVRdude, значит, он установлен.

Список командной строки AVRdude

Внутри WinAVR есть пара программных инструментов, которые взаимодействуют таким образом, что наш код C может быть запрограммирован в микросхемы AVR. Это взаимодействие между этими инструментами называется цепочкой инструментов, представьте себе это как цепочку, в которой один конец связан с другим. Проще говоря, вот как наш код может оказаться в uC:

1. Откройте Atmel Studio 7.

2. Напишите программу на языке C.

3. Скомпилируйте с помощью компилятора GNU GCC.

4. Создайте шестнадцатеричный файл.

5.Дайте команду AVRdude прошить нашу программу в микроконтроллер.

6. Микроконтроллер выполняет шестнадцатеричный файл внутри своей флэш-памяти.

Для получения подробной информации о AVRdude я написал руководство о том, как программировать AVR с помощью блокнота программиста, пожалуйста, проверьте его.

Вот и все, ребята! Мы готовы запрограммировать несколько интересных вещей в наш MCU! Ознакомьтесь со следующей частью, чтобы начать нашу первую программу!

Терминология
Краткое изложение новых слов или сокращений в этом руководстве.

Flash / Program
Запишите код в наш MCU

MCU / uC
Аббревиатура микроконтроллера, MCU расшифровывается как Microcontroller Unit

IDE
Stands for Integrated Development Environment, представляет собой программное приложение, которое обеспечивает программист по разработке программного обеспечения. (взято из Википедии https://en.wikipedia.org/wiki/Integrated_development_environment)

USBasp
Один из программистов для AVR MCU.

Плата разработки / Минимальная система / Целевая плата
Эти три слова относятся к одному и тому же объекту — плате, которую мы использовали для подготовки нашего микроконтроллера перед прошивкой нашей программы.

WinAVR
Набор программных инструментов, созданных для программирования микроконтроллеров Atmel. Два важных элемента, которые включены в WinAVR:
— Компилятор GNU GCC: Компилятор C
— AVRdude: программа для управления содержимым микроконтроллера AVR с использованием внутрисистемного программирования (ISP)

ISP (Внутрисистемное программирование)
способность микросхемы, которую можно программировать, не удаляя ее из всей системы.

Программирование микроконтроллеров AVR и Arduino с использованием Arduino ISP

Всем микроконтроллерам (MCU) требуется какой-то механизм для их программирования, даже если они программируются только один раз. Обычно программный код пишется на главном компьютере, затем он компилируется или транслируется, а объектный (машиночитаемый) код загружается в MCU («цель») с ПК («хост») с помощью кабеля ( обычно USB или RS232), который (с некоторым программным обеспечением) часто называют «программистом». После программирования MCU функционирует так, как закодировано.

Одним из очень популярных производителей плат для разработки микроконтроллеров является компания Arduino из Италии. Многие платы Arduino содержат микроконтроллеры AVR, для которых также требуются программисты для сохранения программ, созданных на главном компьютере, в память целевого MCU, например, микроконтроллер AVR. Внешние программаторы часто используются для микроконтроллеров AVR и могут быть дорогостоящими.

Большинство целевых микроконтроллеров приходится программировать несколько раз во время разработки проекта, поэтому невозможно удалить микроконтроллер из схемы для его программирования.Многие микроконтроллеры, включая процессоры AVR, можно программировать с помощью встроенного программатора (ISP), поэтому их не нужно снимать с печатной платы. [i]

По умолчанию платы Arduino имеют резидентный код MCU, называемый загрузчиком. Загрузчики — это первые программы, которые населяют MCU, когда вы их включаете. Загрузчики инструктируют MCU, что загружать или делать дальше. Arduino упрощает использование связи между хостом ПК и микроконтроллером (целевым) на плате с помощью интегрированной среды разработки (IDE).IDE является резидентной и включает инструменты, которые разработчики могут использовать для программирования, компиляции и отладки целевого MCU.

Загрузчик также поддерживает связь между Arduino IDE и платой Arduino через USB. Загрузчик отвечает за запись кода на чипе, поступающего из Arduino IDE.

Платы разработки

Arduino имеют общий дизайн, который делает их простыми в использовании, включая бесплатные программные инструменты. Платы контроллеров Arduino очень популярны для начинающих во встроенном программировании и часто используются в образовательных учреждениях.Простое USB-соединение между платой разработки Arduino (целевой) и хост-компьютером делает Arduinos подходящим для разработки встроенных проектов без необходимости понимать , как получить программный код в MCU и запустить код оттуда. (Arduino называет программу или код «эскизом».) Платы Arduino больше всего подходят для небольших проектов.

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

Платы

Arduino имеют небольшое количество универсальных вводов-выводов и могут использоваться для множества различных целей. Например, платы Arduino могут выступать в качестве инструмента программиста для других микроконтроллеров AVR с использованием Arduino ISP и являются одним из самых простых и дешевых методов программирования микроконтроллеров AVR. Встроенный программатор Arduino — это встроенная функция, предлагаемая в бесплатной среде разработки Arduino.Интернет-провайдер позволяет программировать платы Arduino и другие микроконтроллеры AVR, используя другую плату Arduino, предназначенную для этой цели. [Ii]

Однако программирование недавно разработанной платы Arduino с использованием полнофункциональной платы Arduino (в качестве программиста — Arduino) имеет несколько условий. Во-первых, «программист-Arduino» (Arduino, который вы настроили как программист) должен быть , настроен как ISP. Эскиз (код) по умолчанию доступен в примере кода в меню «Файл» среды Arduino IDE.[iii] Скетч Arduino ISP передает необходимые инструкции программисту-Arduino, чтобы настроить его в режиме программирования.

Рисунок 1: Вариант эскиза Arduino ISP. (Источник: скриншот автора) Рисунок 2: Скетч Arduino ISP. (Источник: снимок экрана автора)

За состоянием программатора-Arduino можно следить, подключив светодиоды, как показано. Скетч Arduino ISP предварительно запрограммирован для этой функции.

Рисунок 3: Подключение светодиодов Arduino. (Источник: скриншот автора)

Контакт 7 = Программирование (включается во время программирования)

Контакт 8 = Ошибка (включается в случае ошибки программирования)

Контакт 9 = сердцебиение (остается включенным после включения программатора)

После настройки программатора-Arduino устанавливается соединение между программатором-Arduino и целью Arduino.Конфигурация контактов должна быть выполнена точно так, как указано в эскизе Arduino ISP.

Интернет-провайдер Arduino обменивается данными с помощью протокола последовательного периферийного интерфейса (SPI) для программирования микроконтроллеров AVR. Связь SPI использует 4 логических сигнала: MOSI, MISO, SCLK и SS. Помимо I 2 C, SPI является одним из наиболее часто используемых способов связи для MCU. SPI следует архитектуре ведущий-ведомый, что означает, что ведущее устройство может взаимодействовать с несколькими ведомыми устройствами, используя одни и те же выводы данных, а целевое ведомое устройство выбирается с помощью линии выбора ведомого. Если есть карты памяти, выбор ведомого используется для выбора конкретной микросхемы среди множества микросхем. Однако, когда вы используете Arduino в качестве инструмента программирования, сигнал выбора ведомого используется только для сброса микроконтроллера. Сброс микроконтроллера переводит его в состояние приема команд от программатора Arduino. [iv]

На программаторе-Arduino контакты 10, 11, 12 и 13 используются в качестве контактов данных. Конфигурации следующие:

Контакт 10 = СБРОС

Контакт 11 = MOSI

Контакт 12 = MISO

Контакт 13 = SCK

Контакты 5 В и заземления могут быть подключены от программатора Arduino.Это имеет важное значение для подключения опорного основания обоих Arduinos, чтобы избежать появления сбоев, а также поддержание безопасности.

Внутрисхемное последовательное программирование (ICSP) — это возможность программирования микроконтроллера без отключения от схемы. Заголовок ICSP физически доступен на плате Arduino в виде 6 контактов. Соедините контакты 11, 12 и 13 целевой Arduino с контактами 11, 12 и 13 вашего программатора Arduino. Обратите внимание, что контакт 10 вашего программатора Arduino должен подключаться к контакту сброса вашей целевой Arduino.В качестве альтернативы, выводы заголовка ICSP могут использоваться для связи SPI. (См. Рисунок 4).

Рисунок 4: Заголовок Arduino ICSP. (Источник: снимок экрана автора)

После подключения всего вышеперечисленного вам необходимо определить, что вы используете режим программатора с вашего хост-компьютера. Перейдите в меню «Инструменты» и выберите «Arduino as ISP» в параметрах «Программист». (См. Рисунок 5).

Рисунок 5: Настройка программиста Arduino в качестве провайдера (Источник: снимок экрана автора)

Затем загрузите загрузчик в память вашей целевой Arduino, а затем определите свои «предохранители.«В Arduino-land плавкие предохранители представляют собой набор инструкций для определения множества функций микроконтроллера. Например, частота микросхемы и источник тактирования определены в предохранителях. Микроконтроллеры чувствительны к рабочему напряжению, и если уровень напряжения упадет ниже определенного уровня, микроконтроллер может выйти из строя. Минимальное рабочее напряжение также определяется внутри предохранителей. [v]

Вышеуказанные шаги необходимы, если программатор-Arduino должен быть настроен так, чтобы он был совместим с Arduino IDE для прямой загрузки эскиза.Параметр «записать загрузчик» также находится в меню инструментов и записывает загрузчик на целевой Arduino (см. Рисунок 6).

Рисунок 6. Вариант записи загрузчика (Источник: снимок экрана автора)

Если микроконтроллер или плата Arduino могут взаимодействовать с программой Arduino IDE, это дает различные преимущества, например, возможность проверять результаты во время выполнения с помощью последовательного монитора Arduino IDE. (Serial Monitor открывается в отдельном окне, действуя как независимый терминал, который принимает и отправляет последовательные данные.)

Если загрузчик не загружен в микроконтроллер, он не сможет использовать функции Arduino и не сможет взаимодействовать с Arduino IDE. vi Загрузчик использует часть памяти. В некоторых случаях использование IDE Arduino не требуется, и поэтому не нужно программировать загрузчик. Если загрузчик не запрограммирован, можно освободить больше памяти для основного эскиза программы. Например, в Arduino UNO общий объем памяти 32 КБ, а 0.Под загрузчик отведено 5 КБ памяти. vii Если загрузчик не установлен, общая память, доступная для основного эскиза программы, больше.

Arduinos хороши для изучения и экспериментирования с новыми идеями. Поскольку Arduino имеет открытый исходный код, включая схемы проектирования оборудования и файлы Gerber, любой может скопировать Arduino, изменить его и использовать в коммерческом контексте, если захочет. Arduinos — это не совсем дойная корова, а, скорее, труд любви, переопределяющий способ передачи встроенного оборудования.

i https://ieeexplore.ieee.org/document/8005274

ii https://www.arduino.cc/en/Guide/ArduinoISP

iii https://www. arduino.cc/en/Tutorial/ArduinoISP

iv https://www.arduino.cc/en/Reference/SPI

в https://www.arduino.cc/en/Hacking/MiniBootloader

vi https://www.arduino.cc/en/Tutorial/ArduinoISP

vii https://en.wikipedia.org/wiki/Arduino_Uno#Technical_specifications

hexagon5un / AVR-Programming: Примеры кода для книги «Make: AVR Programming»

Добро пожаловать!

Здесь вы найдете весь код (и многое другое!) Для книги Maker Media Марка: Программирование AVR.

Начало работы

  • Сначала загрузите содержимое этого репозитория на свой жесткий диск. Самый простой способ находится с кнопкой «Загрузить ZIP» вверху и справа в этой самой сети страница. Распакуйте zip-файл в удобное место. (Не стесняйтесь клонировать репо, если вы удобны с Git.)

  • Большинство проектов имеют общий набор определений выводов и общий простой Последовательная библиотека USART в каталоге AVR-Programming-Library . В Файлы makefiles, которые я включил, по умолчанию зависят от структуры каталогов, поэтому не перемещайте папки, если вы также не измените путь к включенные файлы в make-файл.

  • Если вы используете Arduino IDE, вам нужно скопировать каталог AVR-Programming-Library в папку альбом / библиотеки . Если вы не знаете, где это, вы можете узнать в Диалог «Файл … Настройки» в Arduino. Теперь вы можете просто связать свой код, чтобы использовать эту библиотеку. используя «Эскиз…Импортировать библиотеку »и выбрать библиотеку из меню.

  • Теперь вы можете открыть код, отредактировать его и прошить в AVR, следуя инструкциям. в книге.

Макет репо

Весь код проекта организован по главам в книге. Так что если вы ищете пример кода SPI, см. папку «Chapter16_SPI» для Проекты, связанные с SPI. Это очевидно.

Но несколько проектов интересны помимо темы, рассмотренной в глава.Например, «Chapter05_Serial-IO» включает проект, который использует последовательная связь между вашим настольным компьютером и AVR, чтобы включить ваш компьютерную клавиатуру в музыкальную клавиатуру, которая воспроизводит ноты, созданные на AVR, превратив его в орган, управляемый последовательным портом. Вы бы не подумали загляните в главу «Последовательный ввод-вывод», если вы не читали книгу.

Итак, для обзора всех проектов файл allProjectsList перечисляет их все по имени.

setupProject

Если вам нужен пустой шаблон для написания собственного кода AVR, загляните в каталог setupProject , который я здесь включил.Внутри вы найдете Файлы main.c и main.h , которые по сути пусты и готовы к работе. main.c использует мою простую библиотеку USART, которая также включена в файл Makefile . Короче говоря, вы можете скопировать этот каталог, переименовать файлы и начать использовать его в своих проектах.

Но делать это вручную не обязательно. Запуск python setupProject.py myProjectName создаст для вас каталог myProjectName , скопируйте пустые основные файлы, переименовав их соответствующим образом, и настройте Makefile соответственно.Все, что вам осталось сделать, это самая сложная часть. кодирование.

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

Наконец, если вы хотите отобразить определения контактов в определениях макросов, запустите python createPinDefines.py . Программа спросит вас, как вы хотите позвонить макрос каждого пина (например, «LED0»), а затем какой пин на AVR вы хотите связать с ним (например, «PB1»). Когда вы закончите вводить свой PIN-код, он создаст файл «pinDefines.h» с макросами (я надеюсь) с красивыми именами. Шаг этот файл в правильный каталог и включите его в свой код. Вызов LED0_SET_HIGH включит ваш светодиод.

Подробнее!

Вы прочитали книгу, вы создали проекты, вы проработали код. Но вы все равно жаждете новых проектов, примеров, еще, еще, еще! Если я могу потрубить себе в рог, вам следует посетить LittleHacks.org где я веду блог о любых проектах микроконтроллеров, над которыми я сейчас работаю.

В частности, если вы читаете Марка: Программирование AVR и вас интересуют полностью проработанные версии проектов с большим количеством фотографии, видео и объяснения, которые не поместятся в книге, перейдите к Раздел AVR-программирования LittleHacks.org.

После того, как вы исчерпали все эти ресурсы, вам следует обязательно в финал ECE 4760 Корнельского университета Проекты страница списка.Это впечатляющая коллекция приложений, которая обязательно вызовет некоторые творческие мысли. Все это хорошо задокументировано, и есть масса источников код в C. [раздел ссылок профессора Лэнда] (http://people.ece.cornell.edu/land/courses/ece4760/#links) тоже на высшем уровне, и его лекции на YouTube тоже стоит посмотреть, если вы серьезно обо всей этой сделке с AVR.

Программирование

с использованием AVR Studio — javatpoint

AVR studio — это интегрированная среда разработки (IDE), разработанная ATMEL для разработки различных встраиваемых приложений на основе 8-битного микроконтроллера AVR.Перед установкой AVR Studio необходимо установить компилятор WinAVR. Установив WinAVR, позволяет AVR Studio обнаруживать компилятор.

Шаг 1:

Шаг 2:

Щелкните по новому проекту.

Шаг 3:

  • Первый щелчок по AVR GCC
  • Настройте имя проекта
  • Выберите местоположение проекта
  • Нажмите Далее

Шаг 4:

  • Нажмите на AVR Simulator в левой части блока и затем выберите свой микроконтроллер (например, например.г. — ATmega16).
  • Затем нажмите кнопку завершения

Шаг 5:

  • Напишите код в основной области, упомянутой на снимке выше.
  • Затем сохраните файл проекта.

Шаг 6:

  • Перейти к опции проекта, как показано на снимке выше.
  • Затем щелкните параметр конфигурации.

Шаг 7:

  • Если вы используете внешний кристалл, запишите частоту кристалла в выделенном поле на снимке выше.
  • Затем установите флажок, соответствующий созданию файла Hex, и нажмите кнопку ОК.
  • Теперь снова сохраните проект.

Шаг 8:

  • Перейти к опции сборки -> Затем скомпилировать
  • Это скомпилирует код и сгенерирует ошибку, если таковая имеется.

При первой компиляции выдаст две ошибки, игнорируйте их.

Шаг 9:

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

Обучение программированию микроконтроллера AVR

Пока мы видели, что означает микроконтроллер ? А на что способны ? Но теперь вопрос в том, как заставить микроконтроллер что-то делать, и ответ — программированием. Итак, давайте изучим программирование микроконтроллера AVR и разберемся с основными принципами этого процесса.Есть несколько вещей, которые пользователь должен сделать для программирования микроконтроллера,

.
  • Настройте свой компьютер для программирования в Windows или Linux (установите необходимый компилятор и флэш-инструмент)
  • Написать программу, которая сообщает микросхеме, что делать?
  • Скомпилировать программу в машинный код
  • Программирование микросхемы с помощью аппаратного программатора, который передает машинный код в микроконтроллер
  • Тестирование и отладка
  • Микроконтроллер AVR

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

Программирование микроконтроллера AVR

Инструменты программирования

Микроконтроллеры

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

  • Атмель Студия 6
  • Затмение
  • AVR-GCC (GNU) Linux
  • WinAVR
  • AVRDude

Вы можете выбрать любую IDE из списка для написания ваших программ. Здесь, в нашем руководстве, мы рассмотрим Atmel Studio 6. Пожалуйста, просмотрите видео, которое продемонстрирует вам, как установить и настроить среду, чтобы начать писать свою первую программу.

AVR USB Programmer

Часть оборудования, подключенная к компьютеру, который программирует микроконтроллер AVR, называется программатором AVR. После того, как вы закончите писать и скомпилировать свое программное приложение в AVR C. Вам необходимо загрузить этот выходной файл, который является шестнадцатеричным файлом, в микроконтроллер, и это роль программиста. На рынке доступно несколько типов программаторов, например: USB-программатор AVR (USBasp), карманный программатор AVR (USB Tiny ISP), AVR ISP mkII, AVR ISP mkIII… ..и т. Д. И так далее…

Если вы такой же, как я, то вас может заинтересовать AVR USB Programmer на основе прошивки USBasp с открытым исходным кодом, и даже вы можете сделать свой собственный, если хотите.

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

Я надеюсь, что этот пост окажется для вас познавательным и интересным. В следующих уроках мы рассмотрим готовый пример для каждого периферийного устройства микроконтроллера ATmega32A.

.