
Я уже писал о том, как устанавливать различные отладочные платы и микроконтроллеры Atmel для того, чтобы их можно было программировать, используя среду разработки Arduino IDE в статье Установка дополнительных плат в Arduino IDE. Сегодня я рассмотрю еще один частный случай программирования микроконтроллера ATmega128A, используя программатор USBasp и ардуишную среду.
Загрузчик для ATmega128A
Для того, чтобы записать программу в память микроконтроллера непосредственно из Arduino IDE потребуется специальная программа-загрузчик (bootloader), размещенная в специальной области памяти микроконтроллера, которая постоянно опрашивает UART.
Это немного измененная версия загрузчика с сайта www.chip45.com.
Для компиляции я использовал AVR-GCC.
$ avr-gcc -mmcu=atmega128 -Wall -Os -o boot_mega128.o boot_mega128.c $ avr-objcopy -O ihex boot_mega128.o boot_mega128.hex
В архиве содержится исходный C-файл, объектый файл и готовый hex-файл. Для дальнейших действий понадобится только последний.
Устанавливаем фьюзы микроконтроллера и прошиваем загрузчик, используя программатор USBasp и AVRDUDE:
$ sudo avrdude -p m128 -c usbasp -P usbasp -Uefuse:w:0xff:m -Uhfuse:w:0xca:m -Ulfuse:w:0xff:m -Ulock:w:0x3F:m $ sudo avrdude -p m128 -c usbasp -e -U flash:w:boot_mega128.hex -Ulock:w:0x0F:m
В Windows sudo писать не нужно.
Создадим папку atmega128 и перепишем в нее файл boot_mega128.hex в папке с загрузчиками среды Arduino для того, чтобы можно было прошивать bootloader прямо из Arduino IDE.
В MacOS X путь к папке с загрузчиками выглядит следующим образом:
.../arduino/Contents/Java/hardware/arduino/avr/bootloaders
Файл boards.txt
В Windows этот файл расположен в папке с Arduino:
.../hardware/arduino/avr/boards.txt
В Mac OS X:
.../arduino/Contents/Java/hardware/arduino/avr/boards.txt
В конец файла boards.txt среды Arduino добавляем следующие строчки:
############################################################### atmega128A.name=Custom ATmega 128 Breakout Board using AVRISP atmega128A.upload.tool=usbasp atmega128A.upload.maximum_size=126976 atmega128A.bootloader.low_fuses=0xFF atmega128A.bootloader.high_fuses=0xCA atmega128A.bootloader.extended_fuses=0xFF atmega128A.bootloader.path=atmega atmega128A.bootloader.file=boot_mega128.hex atmega128A.bootloader.unlock_bits=0x3F atmega128A.bootloader.lock_bits=0x0F atmega128A.build.mcu=atmega128 atmega128A.build.f_cpu=8000000L atmega128A.build.core=arduino atmega128A.build.variant=mega128
Обратите внимание на фьюзы загрузчика. Они в точности должны совпадать с указанными при его прошивке!
Тактовая частота микроконтроллера у меня установлена равной 8 МГц.
Определяем пины
Для того, чтобы было удобно обращаться к тому или иному пину, необходимо указать их соответствие для нашего микроконтроллера. В папке variants создадим новую папку mega128
В папке mega128 необходимо создать файл pins_arduino.h с описанием пинов микроконтроллера ATmega128.
Hello, world!
Осталось проверить работоспособность. Подключаем к выводу PB4 светодиод (12 пин) и наслаждаемся его незамысловатым миганием, предварительно загрузив представленный ниже скетч в микроконтроллер, выбрав микроконтроллер Custom ATmega 128 Breakout Board using AVRISP и программатор USBasp из среды Arduino IDE.
int ledPin=12; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
Андрей, можно ли этот бутлоадер пересобрать под atmega64?
Отличий между 64 и 128 минимум, но есть одно замечание касательно бутлоалдера
The Boot Loader area is also changed. The following must be considered:
• The No-Read-While-Write section starts at word address 0xF000 instead of
0×7000.
Есть еще такой генератор загрузчиков
homes-smart.ru/index.php/...o/avr-zagruzchik
сразу hex файл делает на любые рабочие частоты.
А ты уверен что у тебя это заработало?
даже вот это atmega128A.upload.tool=usbasp
в файле boards.txt
сбивает с толку