Использование 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).
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.
