Перейти к содержанию

Микроконтроллеры AVR

AVR — 8-битные RISC-микроконтроллеры Microchip (до 2016 года — Atmel): от шестивыводных ATtiny до ATmega2560 и новых серий AVR Dx и Ex. Здесь — чем отличаются семейства, как их прошивать и какими инструментами пользоваться.

AVR — семейство 8-битных микроконтроллеров с RISC-архитектурой. Ядро построено по гарвардской схеме: программа хранится во флеш-памяти и выбирается по своей шине, данные — в ОЗУ и регистрах. У ядра 32 регистра общего назначения R0–R31 (у урезанного ядра AVRrc в ATtiny4–10 — 16), и большинство команд выполняется за один такт. Архитектуру разработали Альф-Эгиль Боген и Вегард Воллан, студенты Норвежского технологического института в Тронхейме; Atmel объявила о семействе AVR в 1997 году, а в 2016 году компанию купила Microchip, которая выпускает и развивает AVR до сих пор.

Самые известные AVR — ATmega328P из Arduino Uno и Nano и ATtiny85 из миниатюрных модулей. Но семейство гораздо шире: от шестивыводных ATtiny10 до 100-выводного ATmega2560 и новых серий AVR Dx и Ex с питанием 1,8–5,5 В и прошивкой по одному проводу.

Семейства AVR

Семейство и примерыЯдроЧастота, доФлеш-памятьПитаниеПрошивка и отладка
tinyAVR, классические
ATtiny13A, ATtiny85, ATtiny2313A
AVRe; AVRrc у ATtiny4–10, 20, 40, 10220 МГц; ATtiny4–10 — 12 МГц0,5–16 КБ1,8–5,5 В, зависит от моделиISP, HVSP, debugWIRE; у ATtiny4–10 — TPI
megaAVR, классические
ATmega8A, ATmega328P, ATmega2560, ATmega32U4
AVRe+16–20 МГц4–256 КБ1,8–5,5 В; ATmega8A — 2,7–5,5 ВISP, высоковольтная параллельная; debugWIRE или JTAG
XMEGA
ATxmega128A1U, ATxmega32E5
AVRxm32 МГц8–384 КБ1,6–3,6 ВPDI; у части серии A — JTAG
tinyAVR 0, 1, 2
ATtiny1604, ATtiny3216, ATtiny3226
AVRxt20 МГц2–32 КБ1,8–5,5 ВUPDI
megaAVR 0
ATmega4809
AVRxt20 МГц8–48 КБ1,8–5,5 ВUPDI
AVR DA, DB, DD, DU
AVR128DA48, AVR128DB48, AVR64DD32, AVR64DU32
AVRxt24 МГц16–128 КБ1,8–5,5 ВUPDI
AVR EA, EB
AVR64EA48, AVR32EB32
AVRxt20 МГц16–64 КБ1,8–5,5 ВUPDI
AVR SD
AVR64SD48
2 × AVRxt в режиме lockstep20 МГц32–64 КБ2,7–5,5 ВUPDI

Частоты указаны для верхней части диапазона питания: у классических AVR 20 МГц достижимы при 4,5–5,5 В, у XMEGA 32 МГц — от 2,7 В. Чем отличаются серии внутри поколения:

  • XMEGA — контроллер DMA, система событий (Event System), 12-битный АЦП, аппаратное шифрование AES и DES, у серии AU — USB.
  • tinyAVR 1 — по сравнению с серией 0 больше периферии: таймер TCD, у многих моделей — сенсорный контроллер PTC. tinyAVR 2 — 12-битный дифференциальный АЦП с усилителем PGA.
  • megaAVR 0 — система событий, конфигурируемая логика CCL и до четырёх USART.
  • AVR DA — сенсорный контроллер PTC, 12-битный АЦП и 10-битный ЦАП; AVR DB — порт с собственным питанием MVIO для сопряжения с другой логикой и встроенные операционные усилители; AVR DD — MVIO в небольших корпусах; AVR DU — USB 2.0 Full-Speed без кварца (USB работает при питании выше 3,0 В).
  • AVR EA — 12-битный дифференциальный АЦП с усилением до 16×; AVR EB — таймеры для управления двигателями (TCE с расширением WEX и TCF).
  • AVR SD — для систем функциональной безопасности: два ядра сверяют друг друга в режиме lockstep, память защищена кодом коррекции ошибок (ECC).

Набор команд у семейств в основном общий: различаются отдельные инструкции, число тактов, а у ядра AVRrc — ещё и число регистров. Подробно — в статье «Система команд AVR».

Классические AVR и новые серии

Начиная с tinyAVR 0/1 и megaAVR 0, Microchip перешла на новое поколение AVR. Ядро AVRxt почти не изменилось, зато остальное устроено иначе:

  • Прошивка по одному проводу. Вместо четырёх линий ISP (MOSI, MISO, SCK, RESET) — один вывод UPDI. Высокое напряжение и отдельный высоковольтный программатор не нужны, кроме случая, когда вывод UPDI переназначен под порт ввода-вывода.
  • Единое адресное пространство. Регистры периферии, EEPROM и флеш-память видны в адресном пространстве данных — флеш-память целиком или, у моделей с большим объёмом, окном по 32 КБ. Поэтому константы из флеш-памяти читаются обычными командами LD, без LPM.
  • Новая периферия. Регистры сгруппированы по модулям (USART0.BAUD, PORTA.DIR), появились система событий и конфигурируемая логика. Код для ATmega328P, написанный на уровне регистров, на ATmega4809 без переделки не заработает; в Arduino разницу скрывает ядро платы.
  • Широкий диапазон питания — 1,8–5,5 В почти у всех новых серий, в том числе у AVR Dx с частотой 24 МГц.

Классические модели при этом никуда не делись: по заявленной политике Microchip снимает изделия с производства только при отсутствии спроса, и, за редкими исключениями, AVR остаются доступны весь жизненный цикл изделия.

Интерфейсы программирования и отладки

ИнтерфейсЛинииГде применяется
ISP (SPI)MOSI, MISO, SCK, RESETклассические tinyAVR и megaAVR
HVSPвысоковольтный последовательный: 11,5–12,5 В на RESET8- и 14-выводные классические ATtiny
Высоковольтный параллельный11,5–12,5 В на RESET и шина данныхклассические megaAVR
debugWIREодин провод — RESETотладка ATtiny13A, ATtiny25/45/85, ATtiny24A/44A/84A, ATmega48A…328P
JTAGTCK, TMS, TDI, TDOмноговыводные megaAVR (ATmega128, ATmega2560, ATmega32U4), XMEGA A1U, A3U, A3BU
TPIтри проводаATtiny4/5/9/10, ATtiny20/40, ATtiny102/104
PDIдва проводавсе XMEGA
UPDIодин проводtinyAVR 0/1/2, megaAVR 0, AVR DA, DB, DD, DU, EA, EB, SD

Высоковольтные интерфейсы нужны, когда фьюзами отключён сброс или ISP: обычным программатором такой кристалл уже не прошить. debugWIRE занимает вывод RESET, поэтому, пока он включён, внешний сброс не работает. После отладки фьюз DWEN стоит отключить: он оставляет часть тактовой системы работать во сне и увеличивает потребление.

Инструменты

  • avr-gcc и avr-libc — бесплатный компилятор C/C++ (цель AVR есть в основной ветке GCC, кристалл выбирают ключом -mmcu) и стандартная библиотека. Проект avr-libc переехал на GitHub (avrdudes/avr-libc).
  • avrdude — программа прошивки для Windows, macOS и Linux. Поддерживает ISP, TPI, PDI, HVSP, высоковольтное параллельное программирование и UPDI, в том числе программатор SerialUPDI из обычного переходника USB–UART.
  • Microchip Studio — бывшая Atmel Studio, переименована в 2020 году. Работает только в Windows.
  • MPLAB X IDE с компилятором MPLAB XC8 — среда Microchip для Windows, macOS и Linux. AVR в ней поддерживаются с 2018 года.
  • Arduino IDE — использует те же avr-gcc и avrdude, а работу с регистрами прячет за библиотеками.
  • Программаторы и отладчики: Atmel-ICE (JTAG, PDI, debugWIRE, ISP, UPDI, TPI), PICkit 4 и 5, MPLAB Snap, встроенный отладчик плат Curiosity Nano; для ISP — недорогие USB-программаторы и плата Arduino со скетчем ArduinoISP.

AVR в платах Arduino

ПлатаМикроконтроллерЧастотаСвязь с компьютером
Arduino Uno R3ATmega328P16 МГцUSB–UART на ATmega16U2
Arduino NanoATmega328P16 МГцUSB–UART на отдельной микросхеме
Arduino Mega 2560 Rev3ATmega256016 МГцUSB–UART на ATmega16U2
Arduino LeonardoATmega32U416 МГцUSB встроен в микроконтроллер
Arduino Nano EveryATmega480920 МГцUSB-мост на SAMD11
Arduino Uno WiFi Rev2ATmega480916 МГцUSB-мост на отдельной микросхеме

Плата Arduino — удобный способ начать: отдельный программатор не нужен. Программу по USB принимает загрузчик (bootloader) в микроконтроллере, а у плат на ATmega4809 — USB-мост, который сам прошивает кристалл по UPDI. Тот же кристалл можно программировать и без Arduino — на C с avr-libc или на ассемблере, получая полный контроль над тактами и периферией.

С чего начать

  1. Разберитесь с регистрами и командами ядра — система команд AVR с флагами и тактами для каждой инструкции.
  2. Подключите датчики и модули: шина I²C (в AVR она называется TWI), RS-232 и RS-485 — с примерами кода для ATmega328P.
  3. Для расчёта обвязки пригодятся калькуляторы резистора для светодиода и делителя напряжения.

Другие семейства микроконтроллеров и советы по выбору — в разделе «Микроконтроллеры».

Готовятся к публикации

Архитектура AVR · ATmega328P · ATmega8 · ATtiny85 · XMEGA · AVR Dx и Ex · Фьюзы AVR · Программаторы и прошивка · Таймеры и ШИМ · АЦП AVR · Примеры программ

Частые вопросы

Какой программатор нужен для AVR?

Зависит от интерфейса прошивки. Классические ATmega и ATtiny прошивают по ISP (SPI): подойдёт любой ISP-программатор или плата Arduino со скетчем ArduinoISP. Новые серии — tinyAVR 0/1/2, megaAVR 0, AVR Dx и Ex — прошивают по однопроводному UPDI: хватит переходника USB–UART с резистором (SerialUPDI) или фирменных Atmel-ICE, PICkit 4/5, MPLAB Snap. У ATtiny4–10 интерфейс TPI, у XMEGA — PDI.

Чем ATmega328P отличается от ATmega4809?

ATmega328P — классический megaAVR (Arduino Uno и Nano): 32 КБ флеш-памяти, 2 КБ ОЗУ, до 20 МГц, прошивка по ISP. ATmega4809 из серии megaAVR 0 (Arduino Nano Every, Uno WiFi Rev2): 48 КБ флеш-памяти, 6 КБ ОЗУ, 20 МГц, прошивка по UPDI. Ядро у них почти одинаковое, но периферия устроена иначе, поэтому код, написанный на уровне регистров, без переделки не переносится.

Можно ли программировать AVR без Arduino?

Да. Бесплатный набор — компилятор avr-gcc с библиотекой avr-libc и программа прошивки avrdude — работает в Windows, macOS и Linux. Есть и среды разработки Microchip: Microchip Studio (только Windows) и MPLAB X IDE с компилятором XC8. Arduino IDE тоже использует avr-gcc и avrdude, просто скрывает их за кнопкой «Загрузить».

Какой AVR выбрать для нового проекта?

Для учёбы и макетов — ATmega328P на плате Arduino: под него больше всего примеров. Для нового изделия стоит посмотреть серии AVR Dx и Ex и tinyAVR 2: при той же простоте ядра у них больше памяти и периферии, прошивка по одному проводу UPDI и питание 1,8–5,5 В. Классические модели удобны, когда нужна совместимость со старыми платами и кодом.