Микроконтроллеры семейства AVR. Что такое микроконтроллер, семейства и корпуса AVR микроконтроллеров Выбор микроконтроллеров avr

Общее количество существующих семейств микроконтроллеров оценивается приблизительно в 100 с лишним, причем ежегодно появляются все новые и новые. Каждое из этих семейств может включать десятки разных моделей. Причем львиная доля выпускаемых чипов приходится на специализирован­ные контроллеры: например, для управления USB-интерфейсом, или ЖК-дисплеями. Иногда довольно трудно классифицировать продукт: так, многие представители семейства ARM, которое широко применяется для построения мобильных устройств, с точки зрения развитой встроенной функционально­сти относятся к типичным контроллерам, но в то же время достаточно мощ­ное ядро позволяет отнести их и к классу микропроцессоров.

Из семейств универсальных 8-разрядных микроконтроллеров, так сказать, «на все случаи жизни», наиболее распространены три: контроллеры класси­ческой архитектуры х51 (первый контроллер семейства 8051 был выпущен фирмой Intel еще в середине 1980-х), контроллеры PIC фирмы Microchip (идеально подходят для проектирования несложных устройств, особенно предназначенных для тиражирования), и рассматриваемые нами Atmel AVR.

Заметки на полях

в 1995 г. два студента Норвежского университета науки и технологий в г. Трон­хейме, Альф Боген и Вегард Воллен, выдвинули идею 8-разрядного RISC-ядра, которую предложили руководству Atmel. Имена разработчиков вошли в название архитектуры AVR: Alf + Vegard + RISC. В Atmel идея настолько по­нравилась, что в 1996 г. был основан исследовательский центр в Тронхейме, и уже в конце того же года был начат выпуск первого опытного микрокон­троллера новой серии AVR под названием AT90S1200. Во второй половине 1997 г. корпорация Atmel приступила к серийному производству семейства AVR.

Почему AVR?

у AVR-контроллеров «с рождения» есть несколько особенностей, которые отличают это семейство от остальных МК, упрощают его изучение и исполь­зование. Одним из существенных преимуществ AVR стало использование конвейера. В результате для AVR не существует понятия машинного цикла: большинство команд, как мы говорили, выполняется за один такт (для срав­нения отметим, что пользующиеся большой популярностью МК семейства PIC выполняют команду за 4 такта).

Правда, при этом пришлось немного пожертвовать простотой системы ко­манд, есть некоторые сложности и в области операций с битами. Тем не ме­нее, это не приводит к заметным трудностям при изучении AVR-ассемблера: наоборот, программы получаются короче и больше напоминают программу на языке высокого уровня (отметим, что AVR проектировались специально в расчете на максимальное приближение к структуре языка С).

Другое огромное преимущество AVR-архитектуры - наличие 32 оператив­ных регистров, не во всем равноправных, но позволяющих в простейших случаях обходиться без обращения к оперативной памяти и, что еще важнее, без использования стека - главного источника ошибок у начинающих про­граммистов (мало того, в младщих моделях AVR стек даже недоступен для программиста). Для AVR не существует понятия «аккумулятора», ключевого для ряда других семейств. Это еще больше приближает структуру ассемб­лерных программ для AVR к программам на языке высокого уровня, где опе­раторы работают не с ячейками памяти и регистрами, а с абстрактными пе­ременными и константами.

Но это, конечно, не значит, что AVR - однозначно лучшее в мире семейство МК. У него есть и ряд недостатков (например, несовершенная система защи­ты энергонезависимой памяти данных- EEPROM, некоторые вопросы с помехоустойчивостью, излишние сложности в системе команд и структуре программ и т. п.). Но в принципе любые универсальные современные МК позволяют делать одно и то же, и вопрос выбора платформы - вопрос в зна­чительной степени предпочтений и личного опыта разработчика.

Classic, Mega и Tiny

Линейка универсальных контроллеров AVR общего назначения делится на семейства - Classic, Mega и Tiny (есть и новейшее семейство Xmega, но оно представляет весьма «навороченные» приборы не для наших задач). МК се­мейства Classic (они именовались, как АТ908<марка контроллера>) ныне уже не производятся, однако все еще распространены, так как они задержа­лись на складах торгующих фирм, и, к тому же, для них наработано значи­тельное количество программ. Чтобы пользователям не пришлось переписы­вать все ПО, фирма Atmel позаботилась о преемственности - большинство МК семейства Classic имеет функциональные аналоги в семействе Mega, на­пример, AT90S8515- ATmega8515, AT90S8535- ATmega8535 и т.п. (только AT90S2313 имеет аналог в семействе Tiny - ATtiny2313).

Полная совместимость обеспечивается специальным установочным битом (из набора т. н. Fuse-битов), при программировании которого Mega-процессор начинает функционировать, как Classic (подробнее об этом рассказано в гла­ве 19). Для вновь разрабатываемых устройств обычно нет никакого смысла в использовании их в режиме совместимости, однако такой прием в ряде слу­чаев может оказаться полезным для начинающих, так как МК Classic устрое­ны проще и не заставляют пользователя отвлекаться на некоторые ненужные подробности, не имеющие отношения к делу. Поэтому в книге далее будут приводиться иногда примеры и для «классической» серии.

Семейство Tiny (что в буквальном переводе означает «крохотный») предна; значено для наиболее простых устройств. Часть МК этого семейства не имеет возможности программирования по последовательному интерфейсу, и пото­му мы не буд^м их рассматривать в этой книге, за исключением ATtiny2313 (это не значит, что остальных Tiny следует избегать - среди них есть очень удобные и функциональные микросхемы, нередко вообще не имеющие ана­логов). У этого МК отсутствует бит совместимости с «классическим» анало­гом AT90S2313, одним из самых простых и удобных контроллеров Atmel, но при внимательном рассмотрении оказывается, что они и без такого бита со­вместимы «снизу вверх»: программы для «классического» 2313 полностью подходят и для Tiny2313 (см. следующую главу).

Структура МК AVR

Общая структура внутреннего устройства МК AVR приведена на рис. 18.9. На этой схеме показаны все основные компоненты AVR (за исключением некоторых специализированных); в отдельных моделях некоторые компо­ненты могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8-разрядное процессорное ядро (GPU, General Processing Unit). Кратко рассмотрим наиболее важные компоненты, боль­шинство из которых мы будем рассматривать в дальнейшем подробнее.

Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash-память программ, ОЗУ (SRAM) для временного хранения данных, и энергонезависимая память (EEPROM) для долговременного хранения кон­стант и данных. Рассмотрим их по отдельности.

Память программ

Встроенная flash-память программ в AVR-контроллерах имеет объем от 1 кбайта у ATtinyl 1 до 256 кбайт у ATmega2560. Первое число в наименова­нии модели содержит величину этой памяти в килобайтах, из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 кбайт. Так, ATtiny2313 имеет 2 кбайта памяти, а ATmega8535 - 8 кбайт.

С точки зрения программиста память программ можно считать построенной из отдельных ячеек- слов по два байта каждое. Устройство памяти про­грамм (и только этой памяти!) по двухбайтовым словам- очень важный момент, который нужно твердо усвоить. Такая организация обусловлена тем.

что любая команда в AVR имеет длину ровно 2 байта. Исключение состав­ляют команды jmp, call и некоторые другие (например, ids), которые опери­руют с адресами 16-разрядной и более длины, длина этих команд составляет 4 байта, и они используются лишь в моделях с памятью программ более 8 кбайт, поэтому в этой книге вы их не встретите. Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на 2 байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная просто число используемых команд.

По умолчанию все контроллеры AVR всегда начинают выполнение програм­мы с адреса $0000^. Если в программе не используются прерывания, то с это­го адреса может начинаться прикладная программа, как мы увидим далее. В противном случае по этому адресу располагается т. н. таблица векторов прерываний, подробнее о которой мы будем говорить в главе 19.

Память данных (ОЗУ, 3RAM)

в отличие от памяти программ, адресное пространство памяти данных адре­суется побайтно (а не пословно). Адресация полностью линейная, без какого-то деления на страницы, сегменты или банки, как это принято в некоторых других системах. Исключая некоторые младшие модели Tiny, объем встро­енной SRAM колеблется от 128 байт (например, у ATtiny2313) до 4-8 кбайт у старших моделей Mega.

Адресное пространство статической памяти данных (SRAM) условно делится на несколько областей, показанных на рис. 18.10. К собственно встроенной SRAM относится лишь затемненная часть, до нее по порядку адресов распо­ложено адресное пространство регистров, где первые 32 байта занимает мас­сив регистров общего назначения (РОН), еще 64 - регистров ввода-вывода (РВВ).

Для некоторых моделей Mega (ATmega8515, ATmegal62, ATmegal28, AT-mega2560 и др.) предусмотрена возможность подключения внешней памяти объемом до 64 кбайт. Отметим, что адресные пространства РОН и РВВ не отнимают пространство у ОЗУ данньпс: так, если в конкретной модели МК имеется 512 байт SRAM, а пространство регистров занимает первые 96 байт (до адреса $60), то адреса SRAM займут адресное пространство от $0060 до $025F (то есть от 96 до 607 ячейки включительно). Конец встроенной памяти данных обозначается константой ramend. Следует учесть, что последние ад­реса SRAM, как минимум, на четыре-шесть ячеек от конца (в зависимости от количества вложенных вызовов процедур, для надежности лучше принять это число равным десяти или даже более) занимать данными не следует, так как они при использовании подпрограмм и прерываний заняты под стек.

Рис. 18.10. Адресное пространство статической памяти данных (SRAM) микроконтроллеров AVR

Операции чтения/записи в память одинаково работают с любыми адресами из доступного пространства, и потому при работе с SRAM нужно быть вни­мательным: вместо записи в память вы легко можете «попасть» в какой-нибудь регистр. Для обращения к РОН, как к ячейкам памяти, можно в каче­стве адреса подставлять номер регистра, а вот при обращении к РВВ таким же способом к номеру последнего нужно прибавлять $20. Следует также помнить, что по умолчанию при включении питания все РВВ устанавливают­ся в нулевое состояние во всех битах (единичные исключения все же имеют­ся, поэтому в критичных случаях надо смотреть документацию), а вот РОН и ячейки SRAM могут принимать произвольные значения.

Энергонезависимая память данных (EEPROM)

Все модели МК AVR (кроме снятого с производства ATtinyl 1) имеют встро­енную EEPROM для хранения констант и данных при отключении питания. В разных моделях объем ее варьируется от 64 байт (ATtinylх) до 4 кбайт (старшие модели Mega). Число циклрв перепрограммирования EEPROM мо­жет достигать 100 тыс.

Напомним, что EEPROM отличается от flash-памяти возможностью выбо­рочного программирования побайтно (в принципе, даже побитно, но эта воз­можность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН - в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее, и к тому же с не точно определенной скоростью: цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколь^со тысяч команд, потому программирование процедуры записи требует аккуратности: например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).

Главная же сложность при использовании EEPROM - то, что при недоста­точно быстром снижении напряжения питания в момент выключения содер­жимое ее может быть испорчено. Обусловлено это тем, что при снижении напряжения питания ниже некоторого порога (ниже порога стабильной рабо­ты, но недостаточного для полного выключения) и вследствие его дребезга МК начинает выполнять произвольные команды, в том числе может выпол­нить и процедуру записи в EEPROM, если она имеется в программе. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросе­кунды, то ясно, что никакой реальный источник питания не может обеспе­чить снижение напряжения до нуля за нужное время. По опыту автора при питании от обычного стабилизатора типа LM7805 с рекомендованными зна­чениями емкости конденсаторов на входе и на выходе содержимое EEPROM будет испорчено примерно в половине случаев.

Этой проблемы не должно существовать, если запись констант в EEPROM производится при программировании МК, а процедура записи в программе отсутствует. Во всех же остальных случаях (а их, очевидно, абсолютное большинство - EEPROM чаще всего используется для хранения пользова­тельских установок и текущей конфигурации при выключении питания) при­ходится принимать специальные меры. Встроенный детектор падения на­пряжения (Brown-Out Detection, BOD), имеющийся практически во всех моделях Tiny и Mega, обычно с этим не справляется. Наиболее кардинальной из таких мер является установка внешнего монитора питания, удерживающе­го МК при снижении напряжения питания ниже пороговой величины в со­стоянии сброса (см. главу 21).

При подключении резервных источников электроснабжения часто возникает вопрос о том, что такое АВР или автоматический ввод резерва. При помощи АВР осуществляется поддержание постоянного электроснабжения даже при кратковременных отключениях основного источника энергии - вот для чего он нужен. Чтобы правильно выбрать систему автоматического ввода резерва, необходимо понять, как работает АВР.

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

Давая определение АВР, можно сказать, что это такая система, которая при помощи контакторов или пускателей осуществляет перевод нагрузки с одного источника электроснабжения на другой. Пускатели представляют собой исполнительный механизм, при помощи которого непосредственно производится перевод нагрузки с основного источника питания на аварийный.

Другим основополагающим элементом в схемах АВР является реле контроля фаз, которое фиксирует параметры электрического тока в сети.

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

Схемы АВР, как правило, реализуют на щитах, для крупных объектов иногда используют шкафы. Существуют готовые решения, но для выполнения конкретных задач в заданных условиях и обеспечения наиболее полного функционала часто производят сборку АВР на основе комплектующих, удовлетворяющих конкретным техническим условиям. Перед подключением в обязательном порядке проводят испытание устройств АВР с подключением основной цепи через ЛАТР.

Стоит учесть тот факт, что одновременное питание от двух разных источников обладает следующими недостатками:

  • Высокие потери электрической энергии в питающем трансформаторе.
  • Токи «КЗ» при данном подключении на много больше, нежели в случаи раздельного схемы питания.
  • Усложняется защита оборудования.
  • Возникают сложности с выбором определённого режима работы.
  • Отсутствует возможность осуществления параллельного питания. Связано это с имеющейся релейной защитой и свойств оборудования.

Именно по этим причинам и возникла такая необходимость, как раздельное питание и мгновенное восстановление электричества для потребителей. С данной задачей превосходно справляется АВР. С помощью автоматического ввода резерва подключение питания происходит мгновенно, за 0,3 - 0,8 секунды.

Где применяются?

Системы автоматического ввода резерва устанавливаются на бензиновых или дизельных генераторах. Работают они в однофазной либо трёхфазной сетях переменного тока. Такие генераторы с автоматическим запуском являются незаменимыми устройствами вспомогательного питания.

Классификация

Аппараты АВР подразделяются на следующие типы:

  • Односторонней работы. В такой схеме имеется одна рабочая и одна резервная секция питающей электрической цепи.
  • Двухсторонней работы. Каждая питающая линия в таких устройствах может быть рабочей и резервной.

Какие требования предъявляются к устройствам АВР?

  1. Данные аппараты обязаны включаться за кротчайший интервал времени после того момента, как отключится основное питание потребителей.
  2. Устройство АВР должно срабатывать постоянно, не зависимо от того, какова была причина прекращения подачи электричества.
  3. Срабатывание обязано происходить однократно.

Как работает АВР

Для чего ещё нужен АВР? Благодаря данному аппарату осуществляется контроль минимально и максимально допустимого входного напряжения. Происходит и проверка наличия чередования фаз.

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

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

С помощью АВР вы сможете не допустить одновременного включения сразу двух линий (основной и резервной). В схемах, в которых применено секционирование, устройство автоматического ввода резерва заблокирует включение секционного «АВ». В случае надобности, АВР укомплектовываются специальной механической системой блокировки.

Данные аппараты могут устанавливаться в отдельных шкафах. В зависимости от мощности электропотребления, они могут быть: малогабаритными, полногабаритными, двух и трёх секционными. Также, АВР можно размещать в распределительных и вводных шкафах.

Инженерный центр "ПрофЭнергия" имеет все необходимые инструменты для качественного проведения испытания устройств АВР, слаженный коллектив профессионалов и лицензии, которые дают право осуществлять все необходимые испытания и замеры. Оставив выбор на электролаборатории "ПрофЭнергия" вы выбираете надежную и качествунную работу своего оборудования!

Итак, камрад, прежде чем ты начнешь работать с контроллером, то неплохо бы тебе узнать что у него внутри.
Поэтому дам тебе краткий ликбез по архитектуре контроллера AVR .

Основой любого микроконтроллера является вычислительное ядро. Во всех моделях AVR оно практически одинаковое и это большой плюс. Именно единство архитектуры обеспечивает легкую переносимость кода.

Итак, что же у нас в основе микроконтроллера, взгляни на диаграмму:

Ядро состоит, в первую очередь, из памяти программ (Flash Programm Memory) и Арифметико-логического устройства (ALU), блока управления (на диаграмме не показан) и программного счетчик (Program Counter). Также есть тактовый генератор, задающий импульсы относительно которых работают блоки микроконтроллера. Тактовый генератор можно сравнить с маятником и собачкой в будильнике: маятник туда сюда, собачка тикает по одному зубчику — шестеренки крутятся. Встала собачка — встал весь будильник.

При старте микроконтроллера значение программного счетчика равно 0000 — это адрес первой команды в нашей flash ROM. Микроконтроллер хватает оттуда два байта (код команды и ее аргументы) и отдает на выполнение в декодер команд (Instruction Decoder).

А дальнейшая судьба зависит от команды. Если это просто команда работы с какими-либо действиями, то они будут выполнены, а на следующем такте значение программного счетчика будет увеличено и из следующей пары ячеек памяти будут взяты еще два байта команды и также отправлены на выполнение.

Все интересней становится когда встречается команда перехода. В этом случае в Программный счетчик загружается адрес указанный в команде (абсолютный переход) или его значение увеличивается не на 1, а на столько сколько нужно и на следующем такте микроконтроллер возьмет команду уже с нового адреса.

Декодер команд загребает команду и скармливает ее логике блока управления, который уже пинает все остальные блоки, заставляя их делать нужные действия в нужном порядке.

Вся математика и обработка делается посредством ALU. Это, своего рода, калькулятор. Он может складывать, вычитать, сравнивать, сдвигать разными способами, иногда делить и умножать (это считается круто, встречается редко).

В качестве промежуточных операндов используются 32 ячейки — Оперативные регистры общего назначения РОН. Доступ к этим ячейкам самый быстрый, а число операций с их содержимым наиболее богатое. В ассемблере регистры эти называются просто R0,R1,R2 … R31. Причем делятся они на три группы:

Младшие R0..R15
Обычные регистры общего назначения, но какие то ущербные. С ними не работают многие команды, например, такие как загрузка непосредственного числа. Т.е. нельзя, например, взять и присвоить регистру число. Зато можно скопировать число из любого другого регистра.

Старшие R16..R31
Полноценные регистры, работающие со всеми командами без исключения.

Индексные R26…R31
Шесть последних регистров из старшей группы особенные. В принципе, их можно юзать и как обычные регистры общего назначения. Но, кроме этого, они могут образовывать регистровые пары X(R26:R27), Y(R28,R29), Z(R30:R31) которые используются как указатели при работе с памятью.

ОЗУ
Кроме 32 регистров в микроконтроллере есть оперативная память. Правда не везде — в младших семействах AVR Tiny12 и Tiny11 оперативной памяти нет, так что приходиться вертеться в 32 ячейках.

Оперативная память это несколько сотен ячеек памяти. От 64 байт до 4килобайт, в зависимости от модели. В этих ячейках могут храниться любые данные, а доступ к ним осуществляется через команды Load и Store.

То есть нельзя взять, например, и прибавить к ячейке в памяти, скажем, единицу. Нам сначала сделать операцию Load из ОЗУ в РОН, потом в регистре прибавить нашу единицу и операцией Store сохранить ее обратно в память. Только так.

EEPROM
Долговременная память. Память которая не пропадает после выключения питания. Если Flash может содержать только код и константы, а писать в нее при выполнении ничего нельзя (Это память Read Only), то в ЕЕПРОМ можно сколько угодно писать и читать. Но в качестве оперативки ее особо не поюзаешь. Дело в том, что цикл записи в EEPROM длится очень долго — миллисекунды. Чтение тоже не ахти какое быстрое. Да и число циклов перезаписи всего 100 000, что не очень много в масштабах работы оперативной памяти. ЕЕПРОМ используется для сохранения всяких настроек, предустановок, собранных данных и прочего барахла, что может потребоваться после включения питания и в основном на чтение. Эта память есть не во всех моделях AVR, но в подавляющем их большинстве.

Периферия
Периферия это внутренний фарш микроконтроллера. То что делает его таким универсальным. ALU, RAM, FLASH и Блок управления это как в компе Мать, Проц, Память, Винт — то без чего комп даже не запустится толком. То периферия это уже как сетевуха, видяха, звуковая карта и прочие прибамбасы. Они могут быть разными, разной степени крутости и навороченности, а также комбинироваться в разном порядке.

Именно по наличию на кристалле той или иной периферии происходит выбор микроконтроллера под задачу.

Периферии всякой придумано великое множество, всего я наверное даже не опишу. Но дам основной набор присутствующий почти во всех AVR, а также в других современных контроллерах.

  • Порты ввода вывода — то без чего невозможно взаимодействие контроллера с внешним миром. Именно порты обеспечивают то самое «ножкодрыгательство» управляющее другими элементами схемы. Захотели получить на выводе единичку, дали приказ соответствующему порту — получите, распишитесь. Захотели узнать какой там сигнал на входе? Спросили у соответствующего порта — получили. Почти все выводы микроконтроллера могут работать в режиме портов ввода-вывода.
  • UART/USART приемопередатчик — последовательный порт. Работает по тому же асинхронному протоколу что и древние диалапные модемы. Старый как мир, надежный и простой как кувалда. Подходит для связи с компьютером и другими контроллерами.
  • Таймеры/счетчики — задача таймеров отсчитывать тики. Сказал ему отсчитать 100 тактов процессора — он приступит и как досчитает подаст сигнал. Им же можно подсчитывать длительность входных сигналов, подсчитывать число входных импульсов. Да много чего умеет таймер, особенно в AVR. Подробное описание функций таймера занимает добрых три десятка страниц в даташите. При том, что таймеров самих существует несколько видов и фарш у них разный.
  • АЦП — аналоговый вход. Есть не у всех микроконтроллеров, но вещь полезная. Позволяет взять и замерить аналоговый сигнал. АЦП это своеобразный вольтметр.
  • I2C(TWI) интерфейс — последовательная шина IIC. Через нее осуществляется связь с другими устройствами. На IIC можно организовать своеобразную локальную сеть из микроконтроллеров в пределах одного устройства.
  • SPI — еще один последовательный протокол, похожа на IIC, но не позволяет организовывать сети. Работает только в режиме Мастер-Ведомый. Зато ОЧЕНЬ быстрая.
  • Аналоговый Компаратор — еще один аналоговый интерфейс. Но, в отличии от АЦП, он не замеряет, а сравнивает два аналоговых сигнала, выдавая результат А>B или A
  • JTAG/DebugWire — средство отладки, позволяет заглянуть в мозги контроллера с помощью специального адаптера, например такого, какой встроен в мою демоплату . Иной раз без него как без рук.
  • PWM — ШИМ генератор. Вообще это не отдельный блок, а дополнительная функция таймера, но тоже полезная. С помощью ШИМ генератора легко задать аналоговый сигнал. Например, менять яркость свечения светодиода или скорость вращения двигателя. Да мало ли куда его применить можно. Число каналов ШИМ разное от контроллера к контроллеру.

Еще бывают встроенные USB, Ethernet интерфейсы, часы реального времени, контроллеры ЖКИ дисплеев. Да чего там только нет, моделей микроконтроллеров столько, что задолбаешься только перечислять.

Взаимодействие ядра с периферией
Ядро одно на всех, периферия разная. Общение между ними происходит через память. Т.е. у периферии есть свои ячейки памяти — регистры периферии. У каждого периферийного устройства их не по одной штуки. В этих регистрах находятся биты конфигурации. В зависимости от того как эти биты выставлены в таком режиме и работает периферийное устройство. В эти же регистры нужно записывать данные которые мы хотим выдать, например, по последовательному порту, или считывать данные которые обработал АЦП. Для работы с периферией есть специальные команды IN и OUT для чтения из периферии в регистр РОН и записи из регистра РОН в периферию соответственно.

Поскольку ядро одинаковое, а периферия разная, то при переносе кода на другую модель микроконтроллера надо только подправить эти обращения так как название периферийных регистров от модели к модели может чуток отличаться. Например, если в контроллере один приемопередатчик UART то регистр прием данных зовется UDR, а если два, то у нас есть уже UDR0 и UDR1. Но, в целом, все прозрачно и логично. И, как правило, портирование кода с одного МК на другой, даже если он написан на ассемблере, не составляет большого труда. Особенно если он правильно написан.

Как узнать что есть в конкретном микроконтроллере?
Для этого на каждый МК есть даташит — техническая документация. И вот там, прям на первой странице, написано что почем и как. Вот тебе пример, даташит на Мегу16 с моим закадровым переводом:) Жирным шрифтом помечены опции которые я гляжу в первую очередь, как наиболее интересные для меня, остальное, как правило, присутствует по дефолту.

Features (фичи!)
High-performance, Low-power AVR® 8-bit Microcontroller
(понтовая экономичная архитектура AVR)

Advanced RISC Architecture
(просто офигенная вещь для рисковых чуваков!)

– 131 Powerful Instructions – Most Single-clock Cycle Execution
(131 крутая и быстрая команда!)

– 32 x 8 General Purpose Working Registers
(32 восьми разрядных регистра — те самые R0…R31)

– Fully Static Operation
(Полностью статические операции, т.е. тактовая частота может быть хоть 1 импульс в год)

– Up to 16 MIPS Throughput at 16 MHz
(скорость выполнения до 16миллионов операций в секунду!)

– On-chip 2-cycle Multiplier
(а числа умеем множить за два такта! Это правда круто, народ!)

High Endurance Non-volatile Memory segments
– 16K Bytes of In-System Self-programmable Flash program memory
(памяти хватит набыдлокодить на 16кб кода)

– 512 Bytes EEPROM 8-bit
(и нажрать на века 512 байт мусора в ЕЕПРОМ)

– 1K Byte Internal SRAM
(оперативки 1кб, кому там 2Гигабайт не хватает? Программировать не умеете! =) Тут и 64 байтов за глаза хватает. Помните Билла Гейтса и его «640кб хватит всем!» он знал о чем говорил:)

– Write/Erase Cycles: 10,000 Flash/100,000 EEPROM Microcontroller
(перешивать флеш можно 10тыщь раз, еепром 100тыщь раз. Так что можешь не бояться экспериментировать)

– Data retention: 20 years at 85°C/100 years at 25°C(1)
(Если законсервируешь свой будильник на AVR, то твоих правнуков он еще и через 100 лет порадует)

– Optional Boot Code Section with Independent Lock Bits
In-System Programming by On-chip Boot Program
True Read-While-Write Operation
(поддержка бутлоадеров. Удобная вещь, позволяет прошиваться без программаторов)

– Programming Lock for Software Security In-System
(если жадный и умный, то можешь закрыть от посторонних прошивку и фиг кто выкрадет твои секреты)

JTAG (IEEE std. 1149.1 Compliant) Interface
– Boundary-scan Capabilities According to the JTAG Standard Programmable
– Extensive On-chip Debug Support
– Programming of Flash, EEPROM, Fuses, and Lock Bits through the JTAG Interface Flash
(Отладочный интерфейс JTAG и его фичи)

Peripheral Features
(А вот, собственно и периферия пошла)

– Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
(два таймера 8ми разрядных, с кучей всяких режимов разных.

– One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode ATmega16
(один 16ти разрядный таймер счетчик, с кучей всяких примочек и фишек)

– Real Time Counter with Separate Oscillator
(таймер может тикать от отдельного генератора, удобно если хочешь сделать часы)

– Four PWM Channels ATmega16L
(Четыре ШИМ канала — на тех же таймерах)

– 8-channel, 10-bit ADC
(восьмиканальный 10ти разрядный АЦП. Фичи его ниже)

8 Single-ended Channels
(можно замерять по очереди сразу 8 разных напряжений)

7 Differential Channels in TQFP Package Only
(7 дифференциальных каналов. Правда только в корпусе TQFP т.к. ног у него больше)

2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
(два дифференциальных канала с программируемым усилением)

– Byte-oriented Two-wire Serial Interface
(Поддержка IIC с аппаратным кодированием байтов)

– Programmable Serial USART
(Последовательный интерфейс. Удобен для связи с компом)

– Master/Slave SPI Serial Interface
(SPI интерфейс, пригодится)

– Programmable Watchdog Timer with Separate On-chip Oscillator
(Спец таймер защиты от зависаний)

– On-chip Analog Comparator
(Тот самый компаратор)

Special Microcontroller Features
(полезные свистоперделки)

– Power-on Reset and Programmable Brown-out Detection
(защита от косяков в работе при пониженном напряжении ака севшие батарейки)

– Internal Calibrated RC Oscillator
(А еще можно сэкономить 20рублей на покупке внешнего кварца. Он нафиг не нужен! :) И это круто!)

– External and Internal Interrupt Sources
(Есть внешние прерывания. Очень удобная вещь)

– Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby
and Extended Standby
(Дофига режимов энергосбережения)

I/O and Packages
– 32 Programmable I/O Lines
– 40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF

(число полезных ножек, тем самых вводов выводов)

Operating Voltages designs.
– 2.7 — 5.5V for ATmega16L
– 4.5 — 5.5V for ATmega16

(Питающие напряжения. Помните я говорил про низковольтные серии — вот они, во всей красе)

Speed Grades
– 0 — 8 MHz for ATmega16L
– 0 — 16 MHz for ATmega16

(А это максимальные частоты для разных серий. Низковольтные лажают. Впрочем, они подвержены разгону)

Power Consumption @ 1 MHz, 3V, and 25°C for ATmega16L
– Active: 1.1 mA
– Idle Mode: 0.35 mA

Попробуем разобраться что же представляет из себя AVR микроконтроллер, что это такое и из чего состоит. Узнаем какие есть семейства микроконтроллеров от фирмы ATMEL и в каких корпусах выпускаются микро-чипы от данного производителя. Сделаем выбор корпуса микросхемы, наиболее пригодного для знакомства с AVR микроконтроллерами.

Контроллеры и микроконтроллеры

Микроконтроллер - это электронное устройство, микросхема которая представляет собою маленький компьютер со своей памятью и вычислительным ядром(микропроцессором), а также с набором дополнительных интерфейсов для подключения самых разных устройств для ввода и вывода различной информации, управления устройствами и измерения различных параметров. Микропроцессор, оперативная память, флешь-память, порты ввода/вывода, таймеры, интерфейсы связи - все это заключено в одном кристалле, одной микросхеме которая и называется микроконтроллером.

Чем отличается микроконтроллер от контроллера? - под контроллером подразумевается определенная схема или плата с различными компонентами для контроля и выполнения поставленных задач, а микроконтроллер - это схема универсального контроллера, которая размещена на маленьком кристаллике микросхемы и которая способна работать по четко заданной программе.

Работа микроконтроллера и его периферии осуществляется по программе, которая записывается во внутреннюю память и способна храниться в такой памяти достаточно длительный срок(несколько десятков лет).

Что такое AVR микроконтроллер

AVR микроконтроллеры , производимые фирмой ATMEL - это семейство 8-битных и более новых 32-битных микроконтроллеров с архитектурой RISC, которые совмещают в себе вычислительное ядро, Flash-память и разнообразную периферию (аналоговые и цифровые входы и выходы, интерфейсы и т.п.) на одном кристале. Это маленькие и очень универсальные по функционалу микросхемки, которые могут выполнять контроль и управлять различными устройствами, взаимодействовать между собою потребляя при этом очень мало энергии.

Данное RISC-ядро было разработано двумя студентами из города Тронхейма (третий по населению город Норвегии, расположен в устье реки Нидельвы) - Альф Боген (Alf-Egil Bogen) и Вегард Воллен (Vegard Wollen). В 1995м году данные персоны сделали предложение корпорации ATMEL на выпуск новых 8-битных микроконтроллеров, с тех пор AVR микроконтроллеры заполучили большую популярность и широкое применение.

Что обозначает аббревиатура AVR? - здесь наиболее вероятны два варианта:

  1. A dvanced V irtual R ISC;
  2. A lf Egil Bogen V egard Wollan R ISC, в честь создателей - Альфа и Вегарда.

Весь класс микроконтроллеров поделен на семейства:

  • tinyAVR (например:ATtiny13, ATtiny88б ATtiny167) - начальный класс, миниатюрные чипы, мало памяти и портов, базовая периферия;
  • megaAVR (например: ATmega8, ATmega48, ATmega2561) - средний класс, больше памяти и портов, более разнообразная периферия;
  • XMEGA AVR (например: ATxmega256A3U, ATxmega256A3B) - старший класс, много ресурсов, хорошая производительность, поддержка USB, улучшенная безопасность;
  • 32-bit AVR UC3 (например: AT32UC3L016, ATUC256L4U) - новые высокопроизводительные 32-битные микроконтроллеры поддерживающие много технологий и интерфейсов среди которых USB, Ethernet MAC, SDRAM, NAND Flash и другие.

Микроконтроллеры AVR имеют обширную систему команд, которая насчитывает от 90 до 133 команд в зависимости от модели микроконтроллера. Для сравнения: PIC-микроконтроллеры содержат от 35 до 83 команд, в зависимости от семейства.

Большинство команд хорошо оптимизированы и выполняется за один такт, что позволяет получить хорошую производительность при небольших затратах ресурсов и энергии.

Корпуса для AVR микросхем

Микроконтроллеры AVR выпускаются в корпусах DIP, SOIC, TQFP, PLCC, MLF, CBGA и других. Примеры некоторых корпусов приведены на рисунке ниже.

Рис. 1. Корпуса микросхем для микроконтроллеров AVR - DIP, SOIC, TQFP, PLCC.

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

Для начинающих программистов AVR наиболее удобны микросхемы в корпусе DIP, данные микросхемы удобно паять и они очень просто монтируются на разнообразных монтажных панелях, к примеру на Breadboard и других.

Все для изучения и практического программирования микроконтроллеров AVR: литература, программное обеспечение, схемы, конструкции

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “ “

Данный раздел сайта посвящен микроконтроллерам . В силу личных пристрастий (и не только), основной упор будет делаться на радиолюбительские устройства с микроконтроллерами AVR семейства Tiny и Mega фирмы ATMEL . Хотя микроконтроллеры фирмы ATMEL и не самые массовые, но у них есть несколько существенных преимуществ, которые отличают их от других микроконтроллеров. Кроме того, семейство микроконтроллеров AVR, в силу простоты и универсальности устройств, преемственности структуры для различных типов контроллеров, простоты схемотехники хорошо подходят для начинающих радиолюбителей. В дальнейшем, на сайте, планируется опубликовать серию статей, ориентированных, в основном, на начинающих радиолюбителей, с подробным изучением структуры и схемотехнических особенностей микроконтроллеров AVR семейств Tiny и Mega, использованию их основных возможностей, программированию на ассемблере.