Рабочее место разработки прошивок для МК AVR

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск


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


Софт для разработки прошивок - WinAVR

В качестве основного инструмента выбираем WinAVR.

Порядок скачки и установки

  1. Скачать последнюю версию с сайта: winavr.sourceforge.net SF download page;
  2. Запустить файл;
  3. Дождаться окончания установки отвечая по пути на все вопросы;
  4. Запустить среду разработки и загрузить в неё тестовый проект, скомпилировать и убедиться, что всё ок.

Тестовый проект (мигаем светодиодами)

Моргаем светодиодами на порту B

main.c: <source lang="c">/**

* \version main.cpp, v 0.0.1 5/11/2007 12:31 vovan
*/

/**

*/
  1. include <avr/io.h>
  2. include <util/delay.h>
  3. include <inttypes.h>

/**

* main()
*/

int main(void) { char i; DDRB = 0xFF; PORTB = 0x00;

while(1) { for(i = 0; i < 100; i++) _delay_ms(10); PORTB = 0xFF; for(i = 0; i < 100; i++) _delay_ms(10); PORTB = 0x00; } return 0; } </source>

Для сборки проекта используется утилита make[1]. Она выполняет правила, записанные в файле Makefile. Его можно написать вручную, а можно воспользоваться программой из состава WinAVR

Ниже пример Makefile для сборки тестового проекта:

Makefile: <source lang="bash"> target := main f_cpu := 14745600UL mcu := atmega32 src_dirs := . cc := avr-g++ objcpy := avr-objcopy cflags := -Wall -g -O2 -DF_CPU=$(f_cpu) -mmcu=$(mcu) lflags := -Wl -g -mmcu=$(mcu) cclog := compile.log doxylog := doxy.log programmer := uisp -dprog=abb -dlpt=/dev/parport0 --erase --upload --verify if=./$(addsuffix .hex,$(target)) size := avr-size xmlconf := project.xml


  1. - do not need to edit -------------------------------------------------------------------------------

rm := rm -rf doxygen := doxygen VPATH := $(src_dirs) search := $(addsuffix /*.cpp,$(src_dirs)) ELFSIZE := $(size) --mcu=$(mcu) --format=avr $(addsuffix .elf,$(target))

  1. -----------------------------------------------------------------------------------------------------

all: elf hex eep rmlogifclean size

  1. - create elf file -----------------------------------------------------------------------------------

elf: $(addsuffix .elf,$(target))

$(addsuffix .elf,$(target)): $(notdir $(patsubst %.cpp,%.o, $(wildcard $(search)))) $(cc) $(lflags) $^ -o $(addsuffix .elf,$(target)) 2>>$(cclog)

  1. - create hex file -----------------------------------------------------------------------------------

hex: $(addsuffix .hex,$(target))

$(addsuffix .hex,$(target)): elf $(objcpy) -R.eeprom -O ihex $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) 2>>$(cclog)

  1. - create eep file -----------------------------------------------------------------------------------

eep: $(addsuffix .eep,$(target))

$(addsuffix .eep,$(target)): elf -$(objcpy) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ --change-section-lma .eeprom=0 --no-change-warnings -O ihex \ $(addsuffix .elf,$(target)) $(addsuffix .eep,$(target)) 2>>$(cclog)


  1. - create coff file ----------------------------------------------------------------------------------

coffconv := $(objcpy) --debugging --change-section-address .data-0x800000 \ --change-section-address .bss-0x800000 \ --change-section-address .noinit-0x800000 \ --change-section-address .eeprom-0x810000

coff: elf $(coffconv) -O coff-avr $(addsuffix .elf,$(target)) $(addsuffix .cof,$(target)) 2>>$(cclog) extcoff: elf $(coffconv) -O coff-ext-avr $(addsuffix .elf,$(target)) $(addsuffix .cof,$(target)) 2>>$(cclog)

  1. - create o file -------------------------------------------------------------------------------------

%.o: %.cpp $(cc) $(cflags) $(addprefix -I,$(src_dirs)) -MD -c $< 2>>$(cclog)

  1. - create doxygen documentation ----------------------------------------------------------------------

dox: $(rm) $(doxylog) $(cog) Doxyfile $(doxygen) 2>> $(doxylog)

  1. - create program chip -------------------------------------------------------------------------------

program: $(programmer)

  1. - see size of program (WIN only) --------------------------------------------------------------------

size: if [ `echo ${OS} | grep "win" -i` ]; then echo; $(ELFSIZE); fi

  1. - clean garbage -------------------------------------------------------------------------------------

garbage: $(rm) $(wildcard *.d) $(wildcard *.o) $(cclog) $(doxylog) $(wildcard *.DBK) $(wildcard *.PWI) rmlogifclean: if [ `du $(cclog) | cut -f1 ` -eq '0' ]; then echo rm log; $(rm) $(cclog); fi if [ `du $(doxylog) | cut -f1 ` -eq '0' ]; then echo rm log; $(rm) $(doxylog); fi

  1. - clean and deep clean ------------------------------------------------------------------------------

clean: $(rm) $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) $(wildcard *.d) $(wildcard *.o) \ $(wildcard *.hex) $(cclog) $(doxylog) $(wildcard *.DBK) $(wildcard *.PWI) deepclean: $(rm) $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) $(wildcard *.d) $(wildcard *.o) \ $(wildcard *.hex) $(cclog) $(doxylog) doc $(wildcard *.DBK) $(wildcard *.PWI) $(cog) -x

  1. -----------------------------------------------------------------------------------------------------

include $(wildcard *.d) </source>

Софт для симуляции выполнения прошивок на МК - VMLAB

В качестве основного пакета для эмуляции МК "AVR" был выбран VMLAB.

Порядок скачки и установки

Здесь будет описан порядок установки и проверки симулятора.


Тестовый проект (мигаем светодиодами)

Здесь будет описан порядок запуска тестового проекта.


Программатор для прошивки МК

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

Вариант решения Внешний вид Комментарий Приблизительная стоимость Где взять
Самодельный программатор "5 проводков" для LPT-порта AVRProgrammerLPT-5wires small.jpg Может "сжечь" LPT-порт на материнской плате;

Самый дешевый и быстрый вариант;

от 3$ Собрать самому
Самодельный программатор с буфером для LPT-порта AVRProgrammerLPT-buffered small.jpg Менее быстрый, зато более надежный вариант; от 7$ Собрать самому
Готовый программатор AVR910 для COM-порта Файл:AVRProgrammerCOM-AVR910 small.jpg Очень надежный вариант от 25$ Купить в радиотоварах


Минимальное железо кроме программатора нужное для экспериментов

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

Минимальный рекомендуемый набор для разработки устройств на МК

В минимальном рекомендуемом варианте, кроме программатора, вам потребуются комплектующие общей стоимостью порядка 20$:

Название Внешний вид Приблизительная стоимость Где взять
Адаптер питания 220V AC => 5V DC AcDc5V small.jpg от 4$

Часто уже есть, например от USB-хабов D-Link

Купить в радиотоварах
Макетная плата для работы без пайки SolderlessBreadboard small.jpg от 10$ Купить в радиотоварах
Микроконтроллер AVR ATMega16 в DIP-корпусе ATMega16DIP small.jpg ~5$ Купить в радиотоварах
Резисторы 0.25Вт, 1 кОм, 10 кОм, 100 Ом по 5 штук каждого Resistors small.jpg ~0.5$ Купить в радиотоварах
Конденсатор 16В 0.1мкФ - 3шт Capacitor small.jpg ~0.5$ Купить в радиотоварах

Правила подключения к МК питания и других обязательных элементов обвязки

Здесь будет сказано как подключить к МК питание, ресет и т.п.

Тестовый проект на МК (мигаем светодиодами)

Здесь будет рассмотрен тестовый проект мигающий светодиодами.

См. также