Avr studio 5 описание на русском. От Arduino и wiring к AVR Studio и чистому СИ. Ключевые особенности и функции

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

Первые версии

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

Обратите внимание! Лучше это делать только после установки AVR studio 4 и других версий.

Долгое время фигурировала AVR studio 4 (на фото выше). Многие разработчики микроконтроллеров сталкивались с ней. Позже IDE модернизировали до AVR studio 5. Кроме интерфейса, особых изменений не было, а уже потом компания разработчик сделала ребрендинг продукта и изменила название на Atmel studio 6.

Среда AVR studio 5 поддерживала следующие микроконтроллеры:

  • AVR32;
  • XMEGA.

Atmel studio 6 отличалась от AVR studio 5 значительно, самые заметные нововведения версии:

  1. Microsoft Visual Studio 2010 стал работать с семейством AVR.
  2. Улучшенная, по сравнению с AVR studio 5, подсветка синтаксиса.
  3. Добавлены подсказки и автозавершение набора команд, что ускоряет процесс разработки.
  4. В целом, вся работа среды стала надежнее.
  5. Добавлена поддержка ARM Cortex-M.
  6. WinAVR не нужно больше устанавливать отдельно, GCC теперь устанавливается в процессе инсталляции, в отличие от младших версий.

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

Актуальная версия – Atmel studio 7

Среду разработки кардинально использовал Visual Studio Isolated Shell 2015; с одной стороны, это решение не поддерживается на Windows XP, с другой – эти меры были предприняты для улучшения как внешнего вида программы, так и функционального.

Пожалуй, самым знаменательным стало добавление поддержки Arduino в Atmel studio 7. Это значит, что вы можете перейти от набора простейших скетчей к использованию всех функций C, отладки, симулятора МК и прочим функциям. Совмещение Arduino и Atmel studio 7 дало новый виток в развитии этой простой обучающей платформы.

Изучение Atmel studio с Arduino даст возможность перейти к полному и продуктивному освоению и более глубокому знакомству с сердцем ардуины – микроконтроллером Atmega.

Дополнительно с сайта Atmel можно скачать пакет для работы и подключения LCD. В качестве примера для освоения можно использовать LCD 1602, в интернете по нему много уроков, а разработчику на дисплее доступно 16 символов и 2 строки.

С чего начать освоение?

Начинать стоит, конечно же, с покупки программатора; самый бюджетный – это – USBASP. Программатор USBASP не поддерживается в Atmel Studio 7.


Скачивайте драйвера на программатор и программу AVRdude, а чтобы заставить это все работать вместе, можно через командную строку воспользоваться командой:

«avrdude -c usbasp -p atmega32 -U flash:w:название файла с прошивкой. hex -U lfuse:w:0x6a:m -U hfuse:w:0xff:m»

и подключить его поддержку, создав профиль в atmel studio 7 (title – external tools), а в пункт Arguments ввести «-c usbasp -p atmega32 -U flash:w:$(TargetName).hex» и так для каждого типа используемых вами микроконтроллеров.

Только таким образом можно связать студио и программатор USBASP. Будьте внимательны при перепрошивке – вы можете повредить сигнатуру микроконтроллера, а восстановить её можно будет только 12 В (высоковольтным) программатором.

Какую литературу использовать для обучения?

В первую очередь скачивайте руководства с официального сайта к каждому из микроконтроллеров. Посоветовать конкретный учебник сложно, однако есть «DI Halt – AVR. Учебный курс» им можно пользоваться – создатель этого материала практик, автор многих статей на различных интернет ресурсах и просто уважаемый в кругах специалистов человек.

Для программирования AVR-микроконтроллеров существует немало средств разработки, однако, наиболее популярным, несомненно, следует признать пакет AVR Studio . Есть ряд причин такой популярности – это бесплатный пакет, разработанный фирмой ATMEL , он объединяет в себе текстовый редактор, ассемблер и симулятор. Пакет AVR Studio также используется совместно с аппаратными средствами отладки. В предлагаемой статье на примерах рассматриваются приемы работы с пакетом, что поможет начинающим программистам быстрее понять взаимодействие отдельных компонентов AVR Studio.

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

Пакет AVR Studio имеет солидную историю развития, что отражается в количестве существующих версий. В конце 2003 г. выпущена версия 4.08, которая имеет ряд полезных дополнений, а в начале 2004 г. вышло обновление (Service Pack 1), добавляющее поддержку AVR-контроллеров третьего поколения семейства ATmega48. Производство микросхем этого семейства намечено на вторую половину 2004 г.

Дистрибутив пакета и Service Pack можно загрузить с сайта www.atmel.com или получить компакт-диск с этим дистрибутивом у российского дистрибьютора фирмы ATMEL.

Работу пакета AVR Studio удобно рассматривать на какой-либо конкретной программе. В качестве илюстрации мы рассмотрим создание проекта для простейшей программы, которая будет по очереди зажигать два светодиода. Для определенности возьмем микросхему Atmega128 и подключим два светодиода в выводам 31 и 32 (это биты 6 и 7 порта D микросхемы ATmega128). AVR-контроллеры имеют мощные выходные каскады, типовой ток каждого вывода составляет 20 мА, максимальный ток вывода – 40 мА, причем это относится как к втекающему, так и к вытекающему току. В нашем примере светодиоды подключены анодами к выводам контроллера, а катоды через гасящие резисторы соединены с землей. Это означает, что светодиод зажигается подачей «1» на соответствующий вывод порта. Принципиальная схема приведена на рисунке. На схеме также показаны две кнопки, которые будут использованы в одной из программ.

Здесь уместно сделать небольшое отступление о выборе типа микросхемы для простейшего примера. Действительно, с первого взгляда может показаться странным, зачем нужен такой мощный кристалл в 64-выводном корпусе там, где хватит и 8-выводной микросхемы ATtiny12 ? Однако, в таком подходе есть логика. Известно, что в основе практически любого AVR-контроллера лежит одинаковое ядро. По большому счету, контроллеры различаются объемом памяти, количеством портов ввода/вывода и набором периферийных модулей. Особенности каждого конкретного контроллера – привязка логических имен регистров ввода/вывода к физическим адресам, адреса векторов прерываний, определения битов портов и т.д. описаны в файлах с расширением.inc, которые входят в состав пакета AVR Studio. Следовательно, используя конкретный тип кристалла, можно отлаживать программу как собственно для него, так и для любого младшего кристалла. Далее, если использовать в качестве отладочного самый старший кристалл, на сегодня это ATmega128, можно отлаживать программу практически для любого AVR-контроллера, надо просто не использовать аппаратные ресурсы, которые отсутствуют у целевого микроконтроллера. Таким образом, например, можно отлаживать на ATmega128 программу, которая будет выполняться на ATtiny13 . При этом исходный код останется практически тем же, изменится лишь имя подключаемого файла с 128def.inc на tn13def.inc. У такого подхода также есть свои преимущества. Например, «лишние» порты ввода/вывода можно использовать для подключения ЖК-индикатора , на который можно выводить отладочную информацию. Или, воспользоваться внутрисхемным эмулятором, который подключается к JTAG-порту микросхемы ATmega128 (контроллер ATtiny13 такой порт не имеет). Таким образом, можно использовать единственную отладочную плату, на которой установлен «старший» AVR-контроллер, для отладки любых вновь разрабатываемых систем, естественно, базирующихся также на AVR-микроконтроллерах. Одна из таких плат называется AS-megaM. Именно она использовалась для создания примеров программ, приводимых в статье. Это универсальный одноплатный контроллер на базе микросхемы ATmega128, который содержит внешнее ОЗУ, два порта RS-232 , порт для подключения ЖК-индикатора, внутрисхемного программатора и эмулятора AT JTAG ICE . На плате также есть место для распайки микросхемы FLASH-ПЗУ серии АТ45 в корпусах TSOP32/40/48 и двухканального ЦАП серии AD5302/ AD5312/ AD5322 . Теперь, после объяснения причин использования AVR-монстра для зажигания пары сватодиодов, можно идти дальше.

При программировании в среде AVR Studio надо выполнить стандартную последовательность действий:

  • компиляция
  • Создание проекта начинается с выбора строки меню Project\New Project. В открывшемся окне “Create new Project” надо указать имя проекта, (в нашем случае – sample1) и имя файла инициализации. После нажатия кнопки “Next” открывается окно “Select debug platform and device”, где выбирается отладочная платформа (симулятор или эмулятор) и тип микроконтроллера.

    Можно выбрать один из предлагаемых внутрисхемных эмуляторов, заметим, что у каждого эмулятора свой список поддерживаемых микросхем. Для рассматриваемого примера мы выбираем в качестве отладочной платформы AVR Simulator и микросхему ATmega128. После нажатия кнопки “Finish” нашему взору предстают собственно рабочие окна пакета AVR Studio, пока пустые. Следует в правое окно поместить исходный текст программы. Это можно сделать двумя способами, либо набрать весь текст непосредственно в окне редактора, либо загрузить уже существующий файл. Ниже приведен полный текст простейшей программы с комментариями.

    ; Пример «Управление светодиодами» ; написан для отладочной платы AS-MegaM ; Частота задающего генератора 7,37 МГц; светодиоды подключены к выводам PD6 и PD7 и через резисторы - на общий провод. ; подключение файла описания ввода-вывода микросхемы ATmega128 .include "m128def.inc" ; начало программы begin: ; первая операция - инициализация стека; если этого не сделать, то вызов подпрограммы или прерывания; не вернет управление обратно; указатель на конец стека устанавливается на последний адрес внутреннего ОЗУ - RAMEND ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ; для того, чтобы управлять светодиодами, подключенными к выводам PD6 и PD7, ; необходимо объявить эти выводы выходными. ; для этого нужно записать "1" в соответствующие биты регистра DDRD (DataDiRection) ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; основной цикл программы loop: ldi r16,(1<<6) ; светится один светодиод out PORTD,r16 rcall delay ; задержка ldi r16,(1<<7) ; светится второй светодиод out PORTD,r16 rcall delay ; задержка rjmp loop ; повторение цикла; процедура задержки; примерно полсекунды при частоте 7,37 МГц; три пустых вложенных цикла соответственно delay: ldi r16,30 ; 30 delay1: ldi r17,200 ; 200 delay2: ldi r18,200 ; и еще 200 итераций delay3: dec r18 brne delay3 dec r17 brne delay2 dec r16 brne delay1 ret ; возврат в главную программу

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

    Компиляция проекта производится командой \Project\Build или нажатием кнопки F7. Процесс компиляции отображается в окне “Output”. Это окно можно «вытащить» командой \View\Output.

    В принципе, мы уже получили выходной файл в формате.hex, который уже можно загружать в микросхему и наблюдать перемигивание светодиодов. Однако, цель статьи – показать полный цикл работы в среде AVR Studio, поэтому мы переходим к стадии отладки. Это делается командой \Debug\Start Debugging.

    Теперь устанавливаем в окне “Simulator Options” частоту кварца 7,3728 МГц для точного измерения времени выполнения программы.

    Остальные опции следует оставить без изменения. Теперь можно выполнять программу в пошаговом режиме при помощи мыши или кнопки F11.

    Пакет AVR Studio содержит мощные средства для просмотра и редактирования состояния внутренних регистров и портов ввода/вывода отлаживаемого микроконтроллера, а также время, выполнения программы. Доступ к ним осуществляется через окно “I/O”.

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

    Для отладки нашего примера, чтобы получить доступ к битам порта D, надо раскрыть строку I/O ATMEGA128 и затем строку PORTD. Теперь видны все три регистра этого порта, PORTD, DDRD и PIND. Чтобы увидеть поля Value, Bits и Address, придется расширить правую границу окна, потеснив при этом окно с исходным текстом программы.

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

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

    ; Пример «Управление светодиодами от кнопок» ; написан для отладочной платы AS-MegaM ; светодиоды подключены к выводам PD6 и PD7 и через резисторы - на общий провод. ; кнопки - на PE4 и PE5 .include "m128def.inc" ; основная программа begin: ; инициализация стека ldi r16,low(RAMEND) out spl,r16 ldi r16,high(RAMEND) out sph,r16 ; инициализация светодиодов ldi r16,(1<<6) | (1<<7) out DDRD,r16 ; инициализация выводов, к которым подключены кнопки (на вход) ; внутренние подтягивающие резисторы подключены; для этого в PORTE нужно установить соответствующие биты в единицы ldi r16,(1<<4) | (1<<5) out PORTE,r16 ; а в DDRE - в нули ldi r16,0 out DDRE,r16 ; бесконечный цикл forever: in r16,PINE ; теперь в r16 находится текущее "состояние" кнопок com r16 ; кнопка "нажимается" нулем, поэтому инвертируем регистр lsl r16 ; переносим биты 4,5 в позиции 6,7 lsl r16 ; и обновляем "показания" светодиодов andi r16,(1<<6) | (1<<7) out PORTD,r16 rjmp forever ; цикл выполняется бесконечно

    Таким образом, на примере простейших программ показаны некоторые возможности пакета AVR Studio. Надо понимать, что это лишь первое знакомство, позволяющее быстрее освоиться с базовыми командами пакета. Между тем, возможности рассматриваемого пакета намного шире. Например, здесь можно отлаживать программы написанные на языках высокого уровня. В частности, Си-компилятор фирмы ImageCraft пользуется отладчиком AVR Studio «как родным». Для этого при компиляции исходного кода надо установить опцию генерации выходного файла в формате, совместимом с AVR Studio. При этом появляется возможность производить отладку в исходных кодах.

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

    В меню Tools главного окна AVR Studio надо выбрать пункт Customize;

    В окне Customize выбрать пункт Tools;

    Двойным нажатием кнопки мыши или нажав Insert на клавиатуре, добавить новую команду в список и назвать ее "Программатор AS2";

    Указать путь к исполняемому файлу программатора, введя его непосредственно в поле для ввода "Command", или нажав на кнопку "…" справа от этого поля;

    Теперь в меню Tools появился пункт "Программатор AS2".

    Средства пакета AVR Studio 4.08 позволяют подключать вспомогательные программы – plugins. Первый plugin для AVR Studio – это программа графического редактора, упрощающая процесс инициализации ЖК-индикатора, которым может непосредственно управлять AVR-контроллер ATmega169. Максимальный логический размер ЖК-индикатора составляет 100 сегментов, каждому элементу индикатора ставится в соответствие бит в специальном регистре контроллера. Чтобы упростить рутинную процедуру привязки определенных битов к каждому сегменту, можно использовать вышеупомянутую программу.

    Во время посещения «родины AVR» - норвежского офиса фирмы ATMEL, один из авторов статьи беседовал с Ларсом Квенилдом, руководителем группы программистов, которая создала и поддерживает пакет AVR Studio. Этот человек, классический программист, с бородой, в свитере и обутый в сандали на носки, рассказал о перспективах развития пакета. В следующую версию (4.09) - будет включен интерфейс для нового внутрисхемного эмулятора – JTAGICE mkII (он называется также AT JTAGICE2), который во второй половине года придет на смену AT JTAGICE. У этого эмулятора есть два существенных отличия. С одной стороны, добавлена поддержка нового однопроводного отладочного интерфейса для младших AVR-контроллеров, debugWIRE. Этот интерфейс интересен тем, что он не занимает для своей работы дополнительные выводы микроконтроллера, так как использует для обмена вывод Reset микроконтроллера! С другой стороны (можно понимать это выражение буквально), у эмулятора AT JTAGICE2 появится, наконец, интерфейс USB для связи с компьютером.

    Литература

    1. Материалы технического семинара AVR Technical Training. Atmel. Norway. December 2003.
    2. Николай Королев, Дмитрий Королев AVR-микроконтроллеры второго поколения: средcтва разработчика. // Компоненты и технологии, 2003 № 7
    3. AVR-микроконтроллеры второго поколения: новые аппаратные возможности // Компоненты и технологии. 2003. № 4 .
    4. Николай Королев, Дмитрий Королев. AVR-микроконтроллеры: большое в малом. //Схемотехника», 2001, №5
    5. Николай Королев, Дмитрий Королев. AVR-микроконтроллеры: программные средства // Компоненты и технологии, 2000. № 4 .
    6. Николай Королев. AVR: аппаратные средства разработчика // Компоненты и технологии, 1999 № 1
    7. Николай Королев. RISC- микроконтроллеры фирмы ATMEL //Chip-News 1998, №2
    8. Николай Королев, Дмитрий Королев AVR: новые 8-разрядные RISC-микроконтроллеры фирмы ATMEL //Микропроцессор Ревю, 1998, №1


    Здравствуйте.

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

    Описано будет всё (для    ) , от начала и до конца, - установка и подготовка необходимого программного обеспечения, сборка простейшего программатора «Громова» (не стоит пугаться, там всего три диода и семь резисторов) , прошивка МК и написание кода в AVR Studio. Весь процесс будет сопровождаться иллюстрациями и примерами.

    Сразу оговорюсь, компьютер должен быть оснащен СОМ-портом (переходник USB to COM плохо работает). Если у вашего компьютера сзади нет такого разъёма, то он наверняка есть на материнской плате (в виде штырьков), тогда всё решается вот таким «выбросом»

    Увы, для владельцев ноутбуков без СОМа, статья представляет лишь академический интерес.

    Итак начнём…

    Что понадобится?

    «Софт»


    UniProf - универсальная программа для прошивки различных микроконтроллеров ATmega, простая и удобная, а главное, отлично работающая с нашим программатором. Автор - российский разработчик Михаил Николаев .

    Конечно, прошивать МК можно и из AVR Studio, но для этого нужен специальный программатор. Поэтому писать код мы будем в студии, а полученные hex-файлы прошивать UniProf`ом посредством нашего самодельного программатора. Помимо этого будет описан способ прошивки из командной строки.

    Пользователям Linux придётся воспользоваться либо виртуалкой, либо Wine. У меня с вайном не получилось, ни в какую не видится порт, а с виртуалкой я не пробовал.

      В Wine работает без нареканий (Debian 8.5, wine1.6) .

    Весь софт бесплатный.

    «Железо»

    Эксперименты будем ставить над Arduino pro mini с микросхемой ATmega328. Частота кварца (8/16Мгц) , равно как и напряжение (3.3/5v) , не имеют значения. (см. ниже)

    В дальнейшем вы будете программировать различные МК фирмы Atmel, но для первого раза эта плата самое то. Она хороша тем, что практически, это голый контроллер с минимальной «обвязкой» и распаяннами пинами. Как раз то, что нужно.

    О маркировках на микроконтроллерах

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

    Буква после цифр указывает на параметры питающего напряжения.

    Нет буквы - напряжение питания контроллера находится в пределах 4,5-5,5 вольт.
    L - версии контроллеров, работающих на пониженном (Low) напряжении питания (2,7 - 5,5 вольт).
    V - версии контроллеров, работающих на низком напряжении питания (1,8-5,5 вольт) .
    U - версии контроллеров, работающих на сверхнизком напряжении питания (0,7-5,5 вольт) .
    P - малопотребляющие версии (до 100 нА в режиме Power-down) .
    A - уменьшен ток потребления, перекрывается весь диапазон тактовых частот всех версий, напряжение питания 1,8-5,5 вольт (в некоторых моделях, добавлены новые возможности и новые регистры. При этом сохранена полная совместимость с предыдущими версиями) .

    Микроконтроллеры «А » и «не-А » обычно имеют одинаковую сигнатуру, что вызывает некоторые трудности, так как Fuse-bit’ы отличаются.

    Примеры:

    ATmega8 - объем памяти программ 8 килобайт, напряжение питания - 4,5-5,5 вольт.
    ATmega8L - объем памяти программ 8 килобайт, напряжение питания - 2,7-5,5 вольт.
    ATtiny43U - объем памяти 4 килобайта, модификация - 3, напряжение питания - 0,7-5,5 вольт.
    ATtiny44А - объем памяти 4 килобайта, модификация - 4, уменьшенный ток потребления, напряжение питания 1,8-5,5 вольт.

    Бывает так, что контроллер без буквы может иметь пониженное напряжение питания (1,7 или 1,8 вольт). Это надо уточнять в даташите.

    ATtiny841 - объем памяти 8 килобайт, модификация - 41, напряжение питания - 1,7-5,5 вольт.

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

    Одна или две буквы идущие после частоты обозначают тип корпуса:

    UniProf
    Написать программу это пол дела, надо её ещё в контроллер как-то впихнуть. Вот и уделим этому побольше внимания.

    Хорошо бы было, чтоб в вашу ардуину был залит стандартный Blink (с «завода» она с ним и поставляется).

    Запускаем UniProf… Возможно выскочит такое окно:

    Это связано с LPT-портом, так что просто нажмите ОК .

    Следом откроется окно программы:

    Если порт выбран не правильно, то появится окно с предложением…

    Нажмите ОК и выберите нужный порт.

    Если МК не определился автоматически, тогда появится окно с ручным выбором:

    К сожалению в списке нету atmega328 , поэтому выбираем mega32 (у них одинаковый объём flash-памяти ) и жмём ОК .

    После этого, вместо надписи unknown появится подключённый контроллер…

    32K - это объём Флеш-памяти, а 1024 - объём EEPROM.

    Теперь, если у вас всё как на картинке, тогда откройте справку   и внимательно ознакомьтесь с тем, что там написано. Автор был весьма лаконичен, так что много времени это не займёт. Кнопки пока не нажимайте.

    Ознакомились? Отлично, теперь можем двигаться дальше. Уберите «галочку» возле EEPROM и увидите изменившийся интерфейс:

    После снятия «галки» EEPROM, чтение и запись этой области памяти не производится.

    Поскольку мы будем оперировать hex-файлами, то уберём «галочки» General и BIN , а так же установим «галочку» Тормоз! , это увеличит время чтения/записи, но зато повысит стабильность.

    Процесс не быстрый так что придётся подождать. Внизу будет ползти синие квадратики и в правом нижнем углу отсчитываться циферки. За первый проход прочитается область PROGRAM, а за второй EEPROM.

    У меня новая ардуина с зашитым в неё стандартным Blink`ом (при подключении программатора диод перестанет мигать) . Если у вас то же самое, то взору предстанет такая картина:

    Справа мы видим что в EEPROM ничего нет, а слева, в PROGRAM, записанная программа (как я уже говорил, это Blink) . Теперь стрелочкой «вниз» прокрутите ползунок до того как данные закончаться…

    … а теперь прокрутите до конца. Вы увидите ещё данные, - это ардуиновский bootloader.

    Сейчас я предлагаю отвлечься от моей статьи и почитать про устройство МК вот , это сильно приумножит понимание материала. Написано всё очень хорошо и понятно. Ну, а как прочтёте - возвращайтесь обратно и продолжим...

    Снимите «галочку» с EEPROM . Она нам особо то и не нужна, зато будет видно, что стоит «галочка» Тормоз!

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

    Нажмите кнопку   и сохраните прошивку назвав её как-нибудь типа - origProMini328.hex . Всё, теперь у вас есть бекап.

    … и следом нажмите уже знакомую кнопку Read . После этого Вы увидите что все ячейки в PROGRAM пустые. Удалена не только программа, но и ардуиновский bootloader.
    То есть теперь вы не сможете загружать скетчи традиционным методом. Потом, если захотите, легким мановением руки восстановите всё из бекапа.

    Сейчас мы прошьём контроллер таким же «Blink`ом», только написаным в AVR Studio.

    Вот так выглядит код:

    #define F_CPU 16000000UL #include #include #define PIN_PB5 5 // PB5 (ардуина - D13) #define PIN_PB5_PORT PORTB #define PIN_PB5_DDR DDRB int main(void) { PIN_PB5_DDR = 1 << PIN_PB5; // устанавливаем PIN_PB5 (PB5 (ардуина - D13)) как ВЫХОД while(1) { PIN_PB5_PORT = 1 << PIN_PB5; _delay_ms(300); PIN_PB5_PORT = 0 << PIN_PB5; _delay_ms(300); } return 0; }
    Если вы используете ардуину с кварцем на 8Мгц, то в этом нет ничего страшного, просто диод будет мигать в два раза реже.

    А вот, сколько он занимает места:

    AVRDude

    Uniprof как и многие другие, похожие программы, являются лишь графической надстройкой над программой AVRDude (AVR Downloader-Uploader) , которая то и выполняет все выше описанные действия над микроконтроллером.
    Поскольку AVRDude не имеет собственного графического интерфейса с ней нужно работать из командной строки. Кому-то это может показаться неудобным, однако всё как раз наоборот, работа из консоли просто великолепна. Удобство, проста и отсутствие привязки к какой либо ОС, ибо avrdude существует, наверно, для всего. Сейчас вы в этом убедитесь.

    Для пользователей

    Avrdude входит в состав AVR toolchain, поэтому установите его (предварительно установив AVR Studio) как написано в начале статьи.

    Cd \
    … перейдите в корень диска С .

    Введя команду:

    Если всё так, тогда avrdude готов к работе и можно продолжать.

    Теперь нужно добавить наш программатор в конфигурационный файл avrdude (C:\Program Files (x86)\Atmel\AVR Tools\AVR Toolchain\bin\avrdude.conf ) . Откройте его в программе Notepad++ и после надписи «PROGRAMMER DEFINITIONS» добавьте вот такие строки:

    Programmer id = "gromov"; desc = "serial port banging, reset=dtr sck=rts mosi=txd miso=cts"; type = serbb; reset = 4; sck = 7; mosi = 3; miso = 8; ;
    Bit-banging .

    Сохраните и закройте файл, он больше не нужен.

    Вернитесь в терминал и дайте команду проверки связи МК с программатором:

    Avrdude -n -c gromov -P com1 -p m328p
    У вас может быть другой сом-порт.

    Установите avrdude

    Sudo apt install avrdude

    Введя команду:

    Вы должны увидеть справочную информацию.

    Если всё так, тогда avrdude готов к работе.

    Настройте порт:

    Sudo stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflsh Это надо делать после каждого ребута компа, ну или в rc.local добавьте.

    Где /dev/ttyS0 - это com1 , /dev/ttyS1 - com2 и т.д.
    В дальнейшем, в командах я буду писать /dev/ttyS0 , у вас может быть /dev/ttyS1 и т.д.

    Добавьте программатор в конфигурационный файл /etc/avrdude.conf

    Sudo nano /etc/avrdude.conf

    После надписи «PROGRAMMER DEFINITIONS» добавьте вот такие строки:

    Programmer id = "gromov"; desc = "serial port banging, reset=dtr sck=rts mosi=txd miso=cts"; type = "serbb"; reset = 4; sck = 7; mosi = 3; miso = 8; ;
    Программатор использует технологию Bit-banging .

    Следите за тем, чтоб при копировании, кавычки оставались именно кавычками, а то они могут изменится (из-за разницы кодировок) и avrdude будет ругаться.

    Сохраните и закройте файл.

    Дайте команду проверки связи МК с программатором:

    Sudo avrdude -n -c gromov -P /dev/ttyS0 -p m328p

    Если связь есть, то ответ будет такой:

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

    Добавим к команде аргумент -v или -v -v (можно добавлять к любым командам) для вывода полной информации:

    Avrdude -n -v -c gromov -P com1 -p m328p ###WIN###
    sudo avrdude -n -v -c gromov -P /dev/ttyS0 -p m328p ###Linux###


    Вывод avrdude, что в windows, что в linux одинаковый, поэтому далее скрины буду делать только в win.

    Тут уже больше информации, например, видно какие установлены фьюзы. Здесь они выводятся в шестнадцатеричных (HEX) числах. Например hfuse 0xDA, в двоичной системе выглядит так - . То есть это те самые биты, которые выставляются «галочками» в графических интерфейсах.

    Когда будете разбираться с фьюзами, помните, в микроконтроллерах ATmega фьюзы инвертированы. То есть 0 - это вкл ючено, а 1 - откл ючено. В онлайн-калькуляторах из-за этого возникают непонятки (см. ниже).

    Прочитаем прошивку из области flash (то же самое, что и PROGRAM в uniprof) командой:

    Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h ###Linux###

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

    Прошивка считана и записана в файл readfl.txt . Буква h (hex) в конце, указывает на то, что данные надо записать в шестнадцатеричном формате. Если написать букву b (binary) , запишется в двоичной системе, а если r (raw) , то данные будут в «сыром» виде (крякозябры).

    Отсюда и далее предполагается, что win-пользователи находятся в корне диска С (C:\) , а linux-юзеры работают из домашней папки, соответственно файлы будут сохраняться туда же (если не прописать иного пути) . Прошивки, которые будут заливаться в МК, должны лежать там же.

    Для win файл будет лежать здесь C:\readfl.txt, а для linux, в /home/user/readfl.txt. Можете открыть этот файл и поглядеть.

    Чтение EEPROM:

    Avrdude -c gromov -P com1 -p m328p -U eeprom:r:reader.txt:h ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:r:reader.txt:h ###Linux###

    Чтение flash и eeprom вместе:

    Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###Linux###

    Стирание контроллера:

    Avrdude -e -c gromov -P com1 -p m328p ###WIN###
    sudo avrdude -e -c gromov -P /dev/ttyS0 -p m328p ###Linux###

    Отключите ножку «ресет» - диод мигать не будет, программа стёрта.

    Прошьём МК скаченным ранее файлом 328test.hex . Лежит в корне диска C (c:\328test.hex) в windows или в домашней папке (/home/user/328test.hex) в linux.

    Avrdude -c gromov -P com1 -p m328p -U flash:w:328test.hex ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:328test.hex ###Linux###

    Теперь если отключить «ресет», контроллер оживёт.

    Обратите внимание. При прошивке МК через avrdude , стирать контроллер необязательно, программа делает это сама. Однако если указать параметр -D , тогда МК не будет очищаться автоматически.

    Прошивка EEPROM:

    Avrdude -c gromov -P com1 -p m328p -U eeprom:w:eeprom.hex ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:w:eeprom.hex ###Linux###

    Чтение всех фьюзов:

    Avrdude -c gromov -P com1 -p m328p -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U efuse:r:efuse.txt:h ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U efuse:r:efuse.txt:h ###Linux###

    У каких-то контроллеров может не быть каких-то фьюзов.

    Чтение только Low fuse:

    Avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###WIN###
    sudo avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###Linux###

    Low fuse отвечает за выбор источника тактового сигнала (внутренний, внешний), его частоту и за паузу перед стартом контроллера после подачи на него питания. Сейчас у вас там записано значение - 0xff , что соответствует внешнему кварцу от 8-ми и выше МГц.

    Сейчас мы прошьём другой lfuse, который переведёт вашу ATmeg`у на работу от внутреннего генератора на 8Мгц.

    Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xe2:m ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xe2:m ###Linux###

    Если у вас ардуина на 16МГц, то диод будет мигать в два раза медленней.
    В дальнейшем, при кодинге в AVR Studio, можно указывать частоту 8 МГц, а кварц отпаять, тем самым заполучив в своё распоряжение еще два свободных цифровых пина.

    Но это потом, а сейчас вернём все как было прошив прежний фьюз:

    Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xff:m ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xff:m ###Linux###

    Диод будет мигать правильно.

    Фьюзы можно прошивать как по отдельности так и вместе:

    Avrdude -c gromov -P com1 -p m328p -U hfuse:w:0xda:m -U lfuse:w:0xff:m -U efuse:w:0x05:m ###WIN###
    sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:w:0xda:m -U lfuse:w:0xff:m -U efuse:w:0x05:m ###Linux###
    Эти команды давать не нужно. Привожу их для наглядности.

    В дальнейшем, когда потребуется использовать другие контроллеры, будете в онлайн-калькулятре расставлять «галочки», получать значения (по ссылке они в верхнем левом углу) в hex-формате и прошивать.

    Теперь осталось разобраться с параметрами avrdude и можно будет переходить к заключительной части.

    -c gromov - тип программатора, вернее название под которым он записан в конфиге (avrdude.conf) .
    -P com1 - ну тут всё и так понятно.
    -p m328p - обозначение тип МК.
    -U - после этой опции указывается область памяти (flash, eeprom, xfuse) , над которой будет производится какие-либо действия (r - чтение, w - запись) .
    Двоеточия служат разделителями.

    Вот , с названиями микроконтроллеров и их псевдонимами, программаторами и прочими опциями.

    Псевдонимы МК

    uc3a0512 - AT32UC3A0512
    c128 - AT90CAN128
    c32 - AT90CAN32
    c64 - AT90CAN64
    pwm2 - AT90PWM2
    pwm2b - AT90PWM2B
    pwm3 - AT90PWM3
    pwm316 - AT90PWM316
    pwm3b - AT90PWM3B
    1200 - AT90S1200 (****)
    2313 - AT90S2313
    2333 - AT90S2333
    2343 - AT90S2343 (*)
    4414 - AT90S4414
    4433 - AT90S4433
    4434 - AT90S4434
    8515 - AT90S8515
    8535 - AT90S8535
    usb1286 - AT90USB1286
    usb1287 - AT90USB1287
    usb162 - AT90USB162
    usb646 - AT90USB646
    usb647 - AT90USB647
    usb82 - AT90USB82
    m103 - ATmega103
    m128 - ATmega128
    m1280 - ATmega1280
    m1281 - ATmega1281
    m1284p - ATmega1284P
    m1284rfr2 - ATmega1284RFR2
    m128rfa1 - ATmega128RFA1
    m128rfr2 - ATmega128RFR2
    m16 - ATmega16
    m161 - ATmega161
    m162 - ATmega162
    m163 - ATmega163
    m164p - ATmega164P
    m168 - ATmega168
    m168p - ATmega168P
    m169 - ATmega169
    m16u2 - ATmega16U2
    m2560 - ATmega2560 (**)
    m2561 - ATmega2561 (**)
    m2564rfr2 - ATmega2564RFR2
    m256rfr2 - ATmega256RFR2
    m32 - ATmega32
    m324p - ATmega324P
    m324pa - ATmega324PA
    m325 - ATmega325
    m3250 - ATmega3250
    m328 - ATmega328
    m328p - ATmega328P
    m329 - ATmega329
    m3290 - ATmega3290
    m3290p - ATmega3290P
    m329p - ATmega329P
    m32u2 - ATmega32U2
    m32u4 - ATmega32U4
    m406 - ATMEGA406
    m48 - ATmega48
    m48p - ATmega48P
    m64 - ATmega64
    m640 - ATmega640
    m644 - ATmega644
    m644p - ATmega644P
    m644rfr2 - ATmega644RFR2
    m645 - ATmega645
    m6450 - ATmega6450
    m649 - ATmega649
    m6490 - ATmega6490
    m64rfr2 - ATmega64RFR2
    m8 - ATmega8
    m8515 - ATmega8515
    m8535 - ATmega8535
    m88 - ATmega88
    m88p - ATmega88P
    m8u2 - ATmega8U2
    t10 - ATtiny10
    t11 - ATtiny11
    t12 - ATtiny12
    t13 - ATtiny13
    t15 - ATtiny15
    t1634 - ATtiny1634
    t20 - ATtiny20
    t2313 - ATtiny2313
    t24 - ATtiny24
    t25 - ATtiny25
    t26 - ATtiny26
    t261 - ATtiny261
    t4 - ATtiny4
    t40 - ATtiny40
    t4313 - ATtiny4313
    t43u - ATtiny43u
    t44 - ATtiny44
    t45 - ATtiny45
    t461 - ATtiny461
    t5 - ATtiny5
    t84 - ATtiny84
    t85 - ATtiny85
    t861 - ATtiny861
    t88 - ATtiny88
    t9 - ATtiny9
    x128a1 - ATxmega128A1
    x128a1d - ATxmega128A1revD
    x128a1u - ATxmega128A1U
    x128a3 - ATxmega128A3
    x128a3u - ATxmega128A3U
    x128a4 - ATxmega128A4
    x128a4u - ATxmega128A4U
    x128b1 - ATxmega128B1
    x128b3 - ATxmega128B3
    x128c3 - ATxmega128C3
    x128d3 - ATxmega128D3
    x128d4 - ATxmega128D4
    x16a4 - ATxmega16A4
    x16a4u - ATxmega16A4U
    x16c4 - ATxmega16C4
    x16d4 - ATxmega16D4
    x16e5 - ATxmega16E5
    x192a1 - ATxmega192A1
    x192a3 - ATxmega192A3
    x192a3u - ATxmega192A3U
    x192c3 - ATxmega192C3
    x192d3 - ATxmega192D3
    x256a1 - ATxmega256A1
    x256a3 - ATxmega256A3
    x256a3b - ATxmega256A3B
    x256a3bu - ATxmega256A3BU
    x256a3u - ATxmega256A3U
    x256c3 - ATxmega256C3
    x256d3 - ATxmega256D3
    x32a4 - ATxmega32A4
    x32a4u - ATxmega32A4U
    x32c4 - ATxmega32C4
    x32d4 - ATxmega32D4
    x32e5 - ATxmega32E5
    x384c3 - ATxmega384C3
    x384d3 - ATxmega384D3
    x64a1 - ATxmega64A1
    x64a1u - ATxmega64A1U
    x64a3 - ATxmega64A3
    x64a3u - ATxmega64A3U
    x64a4 - ATxmega64A4
    x64a4u - ATxmega64A4U
    x64b1 - ATxmega64B1
    x64b3 - ATxmega64B3
    x64c3 - ATxmega64C3
    x64d3 - ATxmega64D3
    x64d4 - ATxmega64D4
    x8e5 - ATxmega8E5

    Пользователи линукс могут воспользоваться wine.

    Надеюсь у вас уже всё установлено, поэтому запускаем AVR Studio…


    Здесь нам предлагается создать новый проект, либо открыть старый. Нажимаем New Project


    Выбираем AVR GCC , так как писать будем на СИ, а не на ассемблере.
    Даём название проекту и ставим «галочки».
    Выбираем Location (я создал папку AVR на диске С:\) там будут автоматически создаваться папки с проектами.
    Нажимаем Next


    Выбираем AVR Simulator , так как у нас нету специального программатора, позволяющего вести отладку, и наш микроконтроллер - ATmega328p .
    Жмём Finish .

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

    Слева - пути к проекту. По центру - текстовый редактор, в котором пишется код. Справа - регистры контроллера. Внизу-слева отладочная информация.

    Из кнопочек нам пока интересны эти -

    Сборка проекта.
    Сборка проекта и запуск отладки.
    Компиляция файла.
    Очистка.
    Настройка проекта. Вот её то и нажмите…

    Здесь можно изменить тип МК, установить тактовую частоту (мы её пропишем прямо в коде) , уровень оптимизации, а так же определить, какие файлы будут создаваться.
    Пощёлкайте для интереса иконки слева и нажмите Отмена .
    Я не буду объяснять эти и другие опции, а позже дам ссылку с грамотным описанием.

    Теперь скопируйте код написанный в начале статьи и вставьте его в редактор:

    Тактовую частоту, мы прописали в коде потому, что этого требует библиотека delay.h .

    Сборка прошла успешно, ошибок и предупреждений нет.

    Теперь отправляемся по пути C:\AVR\my328\default\ , находим там сотворённый нами   hex-файл - my328.hex и прошиваем его в контроллер. Чем прошивать (avrdude или uniprof) выбирайте сами.

    В avrdude это будет выглядеть так:

    Avrdude -c gromov -P com1 -p m328p -U flash:w:\AVR\my328\default\my328.hex ###WIN###
    avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:my328.hex ###Linux###

    Отключите «ресет» и увидите как диод мигает раз в секунду. Надеюсь, что убедил вас в простоте и удобстве командной строки.

    Чтобы обратно сделать ардуину ардуиной у вас есть бекап.

    Как уже было написано выше, я не буду вдаваться в объяснения работы с AVR Studio, равно как и давать уроки по языку СИ. Во-первых, это не входило в мои планы (я лишь хотел помочь осуществить переход от Arduino к AVR Studio)

    Для работы с AVR Studio 4 необходимо само собой её установить. Если она уже установлена, то можете пропустить этот шаг.

    Установка:
    создаешь каталог c:/avr/ – тут будут лежать рабочие программы.
    создаешь каталог например c:/works/ – тут будут лежать твои работы.
    надо что бы были короткие пути, что бы не было проблем с ними.

    Есть вообще AVRStudio5 но и AVRStudio4 пока вполне хватает.

    Вся работа будет проходить в AVRStudio4, WinAVR нужна только из-за библиотеки AVR-GCC (Для того, что бы можно было писать на Си)
    НО! первым надо установить именно WinAVR , иначе библиотека AVR-GCC не подцепится.

    Тут думаю разберешься.
    AVR-GCC для того, что бы писать на Си
    Atmel Avr Assembler соответственно для ассемблера.

    Начинать разбираться с МК лучше с нуля. А это значит с Ассемблера, значит создаешь тот, который Atmel AVR Assembler.

    Потом выбирай микроконтроллер Atmega8.

    когда создастся проект, будет большой, белый, чистый лист. тут будет код.

    немного про содержимое этого листа

    “комментарии” – это текст, пропускаемый компилятором, при компиляции.
    перед началом комментария должен стоять спец символ, пользуюсь символом; “точка с запятой”, есть еще “дабл сшеш” (//),
    вот примеры комментариев

    /* * Комментарий такого види(многострочный), * обычно используется для * сопроводительной информции * об исходном коде, т.е. * название, разработчик и т.д. */ NOP // Такой комментарий в основном используется для пояснения назначения команды, или куска кода SLEEP ; такой комментарий тоже как и предыдущий, можно использовать для пояснения (для заметок) в коде

    команды записываются в каждой строчке. т.е. одна команда – одна строчка.
    допустим есть команды с двумя “параметрами”, с одним, или без ничего

    MOV R16, R17 ; два параметра INC R16 ; один параметр SEI ; без параметров

    MOV R16, R17 ; три байта INC R16 ; два байта SEI ; один байт

    Видите связь размера команды с параметрами?

    У каждого микроконтроллера свой ассемблер, хотя мнимоника у них похожа, т.е. команда MOV у мк одной серии будет выглядеть в машинном коде допустим 0x12 а у другого 0x55.
    что бы при компиляции, скомпилировалось в нужном нам коде мы должны сказать компилятору, для какого мк у нас пишется программа.
    это вообще выбирается при создании проекта.
    По этому мы выбрали микроконтроллер Atmega8.

    Но и тут не все. для облегчения нашей жизни, в AVRStudio4 есть набор констант, которые именуются вроде как “Макроассемблер”.

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

    Include "m8def.inc" // командой.include, мы подгрузили файл m8def.inc ;и теперь нам станет легче;)

    в самом начале кода, ставится таблица прерываний. Что это такое и как это работает, объясню в другой заметке. Но а пока, будем писать её так:

    RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Compare Handler RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analog Comparator Handler RETI; RJMP TWSI ; Two-wire Serial Interface Handler RETI; RJMP SPM_RDY ; Store Program Memory Ready Handler

    После этого идет уже сам код

    RESTART: ; маркер инициализации MAIN: NOP ; маркер главного цикла RJMP MAIN

    Но тут есть одна (точнее не одна, а много) особенностей.

    Для удобства написания кода, для его понятности и для облегчения относительных переходов, нам подарили маркеры, как они выглядят? “RESET:” и “MAIN:” это маркеры, в их именах могут содержаться почти любые символы латинского алфавита и цифры. Маркеры не могут иметь имена функций и команд, допустим “NOP”.
    Как к ним переходит? Допустим командой RJMP.

    Так же, из Маркеров, можно сделать подпрограмму(процедуру), по завершению которой, мы вернемся туда, от куда её вызывали. Для вызова её, используем команду “RCALL (подпрограмма)”, а что бы вернуться из Подпрограммы(процедуры), нужно закончить её командой “RET”. У нас должен получиться такой код:

    RESTART: MAIN: NOP RCALL PPP1 ; вызываем подпрограмму RJMP MAIN PPP1: NOP RET ; выходим из подпрограммы

    Как работает команда “RCALL”, при её вызове, адрес из какого места её вызвали, помещается в СТЕК, а по вызове команды “RET”, извлекается из регистра “стек”. СТЕК нужно инициализировать.

    Что бы нам работать с нашим мк, нужно его инициализировать. т.к. мк, это устройство универсальное, в нем есть много портов ввода/вывода, и периферийных устройств. таких как УСАПП, ШИМ, ЦАП, АЦП и т.д. Первым делом в инициализации мк нужно указать начало “стека”. Инициализацию мы проводим после маркера “RESET:”.

    LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16

    Если бы мы не вводили команду.include “m8def.inc” в начале кода, то нам пришлось бы писать так:

    LDI R16,0x04 OUT SPH,R16 LDI R16,0x5f OUT SPL,R16

    Разница существенная, на мой взгляд.

    СТЕК, это память магазинного типа: (последний вошедший, выходит первым).
    Магазинного типа – это не супермаркет, а рожок от автомата. надеюсь все представили как в него заряжаются патроны и как они потом от туда извлекаются.
    Нужно уделять очень большое внимание памяти СТЕК, т.к. любая незначительная ошибка в работе с ним, может привести к срыву стека. Это на столько важная тема, что я решил посветить ей целую тему и напишу её в отдельной заметке.

    Таким образом у нас получился такой код:

    Include "m8def.inc" RJMP RESET ; Reset Handler RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Compare Handler RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Analog Comparator Handler RETI; RJMP TWSI ; Two-wire Serial Interface Handler RETI; RJMP SPM_RDY ; Store Program Memory Ready Handler RESET: LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16 RGMP RESET MAIN: NOP ; маркер главного цикла RJMP MAIN

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

    Для правильного процесса отладки, необходимо задать эмулятору частоту, с которой будет работать МК, это делается только после компиляции и запуска отладки,
    значит находим в панели меню “Build”, раскрываем её и видим “Build and Run”, после чего, мы увидим желтую стрелочку на против первой команды в нашем листинге кода. Теперь мы ищем в панели меню “Debug” и нажимаем “AVR Simulator Options”, открывается такое окно:

    В котором мы можем поменять МК и его частоту, так же, на панели с права, мы видим некоторую информацию о нашем МК: его максимальную частоту, объемы памяти(EEPROM, RAM, FLASH). Теперь открываем даташит на Atmega8, на странице 203 (общий список регистров) и 205 (общий список команд) и приступай к написанию своей программы.
    И запомни, не бойся экспериментировать с симулятором, он от этого не сломается!

    Корпорация Atmel анонсировала новую полностью интегрированную среду разработки ориентированную на растущее сообщество пользователей, общей численностью более 100.000 для 8 - и 32-разрядных AVR ® микроконтроллеров (MCU) для встраиваемых приложений. Новый продукт Atmel AVR Studio 5 является расширенной версией популярной среды разработки Atmel с поддержкой всех 8 - и 32-разрядных AVR микроконтроллеров, что позволяет вести разработки значительно более эффективно, и осуществлять плавный переход между 8 и 32-разрядными микроконтроллерами AVR.

    AVR Studio ® 5 делает редактирование и отладку исходного кода проще, сочетая редактор для написания кода, мастера для быстрого создания новых проектов, библиотеки готовых проектов (более 400), GNU C / C + + компилятор, мощный симулятор, и визуализированный интерфейс для всех AVR программаторов и внутрисхемных отладчиков. AVR Studio 5 объединяет в себе лучшие черты текущих версий AVR Studio4 для 8-битных и 32-разрядной версии AVR32 Studio в одной среде, которая охватывает все 8-и и 32-разрядные микроконтроллеры AVR. Она также дает пользователю легкий доступ к онлайн-документации, включая datasheet, руководство пользователя и примеры проектов. AVR Studio 5 также предусматривает подключение плагинов сторонних разработчиков.

    Интегрированная в AVR Studio 5.0 Software Framework , библиотека в исходных кодах для 8-разрядных AVR XMEGA ® и 32-разрядных микроконтроллеров AVR UC3 с более чем 400 полных примеров приложений и полным набором драйверов для периферии и внешних компонентов, стеки для проводной и беспроводной связи, аудио декодирование, графический рендеринг, и математические библиотеки для операций с фиксированной и плавающей точкой позволяют ускорить разработку новых приложений, избавляя от необходимости писать до 50 процентов исходного кода в проекте.

    “Программисты нуждаются в интегрированных, интуитивно понятных средствах разработки”, сказал директор по развитию AVR инструментальных средств и "Atmel AVR Studio 5 полностью соответствует этим требованиям, упрощая процесс разработки и позволяя инженерам-программистам погрузиться в новый проект очень быстро с полностью примеров в источниках.

    "Atmel AVR Studio 5 можно описать в трех словах: интуитивная, простая и эффективная", сказал Ингар Фредриксен , старший директор по маркетингу продуктов AVR. "AVR Studio 5 и AVR Software Framework , в сочетании с отладчиком и стартовым набором для разработки, по-настоящему является полной платформой разработки, которая поможет разработчикам воплощать свои идеи чрезвычайно быстро. Эта платформа проста в использовании и специально разработана для удовлетворения потребностей наших клиентов AVR MCU разработчиков".

    При установке приложения требуется подключение к интернету.

    Системные требования:

    Поддерживаемые операционные системы
    . Windows XP (x86) with Service Pack 3 - all editions except Starter Edition
    . Windows Vista (x86) with Service Pack 1 - all editions except Starter Edition
    . Windows XP (x64) with Service Pack 2
    . Windows Vista (x64) with Service Pack 1,
    . Windows 7 (x86 and x64)
    . Windows Server 2003 R2 (x86 and x64)

    Требования к оборудованию:
    . Computer that has a 1.6GHz or faster processor
    . 1 GB RAM for x86
    . 2 GB RAM for x64
    . An additional 512 MB RAM if running in a Virtual Machine
    . 3GB of available hard disk space
    . 5400 RPM hard disk drive
    . DirectX 9-capable video card that runs at 1024 x 768 or higher display resolution