# 11. Архитектура atmega16
> [name=Boyarkin Alexandr] Пытался максимально кратко описать схему. Моё личное мнение, что это один из самых сложных вопросов. Его проблема в том, что он включает в себя всю информации из других вопросов. Главное, чтобы он не попался на экзамене))
> И ответ на 12 вопрос это почти тоже самое, что и во 2 части описания архитектуры.
## Краткий конспект
Краткий конспект по архитектуре:
DataBus – шина данных. Через шину данных процессор передаёт команды управления, узнаёт состояние, записывает данные.
Архитектура atmega16 состоит из:
1) Порты ввода-вывода. Порты имеют до 8 контактов, потому что сам процессор 8-разрядный и работает с 8 битными данными. Порты можно индивидуально настраивать. Они могут работать либо на вход, либо на выход. Каждый порт содержит драйвер (Port drivers), который обеспечивает мост между портом и микроконтроллером или внешним периферийным устройством и микроконтроллером.
Больше информации: [15.Порты ввода/вывода](/mOXnuCxYSP-OA_Vh5FU9Uw), [4.Регистры ввода вывода (DDRX,PINx,PORTx)](/NnhJgnTqQDSuP2VcD7nbjw)


2) 2 часть микроконтроллера это процессор - Самая важная. Можно сказать, что это сердце микроконтроллера. Все компоненты находятся внутри процессора AVR за исключением ПЗУ и SRAM.

• Program Counter – в нём содержится адрес следующей инструкции, которую надо получить. По этому адресу извлекаем команду из Flash памяти. Счётчик увеличивается на единицу и переходит на следующую команду. Далее по схеме идёт регистр иструкции. Информация о нем и о stack pointer на [2.Указатель стека SP](/osDeyRaFQwyY3-htFL90LA)
• Instruction register – Он предназначен для хранения кода команды на период времени, который необходим для ее выполнения. Дальше кусок, который отвечает за код команды подаётся на Декодер команды (Instruction decoder).
• Instruction decoder - Декодер команд загребает команду и скармливает ее логике блока управления, который уже пинает все остальные блоки, заставляя их делать нужные действия в нужном порядке. У декодера команд есть выход и в зависимости от кода команды активируются управляющие линии, которые руководят остальными блоками: АЛУ, РОН, ОЗУ и т.д.
• Указатель стека (Stack Pointer) – содержит адрес стека. Дополнительная область, которую мы определяем внутри оперативной памяти. Используется для хранения временных данных или дополнительных данных внутри SRAM
• Sram - Память данных используется для временного хранения данных, получаемых в ходе работы микроконтроллера
• Регистры общего назначения (РОН) :
***Младшие R0..R15***
Обычные регистры общего назначения, но какие то ущербные. С ними не работают многие команды, например, такие как загрузка непосредственного числа. Т.е. нельзя, например, взять и присвоить регистру число. Зато можно скопировать число из любого другого регистра.
***Старшие R16..R31***
Полноценные регистры, работающие со всеми командами без исключения.
***Индексные R26…R31***
Шесть последних регистров из старшей группы особенные. В принципе, их можно юзать и как обычные регистры общего назначения. Но, кроме этого, они могут образовывать регистровые пары X(R26:R27), Y(R28,R29), Z(R30:R31) которые используются как указатели при работе с памятью.
• Вся математика и обработка делается посредством **ALU**. Он может складывать, вычитать, сравнивать, сдвигать разными способами, иногда делить и умножать.
• Status register – 8-битный регистр состояния. Указывает состояние окончательного ответа. (SREG)
3) 3 часть микроконтроллера: Периферийные устройства

XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, который можно использовать для генератора тактовых импульсов (OSCILLATOR). От этого генератора тактовая частота передаётся на блок синхронизации и управления микроконтроллера (MCU CTRL & TIMING). MCU CTRL & TIMING – используется для управления всем микроконтроллером.
**TWI** - интерфейс для обмена данными по двухпроводной шине. К такой шине данных можно подключить до 128 различных устройств, используя две линии данных: тактовый сигнал (SCL) и сигнал данных (SDA). Интерфейс TWI является аналогом базовой версии интерфейса I2C. Две линии используется для осуществления последовательную связь с внешним периферийном устройством.
Далее идут **Timers/Counters** - набор таймеров и счетчиков. Они могут применяться для подсчета количества внешних событий, формирования сигналов определенной длительности, вырабатывать запросы на прерывания и т.п. К таймеру подключен отдельный генератор (**OSCILLATOR**). Он используется для синхронизации таймеров. Генератор подключен к контактам PC 7,6 (Port C). [19. Архитектура I2C(TWI) Two-wire serial interface](/PzkW7zlbSQy_4qCo_F_EyQ)
В схеме есть внутренний генератор (**Internal OSCILLATOR**) – его задача обеспечить тактовую частоту для Сторожевого таймера (Watch dog timer). Watchdog Timer представляет собою систему контроля зависания устройства с последующим его перезапуском.
**Internal calibrated oscillator** - TODO()
**MCU CTRL & TIMING** - TODO()
Далее идёт блок прерываний. **Interrupts** - это блок который отвечает за реакцию и запуск на выполнение определенных функций при поступлении сигнала на определенные входы микроконтроллера или же по какому-то внутреннему событию. Блок **EEPROM** - энергонезависимая память данных в которой данные будут храниться даже при отключении питания микроконтроллера. В данной памяти можно хранить настройки выполнения программы, собранные данные для статистики работы устройства и другую полезную информацию.
Блок **USART** - последовательный асинхронный интерфейс для обмена данными с другими устройствами.
4) 4 часть микроконтроллера:


Блок A/D Converter - данный блок преобразовывает аналоговое значение напряжения в цифровое значение.
Блок SPI - последовательный периферийный интерфейс (SPI) который зачастую применяется для обмена данными между несколькими микроконтроллерами со скоростью до нескольких MГц (нескольких миллионов тактов в секунду). [17. SPI](/c3KELy6fRWyH9_UnxYCX9g)
И последнее это аналоговый компаратор:

Позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 0 первый больше второго, 1 второй больше первого. Применить его можно, например, чтобы отслеживать уровень заряда аккумулятора по просадке напряжения.
:::spoiler Отличительные особенности
## Отличительные особенности:
- 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением
- Прогрессивная RISC архитектура
- 130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл
- 32 8-разрядных рабочих регистра общего назначения
- Полностью статическая работа
- Производительность приближается к 16 MIPS (при тактовой частоте 16 МГц)
- Встроенный 2-цикловый перемножитель
- Энергонезависимая память программ и данных
- 16 Кбайт внутрисистемно программируемой Flash памяти (In-System Self-Programmable Flash)
- Обеспечивает 1000 циклов стирания/записи
- Дополнительный сектор загрузочных кодов с независимыми битами блокировки
- Внутрисистемное программирование встроенной программой загрузки
- Обеспечен режим одновременного чтения/записи (Read-While-Write)
- 512 байт EEPROM
- Обеспечивает 100000 циклов стирания/записи
- 1 Кбайт встроенной SRAM
- Программируемая блокировка, обеспечивающая защиту программных средств пользователя
- Интерфейс JTAG (совместимый с IEEE 1149.1)
- Возможность сканирования периферии, соответствующая стандарту JTAG
- Расширенная поддержка встроенной отладки
- Программирование через JTAG интерфейс: Flash, EEPROM памяти, перемычек и битов блокировки
- Встроенная периферия
- Два 8-разрядных таймера/счетчика с отдельным предварительным делителем, один с режимом сравнения
- Один 16-разрядный таймер/счетчик с отдельным предварительным делителем и режимами захвата и сравнения
- Счетчик реального времени с отдельным генератором
- Четыре канала PWM
- 8-канальный 10-разрядный аналого-цифровой преобразователь
- 8 несимметричных каналов
- 7 дифференциальных каналов (только в корпусе TQFP)
- 2 дифференциальных канала с программируемым усилением в 1, 10 или 200 крат (только в корпусе TQFP)
- Байт-ориентированный 2-проводный последовательный интерфейс
- Программируемый последовательный USART
- Последовательный интерфейс SPI (ведущий/ведомый)
- Программируемый сторожевой таймер с отдельным встроенным генератором
- Встроенный аналоговый компаратор
- Специальные микроконтроллерные функции
- Сброс по подаче питания и программируемый детектор кратковременного снижения напряжения питания
- Встроенный калиброванный RC-генератор
- Внутренние и внешние источники прерываний
- Шесть режимов пониженного потребления: Idle, Power-save, Power-down, Standby, - Extended Standby и снижения шумов ADC
- Выводы I/O и корпуса
- 32 программируемые линии ввода/вывода
- 40-выводной корпус PDIP и 44-выводной корпус TQFP
- Рабочие напряжения
- 2,7 - 5,5 В (ATmega16L)
- 4,5 - 5,5 В (ATmega16)
- Рабочая частота
- 0 - 8 МГц (ATmega16L)
- 0 - 16 МГц (ATmega16)
:::
## Схема

## Схема на русском

### Более краткая схема другого устройства для общего понимания

## Распололжение портов входа и выхода
Альтернативные функции портов: [15.Порты ввода/вывода](/mOXnuCxYSP-OA_Vh5FU9Uw)
