This page is hosted for free by zzz.com.ua, if you are owner of this page, you can remove this message and gain access to many additional features by upgrading your hosting to PRO or VIP for just 32.50 UAH.
Do you want to support owner of this site? Click here and donate to his account some amount, he will be able to use it to pay for any of our services, including removing this ad.

Использование ATmega1284P с Arduino IDE

ATmega1284P хороший чип: он имеет 128 Кбайт флеш-памяти, 4 Кбайт EEPROM и 16 Кбайт ОЗУ, что вдвое больше чем у ATmega2560. Также преимуществом есть то, что он доступен в DIP корпусе, поэтому он удобен для прототипирования и его легко можно подключить, и это почти в половину от цены на ATmega2560. К сожалению в настоящее время ATmega1284P официально не включен в Arduino IDE, но есть несколько вариантов как это можно сделать, о которых я попытаюсь рассказать.

Для одной из своих будущих самоделок решил использовать ATmega1284P, так как лежит без дела еще со времен 3D принтера с платой управления Gen7.

Схема подключения ATmega1284P довольно простая и содержит минимум деталей

Можно было бы собрать всю конструкцию и на макетной плате, но все таки удобнее и эстетичнее когда конструкция имеет свою печатную плату и законченный вид. Плату развел в SprintLayout, в дальнейшем попробую перейти на DipTrace, но это не точно :). Для подключения к пинам чипа я решил сделать два варианта разъемов, и мама и папа, это добавит универсальности в подключениях. Также сделаны отдельные гребенки с напряжениями 3,3В и 5В, для подключения нагрузки.

После изготовления и сбора печатной платы, перед установкой чипа, необходимо подать питание и проверить наличие и правильность полярности питающего напряжения на всех соответствующих пинах, и только после этого, отключив от платы питание, устанавливать чип на свое место.

Пришло время заливать скетчи и пользоваться своей дуинкой.

Вариант 1

Вольный перевод части статьи с сайта Technoblogy

Автор первой статьи описывает три альтернативных способа программирования с помощью Arduino IDE:

  • Использование пустого ядра.
  • Использование ядра ATmega1284.
  • Использование загрузчика.
Использование пустого ядра

Если нет необходимости в использовании основных функций Arduino, таких как millis() и digitalWrite(), самый простой способ программирования ATmega1284p из Arduino IDE - это использование внутрисхемного программирования (ISP) с пустым ядром. Добавьте следующий текст в файл boards.txt в каталоге AVR Arduino:

##############################################################
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
##############################################################

Это добавит два новых параметра в меню Boards, для ATmega1284 со встроенным генератором 1 МГц по умолчанию или со встроенным генератором 8 МГц.

Выберите опцию ATmega1284 @ 1 MHz (internal oscillator; BOD disabled) в меню Boards, это установит Fuse по умолчанию. Затем подключите ISP программатор и загрузите программу Blink (далее по тексту). Можно использовать любой ISP программатор или, например, Arduino Uno.

Схема подключения Arduino Uno к ATmega1284P

ATmega1284ISP.gif

Я использую вот такой, самый дешевый китайский программатор. 

Программа Blink

Пример программы Blink для использования с пустым ядром. Используется светодиод, подключенный через резистор 220 Ом к цифровому вводу/выводу PD5 (контакт 19):

/* ATmega1284 Blink sketch for use with the empty core */

#include <avr/io.h>
#include <stdint.h>

int led = PORTD5; // In port B

void setup() {                
 DDRD = DDRD | 1<<led;         // Define PD5 as an output
}

volatile long Counter;

void delay (long n) {          // Delay by n milliseconds
 Counter = 29 * n;
  do Counter--; while (Counter != 0);
}

// The loop routine runs over and over again forever:
void loop() {
  PORTD = PORTD | 1<<led;      // Take PD5 high
  delay(1000);                 // Wait for a second
  PORTD = PORTD & ~(1<<led);   // Take PD5 low
  delay(1000);                 // Wait for a second
}

// We need main()
int main() {
  setup();
  for(;;) loop();
}
Использование встроенного генератора 8 МГц

Если необходимо перепрограммировать Fuse для использования встроенного генератора 8 МГц, скачайте файл empty.zip (в приложении), разархивируйте empty.hex и поместите его в каталог bootloaders, который находится в каталоге avr и содержит файл boards.txt. Этот файл необходим для возможности использовать команду Burn Bootloader для установки Fuse, даже если фактически bootloader не будет загружаться.

Чтобы выбрать встроенный генератор 8 МГц, выберите параметр  ATmega1284 @ 8 MHz (internal oscillator; BOD disabled) и выберите Burn Bootloader, чтобы установить Fuse. Теперь если загрузить программу Blink еще раз, то светодиод начнет мигать в восемь раз быстрее.

Использование ядра ATmega1284

Если вы хотите использовать основные функции Arduino, необходимо установить ядро Mighty 1284P автора Jack Christensen, который он обновил для работы с версией 1.6.x в среде Arduino IDE.

Установите папку mighty-1284p в директорию hardware внутри Arduino и перезапустите среду разработки Arduino IDE. Это должно добавить раздел Mighty-1284p Boards в нижней части подменю Boards с несколькими альтернативными вариантами.

Хорошим вариантом является «maniacbug» Mighty 1284p 16MHz, используя опцию Optiboot в меню Boards, которая дает следующие назначения между выводами ATmega1284 и входами Arduino:

Затем можно загрузить скетч с помощью ISP программатора или Arduino Uno.

Установка загрузчика

Если вы приобрели чип ATmega1284P без установленного загрузчика, сначала нужно загрузить bootloader с помощью ISP. Это можно сделать с помощью ISP программатора либо, с применением, например, Arduino Uno. 

Порядок загрузки Bootloader'а:

  • Установите ядро ​​Mighty 1284P.

  • В подменю Tools -> Board выберите "maniacbug" Mighty 1284p 16MHz using Optiboot.

  • Выберите скетч File -> Examples -> 11.ArduinoISP -> ArduinoISP и загрузите его в Arduino Uno.

  • Выберите Tools -> Programmer -> Arduino as ISP.

  • Выберите Tools -> Burn Bootloader.

Затем можно отключить Arduino Uno, подключить USB-to-serial конвертер и загрузить программы через USB-порт.

Использование загрузчика

Если вы хотите программировать ATmega1284P через последовательный порт и использовать последовательный монитор для отладки, сначала необходимо установить загрузчик, и также необходим конвертер USB-to-serial. Существует несколько альтернатив, я использовал самодельный конвертер на чипе Microchips MCP2200, так как микросхема у меня была и надо было ее куда-нибудь использовать. Статью по изготовлению конвертера я опубликую позднее.

Схема подключения

ATmega1284.gif

Теперь можно загрузить стандартную программу Arduino Blink, которая должна мигать светодиодом, подключенным к контакту 19 ATmega1284.

Вариант 2

Данная статья является вольным переводом части файла ReadMe с сайта Github-MightyCore. 

Поддерживаемые микроконтроллеры
  • ATmega1284
  • ATmega644
  • ATmega324
  • ATmega164
  • ATmega32
  • ATmega16
  • ATmega8535

* Все варианты - P, PA, A, PB. Выберите правильную версию в меню «Variant» 

Характеристики чипов, поддерживаемых ядром MightyCore

 

mega1284

mega644

mega324

mega164

mega32

mega16

mega8535

Flash

128kB

64kB

32kB

16kB

32kB

16kB

8kB

RAM

16kB

4kB

2kB

1kB

2kB

1kB

512B

EEPROM

4kB

2kB

1kB

512B

512B

512B

512B

Serial ports

2

2

2/3 *

2

1

1

1

PWM pins

8

6

6/9 *

6

4

4

4

IO pins

32

32

32/39 *

32

32

32

32

* ATmega324PB имеет 3 последовательных порта, 9 пинов PWM и 39 пинов IO, если используется внутренний генератор.

Установка ядра MightyCore

Установка в менеджере плат

Этот метод установки требует Arduino IDE версии 1.6.4 или выше.

  • Откройте Arduino IDE.
  • Откройте меню File > Preferences.
  • Введите следующий URL-адрес в Additional Boards Manager URLs:
    https://mcudude.github.io/MightyCore/package_MCUdude_MightyCore_index.json
  • Разделите URL-адреса с помощью запятой ( , ), если используется несколько URL-адресов
  • Откройте меню Tools > Board > Boards Manager.
  • Подождите, пока загрузятся индексы платформы.
  • Прокрутите вниз, пока не увидите запись MightyCore, и нажмите на нее.
  • Нажмите Install.
  • После завершения установки закройте окно Boards Manager.
Ручная установка

Актуальная версия ядра находится на GitHub по ссылке. Нажмите кнопку Clone or download. Извлеките ZIP-архив и переместите извлеченную папку в папку "~/Documents/Arduino/hardware". Создайте hardware папку, если она не существует. Откройте Arduino IDE и новая категория появится в меню плат под названием MightyCore.

Поддерживаемые тактовые частоты
  • 16 МГц внешний генератор (по умолчанию)
  • 20 МГц внешний генератор
  • 18,432 МГц внешний генератор *
  • 12 МГц внешний генератор
  • 8 МГц внешний генератор
  • 8 МГц внутренний генератор **
  • 1 МГц встроенный генератор

Выберите микроконтроллер в меню Boards, затем выберите тактовую частоту. Вам нужно нажать Burn bootloader, чтобы установить правильные Fuse и загрузить правильный загрузчик. 
Убедитесь, что вы подключили ISP программатор и выберите правильный вариант в меню «Programmers». Рекомендуется использовать внешний генератор. 

** Возможно, возникнут некоторые проблемы, связанные с внутренним генератором. Он откалиброван на заводе, но может быть немного «выключен» в зависимости от калибровки, температуры окружающей среды и рабочего напряжения. Если при использовании внутреннего генератора 8 МГц возникают ошибки, тогда есть три варианта:

  • Измените baudrate линии передачи в файле boards.txt и выберите либо 115200, 57600, 38400, либо 19200 бод.
  • Загрузите код с помощью программатора (USBasp, USBtinyISP и т.д.) или пропустите загрузчик, удерживая клавишу Shift, нажимая кнопку Upload.
  • Используйте вариант с 1 МГц.
Опция BOD

Большинство микроконтроллеров AVR имеет встроенную систему контроля питания. Так называемый BOD (Brown-out Detection). Назначение этой системы - повышение стабильности и надежности работы микропроцессорных систем при понижении напряжения питания. Эта система осуществляет постоянное сравнение напряжения питания с неким пороговым уровнем. Чтобы изменить настройки BOD, вам нужно будет подключить ISP программатор и нажать Burn bootloader. Ниже приведена таблица, показывающая доступные варианты BOD: 

ATmega1284

Atmega644

ATmega324

ATmega164

ATmega32

ATmega16

ATmega8535

4.3V

4.3V

4.3V

4.3V

4.0V

4.0V

4.0V

2.7V

2.7V

2.7V

2.7V

2.7V

2.7V

2.7V

1.8V

1.8V

1.8V

1.8V

-

-

-

Disabled

Disabled

Disabled

Disabled

Disabled

Disabled

Disabled

Оптимизация времени соединения / LTO

Arduino IDE поддерживает оптимизацию времени соединения (LTO) начиная с версии 1.6.11. LTO оптимизирует код во время соединения, делая код (часто) значительно меньшим, не делая его «медленнее». В Arduino IDE 1.6.11 и более поздних, LTO включена по умолчанию. Автор ядра MightyCore решил отключить эту опцию по умолчанию, чтобы убедиться, что ядро ​​поддерживает обратную совместимость. Включение LTO в IDE 1.6.10 и старше будет возвращать ошибку. 

Рекомендую вам попробовать новый вариант LTO и посмотреть, насколько меньше будет ваш код! Обратите внимание, чтобы включить LTO не нужно использовать Burn Bootloader. Просто включите его в меню Tools, и ваш код готов для компиляции. Если вы хотите больше узнать о флагах LTO и GCC, перейдите на сайт GNU GCC ! 

Вот несколько сравнительных цифр. Эти скетчи были скомпилированы для ATmega1284 с использованием Arduino IDE 1.6.12 (avr-gcc 4.9.2). 

 

Blink.ino

AnalogReadSerial.ino

SerialReadWrite.ino

CardInfo.ino

LTO enabled

1084 байта

1974 байта

7190 байт

9416 байт

LTO disabled

1216 байт

2414 байт

7710 байт

11518 байт

Распиновка

Это ядро ​​имеет три разных варианта выводов:

  • Standard: Распиновка по умолчанию и основана на исходной разводке AVR.
  • Bobuino: Основана на настройках пинов Arduino UNO. Эта версия распиновки отлично подходит для использования с шильдами или кодом, написанным для Arduino UNO, поскольку функции пинов остаются такими же (MOSI на D11, MISO на D12, SCK на D13).
  • Sanguino: эта распиновка распространена на старых контроллерах трехмерного принтера, таких как Sanguino, RepRap Sanguinololu и RepRap Gen7. Эта распиновка также известна как «avr_developers».

Смотрите файл (pins_arduino.h) для получения дополнительной информации. Выбирайте свой любимый! 

Программаторы

MightyCore добавляет свои копии всех стандартных программаторов в меню Programmer. Необходимо выбрать копию программатора MightyCore в меню Upload Using Programmer, для работы с ATmega1284, ATmega324A, ATmega324PB или ATmega164A.

Запись в собственную flash

MightyCore использует форк Optiboot от @majekw, что позволяет записывать на flash при запущенном приложении. Это означает, что данные с сенсора (например) могут храниться во флэш-памяти напрямую, без необходимости внешней памяти. Флэш-память намного быстрее, чем EEPROM, и может обрабатывать около 10 000 циклов записи. 
Дополнительная информации о том, как работает эта функция, и о том, как ее можно попробовать на MightyCore совместимом микроконтроллере, находится по ссылке Optiboot flasher.

Начало работы с MightyCore

Итак, вы загрузили и установили MightyCore, что дальше? Вот краткое руководство:

  • Подключите микроконтроллер к ISP программатору или USB-to-serial конвертеру, как показано на схемах выше.
  • Откройте меню Tools > Board и выберите совместимый с MighyCore микроконтроллер.
  • Если доступен вариант BOD, вы можете выбрать, при каком напряжении будет выключен микроконтроллер.
  • Выберите желаемую распиновку.
  • Выберите желаемую тактовую частоту. 16 МГц является стандартным для большинства плат Arduino.
  • В меню Programmers выберите используемый программатор.
  • Если доступен пункт Variants, вам нужно выбрать версию используемого микроконтроллера. Например, ATmega1284 и ATmega1284P имеют разные сигнатуры устройств, поэтому выбор неправильного микроконтроллера приведет к ошибке.
  • Нажмите Burn Bootloader. Если светодиод подключен к контакту PB0, он должен мигать дважды в секунду.
  • Теперь, когда установлены правильные настройки Fuse и загружен Bootloader, вы можете загрузить свой код двумя способами:
    • Отключите программатор и подключите USB-to-serial конвертер к микроконтроллеру как показано на схеме выше. Затем выберите правильный последовательный порт в меню Tools и нажмите кнопку Upload. Если появляется сообщение об ошибке таймаута, значит контакты RX и TX необходимо поменять местами, или цепь автоматического сброса работает неправильно (конденсатор 100 нФ на линии сброса).
    • Оставьте программатор подключенным и удерживая нажатой кнопку shift нажмите кнопку Upload. Это приведет к стиранию загрузчика и загрузке кода с помощью программатора.

 

MaD-TuX

Я не программист и не электронщик, но мне нравится что-то делать самому. Все мои знания берутся из интернет форумов, статей и персональных страниц.

Просто делюсь своими наработками