# 11. Архитектура atmega16 > [name=Boyarkin Alexandr] Пытался максимально кратко описать схему. Моё личное мнение, что это один из самых сложных вопросов. Его проблема в том, что он включает в себя всю информации из других вопросов. Главное, чтобы он не попался на экзамене)) > И ответ на 12 вопрос это почти тоже самое, что и во 2 части описания архитектуры. ## Краткий конспект Краткий конспект по архитектуре: DataBus – шина данных. Через шину данных процессор передаёт команды управления, узнаёт состояние, записывает данные. Архитектура atmega16 состоит из: 1) Порты ввода-вывода. Порты имеют до 8 контактов, потому что сам процессор 8-разрядный и работает с 8 битными данными. Порты можно индивидуально настраивать. Они могут работать либо на вход, либо на выход. Каждый порт содержит драйвер (Port drivers), который обеспечивает мост между портом и микроконтроллером или внешним периферийным устройством и микроконтроллером. Больше информации: [15.Порты ввода/вывода](/mOXnuCxYSP-OA_Vh5FU9Uw), [4.Регистры ввода вывода (DDRX,PINx,PORTx)](/NnhJgnTqQDSuP2VcD7nbjw) ![](https://i.imgur.com/FMdA1sa.png) ![](https://i.imgur.com/DJvpQtF.png) 2) 2 часть микроконтроллера это процессор - Самая важная. Можно сказать, что это сердце микроконтроллера. Все компоненты находятся внутри процессора AVR за исключением ПЗУ и SRAM. ![](https://i.imgur.com/1oc4D04.png) • 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 часть микроконтроллера: Периферийные устройства ![](https://i.imgur.com/RwciJHl.png) 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 часть микроконтроллера: ![](https://i.imgur.com/ljcXVNr.png) ![](https://i.imgur.com/ECMFgkP.png) Блок A/D Converter - данный блок преобразовывает аналоговое значение напряжения в цифровое значение. Блок SPI - последовательный периферийный интерфейс (SPI) который зачастую применяется для обмена данными между несколькими микроконтроллерами со скоростью до нескольких MГц (нескольких миллионов тактов в секунду). [17. SPI](/c3KELy6fRWyH9_UnxYCX9g) И последнее это аналоговый компаратор: ![](https://i.imgur.com/2l7PuSQ.png) Позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 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) ::: ## Схема ![](https://i.imgur.com/8EOoUFV.png) ## Схема на русском ![](https://i.imgur.com/CMLiasl.gif) ### Более краткая схема другого устройства для общего понимания ![](https://i.imgur.com/6dt8Eff.png) ## Распололжение портов входа и выхода Альтернативные функции портов: [15.Порты ввода/вывода](/mOXnuCxYSP-OA_Vh5FU9Uw) ![](https://i.imgur.com/UyNOF2x.png)