Делаем Arduino Nano из Atmega8515 (ATmega162)

Сделать Arduino Nano (Uno) из Atmega8515 (ATmega162) достаточно легко! Будем использовать загрузчик Urboot.

Atmega8515 распиновка:

Распиновка Ардуино на Atmega8515 в корпусе TQFP

На основе: “github.com/MCUdude/MajorCore” и
“gameforstreet.ru/delaem-arduino-nano-iz-mikroshemy-atmega88-8-48-168-328/”

Нашёл у себя только микросхему ATmega8515 в SMD корпусе (TQFP-44).
Загрузил загрузчик при помощи программатора USBasp, также можно воспользоваться простейшим программатором “5 проводков”.

Получившуюся Arduino прошивал скретчами из Arduino IDE – всё работает!

Фьюзы при прошивке Atmega8515 выставлял следующие:

Прошивку использовал следующую – скачать hex файл прошивки для Atmega8515:
– в zip архиве.
– в tar.gz архиве.

Вышеуказанный hex файл для прошивки брал из этого архива – скачать bootloader MajorCore в zip архиве.

Лежит прошивка по следующему пути: “MajorCore-master/avr/bootloaders/urboot/atmega8515/watchdog_1_s/autobaud/uart0_rxd0_txd1/no-led/”

Схема соединения следующая для SMD корпуса (здесь подсоединял ещё IR приёмник к ножке PD3):

Схема соединения следующая для DIP корпуса для всех Атмег:

Как загрузить загрузчик в Arduino IDE – аналогично моей предыдущей статье – “Делаем Arduino Nano из микросхемы Atmega88 (8/48/168/328)” – “gameforstreet.ru/delaem-arduino-nano-iz-mikroshemy-atmega88-8-48-168-328/”. Там же можно найти и подключение через UART с ch340 и программатор 5 проводков.

——————–
Ручная установка
Нажмите кнопку «Скачать ZIP». Распакуйте ZIP-файл и переместите распакованную папку в папку ~/Documents/Arduino/hardware. Создайте папку hardware, если она не существует. Откройте Arduino IDE, и в меню плат появится новая категория под названием MajorCore.

Установка Arduino CLI
Выполните следующую команду в терминале:

arduino-cli core install MajorCore:avr --additional-urls https://mcudude.github.io/MajorCore/package_MCUdude_MajorCore_index.json

————————-

Примечание:

Большинство библиотек, совместимых с Arduino UNO, будут работать с этим ядром. Если нет, то перенести библиотеку довольно просто. Для этого ядра требуется как минимум Arduino IDE версии 1.6, но рекомендуется версия 1.8.9 или новее. IDE 2.x тоже должна работать.

Примечание 2:

Инструкция Atmega8515 (datasheet) скачать:
– скачать в формате pdf

Про подключения внешнего Кварца в инструкции Atmega8515 сказано следующее:

Кварц (кварцевый резонатор) на 16 МГц выглядит так:

Максимальная кварц подключенный без программирования параметра CKOPT – 8 МГц, со CKOPT – 16 МГц. Arduino по умолчанию работает на 16 МГц, поэтому программируем со CKOPT.

Далее идёт схема подключения и таблица:

Подключать можно без конденсаторов – тоже будет работать, но лучше с ними.

По таблице CKOPT – 0 (запрограммирован), параметр CKSEL 3..1 должен иметь значение 101, 110, 111 (выбираем 111) – при этих параметров кварц может быть от 1 до 16 МГц (нам нужно 16МГц для Ардуино).

Идём на следующую страницу – здесь ещё одна таблица:

Здесь выбираем – Crystal Oscillator, slowly rising power – то есть это Кварц с медленным стартом – фьюзы для него CKSEL0 – 1, SUT1..0 – 11.

В итоге получаем следующее CKOPT – 0 (запрограммирован), остальные параметры не запрограммированы – CKSEL 3..1 (CKSEL3, CKSEL2, CKSEL1) – 111, CKSEL0 – 1, SUT1..0 – 11

—————————————————————-
Примечание 2:
—————————————

Сделал Arduino на Atmega8515 в корпусе TQFP44 без кварца на внутреннем 1 МГц (работает по умолчанию), в Arduino IDE 2.3.6 настройки соединения были следующие:

MajorCore выбран Atmega8515
Также выбрал кварц Internal 1MHz (Внутренний 1 МГц)
И для загрузки использовал самодельный программатор USBasp

После чего загрузил на него Загрузчик Ардуино:

После загрузил Скретч – мигание светодиодом:

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

Всё отлично работает – светодиод мигает на PB0!

Также для вывода данных в Serial Monitor (последовательное соединение по UART) использовал – преобразователь USB-UART для Адуино – HW-597 (на микросхеме CH340) и программу CuteCom (бесплатный терминал).

Но от кварц Internal 1MHz (Внутренний 1 МГц) – UART не захотел работать, поэтому пришлось установить внешний кварц на 6 МГц (под рукой был только он).

————————————-
Примечание 2.1.
—————————-

Схема соединения:

Чтобы подключить внешний кварц на 6 МГц фьюзы использовал следующие (прошивал в Linux в программе Burn-O-Mat, если у Вас другая прога, то ориентируйтесь на фьюз SPIEN – должен всегда быть прописан, в моей проге, если стоит галочка, значит фьюз прописан):

После загрузки bootloadera от Ардуино фьюзы стали следующими:

Сделал Arduino на Atmega8515 в корпусе TQFP44 с кварцем на 6 МГц, в Arduino IDE 2.3.6 настройки соединения были следующие:

MajorCore выбран Atmega8515
Также выбрал кварц на 6 МГц
И для загрузки использовал самодельный программатор USBasp

После чего загрузил на него Загрузчик Ардуино:

После загрузил Скретч – чтение сигналов пульта через инфракрасный приёмник:

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results; 
void setup() {
  Serial.begin(57600);
  irrecv.enableIRIn(); } 
  void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); }
}

Здесь важно указать скорость последовательного соединения – зависит от использованного кварца – читай pdf инструкцию в самом низу записи.

Также для вывода данных в Serial Monitor (последовательное соединение по UART) использовал – преобразователь USB-UART для Адуино – HW-597 (на микросхеме CH340) и программу CuteCom (бесплатный терминал).

Всё отлично работает – данные с пульта считываются!

===========================================================

Добавил в код – вывод надписи светодиод горит, светодиод гаснет:

void setup() {
  Serial.begin(9600);
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println("Светодиод светит");  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW); 
  Serial.println("Светодиод не светит");   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

—————————————————————-
Примечание 3:
—————————————

Скачать pdf файл с инструкцией по MajorCore

Добавить комментарий