Микроконтроллер ATmega1284 является одним из наиболее желанных чипов из линейки ATmega, с которым хочется работать благодаря его ресурсам. Он оснащен 128 КБ flash-памяти, 4 КБ EEPROM, 16 КБ ОЗУ (это в два раза больше, чем у ATmega2560). Плюсом также является то, что он расположен в DIP-корпусе, а значит с ним удобно работать обычному радиолюбителю. Кроме того, он стоит почти вдвое меньше, чем ATmega2560. Удивительно, но в настоящее время нет официальных плат Arduino с микроконтроллером ATmega1284.

Но можно сделать свою плату с ATmega1284, программируемую через Arduino IDE, Можно даже не делать плату, а собрать все на макетной плате для прототипирования. В данном материале будет показано, как можно будет сделать так, чтобы микроконтроллер ATmega1284 можно было бы программировать через Arduino IDE.
Во-первых, если вы не нуждаетесь в функциях типа millis() и digitalWrite(), то можете программировать ATmega1284 через Arduino IDE на пустое ядро с использованием внутрисхемного программатора (ISP). Для этого сначала поместите следующий текст в файл boards.txt, находящийся в папке Arduino AVR.
##############################################################
atmega1284e8.name=ATmega1284 @ 8 MHz (internal oscillator; BOD disabled)
atmega1284e8.upload.tool=arduinoisp
atmega1284e8.upload.maximum_size=131072
atmega1284e8.upload.maximum_data_size=16384
atmega1284e8.bootloader.tool=avrdude
atmega1284e8.bootloader.low_fuses=0xE2
atmega1284e8.bootloader.high_fuses=0x99
atmega1284e8.bootloader.extended_fuses=0xFF
atmega1284e8.bootloader.unlock_bits=0x3F
atmega1284e8.bootloader.lock_bits=0x3F
atmega1284e8.bootloader.file=empty.hex
atmega1284e8.build.mcu=atmega1284p
atmega1284e8.build.f_cpu=8000000L
atmega1284e8.build.board=AVR_ATMEGA1284E8
atmega1284e8.build.core=empty
atmega1284e8.build.variant=standard
##############################################################
atmega1284e1.name=ATmega1284 @ 1 MHz (internal oscillator; BOD disabled)
atmega1284e1.upload.tool=arduinoisp
atmega1284e1.upload.maximum_size=131072
atmega1284e1.upload.maximum_data_size=16384
atmega1284e1.bootloader.tool=avrdude
atmega1284e1.bootloader.low_fuses=0x62
atmega1284e1.bootloader.high_fuses=0x99
atmega1284e1.bootloader.extended_fuses=0xFF
atmega1284e1.bootloader.unlock_bits=0x3F
atmega1284e1.bootloader.lock_bits=0x3F
atmega1284e1.bootloader.file=empty.hex
atmega1284e1.build.mcu=atmega1284p
atmega1284e1.build.f_cpu=1000000L
atmega1284e1.build.board=AVR_ATMEGA1284E1
atmega1284e1.build.core=empty
atmega1284e1.build.variant=standard
##############################################################
Это добавит две новые опции в меню выбора плат: ATmega1284 с внутренним тактовым генератором 1 МГц и с внутренним тактовым генератором 8 МГц. Ниже приведен пример программы для мигания светодиодом (Blink), подключаемым к линии PD5 (вывод 19 микроконтроллера). Подключив внутрисхемный программатор, можно без труда загрузить этот код в микроконтроллер.
#include <avr/io.h>
#include <stdint.h>
int led = PORTD5;
void setup() {
DDRD = DDRD | 1<<led; // Определяем PD5 как выход
}
volatile long Counter;
void delay (long n) { // Задержка в n милисекунд
Counter = 29 * n;
do Counter--; while (Counter != 0);
}
void loop() {
PORTD = PORTD | 1<<led; // Устанавливаем PD5 в высокий логический уровень
delay(1000); // Ждем секунду
PORTD = PORTD & ~(1<<led); // Устанавливаем PD5 в низкий логический уровень
delay(1000); // Ждем секунду
}
int main() {
setup();
for(;;) loop();
}
Если же вы хотите запрограммировать ATmega1284 с использованием функций Arduino, то вам потребуется скачать Mighty 1284P core. Установите папку mighty-1284p в директорию Arduino\hardware и перезапустите Arduino IDE. После этого в меню Платы (Boards) добавится секция Mighty-1284p Boards. Рекомендуется выбирать вариант "maniacbug" Mighty 1284p 16MHz using Optiboot, в котором будет следующее соответствие портов Arduino и выводов микроконтроллера ATmega1284.

Есть еще один вариант – использовать загрузчик (bootloader). Это позволит программировать ATmega1284 через последовательный порт и вести отладку с помощью монитора последовательного порта. Для обеспечения работы с функциями Arduino в данном случае используется все то же ядро Mighty-1284p core. Бутлоадер можно записать в микроконтроллер с помощью внутрисхемного программатора. Но если у вас простой программатор типа Tiny AVR Programmer, который не поддерживает память программ объемом 128 КБ, то можно воспользоваться программатором, встроенным в Arduino Uno. Схема подключения показана ниже.

Чтобы установить загрузчик и программировать ATmega1284 с применением функций Arduino, во-первых, установите Mighty 1284P core. Далее в меню списка плат (Tools – Board) выберите "maniacbug" Mighty 1284p 16MHz using Optiboot. Затем откройте пример ArduinoISP (File - Examples - 11.ArduinoISP – ArduinoISP) и загрузите его в Arduino Uno. Сделайте Arduino внутрисхемным программатором (Tools - Programmer - Arduino as ISP). Загрузите бутлоадер (Tools - Burn Bootloader).
После этого вы можете отсоединить Arduino Uno и подключить обычный адаптер USB-UART, чтобы программировать ATmega1284 через USB-порт компьютера.
© digitrode.ru