Программирование мк avr в ос ubuntu

Программирование мк avr в ос ubuntu

Программирование AVR под Linux

Автор: ANALOG, pletnevroma@mail.ru
Опубликовано 07.08.2013
Создано при помощи КотоРед.

Предисловие:

Наверное каждый кто пишет программы под AVR микроконтроллеры и имеет на компе Linux задумывался о том чтобы писать именно на нем. И часто это оказывается не так просто. Проблема тут в отсутствии единого подхода. Каждый выкручивается как может. В отличии от Windows, где поставил AVRstudio и все готово. (конечно и под винду есть другие варианты, но статья не об этом). Лично для меня этот вопрос был одной из главных трудностей при переходе на Linux. И даже когда я уже по большей части сидел только на нем, все равно частенько приходилось загружать Windows чтоб запустить родную студию 🙂 Поэтому я решил написать статейку на эту тему. Надеюсь она снимет некоторые вопросы у желающих писать программки для AVR под линуксом. Статья ориентирована скорее на начинающих, поэтому все будет подробно разжевано, а все консольные команды с пояснениями. Используется дистрибутив Linux Ubuntu, но все прокатит и на любом другом.

Что нам для этого понадобится:

geany — прокачанный текстовый редактор с кучей вкусностей о которых ниже, в нем мы будем писать исходные коды.
avra или gcc-avr — компилятор для AVR, он превратит наш исходный код в прошивку для контроллера.
avrdude — крутой прошивальщик который поддерживает кучу разных программаторов и контроллеров, с его помощью будем заливать прошивку в контроллер.
Устанавливаем все это добро. Открываем терминал и вводим:

sudo apt-get install geany
sudo apt-get install avra
sudo apt-get install gcc-avr
sudo apt-get install avrdude

Возможно, некоторых программ не будет в стандартных репозиториях — тогда репозитории с ними нужно подключить, отредактировав файл /etc/apt/sources.list (после этого не забываем sudo apt-get update) или собрать из исходников. Короче, если что-то из этого на ваш дистрибутив не поставится — погуглите.

Теперь нам понадобится папка с аппноутами для каждого микроконтроллера. Можно взять из недр AVRstudio у кого она есть, но там в дефайнах используется символ ‘#’ на который ругается avra, так что во вложениях к статье есть архив с «хорошими» дефайнами. В эту же папку я кладу свои файлики с макросами которые я использую. Когда все это есть можно уже в принципе приступать к написанию кода. У меня в домашней директории есть папка Projects, а в ней папка AVR, в которой у меня лежит папка APPNOTES а так же все проекты (каждый в отдельной папке).
Таким образом путь, скажем, к дефайну для ATmega8

/Projects/AVR/APPNOTES/m8def.inc
А к исходному коду проекта Example

/Projects/AVR/Example/Example.asm
Все дальнейшее в статье будет изложено исходя из такой структуры, хотя от этого мало что зависит и не составит труда адаптировать все это дело к другой системе.
Пишу я все на ассемблере, но опять же, не составит труда проделать то же самое на С, просто надо использовать gcc-avr вместо avra.

Итак, приступим:

1. Создаем в Geany файл Example.asm с исходным кодом

2. Компилируем его с помощью avra:
avra —includepath

/Projects/AVR/APPNOTES Example.asm
Опция —includepath указывает путь к папке, из которой будут браться все инклуды по умолчанию.
Т.е. в коде подключение файла с дефайнами будет выглядеть как .include «tn2313def.inc»
Примечательно, что в справке к avra эта опция значится как —includedir, но если так и ввести, то сама же avra начинает на это ругаться 🙂 так что пишем именно —includepath
Если в коде будут встречены ошибки, avra напишет нам об этом в консольку, с указанием номеров строк с ошибками. Если компиляция прошла успешно, то мы получим файлик Example.hex который нам и назо залить в контроллер.

3. прошиваем контроллер через avrdude
sudo avrdude -p t2313 -c usbasp -U flash:w:Example.hex
Опции:
-p указывем тип контроллера
-c — используемый программатор
-U указывает файл, с которым будет работать прошивальщик
Модификаторы flash:w: определяют каким образом будет использоваться указанный файл. В данном случае — запись во флеш.

Все, в принципе тут можно и остановиться, но ведь это неудобно до жути — каждый раз руками лапами вбивать всю эту лабуду в консоль. Да еще и в голове держать синтаксис команд, а она-то не резиновая. Вот тут то и настало время «вкусностей» Geany, из-за которых мы именно его и выбрали. Geany задуман как редактор именно для программистов, поэтому в нем есть три абстрактных действия с файлами: компиляция, сборка и запуск. При этом пользователь может сам определить какие команды должны выполняться в этих действиях.
Таким образом, мы получаем возможность повесить запуск avra на действие «компиляция» (или gcc-avr если вы пишете на С) а на «запуск» — avrdude. Еще останется свободным «сборка».
Запускаем наш редактор, открываем файл с исходником и жмем Сборка — Установить комманды сборки.
Видим вот такое окошко:

В поля «Скомпилировать» и «Выполнить» (на скрине подсвечено оранжевеньким) вводим соответственно команды для компиляции и прошивки в кристалл программы.
Все замечательно, но как указать имя файла если мы заранее его не знаем? Тут на помощь приходят 4 шаблона, которые Geany подставляет в команды в процессе их выполнения:
%f — имя текущего файла (в данном случае это Example.asm)
%e — имя текущего файла без расширения (Example)
%d — путь к папке, в которой лежит текущий файл (

/Projects/AVR/Example/)
%p — путь к текущему проекту (я так и не разобрался что это значит, но не важно :))
Так что команда для компиляции будет выглядеть так:

avra —includepath

sudo avrdude -p t2313 -c usbasp -U flash:w:%e.hex

Теперь для того чтобы программа скомпилировалась достаточно нажать F8 (или кнопочку с треугольником и кружочком в самом верху), а чтобы прошилась в контроллер — F5 (или кнопочку с шестеренками).

Так гораздо удобнее, но все еще не идеально — avrdude требует запуска через sudo, поэтому нужно каждый раз вводить пароль при прошивке. Для устранения этой досадной несправедливости откроем терминал и введем:

sudo chmod +s /usr/bin/avrdude

Этим мы открываем права на запуск avrdude. Теперь можно запускать avrdude без sudo:

avrdude -p t2313 -c usbasp -U flash:w:%e.hex

Но и теперь процесс не полностью автоматизирован — если мы вдруг решили написать прогу для другого контроллера, то по прежнему нужно лезть в настройки и менять опцию -p у avrdude. Как заставить Geany самому распознавать контроллер? А например по строчке .include «m8def.inc» которая есть в каждой программе.
Для этого давайте напишем небольшой скрипт, который будет это делать. Вернее я его уже написал, а вам предлагается только почитать комментарии к нему, или даже просто скопипастить 🙂 Вот он:

WARNING. В статье не отображаются бекслэши, поэтому они заменены обычными слешами красного цвета: /

PART=`grep -m 1 » / .include / «.*def / .inc / «» %f | grep -o » / (tn / |m / )[0-9] / +» | sed «s/tn/t/g»` && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit

(В конце статьи есть файлик filetypes.asm, в котором все это есть. Можно вместо переписывания скриптов просто закинуть его куда надо (

Всю эту здоровенную строку нужно вбить в поле «Выполнить»
Пояснения:
Сначала мы создаем строковую переменную PART, в которую заносим результат выполнения скрипта, определяющего тип контроллера (о самом скрипте чуть ниже)
Затем выводим в консоль название распознанного контроллера (просто так, для справки), потом запускаем avrdude, подставляя в него нужную опцию, ну и в конце я добавил exit чтоб окно терминала само закрывалось после удачной прошивки.
У связки && есть одна приятная особенность: следующая команда выполняется только в случае успешного завершения предыдущей. Таким образом, если при прошивке что-то пошло не так терминал не закроется и мы сможем почитать об ошибках.
Теперь подробнее о скрипте:
первый grep находит в файле с исходником строчку вида .include «[тут что угодно]def.inc», опция -m 1 указывает что не стоит продолжать поиск, если хотя бы одна строка найдена.
Второй получает то что нашел первый и его задача из всей строки высосать именно название контроллера. Делается это с помощью шаблона, задающего вид имени контроллера и опции -o которая говорит ему чтоб выводил только тот кусок что нашел, а не всю строку. Я использую только меги и тиньки, поэтому у меня только tn и m, но вы можете адаптировать скрипт и для других серий. Например для xmega будет (tn|m|x) а для AT90S (tn|m|x|[0-9]) (у AT90S название только из цифр) ну и так далее.
Последняя команда sed заменяет tn на t. Дело в том, что в аппноутах от Атмела тинька 2313 например зовется как tn2313, а avrdude ее понимает как t2313. Вот и приходится изворачиваться.

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

avra —includepath

PART=’grep -m 1 » / .include / «.*def / .inc / «» %f | grep -o » / (tn / |m / )[0-9] / +» | sed «s/tn/t/g»‘ && echo «target device: $PART» && avrdude -p $PART -c usbasp -U flash:w:»%e.hex» && exit

Осталась последняя маленькая деталь, которую стоит обсудить — фьюзы.
В принципе, avrdude позволяет их устанавливать, но для этого нужно укурившись даташитом пересчитать их в шестнадцатеричную систему и потом подсунуть в avrdude. Учитывая высокую вероятность ошибки и крайнюю трагичность ее последсятвий такой вариант сразу отметается. Мы же будем для этого юзать графическую оболочку к avrdude — avr 8 burn’o’mat. Качаем deb-пакет с их сайта, устанавливаем. У меня он просто так ставиться не захотел, пришлось подредактировать кое-что. Во вложениях к статье — исправленный deb-пакет. Если возникнут с этим проблемы — пишите в форум, разберемся.

При первом запуске ее нужно настроить. Переходим во вкладку Settings — AVRDUDE
Видим вот такое окно:

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

Перед исправлением фьюзов сначала обязательно их считывайте с кристалла! Да и вообще, поаккуратней с ними 🙂

Можно даже запуск avr8-burn-o-mat повесить на оставшееся свободным действие «Сборка». Тогда вообще все просто замечательно выходит: F8 — скомпилировать, F5 — прошить, F9 — поправить фьюзы.

Ну вот и все, теперь вы сможете с легкостью писать AVR программки из-под вашего любимого линукса.
Удачи вам и правильных фьюзов 🙂

Как скомпилировать и записать код на микросхему AVR в Linux / MacOSX / Windows?

Это краткое руководство для начинающих, которое направлено на то, чтобы показать, как установить инструменты, скомпилировать код с помощью avr-gcc и отправить его в микроконтроллер с помощью avrdude.

Оно также знакомит с основами автоматизации этой задачи, помещая все инструкции в Makefile. Файлы примера ( main.c, main.bin, main.hex, Makefile) упакованы в архив который можно скачать по ссылке в конце данной статьи.

1. Установка avr-gcc и инструментов

Для компиляции исходного кода вашей прошивки на C и/или C ++ вам понадобится компилятор gcc-avr, библиотека C avr-libc и avrdude. Что очень полезно, существуют полные и простые в установке пакеты для всех основных платформ.

Linux, Ubuntu

Ubuntu предоставляет пакеты, поэтому вы можете просто установить их с помощью этой команды:

Mac OSX

Загрузите AVR MacPack. В образе диска MacPack есть установщик, который все сделает за вас.

Windows

Загрузите WinAVR, который включает в себя все необходимое и имеет хороший установщик.

2. Компиляция и запись кода

Теперь, когда у вас установлен компилятор, следующий шаг — скомпилировать простой исходный код в файл .BIN, затем сгенерировать файл Intel .HEX и, наконец, записать этот файл .HEX на микросхему AVR с помощью программатора для AVR.

Пример кода

Вот пример содержимого файла main.c. Код ничего не делает, кроме зацикливания в бесконечном цикле, но это для примера.

Компиляция

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

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

AVR Memory Usage
—————-
Device: Unknown
Program: 40 bytes
(.text + .data + .bootloader)
Data: 0 bytes
(.data + .bss + .noinit)

Создание .HEX

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

Итак, следующий шаг — преобразование информационной формы .BIN в файл .HEX. Утилита GNU, которая делает это, называется avr-objcopy.

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

Утилита под названием avrdude может программировать микропроцессоры, используя содержимое файлов .HEX, указанных в командной строке.

С помощью приведенной ниже команды файл main.hex будет записан во флэш-память. Параметр -p attiny13 позволяет avrdude узнать, что мы работаем с микроконтроллером ATtiny13. Другими словами — эта опция определяет устройство.

Полный список поддерживаемых чипов можно найти здесь. Обратите внимание, что также допустимо использовать и полные имена (т. е. t13 равно attiny13).

И вуаля! Чип запрограммирован.

3. Make и makefiles

Теперь мы можем автоматизировать этот процесс, создав Makefile и поместив туда наши команды. Структура Makefile очень проста, и дополнительную информацию о ней можно найти здесь . Утилита make автоматически считывает файл Makefile в папке, в которой вы ее запускаете. Взгляните на готовый пример:

Если вы запустите в терминале простую команду make , будет выполнена только метка «all». При запуске (sudo) make flash будет выполнена метка «flash» и так далее.

avr-gcc -std=c99 -Wall -g -Os -mmcu=attiny13 -DF_CPU=1200000 -I. -o main.bin main.c
avr-objcopy -j .text -j .data -O ihex main.bin main.hex

avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb

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

avrdude: Device signature = 0x1e9007
avrdude: NOTE: «flash» memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file «main.hex»
avrdude: writing flash (40 bytes):

avrdude: 40 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 40 bytes
avrdude: reading on-chip flash data:

avrdude: verifying …
avrdude: 40 bytes of flash verified

avrdude: safemode: Fuses OK (H:FF, E:FF, L:6A)

avrdude done. Thank you.

Резюме

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

  1. $ avr-gcc -Wall -g -Os -mmcu=attiny13 -o main.bin main.c
  2. $ avr-objcopy -j .text -j .data -O ihex main.bin main.hex
  3. $ avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb

Важно подчеркнуть, что мы можем легко автоматизировать весь процесс с помощью Makefiles. Рано или поздно она вам понадобится!

Скачать файлы примера (2,1 KiB, скачано: 151)

Программирование AVR микроконтроллеров в Linux на языках Asembler и C

Поделюсь информацией и соображениями о том как начать программировать AVR микроконтроллеры фирмы ATMEL под операционной системой Linux. Используем мощные и свободные программные инструменты, настраиваем рабочее окружение и применяем на практике. Приведены примеры простейших программ на языках Assembler и C, которые помогут сделать первые шаги при обучении работе с микроконтроллерами AVR в Линукс.

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

Если же вы раньше программировали AVR’ки под Windows но перейдя на Linux не знаете с чего начать и боитесь что в данной ОС у вас не будет достаточно инструментов для разработки, то поспешу вас обнадежить — инструментов предостаточно, к тому же большинство программ и утилит которые вы использовали под Windows прекрасно функционируют и под Linux используя транслятор Wine.

К чему-то придется привыкнуть, от чего-то отказаться, а что-то начать использовать по другому. Со временем, все настроив под себя, вы будете удивлены насколько все просто и удобно, так что программирование AVR микроконтроллеров в Linux — это вполне реально!

Цикл статей по AVR в Linux

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

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

В качестве ОС для работы у нас будет Linux, так что вы должны быть знакомы с консолью и уметь выполнять простые команды, это нам пригодится в процессе изучения работы базовых инструментов и настройки окружения. Все работы по программирования микроконтроллеров AVR в Linux можно и вовсе производить в консоли даже без графических оболочек типа KDE, Gnome, FluxBox.

Так что программировать AVR в Linux можно даже на очень старом компьютере с минимумом ресурсов, к примеру на стареньком ноутбуке Pentium-233/64MB RAM/2GB HDD, такая возможность бывает иногда очень полезной.

Все описанное дальше будет также полезено в качестве справочного сундучка, где собраны:

  • принципы маркировки микроконтроллеров AVR;
  • подключение питания к микроконтроллеру;
  • схемы наиболее популярных программаторов;
  • описание подключения микроконтроллера к программатору;
  • распиновка интерфейсов LPT, COM;
  • примеры команд для чтения, стирания и записи Flash микроконтроллера;
  • и многое другое.

Изначально я планировал изложить весь материал в виде одной статьи, но написав 8 пунктов (порядка 70%) статьи я понял что она получится очень большой как по размеру текста, так и по количеству картинок. Решил разделить статью на части, пусть каждый пункт будет отдельной статьей.

Рис. 1. Коллаж отрывков фото из цикла статей по AVR в Linux.

Работать будем под Debian GNU Linux, также все описанное в публикациях будет справедливо для Ubuntu и других дистрибутивов Linux.

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

Содержание

  1. Что такое AVR микроконтроллер
  2. Для чего можно использовать AVR микроконтроллер
  3. Архитектура AVR микроконтроллеров
  4. Маркировка микроконтроллеров AVR, выбор чипа для начала знакомства
  5. Аппаратное обеспечение для изучения микроконтроллеров
  6. Программаторы для AVR микроконтроллеров
  7. Как подключить программатор к микроконтроллеру
  8. Инструменты для программирования AVR микроконтроллеров в Linux
  9. Настройка среды программирования Geany для работы с AVR
  10. Параметры запуска и примеры использования AVRDUDE
  11. Настраиваем среду и работаем с программаторами
  12. Простая программа для AVR микроконтроллера на Ассемблере
  13. Простая программа для AVR микроконтроллера на Си
  14. Работа с регистрами, битовые операции
  15. Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа
  16. Что такое Fuse и Lock биты в AVR микроконтроллере, как с ними работать
  17. AVR Си — выносим функции и переменные в модули, компиляция нескольких файлов в avr-gcc, Makefile

Может быть что я что-то упустил или указал не точно — пишите, будем дополнять и исправлять!

Желаю вам удачного изучения и позитивного настроения! Все обязательно получится.

Электроника для всех

Блог о электронике

AVR Studio в Linux.

Печально, но факт, что Atmel штампует свое замечательное IDE только для семейства OS Windows. Поэтому пользователям Linux приходится по-всякому извращаться, чтобы заполучить себе на машину этот удобнейший инструмент разработчика. Существует два очевидных решения этой задачи. Первый — запускать студию в Windows, которая крутится на виртуальной машине (отдельную машину с Win не рассматриваем). Второй — запускать программу посредством Wine.

Первый способ хорош 100%-й совместимостью и полным отсутствием софтверных граблей. Железные же практически полностью висят на разработчиках виртуальных машин и обычно стремятся к нулю. Однако, виртуальная машина отжирает у хост-машины ценные системные ресурсы. Кроме того, стоит учесть, что налог на Windows не зависит от того насколько виртуальна машина, на которой бегает эта операционная система. Ну и окно-в-окне, особенно при неудачно реализованном механизме переключения между системами, удовольствия не доставляет. Если вас эти ограничения не смущают, это вполне себе вариант. В Википедии есть прекрасная сводная таблица виртуальных машин, которая может вам пригодиться.

Способ запуска программ (любых) посредством Wine — вполне себе самодостаточен. Стоит помнить, что проект постоянно развивается. Сегодняшний Wine не чета тому, который мне довелось пощупать при первом знакомстве. Сайт проекта: http://www.winehq.org/. Этот вариант распишу подробно.

Итак. Для начала обновляем Wine. Это обязательно нужно сделать, т.к. в состав дистрибутивов обычно входит стабильный, а значит достаточно старый релиз. Последний стабильный релиз — 1.0.1 (октябрь 2008 года). У меня сейчас стоит версия 1.1.33, на момент написания статьи отрелизилась 1.1.36 (8 января 2010 года). Идем в раздел Downloads на сайте, ищем СВОЙ дистрибутив и внимательно читаем инструкции по установке. В моем случае это Debian, о нем и пойдет речь дальше. Если у вас не Debian — ставите по-своему.

Подключаем репозиторий Вайна. Нужно добавить строчку в файл /etc/apt/sources.list (с правами root’а):

Скачаем ключик для доступа к репозиторию:

Обновим список пакетов и установим программу:

После установки последуем инструкции от aor_dreamer с форума AVR Freaks.

Качаем и запускаем скрипт winetricks:

В открывшемся окне ставим следующие флажки:

После того как скрипт отработает (придется принять участие и посоглашаться с лицензиями MS) качаем AVR Studio с оффсайта Atmel и устанавливаем:

Запускаем (это путь, куда студия становится по умолчанию):

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

Осталась небольшая проблемка. AVR Studio отказалась видеть подключенный аналог STK500 (модифицированный HVProg). Интерфейс с ПК в моей версии реализован посредством FT232RL, которая видна в системе как /dev/ttyUSB0. Студия же ищет программатор по привычным COMx, где х — номер порта.

Тут все просто. Создаем ссылку (root’ом):

/dev/ttyUSB0 — физическое устройство (например, реальный COM порт: /dev/ttyS0);
— путь к домашнему каталогу пользователя;
com1 — имя порта для Win (например, lpt1 для параллельного интерфейса).

Программатор определился в автоматическом режиме и тут же бодро прочитал/зашил пару МК. Пока проверял только ISP режим, но думаю с HV проблем не будет. (также наверняка не будет и проблем с JTAG ICE первой модификции, а также всеми программаторами работающими по честному COM порту — прим.DI HALT)

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

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

81 thoughts on “AVR Studio в Linux.”

Актуальненько.
Сакральная пляска с выбором нужного вайна обязательна или всё можно сделать через синаптик?

А пляски никакой и нет. Лучше взять посвежее от греха подальше. У Длиного проблемы были с вайнтриксом на старом вайне.

В синаптике нужно добавить репозиторий и ключик для него. После этого обновить список пакетов и поставить свежатину.

Глупый вопрос — чего есть такое в аврстудии, что ее надо тащить вайном?

Я поставил Eclipse. Завелся с полпинка. После этого поставил такой-же эклипс и под винды. Проблем пока не знаю. Но у меня, может, и проекты какие-то простые.

Да, я не использую аппаратную отладку, но может просто не умею ее готовить?

DI HALT — вот чего очень бы хотелось услышать, так это про отладку во всех ее образах. А то до сих пор гильзой пользуюсь — в уме отлаживаю, да контрольные точки на экранчик вывожу.

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

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

А можно поподробнее, как настроить подсказки?

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

для программаторов которые висят на COM все равно придется делать ссылки с /dev/ttyS0 на

Кстати, могу сделать описание сборки toolchain’a avr-gcc(buildtools, avr-gcc, avr-libc) и настройки IDE к этому добру.

Было бы классно. А то я с линухами вообще не дружу.

Работа с микроконтроллерами: прошивка программатором и чистый «Си»

В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.

Нам понадобится

Подключаем питание

Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:

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

Помимо самого преобразователя, мы видим еще 2 конденсатора — входной Сi и выходной Сo. Входной конденсатор необходим для того, чтобы сгладить пульсации на входе в случае удаленности L7805 от источника. В нашем случае длина соединительных проводов не будет превышать 15 см, поэтому входного конденсатора у нас не будет. Зато будет выходной, поскольку мы хотим «кормить» наш контроллер стабильным питанием.

Распиновка

Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.

Схема

С учетом всего вышеописанного, получается схема для организации питания.

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

В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.

Подключение к контроллеру

Распиновка разъема программатора такова:

Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!

Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:

10-пиновый ICSP ATtiny84
Reset 5 4
MOSI 1 7
MISO 9 8
SCK 7 9

Прошивка

Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.

После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .

Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.

PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.

А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:

Arduino C
Направление pinMode(led, OUTPUT); DDRA = 1
Значение digitalWrite(led, HIGH); PORTA = 1
Задержка delay(1000); _delay_ms(50);

Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .

Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .

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

Mac OS X

Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.

Первая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.

Проект создается в три шага.

В результате будет создано следующее дерево файлов.

На данном этапе нас интересует содержимое файла Makefile . В нем содержится информация о том, что вообще мы используем: какой контроллер, программатор. Это все описывается в строках с 20 по 24:

Пройдемся по строкам:

Это автосгенерированный make-файл, поэтому нам необходимо вручную его подправить. Править будем строку DEVICE у нас же микроконтроллер attiny84 и строку FUSES . А вот с ней все сложнее. Fuse-биты, или просто «фьюзы» — два (иногда три) особых байта, в которых содержится фундаментальая конфигурация работы контроллера. Очень важно правильно их задать.

Внимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.

Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).

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

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

Внесем изменения в Makefile.

Прошивка

Она происходит в 2 этапа.

Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:

Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .

Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:

Все, прошивка контроллера завершена.

Windows

Здесь все проще.

Первым делом необходимо скачать и уствновить среду разработки для AVR — Atmel AVR Studio 4. А вторым — Atmel AVR Toolchain.

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

Затем указать имя, расположение и то, что мы хотим использовать С ( GCC ).

Третий шаг — настройка отладчика.

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

В результате общий вид среды разработки выглядит вот так:

Теперь необходимо подключиться к программатору. Делается это с помощью нажатия на кнопку con .

В качестве Platform выбираем STK500 , а в Port — Auto . Затем нажимаем Connect.

Если все правильно, то в открывшемся окне выбираем вкладку Main и нажимаем в ней на кнопку Read Signature .

Строка Reading signature from device .. 0x1E, 0x93, 0x0C .. OK! говорит о том, что все хорошо и сигнатура успешно прочиталась. Сигнатура — это своего рода позывной микроконтроллера, которым он сообщает собственную модель.

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

Теперь нажмем Build → Build . Это заставит программу скомпилироваться. Прошьем контроллер с помощью кнопки Write Flash Memory Using Current Settings — это заставит скомпилированную программу загрузиться в память микроконтроллера.

Заключение

Мы собрали простейшее устройство мигалку, но сделали это на низком уровне. С использованием программатора и «продвинутой» среды разработки, а не Arduino.

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