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

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
м
Строка 14: Строка 14:
 
# Запустить среду разработки и загрузить в неё тестовый проект, скомпилировать и убедиться, что всё ок.
 
# Запустить среду разработки и загрузить в неё тестовый проект, скомпилировать и убедиться, что всё ок.
  
=== Тестовый проект (мигаем светодиодами) ===
+
=== Тестовый проект PORTB_LED_FLASH ===
 
Моргаем светодиодами на порту B
 
Моргаем светодиодами на порту B
  
Строка 51: Строка 51:
  
 
Для сборки проекта используется утилита make<ref>[http://www.linux.org.ru/books/GNU/Gmake.htm Эффективное использование GNU make]</ref>.
 
Для сборки проекта используется утилита make<ref>[http://www.linux.org.ru/books/GNU/Gmake.htm Эффективное использование GNU make]</ref>.
Она выполняет правила, записанные в файле '''Makefile'''.
+
Она выполняет правила, записанные в файле '''Makefile'''. Его можно написать вручную, а можно воспользоваться программой из состава WinAVR. [[Пример make-файла для тестового проекта PORTB_LED_FLASH]].
Его можно написать вручную, а можно воспользоваться программой из состава 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
 
 
 
 
 
#- 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))
 
 
 
#-----------------------------------------------------------------------------------------------------
 
all: elf hex eep rmlogifclean size
 
 
 
#- create elf file -----------------------------------------------------------------------------------
 
elf: $(addsuffix .elf,$(target))
 
 
 
$(addsuffix .elf,$(target)): $(notdir $(patsubst %.cpp,%.o, $(wildcard $(search))))
 
$(cc) $(lflags) $^ -o $(addsuffix .elf,$(target)) 2>>$(cclog)
 
 
 
#- create hex file -----------------------------------------------------------------------------------
 
hex: $(addsuffix .hex,$(target))
 
 
 
$(addsuffix .hex,$(target)): elf
 
$(objcpy) -R.eeprom -O ihex $(addsuffix .elf,$(target)) $(addsuffix .hex,$(target)) 2>>$(cclog)
 
 
 
#- 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)
 
 
 
 
 
#- 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)
 
 
 
#- create o file -------------------------------------------------------------------------------------
 
%.o: %.cpp
 
$(cc) $(cflags) $(addprefix -I,$(src_dirs)) -MD -c  $< 2>>$(cclog)
 
 
 
#- create doxygen documentation ----------------------------------------------------------------------
 
dox:
 
$(rm) $(doxylog)
 
$(cog) Doxyfile
 
$(doxygen) 2>> $(doxylog)
 
 
 
#- create program chip -------------------------------------------------------------------------------
 
program:
 
$(programmer)
 
 
 
#- see size of program (WIN only) --------------------------------------------------------------------
 
size:
 
if [ `echo ${OS} | grep "win" -i` ]; then echo; $(ELFSIZE); fi
 
 
 
#- 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
 
 
#- 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
 
 
 
#-----------------------------------------------------------------------------------------------------
 
include $(wildcard *.d)
 
</source>
 
  
 
== Софт для симуляции выполнения прошивок на МК - VMLAB ==
 
== Софт для симуляции выполнения прошивок на МК - VMLAB ==

Версия 18:07, 24 июля 2008


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


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

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

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

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

Тестовый проект PORTB_LED_FLASH

Моргаем светодиодами на порту 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. Пример make-файла для тестового проекта PORTB_LED_FLASH.

Софт для симуляции выполнения прошивок на МК - 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$ Купить в радиотоварах

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

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

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

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

См. также