Учимся создавать проекты с помощью avr микроконтроллера

__________________синтаксис цикла while_____________________________

while(condition){             statement1;     statement2;     statement3;}while – имеет условие выполнения (condition), оно записано в скобках () и тело цикла, оно заключено между фигурными скобками {}. В качестве условия цикла может выступать переменная, константа, выражение или функция,  возвращающая значение. Перед каждым выполнением цикла происходит проверка условия, если условие истинно, цикл выполняется, если условие ложно, цикл не выполняется. Любое ненулевое значение в скобках оператор воспримет как истину, и цикл будет выполняться.            while(1){    //этот цикл будет выполняться бесконечно     statement1;     statement2;     statement3;}

Linux

Most Linux distributions have an AVR-GCC toolchain. For instructions about installing AVR-GCC for your particular distribution, see the instructions below.
However, the AVR-GCC toolchains packaged for the various distributions tend to be very much out of date. If you need the latest toolchain (e.g. if you are targeting one of the newer AVR processors) you probably have to yourself.

Debian and Ubuntu

Install the following packages with your favorite package manager:

Or directly from the shell:

sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude

The avr-gdb in the Ubuntu 8.04 does not allow jtag debugging. See the known issues Known Issues page for details.

«Operation not permitted» error

see

RedHat

The directive same as Free BSD

  1. yum install avr-gcc
  2. yum install avr-binutils
  3. yum install avr-libc
  4. yum install avr-gdb
  5. yum install avrdude

Fedora

The directive same as Free BSD

  1. yum install avr-gcc
  2. yum install avr-binutils
  3. yum install avr-libc
  4. yum install avr-gdb
  5. yum install avrdude
  6. yum install eclipse
  7. yum install eclipse-cdt

Open

CodeVisionAVR

Answer

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry’s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five http://jquery2dotnet.com/ centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

CodeVisionAVR интегрированная среда разработки программного обеспечения для микроконтроллеров семейства AT90/ATtiny/ATmega/ATXmega, созданная румынским программистом Pavel Haiduk, основателем и руководителем компании HP InfoTech. Язык программирования — диалект Си, близкий к стандарту ANSI C.CodeVisionAVR включает в себя следующие компоненты:компилятор Си-подобного языка для AVR;•компилятор языка ассемблер для AVR;•генератор начального кода программы, позволяющего произвести инициализацию периферийных устройств;•модуль взаимодействия с отладочной платой STK-500;•модуль взаимодействия с программатором;•редактор исходного кода с подсветкой синтаксиса;•терминал.Выходными файлами CodeVisionAVR являются:•HEX, BIN или ROM — файл для загрузки в микроконтроллер посредством программатора;•COFF — файл, содержащий информацию для отладчика;•OBJ — файл, в котором хранится промежуточный код компиляции, так называемый объектный код;Требуемая ОС для установки – Windows 98/2000/XP/Vista/7/8. Поддерживаются 32 и 64-разрядные операционные системы.Программа существует в двух вариантах: CodeVisionAVR Evaluation – бесплатная. Позволяет создавать проект, состоящий из одного файла. Генерируемый загружаемый код не будет превышать 4Kb, которых достаточно для полноценных ознакомительных проектов, так же есть ограничение на количество включаемых библиотек. Время работы не ограничено.Скачать CodeVisionAVR V3.05a EvaluationСкачать CodeVisionAVR V3.08 EvaluationСкачать CodeVisionAVR V3.22 EvaluationCodeVisionAVR – платная. Коммерческая версия, имеет полный набор основных библиотек. Полная техническая поддержка и консультации в течение года. Защищена паролем.Создание и компиляция проектаПроект можно создать двумя способами:1. С помощью мастера кода CodeWizardAVR (автоматического генератора программ). Мастер формирует большое количество ненужного кода, который впоследствии приходиться редактировать.2. С чистого листа, записывая в ручную все необходимые заголовочные файлы, функцию main, конфигурирование портов и т.д.Создание проекта с помощью CodeWizardAVR.Запускаем программу. Создадим новый файл File -> New.

Выбираем Project -> Ok..

Нас спрашивают, хотим ли мы создать проект используя CodeWizardAVR. Выбираем Yes.

Выбираем семейство нашего микроконтроллера и нажимаем Ok.

Откроется мастер генерирования кода программы, во вкладках которого выбираем наш микроконтроллер и настраиваем периферию. Для отображения и обновления сгенерированного кода нажимаем Program -> Preview.

Когда код окончательно сгенерирован, сохраняем файлы Program -> Generate, Save and Exit.

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

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

Вот что у меня получилось. Много пустого кода, который придется удалять.

В действительности CodeWizardAVR помогает создавать код, не занимаясь ручным набором.Создание проекта без CodeWizardAVR.Запускаем программу. Создадим новый файл File -> New.

Выбираем Project -> Ok.

Нас спрашивают, хотим ли мы создать проект используя CodeWizardAVR. Выбираем No.

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

После сохранения откроется окно конфигурации проекта. Добавим исходный файл программы Files -> Input Files -> New.

Подписываем и сохраняем файл в папку проекта.

Переходим во вкладку C Compiler -> Code Generation и выбираем микроконтроллер, определяем частоту кварца, после нажимаем Ok .

Возвращаемся в редактор, где набираем код нашей программы.

После чего проверяем проект Project -> Compile, если нет ошибок, компилируем проект Project -> Build All. Файлы прошивки сохранится в папке проекта Exe.Для детального изучения программы рекомендую книгу.

3.1 Совет #1 — типы данных и размеры

   Используйте наименьший тип данных, способный представить вашу переменную. Для чтения 8-и разрядного регистра, например, не нужно использовать 2-х байтную переменную, достаточно однобайтной.    Размеры типов данных для AVR можно посмотреть в заголовочном файле stdint.h и в таблице 3-1.Таблица 3-1. Типы данных для AVR, описанные в stdint.h

   Имейте в виду, что некоторые опции компилятора могут повлиять на типы данных (например, AVR-GCC имеет опцию –mint8, которая делает тип int 8-и разрядным).

   Два примера кода в таблице 3-2 показывают результат использования разных типов данных. Также в таблице показаны размеры кода, получаемого при построении проекта с опцией оптимизации –Os (оптимизация для размера).Таблица 3-2. Пример использования различных типов данных.

   В левом примере мы пользуемся 2-х байтным типом данных для временной переменной и возвращаемого значения. В правом примере вместо этого используется однобайтный тип char. Считывание данных происходит с 8-и разрядного регистра ADCH, а значит такого размера переменной вполне достаточно. Это позволяет нам сэкономить 2 байта памяти. 

   Заметьте, что до запуска функции main() есть начальный код инициализации (startup code), поэтому эти простые примеры Си кода занимают 90 байт.

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

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

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

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

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

  • USBASP
  • WINAVR (20100110)
  • Atmel Studio 7

Projects in WinAVR

It is important to note that WinAVR is a collection of tools. For specific information on these tools see the links below:

  • avr-libc — C library for AVR. Normal spot to report bugs that also affect GCC and Binutils first.
  • avrdude — Programming software, supports lots of programmers.
  • GNU Binutils — AVR target Binary Utilities (assembler, linker, etc)
  • GNU GCC — C Compiler
  • avrdude-gui — Graphical interface for avrdude
  • GNU Debugger (GDB) — Command line debugger
  • Insignt — Graphical debugger
  • AVaRICE — Connects the JTAG ICE to the AVR-GDB debugging software.
  • simulavr / simulavrxx — Simulator for the AVR
  • MFile — Makefile editor
  • Programmers Notepad — Text editor / IDE for compiler
  • SRecord — Tools for editing EPROM load files.

Build from Sources

If you do not have access to a prebuild — up to date — toolchain you will have to build it yourself. If you search the internet, you will find many sites on how to build the avr-gcc toolchain, most of which are very much dated. However, as the basic principle is always the same you can still use them as a guideline on how to build the toolchain.

Here are some links to recent build instructions. Please feel free to add others:

Linux Last Update: June 2010

You need to register with AVRFreaks to actually download the scripts.
These scripts are actively maintained and popular.

Linux, MacOSX, Windows FemtoOS Toolchain Builder Last Update: February 2010
Linux, FreeBSD, and Others Last Update: June 2010

Instructions on how to build the various components of the AVR toolchain by the folks who maintain the avr-libc code. They do not include instructions for the latest patches, but a good alternative if you have problems with the other scripts.

Mac OSX Last Update: September 2006

Некоторые опции компоновщика

Хотя это не платформозависимые опции для avr-ld, перечисленные стандартные опции могут быть интересны пользователям AVR.

-lимя
Указывает расположение статической библиотеки, названной libимя.a, и использует её для определения из неё неопределенных символов. Библиотека ищется по пути, который задан в списке стандартных каталогов, которые заданы во время компиляции (например, для Unix-систем это /usr/local/avr/lib), и который можно расширить списком каталогов, заданным опциями -L (которые должны предшествовать опциям -l в командной строке).
-Lпуть
Дополнительное место для поиска статических библиотек, запрашиваемых опциями -l.
--defsym symbol=expr
Определяет использование значения выражения expr вместо глобального символа symbol.
-M
Печать карты компоновки в стандартный выходной поток stdout.
-Map mapfile
Печать карты компоновки в файл распределения mapfile.
--cref
Вывод таблицы перекрёстных ссылок в файл распределения mapfile (в случае передачи опции -Map) или в stdout.
--section-start sectionname=org
Начинает секцию sectionname с абсолютного адреса org.
-Tbss org-Tdata org-Ttext org
Начинает секцию bss, data или org с адреса org.
-T scriptfile
Использует scriptfile как скрипт компоновщика, заменяя стандартный скрипт компоновщика. Стандартные скрипты компоновщика записаны в каталоге, зависящем от системы (например, /usr/local/avr/lib/ldscripts для Unix-систем), и состоят из имени архитектуры AVR (с avr2 по avr5) с добавленным суффиксом .x. Они описывают, как различные секции памяти должны быть связаны между собой.

3.6 Совет #6 – типы доступа: static

   Для глобальных данных использование ключевого слова static не всегда возможно. Если глобальные переменные объявлены с ключевым словом static, они могут быть доступны только в том файле, внутри которого они определены. Это предотвращает случайное использование переменной в других файлов.    С другой стороны, объявления локальных переменных внутри функции с ключевым словом static следует избегать. Значение статической переменной сохраняется между вызовами функции, и эта переменная сохраняется в течение всей программы. Таким образом, она требует постоянного места хранения в ОЗУ и дополнительного кода для доступа к ней. Это похоже на глобальную переменную, только область видимости статической переменной ограничена телом функции, в котором она объявлена.    Статическими можно объявлять также функции. В этом случае область видимости функции будет тоже ограничена файлом, в котором она объявлена, и вызвать ее можно будет только оттуда. По этим причинам компилятору проще оптимизировать такие функции.    Если статическая функция вызывается в файле всего один раз и оптимизация разрешена (-O1, -O2, -O3, -Os), компилятор сделает эту функцию встраиваемой. Таблица 3-7. Пример использования типов доступа – статическая функция.

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

3.3 Совет #3 — индекс цикла

   Циклы широко используются при программировании микроконтроллеров. В Си существуют три типа циклов – “while(){}”, “for(){}“ и “do{}while()”. Если включена опция оптимизации –Os, компилятор будет оптимизировать циклы автоматически, чтобы уменьшить размер кода. Однако мы можем сами немного уменьшить его.    Если используется цикл “do{}while()”, то инкремент и декремент индексной переменной цикла будет давать код разного размера. Обычно мы используем инкремент, чтобы подсчитывать количество циклов от нуля до максимального значения. Однако более эффективно делать наоборот – считать от максимального значения до нуля, то есть использовать декремент.    При инкременте, в каждой итерации цикла необходимо выполнять инструкцию сравнения индексной переменной с максимальным значением. Когда мы используем декремент, в этой инструкции нет необходимости. Как только индексная переменная достигнет нуля, в регистре SREG установится флаг Z.   В таблице 3-4 приведены примеры кода, использующего цикл “do {}while()” с инкрементом и декрементом индексной переменной. Таблица 3-4. Пример do{}while() циклов с инкрементом и декрементом индексной переменной

   Чтобы иметь более прозрачный Си код, мы записали этот пример как “do{count—;}while(count);”, а не “do{}while(count—);”, как обычно пишут в книгах по Си. Однако в обоих случаях размер кода будет одинаковым.

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

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

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

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

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

#define F_CPU 800000UL // Я использую кристалл 8 МГц

#include <avr/io.h>
#include <avr/delay.h>

int main(void){
	DDRD = 0xFF; // Сделать порт D портом выхода

	while(1){
		PORTD = 0xFF;
		_delay_ms(1000);
		PORTD = 0x00;
		_delay_ms(1000);
	}
}

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

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

Сохраните проект и скомпилируйте его, нажав: Build -> Build Solution (или нажав F7). Если все идет по плану, в окне вывода должно появиться следующее сообщение:

Build succeeded.

========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

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

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

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

avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude.exe: Device signature = 0x1e9406
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude.exe: reading input file "0x26"
avrdude.exe: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude.exe: 1 bytes of lfuse written
avrdude.exe: verifying lfuse memory against 0x26:
avrdude.exe: load data lfuse data from input file 0x26:
avrdude.exe: input file 0x26 contains 1 bytes
avrdude.exe: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude.exe: verifying ...
avrdude.exe: 1 bytes of lfuse verified
avrdude.exe: reading input file "c:\users\robinlaptop\Documents\Atmel Studio\7.0\OurFirstAVR\OurFirstAVR\Debug\OurFirstAVR.hex"
avrdude.exe: writing flash (184 bytes):

Writing | ################################################## | 100% 0.11s

avrdude.exe: 184 bytes of flash written
avrdude.exe: verifying flash memory against c:\users\robinlaptop\Documents\Atmel Studio\7.0\OurFirstAVR\OurFirstAVR\Debug\OurFirstAVR.hex:
avrdude.exe: load data flash data from input file c:\users\robinlaptop\Documents\Atmel Studio\7.0\OurFirstAVR\OurFirstAVR\Debug\OurFirstAVR.hex:
avrdude.exe: input file c:\users\robinlaptop\Documents\Atmel Studio\7.0\OurFirstAVR\OurFirstAVR\Debug\OurFirstAVR.hex contains 184 bytes
avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.10s

avrdude.exe: verifying ...
avrdude.exe: 184 bytes of flash verified

avrdude.exe: safemode: Fuses OK

avrdude.exe done.  Thank you.

________________________________________________________

   Для каждого типа микроконтроллера есть свой заголовочный файл. Для ATMega8535 этот файл называется iom8535.h, для ATMega16 – iom16.h. По идее мы должны в начале каждой программы подключать заголовочный файл того микроконтроллера, который мы используем.  Умные люди немного облегчили нам жизнь и написали заголовочный файл ioavr.h. Препроцессор обрабатывает этот файл и в зависимости от настроек проекта включает в нашу программу нужный заголовочный файл. Итак, следущая строчка программы #include <ioavr.h>    В нашей программе мы будем использовать задержку. Задержку можно реализовать программно и аппаратно. Сейчас нас интересует программная задержка. IAR содержит библиотеку, в которой уже есть готовая функция задержки. Нам нужно подключить к нашей программе эту библиотеку. Как это сделать? Каждая библиотека имеет свой заголовочный файл в котором описано какие фукции она содержит. Этот файл мы и должны включить в программу. Делается это, как вы догадались с помощью директивы #include.#include <intrinsics.h>       Основу любой сишной программы составляют функции, и любая  программа на Си имеет хотя бы одну функцию – main().Вообще-то на примере main() не хотелось бы объяснять синтаксис функций, потому что main() хоть и является функцией, но вызывается не как обычно, а автоматически. С этой функции микроконтроллер начинает выполнение написанной нами программы. Вызовы всех других функций, наших или библиотечных, должны быть записаны в коде. Как вызывается функция, мы увидим дальше.У функции есть заголовок – int main(void) и тело – оно ограниченно фигурными скобками {}. В тело функции  мы и будем добавлять наш код.

Схема

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

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

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

Toolchain components

These are the items that make up the AVR-GCC toolchain:

The actual C/C++ Compiler
A collection of tools, including the assembler, linker and some other tools to manipulate the generated binary files.
A subset of the standard C Library with some additional AVR specific functions. The libc-avr package also includes the AVR specific header files.
The debugger. See the Debugging section for more information about this.
A Programm to download/upload/manipulate the ROM and EEPROM of an AVR MCU.

Patches

Since the GNU Project serves a much greater community than just the AVR folks and its stability is critical to the stability of the entire open software community, the avr-gcc developers have elected to publish AVR specific bugfixes and improvements as patches to the baseline distributions of gnu tools. Some of these patches are integrated into the gnu tools at some point, some are not. So to get the latest toolchain, it is advisable to include the patches.

For some platforms sedulous members of the AVR community have assembled packages containing pre-build toolchains, the best known of which is winAVR for the Windows platform.

3.7 Совет #7 – низко уровневые ассемблерные инструкции

   Ассемблерные команды всегда лучше оптимизированного кода. Единственный недостаток ассемблерного кода – это непереносимый синтаксис, так что это в большинстве случаев его не рекомендуется использовать.   Чтобы улучшить читаемость и портируемость кода, можно использовать ассемблерные макросы. Такими макросами можно заменять функции, которые генерируются в 2-3 ассемблерные строки. В таблице 3-8 показан пример использования ассемблерного макроса вместо функции. Таблица 3-8. Пример использования низкоуровневых ассемблерных инструкций.

   Для более подробной информации относительно использования ассемблера с языком Си на AVR, ознакомьтесь с разделом “Inline Assembler Cookbook” в руководстве на avr-libc.

Ссылки

Atmel AVR4027: Tips and Tricks to Optimize Your C Code for 8-bit AVR MicrocontrollersAVR4027: Трюки и советы по оптимизации Си кода для 8-и разрядных AVR микроконтроллеров. Ч.2Проект к статье — avr4027.zipВольный перевод — ChipEnable.Ru

Программатор USBasp

Связь компьютера с микроконтроллером осуществляется посредством программатора USBasp через USB порт, а данные передаются по интерфейсу SPI – Serial Peripheral Interface (последовательный периферийный интерфейс). Для связи МК с программатором задействуются специальные выводы: MOSI, MISO, SCK, RESET, VCC, GND. Хотя SPI предполагает использование всего трех выводов MOSI, MISO и SCK, но мы будем задействовать все шесть выводов.

При обмене данными по интерфейсу SPI микроконтроллер может одновременно либо принимать (вывод MISO) либо передавать данные (вывод MOSI). Установка режима приема или передачи данных осуществляется путем подачи определенного импульса на вывод SCK.

Разъем программатора, как правило, имеет 10 пинов и подключается к микроконтроллеру с помощью 10 проводного шлейфа. Однако удобней пользоваться шлейфами, которые имеют переходник на 6 пин, так как в таком случае все пины заняты. У десяти пинового разъема одни пин остается не занятым, а четыре пина подключены к общему проводу (GND).

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

Фото подсоединенного программатора к микроконтроллеру ATmega8 приведено ниже.

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

Настройка AVRDUDE

Теперь нам осталось выполнить финальный шаг. Запускаем программу AVRDUDE. По умолчанию открывается вкладка Program. В нижней части окна в меню Настройки выбираем тип программатора usbasp. Далее в категории Микроконтроллер выбираем наш микроконтроллер ATmega8. Ниже, в категории Flash кликаем по значку троеточия и в открывшемся меню указываем путь к скомпилированному файлу с расширением hex. Путь к файлу и сам файл будут теми же, что мы ранее задавали в Proteus.

Чтобы убедится в том, что программатор определен операционной системой (драйвер программатора корректно установлен) и правильно подключен к микроконтроллеру, кликаем по кнопке Чтение. Если ошибок нет, то появится окно с записью “Калибровочные ячейки генератора считаны!” И в верхнем окошке отобразится шестнадцатеричное число. У каждого МК это число индивидуальное.

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

Теперь кликаем по кнопке Программировать в категории Flash. При успешной записи программы в МК появляется окно с записью, приведенной ниже.

Результат записанной, или, как еще говорят, прошитой программы – это засветившийся светодиод, подключенный к выводу PC0 нашего микроконтроллера.

Первая наша программа очень проста, а частота работы микроконтроллера оставлена по умолчанию и для ATmega8 равна 1 МГц. В случае изменения частоты или подключения внешнего кварцевого резонатора, необходимо внести некоторые изменения во вкладке Fuses, путем установки галочек в соответственные чекбоксы CKSEL0… CKSEL3.

Подробно настройки данной вкладки мы рассмотрим в статье Fuses (биты настройки или биты защиты) микроконтроллера.

Скачать USBasp драйвер

Скачать AVRDUDE

Real-Time Operating Systems

  • AvrX — AvrX is a Real-Time Multitasking Kernel.
  • EtherNut — Nut/OS — Ethernut is an Open Source Hardware and Software Project for building Embedded Ethernet Devices. It contains Nut/OS which is an intentionally simple RTOS for the ATmega128, which provides a minimum of services to run Nut/Net, the TCP/IP stack.
  • FreeRTOS — FreeRTOS is a portable, open source, mini Real Time Scheduler (or mini RTOS kernel).
  • TinyOS — TinyOS is a component-based runtime environment designed to provide support for deeply embedded systems which require concurrency intensive operations while constrained by minimal hardware resources.
  • Contiki — Contiki is an Internet-enabled operating system and desktop environment for a number of smallish systems.
  • XMK — eXtreme Minimal Kernel — XMK is a preemptive multitasking scheduler/kernel for 8bit microcontrollers. Its goal is to provide a bare bones RTOS with a small enough footprint (RAM+ROM) to run on 8bit microcontrollers.

Заключение

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

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий