Site icon Меандр — занимательная электроника

Устройство AVR микроконтроллера

 Изучать устройство микроконтроллера будем на примере микроконтроллера ATmega16. Для начала загружаем даташит на него. В даташите на третьей странице есть блок-диаграмма микроконтроллера. Вот она(картинка “кликабельна”):

На схеме я подписал только самые основные устройства.  “Центром” любого микроконтроллера является ядро(AVR CPU). Оно состоит из Арифметическо-логического устройства(АЛУ), которое выполняет все математические операции, регистров общего назначения(РОН), в которые мы можем подгружать какие-либо значения, регистра SREG(Status Register), биты которого говорят нам о состоянии процессора(например, там есть бит, разрешающий прерывания глобально, биты, указывающие о том, что получилось в результате каких-либо математических действий и др.),  регистр инструкций(Instruction Register), который загружает инструкции по одной из FLASH памяти(памяти программ), декодер инструкций, который выполняет инструкции, взятые из памяти программ. Также есть Program Counter и Stack Pointer. В Program Counter хранится адрес текущего оператора программы, который выполняет контроллер. Stack Pointer указывает адрес стека – конца SRAM памяти(оперативки), в который мы можем записать данные. Всё, с процессором закончили, переходим к периферии.

Все устройства микроконтроллера связаны между собой 8-ми битной шиной данных. По ней данные передаются от одного устройства к другому.

Прерывания – уход микроконтроллера от основной программы при определённом событии. Событием может являтся, например, приём байта через UART интерфейс, окончание передачи байта и др. Когда происходит прерывание, микроконтроллер немедленно останавливает выполнение основной программы  уходит к так называемому обработчику прерывания. В обработчике прерывания выполняется кокое-либо действие, например, если произошло прерывание по приёму байта через UART, то мы можем сравнить принятый байт с тем, что мы ожидаем принять и, к примеру, зажечь светодиод. Так вот генерирует эти прерывания контроллер прерываний(Interrupt Unit).

Также важной частью микроконтроллера является тактовый генератор и система сброса (MCU CTRL. & Timing). Тактовый генератор генерируют тактовые импульсы, которые обеспечивают синхронность работы устройств. Без тактовых импулсьсов микроконтроллер работать не может. Контроллер может тактироваться от внутреннего RC генератора, частоту которого можно подстраивать, занося байт калибровки в специальный регистр. На схеме этот генератор обозначен как “Internal Calibrated Oscillator”. Также в микроконтроллере присутствует генератор, для работы которого требуется кварцевый резонатор. Этот генератор более надёжный и генерируемая им частота не зависит от температуры воздуха и других внешних факторов. Сброс микроконтроллера – действие, при котором микроконтроллер обнуляет  Program Counter и начинает выполнять программу сначала. При этом содержимое РОН сохраняется. У каждого микроконтроллера имеется вывод сброса(RESET). Если этот вывод прижать к земле(подать на него логический 0), микроконтроллер сбросится. Также этот вывод используется при программировании AVR, чтобы ввести контроллер в режим программирования.

Теперь я расскажу Вам о портах ввода-вывода. У ATmega16 их 4. Каждый из портов состоит из цифровой схемы управления и драйвера. Цифровая схема управления выполняет команды, посланные ядром, а драйвер управляет непосредственно ножками микроконтроллера. Также к некоторым выводам портов ввода-вывода подключены дополнительные устройства, например, ко всем линиям порта А подключен АЦП. И этот порт может работать как в режиме обычного порта ввода-вывода, так и в режиме АЦП.

Теперь поговорим о памяти. У каждого микроконтроллера AVR есть FLASH память(Program Flash), SRAM и EEPROM. Во Flash памяти находится сама прошивка микроконтроллера. SRAM – оперативная память. EEPROM  — энергонезависимая память, в которую мы можем записывать что угодно. Это необходимо, например, когда нужно сохранить какие-то меняющиеся значения и восстановить их после выключения питания.

АЦП – аналогово-цифровой преобразователь. Он позволяет представить аналоговый сигнал  в виде чила от 0 до 255 или до 1024 в зависимости от разрядности АЦП. В микроконтроллерах AVR АЦП 10-ти разрядный, поэтому мы можем представить сигнал в виде числа от 0 до 1024, а также, если не будем использовать старший регистр и не требуется большая точность, то можно тот же сигнал представить в виде числа от 0 до 255. В микроконтроллерах AVR АЦП состоит из 2-х частей – собственно самого АЦП(MUX & ADC) и схемы, которая связывает его  с ядром(ADC Interface).

Таймеры/счётчики(Timers/Counters) – устройства, которые могут тикать с разной скоростью измеряя время. Они тикают независимо от ядра. Как правило один из таймеров может работать в асинхронном режиме то есть тактироваться от отдельного тактового генератора на кварцевом резонаторе.

WatchDog Timer(его ещё называют собачьим или сторожевым таймером 🙂 ) – таймер, который при зависании микроконтроллера сбрасывает его. Этот таймер можно отключить. Как видно из диаграммы он соединяется не только с шиной данных, но и со схемой сброса и тактировки для того, чтобы собственно иметь возможность сбросить микроконтроллер. Также собачий таймер имеет свой тактовый генератор.

TWI(two wire  interface) – по сути это IIC интерфейс. Называется он так толко потому, что право на его использование стоит денег.

USART – всем известный последовательный интерфейс для передачи данных. Отличается от COM порта компьютера он только логическими уровнями, поэтому посредством этого интерфейса легче всего связать микроконтроллер с компом.

Аналоговый компаратор – устройство, которое сравнивает 2 сигнала и в зависимости от того, на каком входе амплитуда его больше, на выходе у компаратора появляется либо 0, либо 1.  Схема, которая связывает компаратор с ядром, при определённом условии также вызывает прерывание. Условие, из-за которого происходит прерывание можно менять. Компаратор пригодится, например, если необходимо сделать индикацию того, что батарейка разряжена. Для этого на один из входов подаётся опорное напряжение, а на другой измеряемое.

SPI также является одним из последовательных интерфейсов, которых в мк не один. Также через этот интерфейс происходит последовательное программирование микроконтроллера. Именно поэтому на схеме к блоку SPI подключен ещё и Programming Logic.

На этом завершу данную статью. Удачи Вам в освоении AVR!

radioelektr.ru

Exit mobile version