Микроконтроллер ATmega325P (и его близкий родственник ATmega3250P) — это крайне интересный, но незаслуженно обделенный вниманием «кремниевый мутант» из семейства AVR.
Если обычный разработчик при нехватке пинов на ATmega328P сразу бежит покупать огромную ATmega2560, то опытный инженер из АРК достает из закромов ATmega325P.
Давайте разберем этот чип с точки зрения схемотехники, его уникальной архитектуры и скрытых ловушек, о которых вы не узнаете, пока не разведете плату.
Главный парадокс ATmega325P: «Много ног, мало памяти»
С точки зрения объемов памяти ATmega325P — это полный аналог классической ATmega328P:
- Flash (ПЗУ): 32 КБ
- SRAM (ОЗУ): 2 КБ
- EEPROM: 1 КБ
Но если мы посмотрим на физический чип, то вместо 28-выводного корпуса ATmega328P мы увидим внушительный 64-выводной корпус TQFP-64 (а у версии 3250P — и вовсе 100-выводной TQFP-100).

Вы получаете колоссальные 54 линии ввода-вывода (GPIO) (у версии 3250P — 69 GPIO) при скромном и дешевом кристалле на 32 КБ.
Зачем это нужно?
Этот чип создавался для промышленных систем, где логика программы очень проста (код легко укладывается в 32 КБ), но нужно управлять огромным количеством периферии: опрашивать матричную клавиатуру 8х8, зажигать десятки светодиодов состояния, управлять кучей реле и при этом не использовать дорогие и медленные сдвиговые регистры (типа 74HC595).
Технические характеристики ATmega325P
- Ядро: 8-битный AVR RISC
- Максимальная частота: 20 МГц (при питании 4.5 – 5.5 В), 10 МГц (при 1.8 – 5.5 В)
- Энергопотребление (picoPower): Буква «P» в названии означает ультранизкое потребление в спящих режимах (до 100 нА в режиме Power-down).
- Таймеры: 3 штуки (2х 8-бит, 1х 16-бит)
- ШИМ-каналы: 6 каналов
- АЦП: 8 каналов, 10-бит
- Интерфейсы: 1х USART, 1х SPI, 1х USI (внимание, ловушка ниже!)
- Отладка: Встроенный аппаратный интерфейс JTAG (для внутрисхемной отладки и программирования).
Главная ловушка ATmega325P: Проклятие USI (Universal Serial Interface)
Если вы решите развести плату на ATmega325P и просто подключить к ней I2C-дисплей или датчик по стандартной библиотеке <Wire.h>, вас ждет жестокое разочарование. Код не скомпилируется.
В отличие от ATmega328P, у ATmega325P нет аппаратного блока TWI (I2C). Вместо него инженеры Atmel установили туда USI (Universal Serial Interface).
[ ATmega328P ] ───► Аппаратный TWI (I2C) ───► Библиотека <Wire.h> работает "из коробки"
[ ATmega325P ] ───► Аппаратный USI ───────► Нужна специальная библиотека (например, USI_TWI_Master)
Что такое USI?
Это упрощенный аппаратный сдвиговый регистр с таймером. Он может притворяться и SPI, и I2C, но требует огромного количества программной работы.
- Для SPI: USI работает сносно.
- Для I2C (Wire): Вам придется использовать сторонние библиотеки (например,
USI_TWI_MasterилиTinyWire), которые эмулируют поведение шины I2C через USI. Это отнимает такты процессора и память, которой у нас и так всего 2 КБ.
Ловушка №2: Аппаратный JTAG и «пропавшие» пины
ATmega325P имеет встроенный аппаратный отладчик JTAG, который выведен на порты PF4–PF7 (это пины аналогового порта).
- Проблема: По умолчанию с завода фьюз JTAG включен (JTAGEN = 0). Это означает, что пины PF4, PF5, PF6 и PF7 заблокированы для использования в качестве обычных GPIO или АЦП.
- Решение: Если вам нужны эти пины, вы обязаны программно отключить JTAG в коде (записью в регистр
MCUCR) или прошить фьюзы, отключив JTAGEN аппаратно.
Как работать с ATmega325P в Arduino IDE?
«Из коробки» среда Arduino не знает о существовании этого чипа. Но эту проблему полностью решает великолепное стороннее ядро MegaCore от известного разработчика Spence Konde.
- Установите ядро MegaCore через Менеджер плат Arduino (вставьте ссылку в настройки:
https://mcudude.github.io/MegaCore/package_MCUdude_MegaCore_index.json). - В меню «Инструменты» выберите плату ATmega325.
- Вы получите полную поддержку всех стандартных функций (
digitalWrite,analogReadи т.д.), а ядро само подменит стандартные библиотеки для работы с USI.
Наставление АРК по проектированию на ATmega325P
- Заповедь «I2C-осторожности»: Если в вашем проекте планируется активная и быстрая работа по шине I2C (например, чтение высокоскоростного гироскопа или запись во внешнюю EEPROM), не используйте ATmega325P. Программная эмуляция I2C через USI заберет до 30% производительности процессора. Для таких задач лучше взять ATmega328PB или AVR64DD32.
- Заповедь «Трассировки TQFP-64»: Из-за большого количества выводов земли (
GND) и питания (VCC) на разных сторонах корпуса TQFP-64, вы обязаны развязать каждую пару конденсатором 0.1 мкФ. Не объединяйте их под чипом одной тонкой дорожкой — вы получите нестабильную работу АЦП и сбои при переключении мощных нагрузок. - Заповедь «ISP-программирования»: Для прошивки используйте стандартный ISP-программатор (например, USBasasp), но помните, что пины SPI (MOSI/MISO/SCK) у этого чипа находятся на других физических ножках по сравнению с Uno/Nano. Всегда сверяйтесь со схемой распиновки (Pinout) ядра MegaCore перед трассировкой платы.
Итог
ATmega325P — это специализированный инструмент. Это идеальное решение для систем автоматизации (щиты управления, поливочные станции, умные теплицы), где нужно дергать 50 реле и читать 50 концевиков, но нет сложной математики и скоростных протоколов связи.
Знание таких «скрытых» чипов отличает системного архитектора от простого любителя Arduino. Используйте правильные инструменты для ваших задач на nk9.ru!
