Arduino Mega 2560: распиновка, питание и порты
Uno кончилась посреди проекта: восемь серв, адресная лента, дисплей, горстка датчиков, а свободных пинов ноль, и городить вторую плату обидно. Mega 2560 снимает потолок разом: 54 цифровых пина (15 с ШИМ), 16 аналоговых входов, четыре аппаратных UART и 256 КБ флеша, в восемь раз больше, чем у Uno. Но переезд с Uno не проходит без грабель: шина I2C тут не на A4 и A5, а на пинах 20 и 21, в макетную плату Mega упирается краями, а сервы, повешенные на пин 5V, просаживают питание до перезагрузок.
Ниже группы пинов таблицей, питание с честными лимитами токов, память и четыре порта, плюс скетч, который за минуту проверяет UART и ШИМ на пинах 44–46. Логику скетчей можно прогнать в симуляторе: он эмулирует Uno, но код общий, пины переставьте. Пошаговый разбор младшей сестры в распиновке Uno R3.
Отдельные разделы ниже отвечают на вопросы, которые возникают при переезде: почему шина молчит после подключения по памяти от Uno, чем Mega отличается от Nano в реальном проекте, сколько серв она выдержит и стоит ли вообще менять плату.
Группы пинов: кто где сидит
Три длинных ряда разъёмов по краям пугают, пока не разложишь их по группам. Пины 0 и 1 отданы USB-чипу ATmega16U2, трогать их не стоит: сорвёте и прошивку, и Serial Monitor. ШИМ раскинут на пинах 2–13 и 44–46, аналоговые входы A0–A15 живут отдельным рядом у края платы. I2C это пины 20 (SDA) и 21 (SCL), SPI это 50–53 (MISO, MOSI, SCK, SS).
| Группа | Пины | Что важно знать |
|---|---|---|
| Цифровые | 0–53, всего 54 | 0 и 1 заняты аппаратным UART и USB-чипом 16U2 |
| ШИМ (analogWrite) | 2–13 и 44–46, всего 15 | На 44–46 ШИМ работает, у Uno таких пинов нет |
| Аналоговые входы | A0–A15, всего 16 | Только чтение: digitalWrite на них не работает |
| UART | 0/1, 19/18, 17/16, 15/14 | Четыре аппаратных порта: Serial и Serial1–Serial3 |
| I2C | 20 (SDA), 21 (SCL) | Не A4 и A5, как у Uno, первая грабля переезда |
| SPI | 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS) | SD-карты, дисплеи, радиомодули NRF24L01 |
| Питание | 5V, 3.3V, VIN, GND | VIN 7–12 В, пин 3.3V отдаёт до 50 мА |
Питание: USB, VIN и лимиты токов
USB отдаёт до 500 мА и закрывает отладку с датчиками и дисплеями. VIN и круглый разъём принимают 7–12 В (паспорт допускает 6–20, но стабилизатор линейный и греется пропорционально разнице напряжений, на 20 В он сдаётся раньше, чем вы успеете радоваться запасу). Один пин держит 20 мА рабочего тока при потолке 40 мА, а через весь чип проходит около 200 мА: это настоящий потолок Mega, а не число пинов. Ленты, сервы и моторы кормят отдельным БП с общей землёй.
Память: 256 КБ флеша, 8 КБ SRAM, 4 КБ EEPROM
Флеш 256 КБ, из них 8 КБ занимает загрузчик, скетчам остаётся около 248 КБ против 32 КБ у Uno: крупные шрифты, графика и несколько тяжёлых библиотек перестают быть квестом с оптимизацией. Дороже флеша SRAM, 8 КБ под строки, буферы и таблицы: на Uno длинная бегущая строка уже душит 2 КБ. EEPROM 4 КБ хранит настройки между выключениями, вчетверо больше уновского; как писать туда так, чтобы ячейки не износились, в уроке про EEPROM.
Четыре UART: Serial, Serial1, Serial2, Serial3
Аппаратных портов четыре: Serial (0/1, он же USB), Serial1 (19/18), Serial2 (17/16), Serial3 (15/14). SoftwareSerial больше не нужен: Bluetooth-модуль на Serial1, GPS на Serial2, вторая плата на Serial3, и каждый шлёт свои данные без конфликтов скоростей и потерянных байтов. Первые шаги с портом в уроке про Serial Monitor.
const int PINS_SHIM[3] = {44, 45, 46};int yarkost = 0;int shag = 5; void setup() { Serial.begin(9600); // USB-порт для отладки Serial1.begin(9600); // пины 19 (RX) и 18 (TX) pinMode(13, OUTPUT); for (int i = 0; i < 3; i++) { pinMode(PINS_SHIM[i], OUTPUT); }} void loop() { Serial.print("t="); Serial.print(millis()); Serial.print(" yarkost="); Serial.println(yarkost); Serial1.println(yarkost); // то же число уходит на Serial1 analogWrite(PINS_SHIM[0], yarkost); analogWrite(PINS_SHIM[1], yarkost / 2); analogWrite(PINS_SHIM[2], yarkost / 4); digitalWrite(13, (millis() / 500) % 2); // L мигает раз в секунду delay(50); yarkost = yarkost + shag; if (yarkost >= 255 || yarkost <= 0) { shag = -shag; }}Что должно произойти: светодиод L мигает раз в секунду, в Serial Monitor ползёт счётчик, а три светодиода на резисторах у пинов 44–46 наливаются и гаснут с разной глубиной. Если соединить пины 18 и 19 с USB-UART адаптером, второе окно терминала покажет те же числа. Никаких библиотек: все четыре порта и вся карта ШИМ сидят в ядре платы.
Mega или Uno: когда что брать
| Критерий | Mega 2560 | Uno R3 |
|---|---|---|
| Микроконтроллер | ATmega2560, 16 МГц | ATmega328P, 16 МГц |
| Цифровые пины и ШИМ | 54 и 15 | 14 и 6 |
| Аналоговые входы | 16 | 6 |
| Аппаратные UART | 4 | 1 (плюс SoftwareSerial) |
| Флеш, SRAM, EEPROM | 256, 8, 4 КБ | 32, 2, 1 КБ |
| Размер | Около 101×53 мм | 69×53 мм |
| Типовые проекты | Десятки серв, матрицы, 3D-принтер | Учёба, один-два датчика, шилды |
Правило простое: влезает в Uno, берите Uno, она дешевле, компактнее и есть в каждом магазине шилдов. Mega оправдана, когда пины кончились по-настоящему: RAMPS у 3D-принтеров, роборука на двенадцать серв, поливалка с клапаном на каждый горшок, логгер с GPS и модемом на разных портах. Компактный вариант той же логики это Nano, его разбор в распиновке Nano.
- Гирлянда-матрица или шторка из ленты WS2812 с десятками эффектов: памяти хватает с запасом, старт в уроке про WS2812
- Поливалка с электроклапанами на каждый горшок и датчиком влажности у каждого канала
- Метеостанция-логгер: RTC, дисплей, три датчика и Bluetooth одновременно, все пины и порты заняты делом
- Робот на 10–12 серв: у каждой свой пин, никакого мультиплексора
Тупик: после переезда шина молчит
Самый частый сюрприз переезда: проект работал на Uno, мы переставили его на Mega, и перестали работать датчики. Сканер I2C не находит ничего, а в коде ничего не менялось.
Причина в распиновке: на Uno шина I2C сидит на аналоговых входах A4 и A5, а на Mega аналоговые входы заняты исключительно измерением, и шина переехала на цифровые пины 20 и 21. Модуль при этом подключён и выглядит правильно. Второй сюрприз того же переезда: скетч, где analogWrite работал на пинах 3 и 5, на Mega продолжает работать, но если в проекте использовались пины 0 и 1 как обычные, то они молча занят USB-чипом и связь с компьютером начинает сбоить. Общее правило для переезда: сначала выписываем таблицу «функция, пин на Uno, пин на Mega» и сверяем её с даташитом, и только потом переносим скетч.
Личный опыт: сколько серв тянет Mega на самом деле
Мы собирали на Mega стенд с роботической рукой на двенадцати сервоприводах. Сама плата с управлением встала без вопросов, а вот питание пришлось переделывать: первые попытки питать сервы от вывода 5V заканчивались перезагрузкой платы в момент, когда рука резко меняла позу.
Помогли два решения, и оба относятся к питанию, а не к коду. Первое: сервы получили отдельный блок питания на 5–6 В с общей землёй, и просадка исчезла. Второе: в коде мы перевели движение на millis() вместо delay(), чтобы во время хода плата не «засыпала» и не пропускала команды. Отдельно мы оценили, сколько тока нужно заложить в блок: при пике на каждую из двенадцати серв закладывали примерно по 100–150 мА, и блок на 2–3 А закрыл задачу с запасом. Позже мы посчитали и по факту, и цифры сошлись: запас по току в полтора раза оказался правичным решением.
Авторская позиция: стоит ли менять плату
Мы советуем не менять плату, пока проект влезает в текущую. Mega это не апгрейд по умолчанию, а ответ на конкретную задачу: не хватает пинов, не хватает памяти, не хватает портов. Если у вас два-три датчика, дисплей и кнопка, Uno справится, и останется много свободных выводов.
Когда же переезд оправдан, Mega действительно удобна: там, где раньше приходилось городить несколько плат или гордиться мультиплексором. Робот-манипулятор, 3D-принтер на RAMPS, логгер с двумя радиомодулями и GPS, матрица WS2812 с тяжёлой графикой. И заметьте: если задача упирается в число серв и в питание, а не в логику, то Nano или Pro Mini дадут то же самое дешевле и компактнее. Мы советуем смотреть на Mega только тогда, когда действительно нужны четыре UART или память под шрифты и буферы.