Порты ввода вывода МК AVR

Подключение клавиатуры и индикации.

Аналоговые компараторы

Цифро-аналоговые преобразователи МК AVR

17. Способы подключения МК к персональному компьютеру, интерфейс UART, USI

18. Схемы подключения фотодатчиков к МК

19. Процесс компиляции МК, работа программатора

Что такое фьюз МК, для чего предназначены

21. Назначение Flash ROM, SRAM, EEPROM

22. Способы подключения двигателя к МК

23. Принцип динамической индикации. Принцип статической индикации.

24. Как рассчитать мощность потребления контроллера.

25. Опишите цифровые шины микропроцессора. (ШД, ША, ШУ)

 

 

Порты ввода вывода МК AVR.

 

14Подключение клавиатуры и индикации.

На рис.1 приведена наиболее распространенная схема расположения сегментов, позволяющая отображать цифры 0…9 и многие другие дополнительные символы. В нутрии корпуса все светодиоды имеют общую точку соединения. Объединенными вместе могут быть аноды (общий анод) или катоды (общий катод). Самые распространенные цвета свечения - красный и зеленый. При равном токе потребления красные светодиоды, как правило, имеет большую светоотдачу. Энергопотребление зависит от напряжения питания и технологии изготовления. Ток сегмента у современных индикаторов может быть менее 1 мА.


Рис.2 Подключение индикатора при динамической индикации

Для того чтобы высветить на индикаторе необходимый символ, потребуется задействовать у микроконтроллера 8 выводов. Одну линию можно сэкономить если отказаться от сегмента H, когда в отображения точки (запятой) нет необходимости. При большем чисел используемых индикаторов количество линий ввода-вывода существенно возрастет. Два индикатора потребуют уже 16 линий, 3 индикатора - 24 и т.д. Ясно, что для большинства приложений такое расточительное использование выводов совершенно неприемлемо.

Для более рационального использования линий портов можно воспользоваться матричной схемой подключения на рис.1. В данном случае матрица, подключённая к порту D, имеет размер 4*4=16 кнопок (4 строки r0…r3 и 4 столбца с0…с3). Линии PD0…PD3, являющиеся строками r0…r3, всегда настроены на ввод, и подтянуты к шине питания резисторами R (типичный номинал 4,7…10 кОм). С них и производится считывание состояния кнопок SB1-SB16. На линиях PD4…PD7 (столбцы с0…с3) поочерёдно формируется сигнал логического нуля. Первоначально низкий уровень устанавливается на столбце с0, а на всех остальных столбцах при этом Z-состояние. Теперь только при нажатии кнопок этого столбца (SB1…SB4) на линиях строк r0…r3 может возникнуть низкий логический уровень. Далее логический 0 выставляется на столбце с1 и сканируются группа кнопок SB5…SB8 и т.д. Точно такой же алгоритм опроса кнопок применяется и для любой другой матричной клавиатуры не зависимо от числа строк и столбцов. В общем случае количество кнопок n является произведением числа строк и столбцов. Так, например, матрица 2*2 (4 линии) будет содержать 4 кнопки. Но с другой стороны столько же линий ввода-вывода понадобится и для непосредственного подключения того же числа кнопок. Таким образом, экономия выводов начинает проявляться при числе кнопок, превышающем 4…6, и становится ещё более существенной с ростом их количества.


Рис.1 Матричная схема подключения кнопок

Элементы VD1…VD4, и R1…R4 не являются обязательными на схеме. Диоды служат для защиты от короткого замыкания между линиями строк и столбцов. Если, например, при нажатии на кнопку SB1 (в момент сканирования столбца c0) линия строки r0 вдруг окажется настроенной на вывод и на ней будет высокий логический уровень, то по цепи c0r0 начнет протекать недопустимо большой ток. Хотя логика программы не допускает такого режима работы, по разным причинам это все-таки может произойти. Поэтому, по крайней мере, при отладке программы диоды не будут лишними. Если емкость монтажа, приведенная к выводам PD3…PD0, не слишком велика, то сопротивления подтяжки к шине питания, вполне можно заменить внутренними “pull-up” резисторами. Для этого необходимо установить соответствующие разряды в регистре PORTD, когда линии настроены на ввод.

Аналоговые компараторы

В составе МК есть прекрасная вещь компаратор. Компаратор это

сравниватель. Он сравнивает величины напряжений и в зависимости от того

какое из них выше другого, выставляет на выходе либо 1, либо 0.

 

16 АЦП.В AVR довольно много встроенных возможностей для выполнения операций с аналоговыми величинами: это аналоговый компаратор, который неизменно входит во все без исключения модели AVR (а в "продвинутом" семействе XMega их даже несколько) и 10-разрядный многоканальный АЦП (в семейст- ве XMega он стал 12-разрядным). Преобразования в обратную сторону — цифрового значения в аналоговое — до сих пор можно было осуществлять только с помощью ШИМ-режима таймеров (см. главу 8), лишь в семействе XMega появились "настоящие" ЦАП.

Аналого-цифровой преобразователь ( АЦП) микроконтроллера умеет измерять только напряжение. Чтобы произвести измерение других физических величин, их нужно вначале преобразовать в напряжение. Сигнал всегда измеряется относительно точки называемой опорное напряжение, эта же точка является максимумом который можно измерить. В качестве источника опорного напряжения (ИОН), рекомендуется выбирать высокостабильный источник напряжения.

Одной из важнейших характеристик является разрешающая способность, которая влияет на точность измерения. Весь диапазон измерения разбивается на части. Минимум ноль, максимум напряжение ИОН. Для 8 битного АЦП это 28=256 значений, для 10 битного 210=1024 значения. Таким образом, чем выше разрядность тем точнее можно измерять сигнал.

Если измерить сигнал от 0 до 10В. Микроконтроллер используем Atmega8, с 10 битным АЦП. Это значит что диапазон 10В будет разделен на 1024 значений. 10В/1024=0,0097В — с таким шагом мы сможем измерять напряжение. Но учтите, что микроконтроллер будет считать, величину 0.0097, 0.0098, 0.0099… одинаковыми.

В качестве источника опорного напряжения можно использовать внутренний источник и внешний. Напряжение внутреннего источника (2,3-2,7В) не рекомендуется использовать, по причине низкой стабильности. Внешний источник подключается к ножке AVCC или Aref, в зависимости от настроек программы

При использовании АЦП ножка AVCC должна быть подключена. Напряжение AVCC не должно отличаться от напряжения питания микроконтроллера более чем на 0,3В. Как было сказано, максимальное измеряемое напряжение равно опорному напряжению(Vref), находится оно в диапазоне 2В-AVCC. Таким образом, микроконтроллер не может измерить более 5В.

Чтобы расширить диапазон измерения, нужно измерять сигнал через делитель напряжения. Например, максимальное измеряемое напряжение 10В, опорное напряжение 5В. Чтобы расширить диапазон измерения, нужно уменьшить измеряемый сигнал в 2 раза.

Формула для расчета делителя выглядит так:

Uвых = UвхR2/(R1 + R2)

Подставим наши значения в формулу:

5 = 10*R2/(R1+R2)

(R1+R2)=2*R2

R1=R2

т.е. можно взять любые два одинаковых резистора и подключить их по схеме

Следовательно, когда мы измеряем напряжение через делитель, нужно полученное значение АЦП умножить на коэффициент=Uвых/Uвх.

Полная формула вычисления измеряемого напряжения будет выглядеть так:
U=(опорное напряжение*значение АЦП*коэффициент делителя)/число разрядов АЦП

Пример: опорное 5В, измеренное значение АЦП = 512, коэффициент делителя =2, АЦП 10разрядный.

(5*512*2)/1024=5В — реальное измеренное значение напряжения.

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

 

 

19 FUSE биты (фьюзы) – они настраивают определенные параметры микроконтроллеров, это некий инструмент для их тонкой настройки .

Фьюзы включают или настраивают такие параметры как:
- частота генератора, внешний или внутренний генератор
- запрет на чтение прошивки микроконтроллера
- включение или выключение таймеров
- деление частоты кварцевого генератора
- защита EEPROOM от стирания
…и так далее.

У каждого микроконтроллера выставляются свои фьюзы, у разных МК разный список фьюзов, например в ATmega8 нет фьюза CKOUT, но он присутствует в ATtiny2313. В даташитах к микроконтроллерам все эти фьюзы расписаны.

 

 

1. Каждый из портов является 8-ми битным регистром ввода/вывода, способныйкак выводить, так и получать данные по 1 байту за один раз. Для этих целей на МКпредусмотрено по 8 ножек на порт. 2. Каждый порт имеет альтернативные функции. Такие как счетчики, компараторы,входы(АЦП), входы внешнего прерывания, UART и так далее. Вот это и есть, основные причины по которым мне кажется лучше изучить портыболее подробно в одном уроке. Давайте сначала рассмотрим порты по прямому назначению, а именно попробуемввести данные из вне и вывести наружу. Смотрим на рисунок ниже. Рисунок 1. Порт PBx. . У МК есть на борту три регистра которыеотвечают за работу порта ввода/вывода. Называются они так DDRx, PORTx и PINx.Как видно из рисунка, регистр DDRx управляет направлением порта на вход или навыход. Если установить разряд регистра в "1", то разряд этого порта будет работать на выход. Если сбросить в "0", то разряд будет работать на вход. Если мы захотим выводить данные, ну к примеру вывести в третий разряд порта В "1", то нам нужно в регистре DDRBприсвоить значение "1" в третьем разряде и в регистр PORTB тоже записать "1"в третий разряд. А при записи данных в МК значение регистра DDRx должно бытьравно "0". Отсюда: DDRx = 1 выводит данные, DDRx = 0 читает. Альтернативные обязанности портов Ну на мой взгляд один из интересных альтернатив - это минимум два разряда выполняющую функцию UART. UART - это COM-порт. Да да тот самый что мы видимсзади нашего системного блока. Только он не совсем COM. Видите ли что, у COMпорта компьютера физические уровни совсем не те что требуются для работы МК.+12 и -12 вольт просто убьют МК. А как же быть? Да все просто. Для этих целейдавно были придуманы микросхемы сопряжения уровней. Самая распространенная намой взгляд - это MAX232. Но мы отошли от сути дела. UART - это универсальный асинхронный приемо/передатчик. Те два разряда о которых я говорил, называются:TXD и RXD. TXD - нужен для передачи данных, а RXD для приема. Мы об этом поговорим чуть позже, а сейчас достаточно лишь того что я рассказал. Следующий альтернативой может быть внешние прерывания. Внешние прерыванияочень полезная штука. Что это такое? Ну к примеру у нас работает какой-то узелс таймером или еще с чем, не суть важно. И вот нам требуется узнать о каком-нибудь предельном изменении, которое узел генерит например единицей. То есть всегда висит ноль, а при наступлении события выставляет 1. Можно конечночитать постоянно порт, но при этом остальная программа будет простаивать, таккак мы постоянно ждем 1 от узла. Это не хорошо. Проще повесить событие на ножкус внешним прерыванием и заниматься своими делами, а когда узел выдаст нам 1, то МК остановит программу и побежит обрабатывать прерывание. После выполненияобработчика прерывания, МК вернется к основной программе и продолжит ее выполнять с того места где он остановился до обработки прерывания. Вот такая полезная штука внешние прерывания. Так же на борту МК есть прекрасная вещь компаратор. Компаратор этосравниватель. Он сравнивает величины напряжений и в зависимости от тогокакое из них выше другого, выставляет на выходе либо 1, либо 0. Также как альтернатива, есть АЦП. Правда не во всех МК. Ну про АЦП я рассказывать не буду, тут и так все понятно.