Вы находитесь на странице: 1из 67

Вопрос 1.

Комбинационная логика, основные элементы (И, ИЛИ,


НЕ), их схемы на КМОП транзисторах
Комбинационная схема – логическая схема, выполняющая
соответствующие заданной функции преобразование информации. Такие
схемы не обладают свойством памяти, сигнал на выходе определяется только
уровнями на ее входах. Такой подход построения схем называется
комбинационной логикой.
Среди многообразия логических функций с разным количеством
элементов выделяют несколько основных логических функций и для
реализации каждой из них изготавливают функциональный логический
элемент.
К основным логическим функциям относят такие, на базе которых
можно просто составить схему реализации любой логической функции.
Инверсия (функция «НЕ»). Функция инверсия равна единице тогда и
только тогда, когда её единственный аргумент равен 0.

Конъюнкция (функция «И»). Функция «И» равна 1 тогда и только


тогда, когда все аргументы равны 1.
Дизъюнкция (функция «ИЛИ»). Функция «ИЛИ» равна 1, если хотя бы
один из аргументов равен 1.

Все логические элементы должны быть физически реализованы.


Технология CMOS (КМОП) используют два типа транзисторов, называемых
NMOS (КМОП-транзистор с каналом n-типа) и PMOS (КМОП-транзистор с
каналом p-типа). Эти транзисторы действуют подобно выключателю, где
входом является затвор (Gate - G), управляющий протеканием тока между
контактами стока (Drain - D) и истока (Source - S).

NMOS-транзистор проводит, когда на вывод затвора подается


логическая 1, соответствующая высокому уровню напряжения. Подача на
затвор логического 0 вызывает разрыв цепи сток-исток и прекращение
протекания тока через транзистор. PMOS-транзистор работает
противоположно NMOS-транзистору (проводит при подаче на затвор
логического 0 и не проводит при логической 1).
КМОП-инвертор (элемент «НЕ»).

Из транзиторной структуры видно, что если вход имеет значение 0, то


верхний транзистор находится в проводящем состоянии и выход принимает
значение 1. Если вход имеет значение 1, то будет замкнута цепь от выхода к
низкому уровню Gnd, что соответствует сигналу 0 на выходе.
КМОП-вентиль «И-НЕ».
Если в схеме оба входа имеют значения 1, то выход будет присоединен
к низкому потенциалу земли, что соответствует установления выхода в 0. В
противном случае в проводящее состояние переходит структура,
соединяющая выход с источником высокого потенциала, что приводит к
установлению на выходе значения, соответствующего 1.

КМОП-вентиль «ИЛИ-НЕ»

Для того, чтобы выход вентиля ИЛИ-НЕ имел значение 1, необходимо


чтобы была замкнута цепь, соединяющая выход с потенциальным проводом.
Это возможно только тогда, когда на оба входа поданы сигналы 0.
КМОП-вентили «И» и «ИЛИ» реализуются путем использования
инверторов на выходах вентилей «И-НЕ» и «ИЛИ-НЕ».
Вопрос 2. Общая структура микроконтроллерного устройства, АЛУ,
программный счётчик.
Микроконтроллером называют интегральную микросхему,
содержащую на одном кристалле микропроцессор, а также оперативную и
постоянную память. По существу, являющееся однокристальной ЭВМ и
предназначенной для управления различными устройствами.
Принцип работы микроконтроллера основан на принципах Фон
Неймана, заложенных в основу создания первого компьютера.

Обобщенная схема микроконтроллера


Любой микроконтроллер обязательно содержит следующие основные
узлы вычислительной системы:
1. Программный счетчик – это регистр, который содержит текущее
значение адреса инструкции, которая должна выполниться в данный момент
времени. Он увеличивается каждый раз, когда процессор завершает
выполнение текущей инструкции, и указывает на следующую инструкцию,
которую нужно выполнить. Программный счетчик часто используется вместе
с операцией безусловного перехода (JUMP), чтобы изменить порядок
выполнения инструкций в программе.
2. Регистр команды – регистр, обеспечивающий временное
хранение кода выполненной команды.
3. Дешифратор кода операции – узел устройства управления,
расшифровывающий код операции выполняемой команды.
4. Регистры операндов АЛУ – регистры для временного хранения
двух операндов, извлекаемых из памяти и участвующих в выполнении
текущих операций.
5. Регистр файлов – регистр, в котором хранятся признаки
результата выполнений команды в виде отдельных битов. (флаг 0, флаг
четности и др.)
Обычно микроконтроллерное устройство содержит также другие
компоненты, такие как таймеры, прерывания, интерфейсы ввода/вывода,
которые позволяют ему взаимодействовать с окружающим миром.
Арифметико-логическое устройство (АЛУ) - это часть
микропроцессора, которая выполняет арифметические и логические
операции над данными, которые хранятся в регистрах процессора. АЛУ
представляет собой схему, которая может выполнять различные операции в
зависимости от получаемых управляющих сигналов.
Операции, которые может выполнить АЛУ, включают в себя сложение,
вычитание, умножение, деление, логические операции (AND, OR, XOR),
операции сравнения и др. АЛУ может работать как с целыми, так и с
дробными числами, а также с различными системами счисления.
АЛУ содержит несколько входов, на которые подаются операнды
(данные, над которыми выполняются операции), а также управляющие
сигналы, которые определяют, какая операция должна быть выполнена. АЛУ
также содержит выход, на котором появляется результат операции.
Внутренняя структура АЛУ может быть различной в зависимости от
конкретного процессора. Однако, основные блоки, которые входят в состав
АЛУ, включают блок сложения/вычитания, блок умножения, блок деления,
блок логических операций и блок операций сравнения.
Блок сложения/вычитания выполняет операции сложения и вычитания,
а также операцию инверсии знака числа. Блок умножения выполняет
операцию умножения, которая может быть достаточно сложной и занимает
большое количество тактов процессора. Блок деления выполняет операцию
деления, также требующую значительных ресурсов процессора. Блок
логических операций выполняет логические операции AND, OR и XOR. Блок
операций сравнения сравнивает два числа и устанавливает флаги процессора
в соответствии с результатом сравнения.
АЛУ обычно содержит также блок управления, который определяет,
какую операцию нужно выполнить, и какие операнды нужно использовать
для этой операции. Блок управления обычно получает инструкцию из памяти
процессора и декодирует ее, чтобы определить, какую операцию нужно
выполнить.

Обобщенная блок-схема АЛУ


Вопрос 3. Интерфейс I2C. Протокол передачи данных, режимы
работы. Основные преимущества и недостатки интерфейса.
I2C (Inter-Integrated Circuit) - это серийный интерфейс, который
используется для обмена данными между микроконтроллерами, датчиками,
АЦП, ЦАП и другими устройствами в системе. I2C был разработан фирмой
Philips (теперь NXP Semiconductors) в 1982 году и с тех пор стал широко
распространенным интерфейсом во многих системах.
Протокол передачи данных I2C включает в себя две линии: SDA (Data)
и SCL (Clock). Линия SDA используется для передачи данных, а линия SCL
используется для синхронизации передачи данных между устройствами.
Каждое устройство на шине имеет свой адрес, который определяет, к какому
устройству направляются данные.

Интерфейс I2C
Используется только два сигнала (тактовая синхронизация и данные)
независимо от того, сколько устройство подключено к шине.
Оба сигнала подтягиваются к положительному напряжению питания
через резисторы, соответствующих номиналов.
Каждое устройство взаимодействует с сигналами данных и тактовой
синхронизации через драйверы вывода с открытым стоком (или с открытым
коллектором).
Каждое ведомое устройство идентифицируется с помощью 7-битного
адреса; устройство мастер должно знать эти адреса, чтобы общаться с
конкретным ведомым устройством
Все передачи инициируются и прекращаются мастером; мастер может
передавать данные одному или нескольким ведомым устройствам или
запрашивать данные из ведомого устройства.
Метки «ведущий/master» и «ведомый/slave» по своей сути
непостоянны: любое устройство может функционировать и как ведущее, и
как ведомое устройство, если оно содержит необходимое аппаратное и/или
программное обеспечение. На практике, однако, встраиваемые системы часто
используют архитектуру, в которой одни мастер отправляет команды или
собирает данные с нескольких ведомых устройств.
Сигнал данных обновляется по заднему фронту тактового сигнала, а
его выборка происходит по переднему фронту.
Данные передаются в однобайтовых секциях, причем каждый байт
сопровождается однобитным сигналом подтверждения, называемым битом
ACK/NACK (подтверждение или не подтверждение)

Пакет данных
Преимущества интерфейса I2C:
1. Простота использования и подключения устройств: I2C – это
простой интерфейс с минимальным количеством проводов. Для работы с I2C
достаточно всего двух проводов: линии данных (SDA) и линии
синхронизации (SCL). Это упрощает подключение и уменьшает стоимость
системы.
2. Множество устройств на одной шине: I2C поддерживает до 128
устройств на одной шине. Это делает его идеальным для использования в
системах с большим количеством периферийных устройств, таких как
датчики, АЦП, ЦАП и т.д.
3. Низкая мощность: I2C использует мало мощности и может
работать на батарейках, что делает его хорошим выбором для портативных
устройств.
4. Поддержка различных скоростей передачи данных: I2C
поддерживает различные скорости передачи данных, от 100 кбит/с до 3,4
Мбит/с в режиме Fast Mode. Это позволяет выбрать оптимальную скорость
передачи данных для конкретного устройства.
Недостатки интерфейса I2C:
1. Ограниченная скорость передачи данных: скорость передачи
данных I2C ограничена до 3,4 Мбит/с в режиме Fast Mode. Это может быть
недостаточно для систем с большим количеством устройств или для
передачи больших объемов данных.
2. Ограниченное количество устройств: хотя I2C поддерживает до
128 устройств на одной шине, в реальности, количество устройств, которые
могут быть подключены к шине, может быть ограничено физическими
ограничениями, такими как емкость линии.
3. Ограниченная длина шины: длина шины I2C ограничена до
нескольких метров, что делает его менее подходящим для больших систем с
распределены.
Вопрос 4. RS-триггер. Простейший триггер на биполярных
транзисторах. RS-триггер на логических элементах И-НЕ, ИЛИ-НЕ.
Синхронный RS-триггер.
Триггер – устройство, обладающее способностью длительно
находиться в одном из 2-х устойчивых состояний и чередовать их под
воздействием внешних сигналов (схема, обладающая свойством памяти).
При включении питания триггер непредсказуемо принимает одно из
двух состояний.
Простейший RS-триггер на биполярных транзисторах состоит из двух
транзисторов, соединенных в обратную связь. Один транзистор работает как
инвертор, а другой - как усилитель. Входы триггера называются R (Reset) и S
(Set). Когда R=0 и S=1, триггер находится в устойчивом состоянии "1". Когда
R=1 и S=0, триггер находится в устойчивом состоянии "0". Когда R=S=1,
триггер переключается в другое устойчивое состояние. Простой RS-триггер
на биполярных транзисторах не является синхронным и может иметь
нестабильность при работе на высоких частотах.

RS-триггер на биполярных транзисторах


RS-триггер на логических элементах И-НЕ и ИЛИ-НЕ более устойчив и
имеет более высокую скорость работы. RS-триггер собирается на базе двух
логических элементов: ИЛИ-НЕ и И-НЕ. Различие в том, что триггер на
элементах И-НЕ переводится в другое состояние потенциалом логического
нуля (активный уровень – сигнал 0). Триггер, собранный на элементах ИЛИ-
НЕ активируется логической единицей (активный уровень – сигнал 1)
Для описания работы триггера используют таблицу состояний
(переходов, истинности).

RS-триггер на элементах И-НЕ

RS-триггер на элементах ИЛИ-НЕ


Временная диаграмма асинхронного RS-триггера
Приведенный выше RS-триггер является асинхронным. Существенным
неудобством асинхронных триггеров является низкая возможность
управления этим триггером.
При появлении активного сигнала на входе R и S он сразу же оказывает
действие на триггер, а очень часто в схемах желательно, чтобы переходные
процессы заканчивались, а на схему воздействовали уже устойчивые сигналы
после окончания первичных процессов. Для устранения этого недостатка
стали использовать синхронные триггеры. Идея синхронного заключается в
наличии специального входа синхронизации C. Запись может происходить
только при включенном C.

Синхронный RS-триггер
Вход синхронизации C в этом триггере имеет активный уровень
логическая 1. Если C равно 0, то запоминание в триггер невозможна. При C
равно 1, запись возможна и зависит от сигналов на входах R и S.
Синхронный RS-триггер имеет два основных недостатка:
1. Выполнение записи в триггер происходит в течение интервала
времени, когда C равен 1. В этот интервал могут пролезать помехи.
2. Для записи одного бита информации используют 2 провода R и S.
При этом возможны запрещенные комбинации.
3.
Вопрос 5. Динамические D-триггеры. Временные диаграммы
работы D-триггера.
У D-триггера используется динамическое управление синхронизацией
по фронту импульса (переход из логического 0 в 1). Информация для записи
подается по одному проводу D.
Входы D и C используются в рабочем режиме триггера. Также у
триггера имеются дополнительные асинхронные входы R и S для начальной
установки триггера. После начальной установки на входах R и S должны
находится пассивные уровни (логическая 1).

D-триггер с дополнительными RS входами


Запись в D-триггер производится в момент фронта импульса на входе C
при этом записывается та информация, которая к этому моменту находится
на D. Все остальное время триггер хранит информацию.

t1 t2 t3 t4 t5 t6

Временная диаграмма D-триггера


В рабочем режиме в момент времени t3 подготовлены данные (D равно
1). Сама запись произойдет в момент t4, когда на входе C появится активный
сигнал. В момент времени t5 происходит запись 1, но так как уже записана 1
внешних изменений нет.
В случае изменения сигнала на входе D одновременно с фронтом
импульса на входе C результат записи будет неопределенным. Подобных
ситуаций допускать нельзя, а необходимо обеспечивать чтобы данные на
входе D к моменту фронта на входе C уже находятся в устойчивом
положении.
Вопрос 6. Статический D-триггер, схема, принцип работы. Таблица
истинности D-триггера. Принципиальная схема статического D-
триггера на элементах И-НЕ, ИЛИ-НЕ.
Статический D-триггер можно получить из RS-триггера, подав на R-
вход инвертированный сигнал с S-входа.

Статический D-триггер
Если уровень сигнала на входе С = 0, состояние триггера устойчиво и
не зависит от уровня сигнала на информационном входе D. При подаче на
вход синхронизации уровня С = 1 информация на прямом выходе будет
повторять информацию, подаваемую на вход D.

Таблица истинности статического D-триггера


Схема D-триггера на вентилях «И-НЕ»

Схема D-триггера на вентилях «ИЛИ-НЕ»


Вопрос 7. T-триггер (счетный триггер). Схема T-триггера (на
основе D-триггера). 4-битный вычитающий счетчик на основе T-
триггеров, его временная диаграмма.
T-триггеры предназначены для работы в счетном режиме. Они имеют
специальный вход T (Toggle - переключатель). D-триггер с динамическим
входом C может работать как T-триггер. Для этого необходимо вход С
соединить с инверсным выходом триггера Q. Из T-триггера можно собрать
счетчик.

T-триггер на основе D-триггера

Временная диаграмма работы T-триггера


Узлы цифровой техники, способные осуществлять счет в двоичной
системе счисления называются двоичные счетчики. Для выполнения этой
функции оно обязательно должно иметь память.
Двоичные счетчики могут считать в ограниченном диапазоне чисел. N-
разрядный счетчик может именть минимальное число 0 и максимально
возможное число 2N - 1.
Двоичные счетчики способны выполнять операции сложения и
вычитания (суммирующий и вычитающий счетчик). Для реализации
вычитающего счётчика достаточно чтобы T-триггер изменял своё состояние
по переднему фронту входного сигнала. Изменить рабочий фронт входного
сигнала можно инвертированием этого сигнала.

4-битный вычитающий счетчик на основе T-триггеров


По диаграмме видно, что при поступлении на вход счётчика первого же
импульса на выходах появляется максимально возможное для
четырёхразрядного счётчика число. При поступлении следующих импульсов
содержимое счётчика уменьшается на единицу.
Это вызвано тем, что при поступлении переднего фронта тактового
импульса первый триггер переходит в единичное состояние. В результате на
его выходе тоже формируется передний фронт. Он поступает на вход второго
триггера, что приводит к записи единицы и в этот триггер. Точно такая же
ситуация складывается со всеми триггерами счётчика, то есть все триггеры
перейдут в единичное состояние.
Следующий тактовый импульс приведёт к изменению состояния
только первого триггера, так как при этом на его выходе сформируется
задний фронт сигнала.
Вопрос 8. Передача данных с использованием синхронного
последовательного интерфейса SPI. Схема организации SPI интерфейса,
сдвиговые регистры.
SPI (Serial Peripheral Interface) - это один из самых распространенных
протоколов передачи данных в микроконтроллерах. Он используется для
обмена данными между микроконтроллером и другими устройствами,
такими как датчики, дисплеи, память и т.д. Он основан на передаче данных
по сдвиговому регистру.
В отличие от стандартного асинхронного последовательного
интерфейса UART, SPI является синхронным интерфейсом, в котором любая
передача синхронизирована с общим тактовым сигналом, генерируемым
ведущим устройством (чаще всего в роли ведущего выступает
микроконтроллер). Принимающая периферия (ведомая) синхронизирует
получение битовой последовательности с тактовым сигналом. К одному
последовательному периферийному интерфейсу ведущего устройства-
микросхемы может присоединяться несколько микросхем. Ведущее
устройство выбирает ведомое для передачи, активируя сигнал «выбор
кристалла» (chip select) на ведомой микросхеме. Периферия, не выбранная
ведущим устройством, не принимает участие в передаче по SPI.
В SPI используются четыре линии передачи:
MOSI – выход ведущего, вход ведомого (Master Out Slave In). Служит
для передачи данных от ведущего устройства ведомому.
MISO – вход ведущего, выход ведомого (Master In Slave Out). Служит
для передачи данных от ведомого устройства ведущему.
SCK – последовательный тактовый сигнал (Serial Clock). Служит для
передачи тактового сигнала для ведомых устройств.
CS (SS) – выбор микросхемы, выбор ведомого (Chip Select, Slave
Select).
Схема организации SPI интерфейса
Главным составным блоком интерфейса SPI является обычный
сдвиговый регистр, сигналы синхронизации и ввода/вывода битового потока
которого и образуют интерфейсные сигналы. Таким образом, протокол SPI
правильнее назвать не протоколом передачи данных, а протоколом обмена
данными между двумя сдвиговыми регистрами, каждый из которых
одновременно выполняет и функцию приемника, и функцию передатчика.
Частота следования битовых интервалов в линиях данных SPI определяется
синхросигналом SCK, который генерирует один из абонентов – ведущий
(Master). Прочие абоненты – ведомые (Slave), которых может быть
несколько, используют синхросигнал для определения моментов изменения
битов на линии данных. Ведомые устройства никак не могут влиять на
частоту следования битовых интервалов (в отличие, например, от интерфейса
I2C, который не рассматривается в рамках данного пособия).
Ведущий в подавляющем большинстве случаев является
приемопередатчиком SPI в составе микроконтроллера (если аппаратный SPI
отсутствует, его можно эмулировать программно). В качестве ведомого
устройства обычно выступает какая-либо периферийная микросхема. Однако
SPI можно использовать и для связи двух (или больше) микроконтроллеров,
если существует такая необходимость.
Передача данных по SPI происходит следующим образом:
1. Ведущий активирует линию SS (Slave Select) для выбора нужного
устройства. Это может быть датчик, память, дисплей и т.д. Активация линии
SS обычно происходит путем установки ее в низкий уровень.
2. Ведущий начинает передачу данных, отправляя первый бит по
линии MOSI (Master Output Slave Input). Он делает это путем установки
соответствующего бита в сдвиговом регистре.
3. После отправки бита, ведущий генерирует импульс на линии
SCK (Serial Clock), чтобы синхронизировать передачу данных. Обычно
тактовая частота устанавливается мастером и может быть изменена.
4. Ведомый считывает первый бит с линии MOSI и сохраняет его в
своем сдвиговом регистре. Затем он отправляет свой первый бит по линии
MISO (Master Input Slave Output), который также сохраняется в сдвиговом
регистре мастера.
5. Ведущий считывает ответный бит со своей линии MISO и
сохраняет его в своем сдвиговом регистре. Теперь ведущий готов передать
следующий бит.
6. Шаги 3-5 повторяются до тех пор, пока все биты не будут
переданы. Обычно ведущий передает данные восемью битами, но это может
быть изменено.
7. После передачи всех битов, ведущий деактивирует линию SS, что
сообщает ведомогу о конце передачи.
8. После этого ведущий может начать передачу данных другому
устройству, повторив все вышеперечисленные шаги.
Важно заметить, что в SPI мастер всегда инициирует передачу данных,
а слейв только отвечает на запросы мастера. Также SPI не имеет никакой
встроенной проверки ошибок, поэтому любые ошибки должны быть
обнаружены и обработаны программно.
Вопрос 9. Передача данных с использованием асинхронного
последовательного интерфейса UART. Общая структура асинхронного
приёмопередатчика. Протокол передачи данных RS-232.
Асинхронный последовательный интерфейс UART (Universal
Asynchronous Receiver/Transmitter) - это стандарт связи между устройствами,
который используется для передачи данных в последовательном формате бит
за битом. Он является одним из самых распространенных способов связи во
встраиваемых системах и персональных компьютерах.
Особенностью асинхронного интерфейса является то, что передача
данных осуществляется без использования общей синхросигнальной линии.
Вместо этого каждый бит передается с использованием собственного
тактового сигнала.
Общая структура асинхронного приемопередатчика UART включает
два блока - передающий и приемный. Каждый блок содержит регистр сдвига,
который позволяет передавать или принимать данные бит за битом. Также
блоки могут включать буферы данных для временного хранения информации
перед ее передачей или после ее приема.

Общая структура приемопередатчика


Передача данных по UART осуществляется следующим образом:
1. Передающее устройство формирует пакет данных, который
должен быть передан.
2. UART передающего устройства формирует синхросигнал в виде
тактового импульса, который определяет скорость передачи данных. Эта
скорость определяется как baud rate и обозначает количество битов данных,
передаваемых за одну секунду.
3. UART передающего устройства добавляет стартовый бит,
который уведомляет приемник о начале передачи.
4. Затем передающее устройство посылает каждый бит данных
последовательно, начиная со старшего (MSB - Most Significant Bit).
5. После передачи данных, UART передающего устройства
добавляет один или несколько стоповых битов, которые служат для
синхронизации приемника и завершения передачи.
6. UART приемника ожидает стартовый бит и начинает считывать
каждый бит данных последовательно, начиная со старшего.
7. После считывания всех битов данных, приемник проверяет
контрольную сумму и готовит ответ, если это требуется.
Для правильной работы асинхронного интерфейса UART необходимо
соблюдать определенные параметры передачи данных, такие как скорость
передачи, формат кадра и наличие контрольных сумм. В противном случае,
при передаче или приеме данных могут возникнуть ошибки, котор ые могут
привести к искажению или потере данных.
Существует несколько стандартных форматов кадра, которые
определяются количеством битов данных, наличием и количеством
стартовых и стоповых битов и контрольной суммы. Один из наиболее
распространенных протоколов передачи данных по UART - это RS-232.
Протокол RS-232 определяет формат кадра с 8 битами данных, одним
стартовым битом, одним или двумя стоповыми битами и необязательным
битом четности для контроля ошибок. Для обмена данными между
устройствами, подключенными к интерфейсу RS-232, используются две
линии: линия передачи данных (TX) и линия приема данных (RX).
Например, если передаваемое сообщение состоит из 8 битов данных и
используется один стартовый и один стоповый бит, то полная длина
передаваемого кадра составит 10 бит. Скорость передачи данных в этом
случае определяется как количество кадров, передаваемых за одну секунду, и
выражается в бодах (baud). Например, если скорость передачи данных
составляет 9600 бод, то каждый бит будет передаваться в течение 1/9600
секунды.

Передача данных RS232


Вопрос 10. Виды памяти микроконтроллеров (на примере
семейства AVR). Стек и его инициализация.
В микроконтроллерах семейства AVR реализована Гарвардская
архитектура, в соответствии с которой разделены не только адресные
пространства памяти программ и данных, но также и шины доступа к ним.
Способы адресации и доступа к этим областям памяти также различны. Такая
структура позволяет центральному процессору работать одновременно как с
памятью программ, так и с памятью данных, что существенно увеличивает
производительность. Каждая из областей данных (ОЗУ и энергозависимая
ERROM) также расположена в своем адресном пространстве.
Память пространств предназначена для хранения команд,
управляющих функционированием микроконтроллера. Память программ
также часто используется для хранения таблиц констант, не меняющихся во
время работы программы. Память программ представляет собой
электрически стираемое программируемое постоянное запоминающее
устройство (ППЗУ, FLASH-ПЗУ). В связи с тем, что длина всех команд
кратна одному слову (16 бит), память программ имеет 16-разрядную
организацию. Логически память программ разделена на две неравные части:
область прикладной программы и область загрузчика. В последней может
располагаться специальная программа (bootloader), позволяющая
микроконтроллеру самостоятельно управлять загрузкой и выгрузкой
прикладных программ. Если же возможность самопрограммирования
микроконтроллера не используется, прикладная программа может
располагаться и в области загрузчика. Для адресации памяти программ
используется счетчик команд. Размер счетчика команд составляет 12…16
разрядов, в зависимости от объема адресуемой памяти.
Структура памяти AVR микроконтроллеров
По адресу 0х0000 памяти программ находится вектор сброса. После
инициализации (сброса) МК выполнение программы начинается с этого
адреса. Начиная с адреса 0х0001 или 0х0002 памяти программ располагается
таблица векторов прерываний. При возникновении прерывания, после
сохранения в стеке текущего значения счетчика команд, происходит
выполнение команды, расположенной по адресу соответствующего вектора.
Поэтому по этим адресам располагаются команды перехода к
подпрограммам обработки прерываний. В моделях с объемом памяти менее 8
Кбайт в качестве этих команд используются команды относительного
перехода (RJMP), а в остальных моделях – команды абсолютного перехода
(JMP).
В качестве промежуточных операндов используется 32 ячейки –
оперативные регистры общего назначения (РОН). Доступ к этим ячейкам
самый быстрый, а число операций с их содержимым наиболее разнообразное.
При написании программ на языке ассемблера эти регистры обозначаются
как R0, R1, R2…R31, и делятся на три группы:
1. Младшие R0-R15 – обычные РОН, но в некотором смысле
неполноценные. С ними не работают многие команды, например, загрузка
непосредственного числа.
2. Старшие R16-R31 – полноценные регистры, работающие со
всеми командами без исключения.
3. Индексные R26…R31 – 6 последних регистров из старшей
группы отличаются от остальных. В принципе, их можно использовать и как
обычные РОН. Но, кроме этого, они могут образовывать регистровые пары
X(R26:R27), Y(R28:R29), Z(R30:R31), которые используются как указатели
при работе с памятью.
Память данных микроконтроллеров AVR разделена на три части:
регистровая память, оперативная память (статическое ОЗУ) и
энергозависимое EEPROM.
Регистровая память включает 32 РОН, объединенных в файл, и
служебные регистры ввода/вывода (РВВ). В старших моделях
микроконтроллеров имеется также область дополнительных (Extended)
регистров ввода/вывода (ДРВВ). Под РВВ в памяти микроконтроллера
отводятся 64 байта, а под ДРВВ – 160 байт. Введение ДРВВ связано с тем,
что для поддержки периферийных устройств этих моделей обычных 64
регистров недостаточно. В обеих областях РВВ располагаются различные
служебные регистры (регистры управления микроконтроллера, регистры
состояния), а также регистры управления периферийными устройствами,
входящими в состав микроконтроллера. Распределение адресов пространства
ввода/вывода (как основного, так и дополнительного) зависит от конкретной
модели микроконтроллера и входящих в его структуру периферийных
устройсвтв.
Кроме 32 РОН в структуру микроконтроллера обычно включена
оперативная память (ОЗУ), предназначенная для временного хранения
переменных. Есть она не везде – в самых младших микроконтроллеров
семейства Tiny оперативной памяти нет вовсе, в ее качестве выступают 32
РОН. Оперативная память представляет собой несколько сотен ячеек для
временного хранения данных, от 64 байт до 4 килобайт, в зависимости от
модели. В этих ячейках могут храниться любые данные, а доступ к ним
осуществляется через команды LOAD и STORE.
Для долговременного хранения различной информации, которая может
изменяться в процессе функционирования готовой системы (калибровочные
константы, серийные номера, ключи), в МК может использоваться
энергозависимая EEPROM-память. ЕЕ объем составляет для различных
моделей от 512 байт до 4 Кбайт. Эта память расположена в отдельном
адресном пространстве, а доступ к ней осуществляется с помощью РВВ.
Стек представляет собой область памяти, которую
микроконтроллерное ядро использует для сохранения и восстановления
адресов возврата и подпрограмм прерываний. Практически у всех
микроконтроллеров AVR стек размещается в оперативной памяти. Для
адресации текущего элемента (вершины стека) используется указатель стека
SP (Stack Pinter). Это однобайтовый РВВ SPL у моделей с объёмом памяти
данных до 256 байт, или двухбайтовые SPH:SPL (SPH–старший байт,SPL–
младший байт) у старших моделей с большим объемом памяти.
Так как после подачи напряжения питания (или после сброса) в
регистрах содержится нулевое значение, в самом начале программы
указатель стека необходимо проинициализировать, записав в него значение
конечного адреса памяти данных. При вызове подпрограмм адрес команды,
расположенной за указанной вызова, сохраняется в стеке. Значение указателя
стека при этом уменьшается на два, так как для хранения счетчика команд
требуется два байта.
При возврате подпрограммы этот адрес извлекается из стека и
загружается в счетчик команд. Значение указателя стека соответственно
увеличивается на два. То же происходит и во время вызова прерываний.
Расположение стека в памяти данных
Во всех моделях микроконтроллеров AVR стек доступен со стороны
пользовательской программы и может быть использован в процессе
выполнения программы. Для работы со стеком существует всего две
команды: занесение в стек (PUSH) и извлечение из стека (POP).
При старте микроконтроллер обычно первым делом проводит
инициализацию стека, записывая в 16-битный регистр SP адрес, откуда он
будет увеличиваться. Делается это следующим образом:
LDIR16, Low(RAMEND)
OUTSPL, R16
LDI R16, High(RAMEND)
OUT SPH, R16
RAMEND – это макроопределение, указывающее на конец ОЗУ для
каждого конкретного микроконтроллера.
Вопрос 11. Прерывания, вектор прерывания
Прерывания – это аппаратные события, которые прекращают
нормальный ход программы для выполнения какой-либо приоритетной
задачи. При этом событие может быть, как внутренним (от встроенной
периферии самого микроконтроллера – таймеров, портов ввода-вывода, АЦП
и других), так и внешним – например, появление на входе импульса от
нажатой кнопки. Возникает вопрос, можно ли обрабатывать эти события без
использования прерываний?
В наиболее простых случаях так и происходит: основная программа
представляет собой бесконечный цикл, внутри которого тем или иным
способом отслеживаются возникновения событий, при наступлении которых
устанавливается определённое значение переменной, называемой обычно
флагом (бит в специализированном регистре или ячейке памяти). Основная
программа проверяет в цикле значения используемых флагов, и при их
изменении переходит к обработке соответствующего события. Чем неудобен
подобный подход? Во-первых, подобный цикл ожидания полностью
загружает микроконтроллер, который в это время мог бы делать что-нибудь
полезное. Во-вторых, некоторые события в принципе не могут долго ждать,
например, обработка приёма данных по USART – если пропустить хоть один
байт, логика работы программы будет нарушена, а повторная пересылка
данных может быть не предусмотрена. Именно поэтому для организации
более эффективного использования ресурсов микроконтроллера и
используют прерывания.
Как работают прерывания. При возникновении прерывания микроконтроллер
завершает текущую команду, сохраняет в стеке содержимое счетчика команд и совершает
переход на адрес соответствующего вектора прерывания. По этому адресу, как правило,
находится команда безусловного (JMP или RJMP) перехода к подпрограмме обработки
прерывания. За каждым аппаратным прерыванием микроконтроллера закреплен свой
адрес, и все вместе они образуют таблицу векторов прерываний, которая

расположена в самом начале памяти программ. Поскольку у каждого


микроконтроллера набор периферии разный, вектор прерываний также будет
отличаться.
Вопрос 12. Структурная схема встроенного аналого-цифрового
преобразователя для микроконтролееров семейства AVR, его основные
параметры. Настройка АЦП, управляющие регистры
В большинстве встроенных в микроконтроллеры АЦП используются
АЦП последовательного приближения.

АЦП последовательного приближения


Параметры АЦП бывают статические и динамические.
Статические параметры:
 Максимальный (Vref) и минимальный (обычно 0) уровни
входного сигнала — устанавливают диапазон шкалы преобразования,
относительно которой будет оцениваться входной сигнал. Также этот
параметр может обозначаться как FS — fullscale. Для дифференциального
АЦП шкала определяется от -Vref до +Vref, однако для упрощения далее
будем рассматривать только single-ended шкалы.
 Разрядность (N) — разрядность выходного кода,
характеризующая количество дискретных значений (2N), которые
преобразователь может выдать на выходе.
 Ток потребления (Idd) — сильно зависит от частоты
преобразования, поэтому информацию об этом параметре лучше искать на
соответствующем графике.
 МЗР (LSB) – младший значащий разряд (LeastSignificantBit) —
минимальное входное напряжение, разрешаемое АЦП (по сути, единичный
шаг в шкале преобразования). Определяется формулой: LSB = Vref/2N.
 Ошибка смещения (offseterror) – определяется как отклонение
фактической передаточной характеристики АЦП от передаточной
характеристики идеального АЦП в начальной точке шкалы. Измеряется в
долях LSB. При ошибке смещения переход выходного кода от 0 в 1
происходит при входном напряжении отличном от 0.5LSB.

Ошибки смещения АЦП


Динамические параметры:
 Частота дискретизации (fs — samplingfrequency) — частота, при
которой происходит преобразование в АЦП (ну или 1/Ts, где Ts — период
выборки). Измеряется числом выборок в секунду. Обычно под данным
обозначением подразумевают максимальную частоту дискретизации, при
которой специфицированы параметры преобразователя.
 Отношение сигнал/шум (SNR — Signal-to-NoiseRatio) —
определяется как отношение мощности обрабатываемого сигнала к
мощности шума, добавляемого в процессе преобразования.
 Время кодирования – время, в течение которого осуществляется
непосредственное преобразование установившегося значения входного
сигнала (время от начала импульса запуска до появления выходного кода).
Все микроконтроллеры семейства AtMega и некоторые из семейства
Tiny имеют встроенный блок аналого-цифрового преобразования. Он может
использоваться для замены простого, но значительно менее
функционального компаратора. Этот АЦП десятиразрядный и
многоканальный (количество каналов может варьироваться от 4 до 16 в
зависимости от модели микроконтроллера). Модуль АЦП у нас всего один,
на его входе стоит аналоговый мультиплексор, подключающий этот вход к
различным выводам микроконтроллера, что позволяет проводить
разделенные во времени измерения сразу нескольких независимых
аналоговых величин. Входы мультиплексора могут работать как по
отдельности (в несимметричном режиме, измеряя напряжение относительно
земли), так и объединяться в пары (только для некоторых моделей
микроконтроллеров), измеряя дифференциальное напряжение. Также
опционально возможно усиление входного сигнала с фиксированным
коэффициентом 10 или 100.
Встроенный АЦП представляет собой преобразователь
последовательного приближения с устройством выборки-хранения и
фиксированным числом тактов преобразования, равным 13 (14 для
дифференциального измерения). Данный класс АЦП занимает
промежуточное положение по быстродействию, стоимости и разрешающей
способности между последовательно-параллельными и сигма-дельта АЦП и
находит широкое применение в системах управления, контроля и цифровой
обработки сигналов.
Для выполнения первого преобразования (при первоначальной
настройке АЦП) требуется 25 тактов. Тактовая частота преобразования
формируется с помощью делителя от опорной частоты микроконтроллера
при помощи соответствующего управляющего регистра, рекомендованная
частота преобразования – от 50 до 200кГц, в этом диапазоне наиболее
вероятно получение наиболее достоверного результата измерения. Модуль
АЦП имеет разрешение в 10 бит, и, по заявлениям разработчиков,
абсолютная погрешность не превышает двух младших значащих разрядов
(погрешность не более 0,25 % шкалы измерения). Для достижения подобных
результатов необходимо применение как аппаратных, так и программных
способов повышения точности измерений, с которыми можно дополнительно
ознакомиться в фирменной документации.
Также возможно два режима преобразования: непрерывный (free-
runningmode), когда по завершении одного цикла преобразования сразу же
следует другой, и одиночный (single), когда последовательность циклов
регулируется вручную. Первый способ не отличается высокой точностью
измерений и целесообразен только при необходимости максимальной
скорости преобразований.
Настройка АЦП в микроконтроллерах семейства AVR осуществляется
с помощью управляющих регистров:
ADMUX (ADC MultiplexerSelectionRegister) – регистр, определяющий
текущий канал АЦП, источник опорного напряжения и режим хранения
данных. В этом регистре нас больше всего интересуют биты, описанные
далее.
REFS1:0 (ReferenceSelectionBits) – определяют источник опорного
напряжения, относительно которого будет происходить преобразование.
Опорное напряжение должно быть как можно более стабильным, без помех и
колебаний по напряжению – от этого во многом зависит точность работы
АЦП.
Выбор источника опорного напряжения
Внутренний источник опорного напряжения не очень точный и
подходит только для нетребовательных приложений.
MUX4:0 (AnalogChannelandGainSelectionBits) – данные биты
определяют текущий вход, с которого мы будем считывать аналоговый
сигнал. Также с помощью этих битов выставляется коэффициент усиления
при измерении в дифференциальном режиме.

Выбор текущего канала АЦП


Данные с АЦП записываются в регистровую пару ADCH:ADCL, откуда
их можно считать для дальнейшей обработки. Причем здесь есть один
важный момент. Регистровая пара 16 разрядная, а АЦП имеет разрядность 10
бит. В итоге лишь один регистр занят полностью, а второй занимают лишь
оставшиеся два бита. Исходя из этого факта, выравнивание может
производиться как по правому краю – старшие два бита в ADCH, а младшие
в ADCL, так и по левому – старшие биты в ADCH, а два младших бита в
ADCL.
Так как в двух младших битах чаще всего достаточно сложно получить
значимые данные (скорее всего, мы получим там всякий мусор и помехи), мы
можем использовать выравнивание по правому краю и считывать данные
преобразования только из одного регистра ADCH, экономя время и
программный код. За выравнивание отвечает бит ADLAR. Записывая в него
логический ноль, получаем выравнивание по правой границе, записываем
единицу – по левой.
Рассмотрим подробнее управляющий регистр ADCSRA (ADC
ControlandStatusRegister A), отвечающий за работу АЦП:
ADEN (ADC Enable) – записывая единицу в этот бит, разрешаем
использование АЦП.
ADIE (ADC InterruptEnable) – разрешение прерывания по завершению
цикла преобразования.
ADPS2:0 (ADC PrescalerSelectBits) – позволяет выбрать коэффициент
делителя тактовых импульсов для установки частоты преобразований (в
непрерывном режиме).
Выбор коэффициента деления
ADFR (ADC FreeRunningSelect) – записывая единицу в этот бит,
выбираем непрерывный режим преобразования.
ADSC (ADC StartConversion) – записывая единицу в этот бит, мы
начинаем очередной цикл преобразования в одиночном режиме работы (или
первый цикл при непрерывном), который занимает 13 тактов (первый цикл –
25 тактов, здесь осуществляется первоначальная инициализация АЦП), при
условии, что с помощью бита ADEN разрешено использование АЦП.
При установке прерывания при помощи требуемых регистров по
завершении цикла преобразования происходит прерывание. При
возникновении прерывания микроконтроллер завершает текущую команду,
сохраняет в стеке содержимое счетчика команд и совершает переход на адрес
соответствующего вектора прерывания. По этому адресу, как правило,
находится команда безусловного (JMP или RJMP) перехода к подпрограмме
обработки прерывания. За каждым аппаратным прерыванием
микроконтроллера закреплен свой адрес, и все вместе они образуют таблицу
векторов прерываний, которая расположена в самом начале памяти
программ. Поскольку у каждого микроконтроллера набор периферии разный,
вектор прерываний также будет отличаться.
Контроллер стартует с адреса 0x00 (нулевого адреса памяти программ).
Далее мы делаем безусловный переход на метку RESET. Если этого не
сделать, то контроллер начнёт выполнять команды из таблицы векторов
прерываний, что нам совершенно не нужно. После перехода по метке первым
делом необходимо проинициализировать стек. Потом, используя команду
SEI, разрешаем глобальные прерывания. За разрешение конкретных
прерываний для каждого вида периферии отвечают соответствующие
регистры управления (ADIE для АЦП) локальными прерываниями.
Когда возникает прерывание, выполнение текущих операций
приостанавливается и микроконтроллер переходит по соответствующей
метке на подпрограмму обработки прерывания. Последней командой
подпрограммы обработки прерывания должна быть команда RETI, которая
обеспечивает возврат в основную программу и восстановление
предварительно сохраненного счетчика команд и данных, заблаговременно
перенесённых в стек.

Вопрос 13. Аналого-цифровые преобразователи. АЦП


параллельного преобразования (параллельные АЦП).
Аналого-цифровые преобразователи (АЦП) являются устройствами,
которые принимают входные аналоговые сигналы и генерируют
соответствующие им цифровые сигналы, пригодные для обработки
микропроцессорами и другими цифровыми устройствами.
Принципиально не исключена возможность непосредственного
преобразования различных физических величин в цифровую форму, однако
эту задачу удается решить лишь в редких случаях из-за сложности таких
преобразователей. Поэтому в настоящее время наиболее рациональным
признается способ преобразования различных по физической природе
величин сначала в функционально связанные с ними электрические, а затем
уже с помощью преобразователей напряжение-код - в цифровые. Именно эти
преобразователи имеют обычно в виду, когда говорят об АЦП.
Процедура аналого-цифрового преобразования непрерывных
сигналов, которую реализуют с помощью АЦП, представляет собой
преобразование непрерывной функции времени U(t), описывающей
исходный сигнал, в последовательность чисел {U'(tj)}, j=0,1,2,:, отнесенных к
некоторым фиксированным моментам времени. Эту процедуру можно
разделить на две самостоятельные операции. Первая из них называется
дискретизацией и состоит в преобразовании непрерывной функции времени
U(t) в непрерывную последовательность {U(tj)}. Вторая называется
квантованием и состоит в преобразовании непрерывной последовательности
в дискретную {U'(tj)}.
Классификация АЦП
АЦП параллельного преобразования - это тип аналого-цифрового
преобразователя, который преобразует входной аналоговый сигнал
непосредственно в цифровой код за один такт работы.
Принцип работы АЦП параллельного преобразования основан на
использовании массива резисторов. Входной сигнал подается на массив
резисторов, который разбивает его на несколько частей. Затем каждая часть
сигнала подается на свой собственный компаратор, который сравнивает
входной сигнал с напряжением опоры. Каждый компаратор возвращает "1"
или "0" в зависимости от того, насколько высоко находится входной сигнал
по сравнению с опорным напряжением.
Коды "1" или "0" затем собираются вместе, чтобы создать цифровой
выходной код, который представляет входной сигнал. Этот код может быть
записан в память или передан дальше для дальнейшей обработки.
АЦП параллельного преобразования
Плюсом таких АЦП можно выделить высокую скорость
преобразования (т.к. сигнал поступает на все компараторы одновременно).
Из минусов низкое разрешение (иначе нужно слишком много компараторов)
и высокое энергопотребление (каждый компаратор потребляет ток).
Применяются там, где не требуется аккумуляторного питания (например:
осциллографы).
Вопрос 14. Аналого-цифровые преобразователи. АЦП
последовательного приближения
Принцип работы АЦП последовательного приближения. Входной
аналоговый сигнал поступает на УВХ (устройство выборки-хранения), чтобы
зафиксировать данные, так как преобразование занимает время и на выходе
могут измениться значения.
Далее сигнал поступает на компаратор, второй вход которого
подключен к ЦАП. Компаратор управляет регистром ПП (регистр
последовательного приближения), который составляет основу этого АЦП.
Код с регистра ПП поступает на N-битный ЦАП и напряжение ЦАПа
сравнивается с входным.
В начальным момент времени регистр ПП сброшен в ноль. Далее
устаналивается «1» в самом старшем разряде при первом такте, это как раз
приходится на половину опорного напряжения. Компаратор на выходе
указывает больше или меньше напряжение входного сигнала, чем выход
ЦАП (на первом такте это половина опорного напряжения).
Выход ЦАП > входного сигнала => выход компаратора LOW => сброс
бита в регистре
Выход ЦАП < входного сигнала => выход компаратора HIGH => 1бит
сохраняется в регистре
Таким образом перебираются все разряды.
АЦП последовательного приближения
Из плюсов можно можно выделить простая архитектуру при высоком
разрешении. Минус: требует N сравнений для достижения N-разрядного
разрешения (снижает fD и вызывает ограничение по скорости
преобразования). Применяются во всех микроконтроллерах.
Вопрос 15. Аналого-цифровые преобразователи. Интегрирующие
АЦП. Сигма-дельта АЦП. Схемы и принцип работы, основные
преимущества и недостатки.
Принцип работы интегрирующих АЦП. На интегратор через ключ
подаем входной сигнал. В начальный момент времени S1 замыкается и
заряжается С, далее размыкаем S1 и замыкаем S2, тем самым обеспечиваем
разряд конденсатора. После интегратора идет компаратор для того, чтобы
узнать, когда С разрядится до нуля. Счетчик считает время, за которое
разрядится С. Результат будет преобразован в выходной код АЦП (сколько
импульсов укладывается во время разрядки). ГТИ задает работу всей схемы.

Интегрирующие АЦП
Плюсом можно выделить возможность подавления высокочастотного
шума и фиксированных низких частот (50/60 Гц) – из-за интегрирования.
Минусы: низкая входная пропускная способность и ограничение fD.
Применяются в измерительных приборах (мультиметры, вольтметры и
прочее, там не нужна высокая частота дискретизации).
Принцип работы сигма-дельта АЦП. Входное напряжение суммируется
с выходным сигналом ЦАП. Интегратор добавляет результат этого
суммирования к значению, которое сохраняется с предыдущего шага.
Компаратор выдает «1» если выход интегратора больше нуля и «0» в
противном случае. 1-битный ЦАП подает +VREF, если на выходе
компаратора «1» и – VREF, если на выходе компаратора «0». Работа
зацикливается.

Сигма-дельта АЦП
Такие АЦП являются достаточно медленными, однако имеют
наибольшее разрешение из представленных выше АЦП. Может применяться,
например, в медицинской технике.
Вопрос 16. Устройство портов ввода-вывода. Упрощенная схема
порта ввода-вывода микроконтроллера. Управляющая логика,
определяющая конфигурацию порта ввода-вывода
Порты ввода-вывода (GPIO) в микроконтроллерах представляют собой
наборы пинов, которые могут быть настроены как входы или выходы.
Каждый пин имеет свой номер и может быть управляем через
соответствующие регистры порта.

Схема порта ввода-вывода


 Pxn – имя ножки порта микроконтроллера, где x буква порта (A,
B, C или D), n номер разряда порта (7… 0).
 Cpin — паразитная емкость порта.
 Rpu — отключаемый нагрузочный верхний резистор (pull-up).
 PORTxn — бит n регистра PORTx.
 PINxn — бит n регистра PINx.
 DDRxn — бит n регистра DDRx.
На входе микроконтроллера стоит небольшая защита из двух диодов,
она предназначенная для защиты ввода микроконтроллера от
кратковременных импульсов напряжения, превышающих напряжение
питания. Если напряжение будет выше питания, то верхний диод откроется и
это напряжение будет стравлено на шину питания, где с ним будет уже
бороться источник питания и его фильтры. Если на ввод попадет
отрицательное (ниже нулевого уровня) напряжение, то оно будет
нейтрализовано через нижний диод и погасится на землю. Впрочем, диоды
там хилые и защита эта помогает только от микроскопических импульсов и
помех. Если же на ножку микроконтроллера подать вольт 6-7 при 5 вольтах
питания, то внутренние диоды его не спасут.
Конденсатор на схема - это паразитная емкость вывода. Хоть она и
крошечная, но присутствует. Обычно ее не учитывают, но она есть. Не
забивай голову, просто знай это. Дальше идут ключи управления. Каждый
ключ подчинен логическому условию, которые нарисованы на рисунке.
Когда условие выполняется — ключ замыкается.
Каждый порт микроконтроллера AVR (обычно имеют имена A, B и
иногда C или даже D) имеет 8 разрядов, каждый из которых привязан к
определенной ножке корпуса. Каждый порт имеет три специальных регистра
DDRx, PORTx и PINx (где x соответствует букве порта A, B, C или D).
Назначение регистров:
DDRx – Настройка разрядов порта x на вход или выход.
PORTx – Управление состоянием выходов порта x (если
соответствующий разряд настроен как выход), или подключением
внутреннего pull-up резистора (если соответствующий разряд настроен как
вход).
PINx –Чтение логических уровней разрядов порта x.
PINхn – это регистр чтения. Из него можно только читать. В регистре
PINxn содержится информация о реальном текущем логическом уровне на
выводах порта. Вне зависимости от настроек порта. Так что если хотим
узнать что у нас на входе — читаем соответствующий бит регистра PINxn.
Причем существует две границы: граница гарантированного нуля и граница
гарантированной единицы — пороги за которыми мы можем однозначно
четко определить текущий логический уровень. Для пятивольтового питания
это 1.4 и 1.8 вольт соответственно. То есть при снижении напряжения от
максимума до минимума бит в регистре PINx переключится с 1 на 0 только
при снижении напряжение ниже 1.4 вольт, а вот когда напряжение нарастает
от минимума до максимума переключение бита с 0 на 1 будет только по
достижении напряжения в 1.8 вольта. То есть возникает гистерезис
переключения с 0 на 1, что исключает хаотичные переключения под
действием помех и наводок, а также исключает ошибочное считывание
логического уровня между порогами переключения. При снижении
напряжения питания разумеется эти пороги также снижаются.
DDRxn – это регистр направления порта. Порт в конкретный момент
времени может быть либо входом либо выходом (но для состояния битов
PINxn это значения не имеет. Читать из PINxn реальное значение можно
всегда).
DDRxy = 0 – вывод работает как ВХОД. DDRxy = 1 – вывод работает
на ВЫХОД.
PORTxn – режим управления состоянием вывода. Когда мы
настраиваем вывод на вход, то от PORTх зависит тип входа (Hi-Z или PullUp,
об этом чуть ниже).
Когда ножка настроена на выход, то значение соответствующего бита в
регистре PORTx определяет состояние вывода. Если PORTxn=1 то на выводе
лог.1, если PORTxn=0 то на выводе лог.0.
Когда ножка настроена на вход, то если PORTxn=0, то вывод в режиме
Hi-Z. Если PORTxn=1 то вывод в режиме PullUpс подтяжкой резистором в
100к до питания.
Вопрос 17. Ццфро-аналоговые преобразователи. Структурная
схема ЦАП. Параллельная схема суммирования токов.
Последовательная схема суммирования токов
Цифро-аналоговые преобразователи (ЦАП) - это устройства, которые
преобразуют цифровой сигнал в аналоговый. Они используются для
управления аналоговыми устройствами, такими как моторы, светодиоды,
звуковые колонки и т.д.
Микросхемы ЦАП классифицируются по следующим признакам:
 По виду выходного сигнала: с токовым выходом и выходом в
виде напряжения
 По типу цифрового интерфейса: с последовательным вводом и с
параллельным вводом входного кода
 По числу ЦАП на кристалле: одноканальные и многоканальные
 По быстродействию: стандартные и высокого быстродействия

Структурная схема ЦАП


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

Параллельная схема суммирования токов


Недостатки параллельной схемы:
 При высокой разрядности сопротивления резисторов должны
быть согласованы с высокой точностью
 Особо жесткие требования к резисторам старших разрядов,
поскольку разброс тока в них не должен превышать тока младшего разряда
 Сопротивления весовых резисторов могут отличаться в тысячи
раз, что затруднят реализацию таких резисторов на кристалле ИС.
 Сопротивления резисторов старших разрядов могут быть
соизмеримы с сопротивлением замкнутого ключа, что повышает
погрешность
В ЦАП, выполненных по интегральной технологии, в основном
применяются резистивные матрицы R-2R.

Матрица R-2R
Последовательная схема суммирования токов включает в себя один
операционный усилитель и множество резисторов, которые используются
для создания разных уровней напряжения на входе. Каждый резистор
последовательно подключен к предыдущему, и входы операционного
усилителя соединены с концами цепи резисторов. Последовательная схема
обеспечивает более точное преобразование сигнала, но требует больше
времени для выполнения преобразования.

Последовательная схема суммирования токов


Вопрос 18. Таймеры-счетчики. Источники тактовой частоты.
Регистры, определяющие работу таймера. Предделитель таймеров.
Для работы любого микроконтроллера его необходимо обеспечить
стабильным источником тактовых импульсов. Для микроконтроллеров
фирмы Atmel возможно несколько вариантов.
Воспользоваться внутренним генератором на RC-цепочке;
В качестве источника тактовых импульсов может выступать внешний
кварцевый резонатор (или керамический). Максимальная поддерживаемая
частота – 16 МГц (помним, что энергопотребление микроконтроллера
возрастает с увеличением рабочей частоты, причём значительно). Для
подключения внешнего кварцевого резонатора используются специальные
выводы – XTAL1 и XTAL2, также для подключения необходимо
использовать дополнительные конденсаторы емкостью в 15 – 30 пФ, в
зависимости от частоты.

Схемы тактирования микроконтроллера


Вариант, нетребовательный к точности задаваемой системной частоты
– воспользоваться вместо резонатора обычной RC-цепочкой, при этом для её
подключения используются те же самые выводы, что и в предыдущем
случае. Емкость конденсатора RC-цепочки должна быть не ниже 22пФ.
Также, с помощью фьюз-бита CKOPT мы можем подключить между
выводом XTAL1 и землёй внутренний конденсатор емкостью 36 пФ, что
позволяет избавиться от внешнего конденсатора.
Последний вариант – использование внешнего генератора: подключаем
выход генератора к выводу XTAL1. Подобный способ тактирования
микроконтроллера обеспечивает максимальную точность, единственный
недостаток – подобные генераторы имеют достаточно высокую стоимость. С
помощью такого кварца можно с высокой точностью отсчитывать секундные
интервалы. Для подключения часового кварца используются отдельные
выводы TOSC1 и TOSC2, причём использование дополнительных внешних
конденсаторов не требуется.

Альтернативные схемы тактирования микроконтроллера


Таймер-счетчики в микроконтроллерах представляют собой
специальные блоки, которые могут использоваться для измерения времени,
генерации задержек, управления периодическими событиями и т.д.
В AVR доступны два типа таймеров: 8-битные и 16-битные. 8-битные
таймеры могут считать до 255 тактов, а 16-битные - до 65535 тактов. Такты
таймера определяются частотой работы микроконтроллера и настройками
предделителя.
В качестве источника импульсов для таймеров можно выбрать сигнал с
тактовой частотой процессора (CK), импульсы предварительного делителя
(CK/8, CK/64, CK/256 или CK/1024) или импульсы с соответствующего
внешнего вывода. Кроме того, таймеры могут быть остановлены, запретом
прохождения импульсов на них.
В AVR микроконтроллерах регистры, определяющие работу таймера-
счетчика, включают:
1. Регистр управления таймером/счетчиком TCCRxA и TCCRxB.
Эти регистры определяют режим работы таймера (например, режим счетчика
или режим PWM), предделитель таймера и другие параметры.
2. Регистр счетчика TCNTx. Этот регистр содержит текущее
значение счетчика таймера и используется для подсчета времени и генерации
периодических сигналов.
3. Регистр сравнения OCRx. Этот регистр задает значение, с
которым счетчик таймера будет сравниваться, чтобы генерировать
прерывание или изменять состояние вывода.
4. Регистр прерывания TIMSKx. Этот регистр определяет, какие
прерывания будут генерироваться таймером (например, прерывание по
переполнению или по сравнению).
5. Регистр флагов TIFRx. Этот регистр содержит флаги прерываний
таймера и используется для определения, какое прерывание произошло.
Одним из самых распространенных применений таймеров в AVR
является генерация ШИМ-сигнала для управления яркостью светодиодов или
скоростью вращения моторов. Также таймеры могут использоваться для
измерения периодов входных сигналов, например, для обработки сигналов от
энкодеров или датчиков.
Вопрос 19. Регистры на основе D-триггеров. Параллельные
регистры, последовательные (сдвиговые) регистры. Временная
диаграмма работы сдвигового регистра
Сдвиговый регистр построен на четырех D триггерах с динамической
блокировкой входов. Для управления регистром сформированы:
 вход С - вход синхронизации
 вход R - общий сброс регистра
На базе динамических D-триггеров мы можем собрать регистры.
Единичный D-триггер – это простейшая ячейка памяти, которая способна
хранить 1 бит информации. Поэтому есть смысл объединить динамические
Д-триггеры в сборки по 4, 8 (столько разрядов и будет, 4-битный регистр и
тд.).

Параллельные (слева) и последовательные (справа) регистры


Параллельный регистр - это регистр, который может одновременно
записать несколько бит информации. Он состоит из нескольких D-триггеров,
которые связаны между собой в параллельную цепь. Входы данных каждого
триггера соединены с отдельными входами параллельного регистра. Входы
тактового сигнала каждого триггера подключены к одному общему
тактовому сигналу. Когда тактовый сигнал активен, данные на входах
регистра передаются в соответствующие триггеры, и данные одновременно
записываются в регистр. Параллельные регистры используются для хранения
большого количества данных, которые необходимо одновременно
обрабатывать.
Последовательный (сдвиговой) регистр - это регистр, который может
последовательно передавать данные по цепочке. Он также состоит из
нескольких D-триггеров, но они связаны между собой в последовательную
цепь. Входы данных каждого триггера соединены с выходами предыдущего
триггера. Входы тактового сигнала каждого триггера подключены к одному
общему тактовому сигналу. Когда тактовый сигнал активен, данные на входе
первого триггера передаются в него, а затем в следующий триггер по
цепочке, и т.д. Последовательные регистры используются для передачи
данных в последовательной форме и могут использоваться, например, для
создания сдвиговых регистров для сдвига битового поля влево или вправо.
Временная диаграмма сдвигового регистра. Пусть на вход
последовательного (сдвигового) регистра поступает сигнал. В первый момент
времени в первый триггер записывается бит и с каждым тактовым сигналом
он сдвигается до тех пор, пока все данные не окажутся на выходе (4
синхроимпульса).

Временная диаграмма сдвигового регистра


Вопрос 20. Широтно-импульсная модуляция. Понятие широтно-
импульсной модуляции. Различные режимы широтно-импульсной
модуляции. Режим быстрый ШИМ (Fast PWM)
Широтно-импульсная модуляция (Pulse-widthmodulation, PWM) –
приближение желаемого сигнала (многоуровневого или непрерывного) к
действительным бинарным сигналам с двумя фиксированными уровнями –
ноль или единица, так чтобы их значения за некоторый промежуток времени
в среднем были равны. Формально этот процесс можно записать в
следующем виде:

Где x(t) – желаемый входной сигнал в пределе от t_1 до t_2, ∆T_i–


продолжительность i -го ШИМ-импульса с амплитудой A; ∆T_i подбирается
таким образом, чтобы суммарные площади (энергии) обеих величин были
приблизительно равны за достаточно продолжительный промежуток
времени.
ШИМ это простой и эффективный способ задания аналогового сигнала
цифровым методом, что даёт нам возможность сделать простое подобие
цифро-аналогового преобразователя, который не входит в состав периферии
восьмибитных AVR микроконтроллеров, за исключением семейства XMega.
В аналоговом варианте преобразование синусоидального сигнала в
ШИМ-последовательность и обратно схематически выглядит следующим
образом: на один из входов компаратора подается исследуемый аналоговый
сигнал Uвх, на другой – сигнал опорной частоты Fоп, имеющий треугольную
форму (рис. 2). При совпадении уровней двух сигналов на входах
компаратора его выход переключается, формируя в результате
последовательность, состоящую из прямоугольных импульсов с несущей
частотой Fоп, в длительности которых закодирован уровень исходного
аналогового сигнала (т. е. его амплитуда). Если далее требуется получить
исходный аналоговый сигнал, эту последовательность необходимо
пропустить через фильтр нижних частот, чтобы отфильтровать опорную
частоту и получить исходную синусоиду. В приведённом примере в качестве
фильтра нижних частот используется обычная интегрирующая RC-цепочка
(для получения более точных результатов преобразования необходимо
использовать фильтр более высокого порядка, желательно на операционных
усилителях).

Принцип работы ШИМ-преобразователя


При использовании ШИМ мы передаём на выход сигнал, состоящий из
высоких и низких логических уровней, то есть нулей и единиц. Затем эта
последовательность пропускается через интегрирующую цепочку. В
результате интегрирования на выходе будет величина напряжения, равная
площади под импульсами.
Меня скважность сигнала (т. е. отношение длительности периода к
длительности импульса) ШИМ-последовательности, можно плавно менять
эту площадь, а значит и напряжение на выходе.
Принцип ШИМ-преобразования

Формирование ШИМ-сигнала в режиме быстрой модуляции


Проецируя соответсвующие сигналы на другую координатную
плоскость получим следующую картину: При пересечении опорного и
задающего напряжения возникает положительный импульс (верхняя
полочка). Когда опорное ниже задающего – пауза. Напряжение на выводах
МК имеет прямоугольного импульса. Для регулирования ширины столбцов
меняют задающее напряжение. Надо снизить среднее напряжение –
повышаем задающее. Среднее напряжение на нагрузке влечет изменение
мощности. Чем дольше импульс, тем больше его площадь при
интегрировании, значит больше амплитуда выходного сигнала на выходе
ЦАП.
Режим быстрой широтно-импульсной модуляции (ШИМ) (WGMn3-0 =
0b0101, 0b0110, 0b0111, 0b1110, 0b1111) предназначен для генерации ШИМ-
импульсов повышенной частоты. В отличие от других режимов работы в
этом используется однонаправленная работа счетчика. Счет выполняется в
направлении от нижнего к верхнему пределу счета.
Если задан неинвертирующий режим выхода, то при совпадении
TCNTn и OCRnx сигнал OCnx устанавливается, а на верхнем пределе счета
сбрасывается. Если задан инвертирующий режим, то выход OCnx
сбрасывается при совпадении и устанавливается на верхнем пределе счета. За
счет однонаправленности счета, рабочая частота для данного режима в два
раза выше по сравнению с режимом ШИМ с фазовой коррекцией, где
используется двунаправленный счет. Возможность генерации
высокочастотных ШИМ сигналов делает использование данного режима
полезным в задачах стабилизации питания, выпрямления и цифро-
аналогового преобразования. Высокая частота, при этом, позволяет
использовать внешние элементы физически малых размеров (индуктивности,
конденсаторы), тем самым снижая общую стоимость системы.
Разрешающая способность ШИМ может быть фиксированной 8, 9 или
10 разрядов или задаваться регистром ICRn или OCRnA, но не менее 2
разрядов (ICRn или OCRnA = 0x0003) и не более 16 разрядов (ICRn или
OCRnA = 0xFFFF). Разрешающая способность ШИМ при заданном значении
верхнего предела (ВП) вычисляется следующим образом:

В режиме быстрой ШИМ счетчик инкрементируется до совпадения его


значения с одним из фиксированных значений 0x00FF, 0x01FF или 0x03FF
(если WGMn3:0 = 0b0101, 0b0110 или 0b0111, соответственно), значением в
ICRn (если WGMn3:0 = 0b1110) или значением в OCRnA (если WGMn3:0 =
0b1111), а затем сбрасывается следующим тактом синхронизации таймера.
Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий
раз, когда счетчик достигает верхнего предела. Дополнительно тем же
тактовым импульсом вместе с флагом TOVn могут установиться флаги OCnA
или ICFn, если для задания верхнего предела используется регистр OCRnA
или ICRn, соответственно. Если одно из этих прерываний разрешено, то в
процедуре обработки прерывания может быть выполнено обновление
верхнего предела счета и порогов сравнения.
Если изменяется значение верхнего предела счета, то необходимо
соблюдение условия, чтобы записываемое новое значение верхнего предела
было больше или равно значений во всех регистрах порога сравнения. В
противном случае совпадение между TCNTn и OCRnx никогда не возникнет.
Обратите внимание, что при использовании фиксированных значений
верхнего предела во время записи в регистры OCRnx происходит
маскирование к 0 неиспользуемых разрядов.
Механизм модификации регистра ICRn отличается от OCRnA в том
случае, если он используется для задания верхнего предела. Регистр ICRn не
имеет двойной буферизации. Это означает, что если в ICRn записывается
малое значение во время работы счетчика с малым предделением или без
него, то имеется опасность записи в регистр ICRn значения, которое
окажется меньше текущего значения TCNTn. Как результат, в такой
ситуации будет пропущено совпадение на вершине счета. В этом случае
счетчик дойдет до максимального значения (0xFFFF), перезапустится со
значения 0x0000, а только затем возникнет совпадение. Регистр OCRnA
содержит схему двойной буферизации, поэтому, его можно модифицировать
в любой момент времени.
Если выполняется запись по адресу OCRnA, то фактически значение
помещается в буферный регистр OCRnA. Если же возникает совпадение
между TCNTn и вершиной счета, то следующим тактом синхронизации
таймера происходит копирование буферного регистра в регистр порога
сравнения OCRnA. Обновление регистра выполняется тем же тактом, что и
сброс TCNTn и установка флага TOVn.
Рекомендуется использовать регистр ICRn для задания верхнего
предела, если верхний предел счета является константой. В этом случае
также освобождается регистр OCRnA для генерации ШИМ-сигнала на
выходе OCnA. Однако, если частота ШИМ динамически изменяется (за счет
изменения верхнего предела), то в этом случае выгоднее использовать
регистр OCRnA для задания верхнего предела, т.к. он поддерживает двойную
буферизацию.
В режиме быстрой ШИМ блоки сравнения позволяют генерировать
ШИМ-сигналы на выводах OCnx. Если COMnx1:0 =0b10, то задается ШИМ
без инверсии выхода, а если COMnx1:0 = 0b11, то задается режим ШИМ с
инверсией на выходе (см. таблицу 59). Фактическое значение OCnx можно
наблюдать на выводе порта, если для него задано выходное направление
(DDR_OCnx). ШИМ-сигнал генерируется путем установки (сброса) регистра
OCnx при возникновении совпадения между OCRnx и TCNTn, а также путем
сброса (установки) регистра OCnx вместе со сбросом счетчика (переход с
верхнего предела на нижний предел).
Частота ШИМ выходного сигнала для заданного значения верхнего
предела (ВП) определяется выражением:

Где N – переменная, которая задает значение коэффициента


предделения (1, 8, 32, 64, 128, 256 или 1024).
Запись предельных значений в регистр OCRnx связана с особыми
случаями в генерации ШИМ-импульсов. Если OCRnx установить равным
нижнему пределу (0x0000), то на выходе будет возникать короткий импульс
каждый (ВП+1)-ый такт синхронизации таймера. Запись в OCRnx значения
равного верхнему пределу приведет к установке постоянного уровня лог. 1
или 0 на выходе (зависит от выбранной с помощью бит COMnx1:0
полярности выходного сигнала).
Если требуется генерация меандра (прямоугольные импульсы со
скважностью 2 или заполнением 50%) высокой частоты, то необходимо
использовать режим быстрой ШИМ с установкой бит COMnA1:0 = 0b01,
которая вызывает переключение (инвертирование) логического уровня на
выходе OCnA при каждом совпадении. Данное применимо, только если
OCRnA используется для задания верхнего предела (WGMn3-0 =0b1111).
Максимальная генерируемая частота меандра в этом случае fOCnA =
fclk_I/O/2, если OCRnA =0x0000. Данная особенность аналогична
переключению OCnA в режиме СТС за исключением двойной буферизации,
которая имеется в режиме быстрой ШИМ.

Вопрос 21. Широтно-импульсная модуляция. Понятие широтно-


импульсной модуляции. Различные режимы широтно-импульсной
модуляции. ШИМ без фазового сдвига (Phase Corrent PWM)
Режим широтно-импульсной модуляции с фазовой коррекцией (ШИМ
ФК) (WGMn3-0 = 0b0001, 0b010, 0b0011, 0b1010 или 0b1011) предназначен
для генерации ШИМ сигнала с фазовой коррекцией и высокой разрешающей
способностью. Режим ШИМ ФК основан на двунаправленной работе
таймера-счетчика. Счетчик циклически выполняет счет в направлении от
нижнего предела (0x0000) до верхнего предела, а затем обратно от верхнего
предела к нижнему пределу. Если задан неинвертирующий режим выхода
формирователя импульсов, то выход OCnx сбрасывается/устанавливается
при совпадении значений TCNTn и OCRnx во время прямого/обратного
счета. Если задан инвертирующий режим выхода, то, наоборот, во время
прямого счета происходит установка, а во время обратного – сброс выхода
OCnx. При двунаправленной работе максимальная частота ШИМ-сигнала
меньше, чем при однонаправленной работе, однако, за счет такой
особенности, как симметричность в режимах ШИМ с двунаправленной
работой, данные режимы предпочитают использовать при решении задач
управления приводами.
Разрешающая способность ШИМ в данном режиме может быть либо
фиксированной (8, 9 или 10 разрядов) либо задаваться с помощью регистра
ICRn или OCRnA. Минимальная разрешающая способность равна 2-м
разрядам (ICRn или OCRnA = 0x0003), а максимальная -16-ти разрядам (ICRn
или OCRnA =0xFFFF). Если задан верхний предел, то разрешающая
способность ШИМ в данном режиме определяется следующим образом:

В режиме ШИМ ФК счетчик инкрементируется пока не достигнет


одного из фиксированных значений 0x00FF, 0x01FF или 0x03FF
(соответственно для WGMn3-0 = 0b0001, 0b0010 или 0b0011), а также
значения равного ICRn (если WGMn3-0 = 0b1010) или OCRnA (если
WGMn3:0 = 0b1011). Далее, при достижении верхнего предела, счетчик
изменяет направление счета. Значение TCNTn остается равным верхнему
пределу в течение одного такта синхронизации таймера.
Флаг переполнения таймера-счетчика (TOVn) устанавливается всякий
раз, когда счетчик достигает нижнего предела. Если для задания верхнего
предела используется регистр OCRnA или ICRn, то, соответственно
устанавливается флаг OCnA или ICFn тем же тактовым импульсом, на
котором произошло обновление регистра OCRnx из буферного регистра (на
вершине счета). Флаги прерывания могут использоваться для генерации
прерывания по достижении счетчиком нижнего или верхнего предела.
При изменении значения верхнего предела счета необходимо следить,
чтобы оно было больше или равно значениям во всех регистрах сравнения. В
противном случае совпадение между TCNTn и OCRnx никогда не возникнет.
Обратите внимание, что при использовании фиксированных значений
верхнего предела счета во время записи в регистры OCRnx неиспользуемые
разряды обнуляются. Третий период на рисунке 53 иллюстрирует случай,
когда динамическое изменение верхнего предела счета приводит к генерации
несимметричного импульса. Данная особенность основывается на времени
обновления регистра OCRnx. Поскольку, обновление OCRnx возникает на
вершине счета, то и период ШИМ начинается и заканчивается на вершине
счета. Это подразумевает, что длительность обратного счета определяется
предыдущим значением верхнего предела, а прямого – новым значением
верхнего предела. Если два этих значения разные, то и длительность прямого
и обратного счета будет также отличаться. Различие в длительности
приводит несимметричности выходных импульсов.
Если стоит задача изменения верхнего предела при работающем
счетчике, то вместо этого режима рекомендуется использовать режим ШИМ
ФЧК (фазовая и частотная коррекция). Если используется статическое
значение верхнего предела, то между данными режимами практически нет
отличий.
В режиме ШИМ ФК блоки сравнения позволяют генерировать ШИМ-
сигналы на выводах OCnx. Если установить COMnx1:0 = 0b10, то выход
ШИМ будет без инверсии, а если COMnx1:0=0b11, то с инверсией.
Фактическое значение OCnx можно наблюдать на выводе порта, если в
регистре направления данных для данного вывода порта задано выходное
направление (DDR_OCnx). ШИМ-сигнал генерируется путем установки
(сброса) регистра OCnx при совпадении значений OCRnx и TCNTn во время
прямого счета, а также путем сброса (установки) регистра OCnx при
совпадении между OCRnx и TCNTn во время обратного счета.
Результирующая частота ШИМ-сигнала в режиме ШИМ ФК при заданном
верхнем пределе (ВП) может быть вычислена по следующему выражению:
Где N – коэффициент деления предделителя (1, 8, 32, 64, 128, 256 или
1024).
Запись предельных значений в регистр OCRnx связано с особыми
случаями в генерации ШИМ-сигналов в режиме ШИМ ФК. Если задать
режим ШИМ без инверсии и OCRnx установить равным нижнему пределу, то
на выходе непрерывно будет установлен лог. 0, а если равным верхнему
пределу, то на выходе постоянно присутствует лог. 1. Для ШИМ с инверсией
указанные уровни необходимо заменить противоположными.
Если задать использование OCnA в качестве верхнего предела
(WGMn3:0 = 0b1011) и установить COMnA1:0 =0b01, то на выходе OCnA
будет генерироваться меандр.

Вам также может понравиться