Использование Arduino-платы с WinAVR

25.11.2010 23:37 / Артём Волк / 1849 просмотров / ...

Обновлено 13.12.2010: Добавлен архив с исходниками

IDE проекта Arduino использует для компиляции программ WinAVR, поэтому для того, чтобы перейти на программирование с использованием «чистого» AVR-GCC на удобной аппаратной платформе Arduino нужно немного.

В качестве примера будет использован аналог скетча-примера Blink. Для компиляции и прошивки программы в контроллер понадобится:

  • Установленная копия WinAVR
  • Любая Arduino-совместимая плата или отдельный контроллер с Arduino-загрузчиком
  • Два файла: main.c (с основным кодом программы) и Makefile (необходим для сборки программы)

Параметры ниже подходят для платы Arduino Duemilanove с контроллером ATmega328P, для других их нужно незначительно изменить.

Преимущества такого подхода:

  • Можно использовать как Arduino IDE так и любые другие средства разработки
  • Удобные функции Arduino-плат (загрузчик, автоматический сброс перед загрузкой прошивки) продолжают работать
  • Этот способ можно использовать и для купленных отдельно чипов, предварительно прошив в них bootloader (например, с помощью ArduinoISP).

Makefile

В комплекте с WinAVR в папке <WinAVR>\sample\Makefile идёт удобный шаблон makefile'а. Следующие параметры нужно изменить.

Тип контроллера:

# MCU name
MCU = atmega328p

Частота (в герцах):

# Processor frequency.
F_CPU = 16000000

Имя файла с С-кодом:

# Target file name (without extension).
TARGET = main

Тип программатора (в данном случае это Arduino bootloader):

# Programming hardware
# Type: avrdude -c ?
# to get a full listing.
#	
AVRDUDE_PROGRAMMER = arduino

Виртуальный COM-порт, к которому подключена плата:

# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = com10    # programmer connected to serial device

Следующий параметр отвечает за детальный вывод программы avrdude, по умолчанию он закомментирован:

# Increase verbosity level.  Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
# to submit bug reports.	
AVRDUDE_VERBOSE = -v -v -v -v

Этот параметр необходимо добавить, т.к. по умолчанию он отсутствует (его значение для конкретной платы можно посмотреть в файле <arduino>\hardware\arduino\boards.txt):

# Baudrate
AVRDUDE_BAUDRATE = 57600

...и затем использовать его, исправив командную строку запуска avrdude (добавлен параметр -b$(AVRDUDE_BAUDRATE)):

AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b$(AVRDUDE_BAUDRATE)

main.c

У большинства Arduino-совместимых есть встроенный светодиод на цифровом выходе №13 (в терминах Arduino), аналог скетча Blink на C:

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

// LED pin (Arduino Digital Pin #13)
#define	LED_DDR		DDRB
#define LED_PORT	PORTB
#define LED_BIT		PINB5

int main(void) 
{
	// Set pin as output
	LED_DDR |= (1 << LED_BIT);

	for (;;)
	{	
		LED_PORT |= (1 << LED_BIT);
		_delay_ms(1000);
		LED_PORT &= ~(1 << LED_BIT);
		_delay_ms(1000);		
	}   
}

Скомпилировать программу можно с помощью запуска из командной строки:

make all

Прошить в микроконтроллер:

make program

Размер прошивки для Arduino-скетча Blink:

Binary sketch size: 1010 bytes (of a 30720 byte maximum)

Размер прошивки для программы на чистом C:

AVR Memory Usage
----------------
Device: atmega328p

Program:     172 bytes (0.5% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)

Скачать исходный код

Спонсор Arduino-тематики — компания Geeetech.com.