Записи с тегом «AVR»
Использование avrdude с AVR Studio 5
Для микроконтроллеров AVR существует большое количество неофициальных программаторов, большинство из которых поддерживается avrdude и не поддерживается напрямую IDE AVR Studio 5.
Пока нашел следующие способы вызвать avrdude из IDE:
Post-build Events
В свойствах проекта (Project -> Properties -> Build Events) для каждой конфигурации в поле Post-build event command line можно указать команды, которые будут выполнены после успешной сборки проекта:
avrdude -v -c usbtiny -p $(avrdevice) -U flash:w:$(Name).hex
По умолчанию конфигурации две: Release и Debug, удобно создать ещё одну на основе Release, которая будет отличаться вызовом avrdude для прошивки.
External Tools
В пункте меню Tools -> External Tools можно указать команды для запуска внешних утилит. Минус решения — не нашел способа автоматически подставить тип контроллера из текущего проекта.
Вызывать внешнюю команду можно и по горячей клавише, которая выбирается в пункте Tools -> Options -> Environment -> Keyboard. Название команды для внешней утилиты выглядит так: Tools.ExternalCommandX, где X — номер по порядку.
Перенос make-файлов (Makefile) с WinAVR на AVR Toolchain
Проект WinAVR больше не поддерживается автором, вместо него Atmel предлагает AVR Toolchain (в виде отдельного пакета и в составе AVR Studio 5).
Возникла необходимость пересобрать старый проект, make-файл которого основывался на шаблоне из комплекта WinAVR, новым тулчейном. Для этого понадобились небольшие правки make-файла. Большинство из них необходимы потому, что в WinAVR был эмулятор оболочки (sh), а в AVR Toolchain его нет, поэтому команды оболочки заменены на консольные команды Windows. Изменения в формате diff-файла ниже (автоматически накатить patch, скорее всего не получится, номера строк могут быть разными).
Настройки Arduino IDE для ATmega8(A) с optiboot
В платах от проекта Arduino начиная с платы Arduino Uno используется новый бутлоадер optiboot (занимает всего 512 б флеш-памяти, прошивка на скорости 115200). С недавних версий этого бутлоадера появилась поддержка контроллера ATmega8 с внешним кварцем на 16 МГц. Для того, чтобы воспользоваться ею из среды Arduino 1.0 достаточно добавить в файл \hardware\arduino\boards.txt следующее (необходимые скомпилированные файлы бутлоадера уже есть в комплекте):
############################################################## atmega8optiboot.name=ATmega8 (optiboot, 16Mhz XTAL) atmega8optiboot.upload.protocol=arduino atmega8optiboot.upload.maximum_size=7680 atmega8optiboot.upload.speed=115200 atmega8optiboot.bootloader.low_fuses=0xBF atmega8optiboot.bootloader.high_fuses=0xCC atmega8optiboot.bootloader.path=optiboot atmega8optiboot.bootloader.file=optiboot_atmega8.hex atmega8optiboot.bootloader.unlock_bits=0x3F atmega8optiboot.bootloader.lock_bits=0x0F atmega8optiboot.build.mcu=atmega8 atmega8optiboot.build.f_cpu=16000000L atmega8optiboot.build.core=arduino atmega8optiboot.build.variant=standard
Командная строка avrdude (для прошивки без Arduino IDE, номер COM-порта нужно заменить):
avrdude -v -p atmega8 -c arduino -P COM2 -b 115200
Массив массивов в PROGMEM для микроконтроллеров AVR
Когда совсем запутался с массивами массивов, хранимых во флеш-памяти микроконтроллера AVR решил набросать такую демку и проверить всё в симуляторе с отладчиком. Вроде бы разобрался, возможно, кому-нибудь ещё пригодится.
Особенно понравился доступ к массивам не так: a[2], а вот так: 2[a] (это работает для любых массивов в C) :)
Пример работы с protothreads на GCC-AVR
Вдохновившись описанием Protothreads у BSVi, набросал небольшой пример их использования в виде программы, мигающей двумя светодиодами с разной частотой. Для пущей важности был использован system tick timer и супер-макросы для работы с GPIO.
Интересно, правильно ли я понял идею протопотоков? :)
System tick timer для ATmega8
Для одного проекта на ATmega8A понадобилась реализация системного таймера, отмеряющего время в миллисекундах. Один из вариантов был найден в исходниках библиотек Arduino, второй у DI HALT'a. В обоих случаях используется самый простой 8-битный TIMER0, поэтому два других, более продвинутых таймера остаются свободными, например, для ШИМа. Значения посчитаны для тактовой частоты 8МГц.
Макросы на C для работы с GPIO микроконтроллеров AVR
Работа с универсальными портами ввода-вывода микроконтроллера — одна из основных задач в их программировании. В комментариях к записи в блоге BSVi, посвящённой удобной работе с GPIO на языке C пользователь ReAl подсказал, что удобные макросы для AVR-GCC включены в порт операционной системы scmRTOS для архитектуры AVR. Для того, чтобы добраться до заветного файла пришлось скачивать исходники этой ОС, поэтому продублирую нужный файл здесь с сохранением копирайтов.
Минимальный клон Arduino на ATmega8A с модифицированным bootloader'ом
Snippet отсюда опубликован в Arduino-блоге Ильи Данилова. Его статьи мне очень сильно помогли в самом начале освоения Arduino (никто не говорит, что оно завершено :)), эта заметка — попытка внести свой вклад и отблагодарить его за труды.
Использование NetBeans с WinAVR
Для PHP-проектов с недавних пор использую NetBeans, поэтому для проектов на C под WinAVR возникла идея использовать эту же IDE. Оказалось, что для программирования для AVR-платформы NetBeans мало кто использует, но после небольшой доработки напильником почти всё получилось :).
Использование Arduino-платы с WinAVR
Обновлено 13.12.2010: Добавлен архив с исходниками
IDE проекта Arduino использует для компиляции программ WinAVR, поэтому для того, чтобы перейти на программирование с использованием «чистого» AVR-GCC на удобной аппаратной платформе Arduino нужно немного.
В качестве примера будет использован аналог скетча-примера Blink. Для компиляции и прошивки программы в контроллер понадобится:
- Установленная копия WinAVR
- Любая Arduino-совместимая плата или отдельный контроллер с Arduino-загрузчиком
- Два файла:
main.c(с основным кодом программы) иMakefile(необходим для сборки программы)
Параметры ниже подходят для платы Arduino Duemilanove с контроллером ATmega328P, для других их нужно незначительно изменить.
Преимущества такого подхода:
- Можно использовать как Arduino IDE так и любые другие средства разработки
- Удобные функции Arduino-плат (загрузчик, автоматический сброс перед загрузкой прошивки) продолжают работать
- Этот способ можно использовать и для купленных отдельно чипов, предварительно прошив в них bootloader (например, с помощью ArduinoISP).
