Суббота, 27.07.2024, 09:55 Приветствую Вас Гость

Автозапуск за 1500р. на ЛЮБОЙ сигнализации?! -> at13.ru

Главная | Регистрация | Вход | RSS

Каталог статей


Ликбез по микроконтроллерам AVR. Часть 1.
.

Что же представляет собой МИКРОКОНТРОЛЛЕР (для краткости МК)? Попробую разъяснить попроще, на примере 8-разрядных МК семейства AVR. Для начала простое определение, понятное для начинающих. МК - это устройство (интегральная микросхема), имеющее определённое количество выводов, которыми программист может управлять по своему усмотрению. Выводы эти разделены на группы. Каждая группа выводов представляет собой ПОРТ ВВОДА/ВЫВОДА, или просто порт. Порты обычно обозначаются латинскими буквами - A, B и так далее.
Именно с изучения портов и работы с ними целесообразно начать освоение МК.

Количество портов может быть различным. В простейших МК порт всего один. В моделях помощнее - два, три, четыре порта. Бывает и больше. Число выводов одного порта также может различаться. Полноценный порт в 8-битных МК насчитывает 8 выводов. Однако, если ног на корпусе не хватает, то выводов порта может быть и меньше, например 5. Нумерация выводов порта начинается с нуля. Обозначения выводов портов различны для различных семейств МК. Например, в PIC-микроконтроллерах: RA0 - вывод 0 порта А; RB7 - вывод 7 порта В. В AVR-микроконтроллерах: PA0 - вывод 0 порта А; PB7 - вывод 7 порта В.

Порты МК на примере ATmega16




Что МК должен будет делать с этими выводами при работе - это определяет программист при написании программы. Простейший случай: при подаче питания на МК установить на PA0 лог.0 и следить за лог. уровнем на выводе PB7. Если на PB7 лог.0 - установить на PA0 лог.1, а если на PB7 лог.1 - установить на PA0 лог.0. Получится аналог логического элемента НЕ (инвертора).

Назначение вывода МК опять же определяет программист при написании программы. Вывод может быть назначен цифровым входом или цифровым выходом, как и у обыкновенных цифровых микросхем. Некоторые выводы у некоторых МК могут быть аналоговыми входами. Некоторые выводы могут быть настроены для работы с так называемыми периферийными модулями МК. ПЕРИФЕРИЙНЫЕ МОДУЛИ – это различные дополнительные устройства, имеющиеся в составе МК и управляемые записанной в него программой. Например, вывод может быть сконфигурирован как вход цифрового счётчика, имеющегося в составе МК. Это по сути дела обычный цифровой двоичный счетчик, только настройка его осуществляется программой, считывание и запись данных также производятся программно. Или можем сделать вывод аналоговым входом встроенного аналого-цифрового преобразователя (АЦП), и тогда МК сможет измерять напряжение на нём. На рис.1 назначения выводов при использовании периферийных модулей указаны в скобках.

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

Для управления каждым портом в МК имеются специально предназначенные регистры. РЕГИСТР 8-разрядного МК – это по сути дела обыкновенный 8-разрядный регистр внутри МК, к которому программист может программно обращаться. Регистрам отведена специальная область памяти. Память эта не является энергонезависимой, данные теряются при исчезновении напряжения питания МК. Находящееся в регистре число – это и есть данные, или значение регистра. Регистров в МК довольно много, некоторые из них имеют специальное назначение. Желающие получше познакомится с регистрами могут обратиться к главе 8 отличной книги «Искусство схемотехники».



Каждый регистр имеет свой адрес в памяти МК. Адрес – это просто-напросто условное число, это порядковый номер регистра, как у солдата в строю. Адрес регистра не следует путать с содержащимися в нем данными - это совершенно разная информация. Регистр может иметь и некое условное имя. Имя это может быть дано регистру фирмой-производителем МК или самим программистом. Для удобства программирования фирма-производитель даёт регистрам условные имена в зависимости от их назначения. Имена эти, как правило, одинаковы для всего семейства МК. Уяснив их назначение один раз, программист может затем работать с любым МК из этого семейства. Условные имена имеют не только сами регистры, но и отдельные биты некоторых регистров. Сделано это опять же для удобства программистов.
Поясню на примере. Солдат имеет фамилию Пупкин, порядковый номер в строю 6, голова его за необычную форму носит прозвище «шишка». Регистр имеет условное имя ADCSRA, располагается в памяти по адресу $06 (это шестнадцатеричное число), бит 4 этого регистра за своё назначение носит прозвище ADIF. К солдату можно обратиться как по фамилии, так и по порядковому номеру. К регистру можно обратиться как по имени, так и по адресу. Имена придуманы для удобства, их легче запомнить, чем числа.

Регистры AVR делятся на 2 группы – регистры общего назначения (РОН) и регистры ввода/вывода (РВВ). Отличия и особенности работы с РОН и РВВ рассмотрим позже. Регистры AVR являются частью его внутреннего статического ОЗУ. Внутреннее ОЗУ в простых AVR может состоять только из РОН и РВВ. В моделях помощнее предусмотрены дополнительные 8-битные ячейки ОЗУ. Их количество зависит от конкретной модели МК. Например, у ATmega16 имеется 32 РОН, 64 РВВ и 1024 байта внутреннего ОЗУ.

При помощи регистров, записывая в них определённую информацию по своему разумению, программист и осуществляет управление работой МК. Делает он это при помощи программы. ПРОГРАММА – это заданная программистом последовательность команд, каждая из которых предписывает МК выполнить определённое действие. Программа для МК представляет собой просто-напросто последовательность чисел. Каждое из этих чисел представляет собой одну команду (инструкцию). Программа хранится в специальной области памяти МК – ПАМЯТИ ПРОГРАММ. Эта память энергонезависимая, программа сохраняется при отсутствии питающего напряжения. Каждая инструкция программы располагается в ячейке этой памяти по определённому адресу. Некоторые инструкции занимают по две ячейки. При нормальной работе МК команды выполняются непрерывно, одна за другой. Но вовсе не обязательно команды выполняются строго последовательно в порядке следования адресов, вовсе нет. Обычно программа содержит переходы, и за командой по адресу $0000 МК запросто может перейти к выполнению команды по адресу, например, $0092. Так произойдёт, если в ячейку памяти программ по адресу $0000 программистом будет записана команда безусловного перехода по адресу $0092.

Адрес инструкции не следует путать с адресом регистра. Ячейки памяти программ и регистры занимают физически разные места на кристалле МК, это совершенно разные области памяти.
Что программист может проделывать с регистром при помощи программы:
• записывать в него некое число (константу) по своему желанию,
• записывать в него данные из другого регистра,
• считывать данные из него в другой регистр,
• выполнять арифметические операции между данными в регистре и константой,
• выполнять логические операции между данными в регистре и константой,
• выполнять арифметические операции между данными в регистре и данными в другом регистре,
• выполнять логические операции между данными в регистре и данными в другом регистре,
• сдвигать данные в регистре вправо или влево,
• проверять значения отдельных битов в регистре,
• изменять значения отдельных битов в регистре.

Неплохие возможности, не так ли? В некоторых МК с некоторыми регистрами допускается проделывать не все из перечисленных выше операций, существуют определённые ограничения. Как именно всё это проделывается – разберём немного позже.

Обращаясь к различным регистрам МК при помощи команд программы, программист может считывать информацию из регистров, обрабатывать её имеющимися внутри МК средствами, а затем записывать в другие регистры. В действиях программиста с регистрами МК, если говорить грубо упрощённо, и заключается написание программы как таковой. Подобно тому, как офисная работа, грубо упрощённо, заключается в перекладывании документов и операциях с ними. А что уж эта программа будет делать – это решает вовсе не МК. Он думать не обучен, и умеет лишь выполнять приказы программиста. Поэтому создание программы и разделяется на разработку алгоритма и кодинг. Имея алгоритм, перевести его в последовательность приказов (команд) для МК вовсе не сложно. Это ремесло. А построение оптимального алгоритма – это искусство, творчество. Сравните труд клерка и руководителя, каменщика и архитектора, уловили разницу?

Следует обратить внимание на интересную особенность портов AVR. При переключении вывода порта между Z-состоянием (биты DDRxn = 0, PORTxn = 0) и состоянием лог.1 (биты DDRxN = 1, PORTxN = 1) возможны два варианта промежуточных состояний этого вывода. Первый вариант – через включение подтягивающего резистора (DDRxN = 0, PORTxN = 1). Второй вариант – через кратковременное появление на выводе лог.0 (DDRxN = 1, PORTxN = 0). Какой вариант окажется подходящим – решает программист при написании программы. При переключении вывода порта между состоянием с «вход с подтяжкой» (DDRxn = 0, PORTxn = 1) и состоянием лог.0 (DDRxN = 1, PORTxN = 0) также возможны два варианта. Первый – через Z-состояние (DDRxn = 0, PORTxn = 0), второй - через кратковременное появление на выводе лог.1 (DDRxN = 1, PORTxN = 1). И в этой ситуации выбор пути тоже остаётся за программистом.
Если программист решит отдать вывод под управление периферийного модуля МК – он может сделать это двумя способами. В одном случае программист должен заранее настроить вывод соответствующим образом. В другом случае настройка вывода производится микроконтроллером автоматически при включении программистом соответствующего периферийного модуля. Этот вопрос будет рассмотрен подробнее при изучении работы периферийных модулей.
Для более детального ознакомления с устройством и работой портов AVR прочитайте соответствующий раздел даташита на выбранный МК и главу 6 книги А.В. Евстифеева «Микроконтроллеры AVR семейства Mega. Руководство пользователя».

Итак, сделаем первые выводы:

1. Микроконтроллер AVR имеет один или несколько портов.
2. Порт представляет собой группу выводов, объединённых под общим названием.
3. Каждый вывод порта имеет индивидуальное обозначение.
4. Программист может управлять выводами портов по своему усмотрению, делает он это при помощи написанной им программы.
5. Программа хранится в специально предназначенной для этого области памяти МК – памяти программ. Эта память энергонезависимая.
6. Для управления микроконтроллером в целом, и в том числе портами, предназначены регистры. Регистры расположены в специально предназначенной для них области памяти МК.
7. Находящаяся в регистрах информация теряется при пропадании напряжения питания МК.
8. Программист может выполнять с регистрами различные операции при помощи инструкций написанной им программы.
9. Инструкции из памяти программ при нормальной работе МК выполняются непрерывно, одна за другой. Но вовсе не обязательно строго последовательно, бывают переходы.
10. Для управления портами в AVR предусмотрено по три регистра на каждый порт – DDRx, PORTx, PINx.
11. При помощи регистра DDRx программист задаёт направление работы выводов порта AVR – настраивает их на вход или на выход.
12. При помощи регистра PORTx программа выдаёт логические уровни (лог.0 или лог.1) на те выводы порта, которые настроены на выход. Если же вывод настроен на вход, битами регистра PORTx включаются-отключаются внутренние подтягивающие резисторы.
13. В регистре PINx находятся логические уровни, считанные с выводов порта. Считываются реальные уровни с ног МК, независимо от того, настроены они на вход или на выход.
14. Порты AVR имеют некоторые особенности, на которые следует обращать внимание при написании программы.
15. Порядок переключения выводов на периферийные модули определяется особенностями этих модулей.

© picmaniac
Категория: Информация по МК, FAQ | Добавил: Advanced (11.05.2012)
Просмотров: 5646 | Теги: AVR, микроконтроллер, МК | Рейтинг: 4.0/3
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Категории раздела
Источники питания и приборы
Охрана и контроль доступа
Измерительные устройства
Часы, таймеры, счетчики
Световые эффекты
Защита и контроль
Для начинающих
Разное
BASCOM AVR
Информация по МК, FAQ
Поиск
Вход на сайт
Наш опрос
На каком общественном транспорте вы чаще ездите?
Всего ответов: 171
Статистика

Онлайн всего: 14
Гостей: 14
Пользователей: 0
Друзья сайта