От Arduino к микроконтроллеру на макетной плате (Arduino ISP)
Пошаговое руководство по переносу проекта с платы Arduino на автономный микроконтроллер ATmega, установленный на макетной плате.
В этом уроке разберём, как перейти от полноценной платы Arduino к автономному микроконтроллеру на макетной плате. Подход похож на this tutorial, но здесь мы используем саму Arduino как программатор для ATmega на макетной плате.
Если вы не планируете использовать минимальную конфигурацию (описана в конце урока), вам понадобятся четыре дополнительных компонента помимо Arduino, ATmega328P и макетной платы:
- кварцевый резонатор на 16 MHz,
- резистор 10 кОм,
- два керамических конденсатора ёмкостью от 18 до 22 пикофарад.
Зачем это нужно?
Плата Arduino — удобный инструмент для разработки, но в готовом устройстве она избыточна: занимает место, потребляет лишний ток и стоит дороже голого чипа. Перенос скетча на отдельный ATmega позволяет сделать устройство компактным и дешёвым. При этом вся привычная экосистема Arduino сохраняется.
Прошивка загрузчика (Bootloader)
Если у вас новый ATmega328P (или ATmega168), на нём нет загрузчика — нужно его записать. Для этого используем Arduino в роли внутрисхемного программатора (ISP). Если микроконтроллер уже содержит загрузчик (например, вы вытащили его из рабочей Arduino или заказали уже прошитый ATmega), этот раздел можно пропустить.
Шаги для записи загрузчика:
- Загрузите скетч ArduinoISP на вашу Arduino. (Не забудьте выбрать правильную плату и порт в меню «Инструменты».)
- Соберите схему: подключите Wire Arduino и микроконтроллер, как показано на схеме ниже.
- В меню «Инструменты» → «Плата» выберите «Arduino Duemilanove or Nano w/ ATmega328». Если используете минимальную конфигурацию без кварца — выберите «ATmega328 on a breadboard (8 MHz internal clock)».
- В меню «Инструменты» → «Программатор» выберите «Arduino as ISP».
- Запустите «Инструменты» → «Записать загрузчик».
Загрузчик достаточно записать один раз. После этого провода от пинов 10, 11, 12 и 13 Arduino можно убрать — они больше не нужны.

Схема подключения микроконтроллера ATmega168 на макетной плате к Arduino через интерфейс ICSP. Используем Arduino как программатор для записи загрузчика на ATmega.
Типичные ошибки при записи загрузчика
- Не выбран программатор «Arduino as ISP» — без этого запись не пойдёт, IDE выдаст ошибку.
- Перепутаны MISO/MOSI — проверьте распиновку:
MISO→ пин 12,MOSI→ пин 11,SCK→ пин 13,SS→ пин 10. - Конденсатор 10 мкФ между RESET и GND на Arduino — некоторые версии
ArduinoISPтребуют его для предотвращения авторесета. Если запись зависает, попробуйте добавить его. - Неправильно выбрана плата — если выбрать плату с внешним тактированием, а кварца нет, чип «замолчит» и его будет сложно оживить.
Загрузка скетчей через Arduino
Когда загрузчик записан, можно загружать скетчи через USB-Serial конвертер (FTDI-чип) на плате Arduino. Для этого нужно вынуть микроконтроллер из Arduino, чтобы FTDI-чип общался с ATmega на макетной плате напрямую. Соедините линии RX и TX Arduino с ATmega на макетной плате, как показано на схеме.
Для загрузки выберите «Arduino Duemilanove or Nano w/ ATmega328» в меню «Инструменты» → «Плата» (или «ATmega328 on a breadboard (8 MHz internal clock)» для минимальной конфигурации). Затем загружайте скетч как обычно.

Схема использования Arduino как USB-Serial адаптера: микроконтроллер извлечён из платы, соединение идёт к ATmega168 на макетной плате. Не забудьте вынуть ATmega из Arduino перед загрузкой!
Как проверить, что загрузка прошла успешно
Загрузите стандартный скетч Blink и подключите светодиод к пину 13 микроконтроллера (соответствует PB5 у ATmega168/ATmega328). Если светодиод мигает — всё работает правильно.
Минимальная конфигурация (без внешнего кварца)
Если под рукой нет кварцевого резонатора на 16 MHz и конденсаторов, можно настроить ATmega328P на использование внутреннего RC-генератора на 8 MHz. Резистор 10 кОм на пине RESET в этом случае тоже не обязателен — получается действительно минимальная схема.
Для поддержки этой конфигурации нужно установить дополнительные файлы:
- Скачайте архив с конфигурацией: breadboard-1-6-x.zip, Breadboard1-5-x.zip или Breadboard1-0-x.zip — в зависимости от версии IDE.
- В папке вашего Arduino Sketchbook (путь указан в настройках Arduino) создайте подпапку
hardware. Если она уже есть (вы ранее добавляли сторонние платы) — пропустите этот шаг.
- Переместите папку
breadboardиз архива в созданную папкуhardware.
- Перезапустите Arduino IDE.
- В меню «Инструменты» → «Плата» должна появиться строка «ATmega328 on a breadboard (8 MHz internal clock)».
После этого записывайте загрузчик и загружайте скетчи, как описано выше. Обязательно выбирайте «ATmega328 on a breadboard (8 MHz internal clock)» при записи загрузчика. Если выбрать вариант с внешним тактированием, а кварца нет — чип перестанет отвечать, и восстановить его без специального программатора будет затруднительно.
Внимание: эта процедура проверена для Arduino IDE версии 1.0.x.

Упрощённая схема подключения ATmega168 на макетной плате к Arduino (без кварцевого резонатора). Используем внутренний генератор на 8 МГц для записи загрузчика на ATmega.

Упрощённая схема использования Arduino как USB-Serial адаптера с извлечённым микроконтроллером для загрузки скетчей в ATmega на макетной плате.
Практические замечания по минимальной конфигурации
- Внутренний генератор на 8 МГц менее стабилен по частоте, чем кварц. Для большинства проектов это несущественно, но если вы используете
UART,I2C,SPIили точные временны́е задержки — лучше поставить кварц. - Тактовая частота 8 МГц вместо 16 МГц означает, что некоторые библиотеки могут работать иначе или требовать адаптации.
- Напряжение питания при работе от внутреннего генератора может быть ниже 5 В (вплоть до 2.7 В для
ATmega328P), что удобно для автономных устройств на батарейках.
Автономная работа без Arduino
Когда ATmega на макетной плате прошит и протестирован, плата Arduino больше не нужна. Для автономной работы подключите внешний источник питания к микроконтроллеру. Подробности — в руководстве standalone Arduino on a breadboard.
Узнать больше
Больше базовых примеров — в разделе built-in examples.
Также рекомендуем изучить language reference — подробный справочник по языку программирования Arduino.