Логотип

AVR микроконтроллеры. Основы программирования

материалы в категории

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

В данной статье постараемся в общих чертах разобрать строение AVR микроконтроллера, главные характеристики, что "у него внутри", что нужно для начала работы с AVR микроконтроллерами и т.д.
 
Что такое Tiny, Mega?
 
Компания Atmel выпускает обширную линейку восьмибитных микроконтроллеров на базе AVR ядра, разбитые на несколько подсемейств, различающиеся по техническим характеристикам, области применения, цене :
 
  • ATtiny – семейство AVR микроконтроллеров оптимизированных для приложений, требующих относительно большой производительности (до 1.0 MIPS и способны работать на частотах до 20.0 МГц), энергоэффективности (ATtiny единственное семейство способное работать от 0,7В напряжения питания!) и компактности (есть микроконтроллеры в SOT23-6 корпусе – всего 6 пин, и при этом каждый пин обладает несколькими функциями, к примеру: порт ввода/вывода, вход АЦП, вывод ШИМ и т.д.). Отсюда вырисовывается и область их применения : устройства критичные к цене, энергопотреблению, габаритам и т.д.
  • ATmega – семейство AVR микроконтроллеров предназначенных для использования в самых разнообразных областях, благодаря очень большому набору периферийных устройств, большому объему памяти программ, портов ввода/вывода и пр. Одним словом – есть где развернутся.
  • ATxmega – новое семейство AVR микроконтроллеров с еще большим набором периферийных устройств чем у ATmega (добавилось устройство прямого доступа к памяти, ЦАП, CRC-модуль, полноценный USB интерфейс, более быстрый АЦП и др.), с рабочими частотами до 32.0МГц.
Стоит отметить главную особенность всех вышеперечисленных устройств: все они имеют единую архитектуру, и это позволяет с легкостью переносить код с одного микроконтроллера на другой.
Выпускаются микроконтроллеры как в DIP, так и SMD упаковках (каждая со своими плюсами и минусами).
 
Самые популярными упаковочными корпусами являются :
  • DIP (Dual Inline Package) — корпус с двумя рядами контактов
  • QFP (Quad Flat Package) — плоский корпус с четырьмя рядами контактов
  • SOIC (Small-Outline Integrated Circuit) – малогабаритные (малая площадь) интегральные схемы
Что касается радиолюбительской практике, то, безусловно, наибольший интерес корпус DIPпредставляют микроконтроллеры в DIP корпусе, так как с ними проще всего работать- они имеют достаточно большой шаг между выводами и кроме этого под них можно использовать сокеты (это такой специальный разъем куда можно устанавливать микросхемы без пайки).
Вообще сокета- это чрезвычайно удобное изобретение- и выводы всегда целые и можно неоднократно снимать- вставлять микросхему, да и макеты будущих устройств изготавливать гораздо проще..
 

Питание и тактирование AVR микроконтроллеров

AVR микроконтроллеры построены по технологии КМОП (CMOS), что обеспечивает очень малое энергопотребление. Практически, энергопотребление линейно и прямо пропорционально зависит от рабочей частоты (чем выше частота – тем выше энергопотребление).

 
Напряжение питания для AVR микроконтроллеров находится в диапазоне от 2.7 до 5.5В (6.0В – максимум, хотя у меня AVR’ка как-то работала и при 7В – и ничего, жива и по сей день). Это означает что AVR может напрямую управлять, обмениваться данными и т.д. с различными устройствами (как 3.3В-толерантными так и 5В-толерантными) без необходимости применять какие-либо преобразователи логических уровней. Для более точной обработки аналоговых сигналов, в AVR предусмотренно отдельные выводы для питания аналоговой части микроконтроллера, в которую входят такие устройства как АЦП, ЦАП, Аналоговый компаратор. В добавок, AVR микроконтроллеры обладают несколькими "спящими режимами” (Sleep modes), для обеспечения наилучшего энергосбережения.
 
Также каждый пин микроконтроллера (в зависимости от рабочей частоты и напряжения питания) может питать внешние устройства током до 40.0 мА (максимум!), но всего из микроконтроллера можно "закачать/выкачать” до 200.0 мА (максимум!).
 
Диапазон частот тактирующих сигналов отличается в зависимости от "семейного старшинства” (ATtiny является самым младшим семейством AVR микроконтроллеров, а ATxMega самым старшим). У некоторых представителей, в особенности ATtiny семейства, рабочая частота может достигать 20.0МГц, у ATmega она не превышает 16.0МГц, а у ATxMega она не превышает 32.0МГц. Также в каждом AVR микроконтроллере есть внутрений RC-генератор до 8.0МГц, что позволяет обойтись без внешнего источника тактирующего сигнала.
 
Atmel выпускает микроконтроллеры с максимальными рабочами частотами в два раза ниже стандартных (для повышения энергосбережения), так что следует обращать внимание на кодировку микроконтроллеров при их покупке. Подробную информацию о том какой микроконтроллер на каких частотах и напряжениях питания работает, какие бывают кодировки, упаковки для данного микроконтроллера и т.д. можно найти в разделе "Ordering Information” каждого даташита.
 
Ниже в качестве примера приведена таблица из даташита на микроконтроллер ATtiny13. В столбце "Ordering Code” видны различия между кодировками и не трудно догадаться с чем они связаны.
 

 
Что у AVR микроконтроллера внутри?
 
Как уже было сказано в предисловии, микроконтроллеры AVR имеют гарвардскую архитектуру (главная характеристика такой архитектуры является то что память программ и оперативная память, как и шины доступа к ним, разделены для повышения скорости выполнения команд : пока одна команда выполняется, следующая извлекается из памяти программ) с RISC процессором, с быстродействием в 1.0 MIPS. Во всех микроконтроллерах, независимо от их модели и компоновки, одно и тоже центральное процессорное устройство (процессор/ядро). Единое ядро, делает написанную на любом языке программу более универсальной и при желании можно заменить в любом из проектов, скажем, более дорогой контроллер на другой по дешевле, с минимальными изменениями в коде.
 
RISC (Reduced Instruction Set Computer) – процессор с набором простых ассемблерных команд (прибавить, отнять, сдвиг влево/вправо, "логическое И”, и т.д.), все команды имеют фиксированную длину, в составе процессора находятся большое количество регистров общего назначения, и т.д. Чтобы, к примеру, расчитать какое-нибудь среднее математическое уровнение, процессору придется выполнить несколько простых ассемблерных команд, в отличии от CISC-процессора у которого есть команды "на все случаи жизни". Но у AVR не совсем RISC-процессор, поскольку не все ассемблерные команды имеют фиксированный формат. Большинство имеют 16-разрядный формат, остальные 32-разрядные. Это означает что каждая команда занимает в памяти программ 16 или 32 бита. Кстати, нефиксированная длина ассемблерных команд и делает его процессор: Advanced Virtual RISC-процессором (AVR).
 
MIPS (Million Instructions Per Second) – AVR микроконтроллеры способны выполнять (приблизительно) миллион команд на частоте 1.0 МГц, или проще говоря, большинство ассемблерных команд выполняются за один период тактирующего сигнала.
строение AVR микроконтроллера
 
Мозгами AVR микроконтроллера является его центральное процессорное устройство (процессор/ядро).
 
Некоторые составляющие процессора :
 
Арифметико-логическое устройство (Arithmetic Logic Unit)
Счетчик команд (Program counter)
Указатель стека (Stack Pointer)
  • Регистр состояния (Status Register)
  • Память программ (Flash Program memory)
  • Память данных (Data memory)
 
Регистры общего назначения (General Purpose Registers)
Регистры периферийных устройств (I/O Registers)
Оперативная память (SRAM memory)
Система тактирования (Clock System). Данную систему можно сравнить с сердечно-сосудистой системой
Модуль обработки прерываний (Interrupt Unit)
 
Периферийные устройства, перечислю некоторые из них :
 
Порты ввода/вывода
EEPROM память
USB (только в xMega), USART, I2C, SPI, JTAG интерфейсы
Сторожевой таймер, Таймер/Счетчик (с функцией ШИМ генератора, захвата/сравнения и т.д.)
АЦП, ЦАП (только в xMega), Аналоговый компаратор
Модули внешнего прерывания (External Interrupts)
 
Набор периферийных устройств в различных семействах (Tiny, Mega и xMega) и различных микроконтроллеров данных семейств отличается. Есть микроконтроллеры набитые "по самое немагу” различными периферийными устройствами, но также, для разработок критичных к стоимости, имеются и микроконтроллеры с малым (нужным) набором периферии.
 
Одним из плюсов AVR микроконтроллеров является возможность использования периферийных устройств в различных совместных режимах работы, что очень часто упрощает задачу разработчика. Также в AVR встроенна система сброса и отслеживания уровня питаниющего напряжения (System Control and Reset), обеспечивающая нормальный старт микроконтроллера и в случае необходимости, надежное завершение работы.
 
Регистры управления/состояния периферийных устройств находятся в области памяти данных (Data memory), между регистрами общего назначения и оперативной памятью, что обеспечивает высокое быстродействие в работе с периферией. Разработчик, естественно, имеет полный доступ к данным регистрам (I/O Registers).
 
Что необходимо чтобы заработал микроконтроллер?
 
Здесь вырисовываются два базовых направления :
  • написать программу (запрограммировать). Для того чтобы написать программу/алгоритм по которому будет действовать микроконтроллер вам понадобится интегрированная среда разработки для AVR микроконтроллеров, в состав которой входит редактор кода/текста, компилятор, компоновщик (linker) и пр. утилиты.
  • схемотехника. Одной лишь программы недостаточно чтобы микроконтроллер заработал, ему также требуется минимальный обвес (набор внешних электронных устройств), для обеспечения микроконтроллера напряжением питания и тактирующим сигналом, чтобы как минимум заработало ядро микроконтроллера.

На следующем рисунке показан "классический” обвес микроконтроллера, необходимый для нормальной работы.
подключение AVR микроконтроллеров
На рисунке приведены минимальные схемотехнические требования к микроконтроллеру ATmega16. При данной схеме включения, начинает работать ядро AVR микроконтроллера, можно использовать все порты ввода/вывода и пр. периферийные устройства. Короче говоря микроконтроллер находится в полной боевой готовности. Чтобы, например, начать использовать АЦП или Аналоговый компаратор следует, для начало, программно настроить периферийное устройство при помощи его регистров управления/контроля, для установки нужного вам режима работы и т.п., а дальше подать исследуемые сигналы на входы соответствующего периферийного устройства.
 
- Кварц и конденсаторы C1,C2 (по 22пФ) обеспечивают микроконтроллер и все его периферийные устройства качественным тактирующим сигналом (максимальная частота – 16.0МГц).
Резистор R1 (10К), обеспечивает высокий уровень на входе RESET, необходимый для стабильной работы микроконтроллера. Если, во время работы микроконтроллера, напряжение на этом пине упадет ниже определенного уровня, то произойдет сброс микроконтроллера и возможно нарушение работы задуманного алгоритма.
- ISP connector используется для внутрисхемного программирования, тоесть необходим для записи написанной вами программы в память микроконтроллера прямо на плате (не вынимая микроконтроллер из устройства).
- Дроссель L1 и конденсаторы C3,C4 обеспечивают напряжением питания аналоговые периферийные устройства а также некоторые регистры портов ввода/вывода. Если у микроконтроллера отсутствует аналоговая часть, соответственно, отсутствуют и пины аналогового питания, как результат – данные компоненты не нужны.
- Конденсатор C5 обеспечивает развязку межды пином питания и землей микроконтроллера. Земли микроконтроллера следует соединить вместе (GND и AGND).
 
Это, так сказать, классическое подключение микроконтроллера, в реальности, конечно-же все это может немного отличаться...
 
Ну, и это еще не все: чтобы микроконтроллер заработал в него необходимо "засунуть" программу. Сделать это можно только лишь при помощи программатора.
 
Программатор это устройство для записи откомпилированной программы (прошивки) в память микроконтроллера.
Самый часто-используемый метод записи прошивки в память микроконтроллера является метод ISP (In-System Programming), для чего и нужен ISP connector. Также весьма популярными методами записи прошивки в память микроконтроллера являются HVP (High-Voltage Programming) и запись прошивки через JTAG-интерфейс.
 

Минимальные требования для устойчивой работы AVR микроконтроллера

упрощенное подключение AVR микроконтроллера
Как видно из приведенного рисунка, чтобы запустить AVR микроконтроллер требуется?
* во первых:  подать напряжение питания (плюс развязывающий конденсатор – на всякий случай-хуже не будет)
*  во вторых – удерживать "высокий уровень” на пине RESET (при помощи подтягивающего резистора), чтобы избежать спонтанных сбросов микроконтроллера.
 
В общем-то даже такая упрощенная схема включения микроконтроллера вполне работоспособна, но она далека от идеала: последствия такой упрощенной обвязки микроконтроллера следующие : во первых, поскольку микроконтроллер был лишен внешнего тактирования, ему следует указать что тактирование будет происходить от внутреннего RC-генератора, установив соответствующие фьюз биты (своего рода предельные эксплуатационные параметры микроконтроллера).
Максимальная частота внутреннего генератора равна 8.0 МГц, а это означает что микроконтроллер не сможет работать на своей максимальной частоте (производительности).
Во вторых- аналоговая часть микроконтроллера (а также некоторые регистры портов ввода/вывода), лишены источника питания, что исключает их использование.
В третьих- отсутствует разъем для внутрисхемного программирования, поэтому чтобы записать прошивку в память микроконтроллера придется вынимать его из устройства, где-то производить запись, после чего возвращать его на место. Как вы сами понимаете это не очень удобно (вынимать/вставлять, припаивать/отпаивать), и может привести к повреждению как самого микроконтроллера (могут поломаться ножки, перегреться от пайки и т.п.), так и близлежащих устройств – разъем, дорожки на плате и т.п.
 
Источникhttp://easymcu.ru

Почта сайта