Микроконтроллеры семейства AVR. AVR
Однокристальные микроконтроллеры находят широкие применение в самых разнообразных сферах: от измерительных приборов, фотоаппаратов и видеокамер, принтеров, сканеров и копировальных аппаратов до изделий электронных развлечений и всевозможной домашней техники.
Со времени появления первых микропроцессоров в 1970-х годах их сложность постоянно возрастала за счет появления новых аппаратных решений и добавления новых команд, предназначенных для решения новых задач. Так постепенно сложилась архитектура, получившая впоследствии название CISC (Complete Instruction Set Computers – компьютеры со сложным набором команд). В дальнейшем обозначилось и нашло активное развитие еще одно направление: архитектура RISC (Reduced Instruction Set Computers – компьютеры с сокращенным набором команд). Именно к этой архитектуре относятся микроконтроллеры AVR от компании Atmel и PIC от компании Microchip, которым посвящена эта книга.
Основное преимущество RISC-процессоров заключается в том, что они просты, выполняют ограниченный набор команд, и, как следствие, очень быстродействующие. Это позволяет снизить стоимость и сложность их программирования.
Обратной стороной RISC-архитектуры стала необходимость создания дополнительных команд на ассемблере, которые у CISC-устройств реализованы в аппаратной части. Например, вместо того, чтобы просто вызвать команду деления, которая характерна для устройств CISC, разработчику, имеющему дело с RISC-процессором, приходится применять несколько последовательных команд вычитания. Однако подобный недостаток с лихвой компенсируется ценой и скоростью работы RISC-устройств. Кроме того, если создавать программы на языке С, то подобные проблемы вообще перестают иметь какое-либо значение для разработчика, поскольку они решаются компилятором, который автоматически генерирует весь недостающий ассемблерный код.
На заре возникновения микропроцессоров разработка программного обеспечения происходила исключительно на том или ином языке ассемблера, ориентированном на конкретное устройство. По сути, такие языки представляли собой символьные мнемоники соответствующих машинных кодов, а перевод мнемоники в машинный код выполнялся транслятором. Однако главный недостаток ассемблерных языков заключается в том, что каждый из них привязан к конкретному типу устройств и логике его работы. Кроме того, ассемблер сложен в освоении, что требует достаточно больших усилий для его изучения, которые, к тому же, оказываются потраченными впустую, если впоследствии потребуется перейти на использование микроконтроллеров других производителей.
Язык С, являясь языком высокого уровня, лишен подобных недостатков и может использоваться для программирования любого микропроцессора, для которого есть компилятор с языка С. В языке С все низкоуровневые операции, выполняемые компьютерами, представлены в виде абстрактных конструкций, позволяющих разработчикам сосредоточиться на программировании одной лишь логики, не заботясь о машинном коде. Изучив язык С, можно легко переходить от одного семейства микроконтроллеров к другому, тратя гораздо меньше времени на разработку.
Архитектура микроконтроллеров AVR и PIC
В общем, все микроконтроллеры построены по одной схеме. Система управления, состоящая из счетчика команд и схемы декодирования, выполняет считывание и декодирование команд из памяти программ, а операционное устройство отвечает за выполнение арифметических и логических операций; интерфейс ввода/вывода позволяет обмениваться данными с периферийными устройствами; и, наконец, необходимо иметь запоминающее устройство для хранения программ и данных (рис. 1.1).
Рис. 1.1. Обобщенная структура микроконтроллера
Будем рассматривать микроконтроллеры в общем, не привязываясь к какому-либо конкретному типу микроконтроллеров AVR, поэтому ниже будут рассмотрены только общие для большинства микроконтроллеров особенности архитектуры памяти, вопросы ввода/вывода, обработки прерываний, сброса и др.
Память микроконтроллеров AVR
В микроконтроллерах AVR память реализована по Гарвардской архитектуре, что подразумевает разделение памяти команд и данных. Это означает, что обращение к командам осуществляется независимо от доступа к данным. Преимуществом такой организации является повышение скорости доступа к памяти.
Память данных
Память данных предназначена для записи/чтения данных, используемых программами. Является энергозависимой, то есть, при отключении питания микроконтроллера все хранимые в ней данные, будут потеряны. В микроконтроллерах AVR память данных имеет более развитую структуру по сравнению с микроконтроллерами PIC, что показано на рис. 2.1.
Рис. 2.1. Структура памяти данных в микроконтроллерах AVR и PIC
Область статической памяти SRAM (Static Random Access Memory) обозначена на рис. 2.1 пунктиром, поскольку используется не всеми микроконтроллерами AVR (это относится как к внутренней, так и к внешней SRAM). Ее начальный адрес – 0x060, а верхний адрес – разный в различных устройствах.
В некоторых микроконтроллерах AVR можно увеличивать пространство памяти SRAM посредством подключения внешних блоков памяти вплоть до 64 Кбайт, однако для этого приходится пожертвовать портами А и С, которые в этом случае применяются для передачи данных и адресов.
Регистры общего назначения
Область регистров общего назначения (рабочих регистров) предназначена для временного хранения переменных и указателей, используемых процессором для выполнения программ. В микроконтроллерах AVR она состоит из 32 восьмиразрядных регистров (диапазон адресов 0x000 – 0x01F). В микроконтроллерах PIC регистры общего назначения также восьмиразрядные, однако их количество и диапазон адресов зависят от конкретного типа устройства.
В программах, написанных на языке С, непосредственное обращение к регистрам общего назначения обычно не требуется, если только не используются фрагменты на языке ассемблера.
Регистры специальных функций микроконтроллеров PIC
Регистры специальных функций используются в микроконтроллерах PIC для управления различными операциями. Как и в случае с регистрами общего назначения, их количество и адресация отличаются от устройства к устройству. В программах, написанных на языке С, непосредственное обращение к регистрам специальных функций обычно не требуется, если только не используются фрагменты на языке ассемблера.
Область ввода/вывода микроконтроллеров AVR
Область ввода/вывода микроконтроллеров AVR содержит 64 регистра, используемых для управления или хранения данных периферийных устройств. К каждому из этих регистров можно обращаться по адресу ввода/вывода (начиная с 0x000) или по адресу SRAM (в этом случае к адресу ввода/вывода следует прибавить 0x020). В программах на языке С обычно используются условные имена регистров ввода/вывода, а адреса имеют значение только для программ на языке ассемблера.
Имена, адреса ввода/вывода и SRAM, а также краткое описание регистров из области ввода/вывода микроконтроллеров AVR представлены в табл. 2.1. При этом следует отметить, что в различных моделях микроконтроллеров некоторые из перечисленных регистров не используются, а адреса, не указанные в табл. 2.1, зарезервированы компанией Atmel для использования в будущем.
Таблица 2.1. Описание регистров из области ввода/вывода
Имя регистра | Адрес ввода/ вывода | Адрес SRAM | Описание | |
ACSR | 0x08 | 0x28 | Регистр управления и состояния аналогового компаратора | |
UBRR | 0x09 | 0x29 | Регистр скорости передачи данных через UART | |
UCR | 0х0А | 0х2А | Регистр управления приемопередатчиком UART | |
USR | 0x0В | 0x2В | Регистр состояния приемопередатчика UART | |
UDR | 0х0С | 0х2С | Регистр данных приемопередатчика UART | |
SPCR | 0x0D | 0x2D | Регистр управления интерфейсом SPI | |
SPSR | 0х0Е | 0х2Е | Регистр состояния интерфейса SPI | |
SPDR | 0x0F | 0x2F | Регистр ввода/вывода данных интерфейса SPI | |
PIND | 0x10 | 0x30 | Выводы порта D | |
DDRD | 0x11 | 0x31 | Регистр направления передачи данных порта D | |
PORTD | 0x12 | 0x32 | Регистр данных порта D | |
PINC | 0x13 | 0x33 | Выводы порта С | |
DDRC | 0x14 | 0x34 | Регистр направления передачи данных порта С | |
PORTC | 0x15 | 0x35 | Регистр данных порта С | |
PINB | 0x16 | 0x36 | Выводы порта В | |
DDRB | 0x17 | 0x37 | Регистр направления передачи данных порта В | |
PORTB | 0x18 | 0x38 | Регистр данных порта В | |
PINA | 0x19 | 0x39 | Выводы порта А | |
DDRA | 0x1А | 0х3А | Регистр направления передачи данных порта А | |
PORTA | 0x1В | 0х3В | Регистр данных порта А | |
EECR | 0x1С | 0х3С | Регистр управления памяти EEPROM | |
EEDR | 0x1D | 0x3D | Регистр данных памяти EEPROM | |
EEARL | 0x1Е | 0х3Е | Регистр адреса памяти EEPROM (младший байт) | |
EEARH | 0x1F | 0x3F | Регистр адреса памяти EEPROM (старший байт) | |
WDTCR | 0x21 | 0x41 | Регистр управления сторожевым таймером | |
ICR1L | 0x24 | 0x44 | ||
ICR1H | 0x25 | 0x45 | Регистр захвата таймера/счетчика Т/С1 (младший байт) | |
OCR1BL | 0x28 | 0x48 | Регистр сравнения В таймера Т/С1 (младший байт) | |
OCR1BH | 0x29 | 0x49 | Регистр сравнения В таймера Т/С1 (старший байт) | |
OCR1AL | 0х2А | 0х4А | Регистр сравнения А таймера Т/С1 (младший байт) | |
OCR1AH | 0x2В | 0x4В | Регистр сравнения А таймера Т/С1 (старший байт) | |
TCNT1L | 0х2С | 0х4С | Счетный регистр таймера/счетчика Т/С1 (младший байт) | |
TCNT1H | 0x2D | 0x4D | Счетный регистр таймера/счетчика Т/С1 (старший байт) | |
TCCR1B | 0x2Е | 0х4Е | Регистр управления В таймера/счетчика Т/С1 | |
TCCR1A | 0x2F | 0x4F | Регистр управления А таймера/счетчика Т/С1 | |
TCNT0 | 0x32 | 0x52 | Счетный регистр таймера/счетчика Т/С0 | |
TCCR0 | 0x33 | 0x53 | Регистр управления таймера/счетчика Т/С0 | |
MCUCR | 0x35 | 0x55 | Регистр управления микроконтроллером | |
TIFR | 0x38 | 0x58 | Регистр флагов прерываний от таймеров/счетчиков | |
TIMSK | 0x39 | 0x59 | Регистр маскирования прерываний от таймеров | |
GIFR | 0х3А | 0х5А | Общий регистр флагов прерываний | |
GIMSK | 0х3В | 0x5В | Общий регистр маскирования прерываний | |
SPL | 0x3D | 0x5D | Указатель стека (младший байт) | |
SPH | 0х3Е | 0х5Е | Указатель стека (старший байт) | |
SREG | 0x3F | 0x5F | Регистр состояния |
Регистр состояния SREG микроконтроллеров AVR
Регистр состояния содержит флаги условий микроконтроллеров AVR и располагается в области ввода/вывода по адресу $3F (адрес SRAM – $5F). После подачи сигнала сброса он инициализируется нулями.
МК AVR приобрели огромную популярность в радиолюбительской среде, привлекая электронщиков такими показателями, как цена, энергоэффективность и быстродействие. Кроме того огромным плюсом являются удобные режимы программирования, свободная доступностью программных средств поддержки и широкий выбор МК. Эта серия компании Atmel применяется в автомобильной и бытовой электронике, сетевых картах и материнских платах компьютеров и ноутбуков, в смартфонах и планшетах.
В соответствии с единой базовой архитектурой эти МК делятся на три больших семейства:
Tiny AVR – дешевые и довольно простые по конструкции микроконтроллеры в 8-выводном корпусе
Classic – основная базовая линейка микроконтроллера;
Mega AVR – МК для сложных задач, требующих значительного объема памяти программ и данных.
AVR Classic – самая массовая линейка среди остальных Flash-МК корпорации Atmel. Последняя представила первый 8-разрядный Flash-МК в таком далеком 1993 году и с тех пор только совершенствует технологию. Компания постоянно работает над совершенствованием своей производственной линии в следующих основных направлениях: снижении удельного энергопотребления; увеличение диапазона питающих напряжений и быстродействия; возможность легкой встройки в изделия реально-временных отладчиков; реализации функции самопрограммирования; расширения количества и модернизация периферийных модулей; встройки различных специализированных устройств (передатчиков, USB-контроллеров, драйверов ЖКИ и др.
Успех AVR-микроконтроллеров кроется в простоте выполнения поставленной задачи с достижением требуемого результата, чему способствует доступность огромного числа инструментальных средств, как разработанных корпорацией Atmel, так и сторонними производителями ПО. Многие сторонние фирмы выпускают полный спектр необходимых компиляторов, программаторов, отладчиков, ассемблеров, адаптеров и разъемов. Отличительной чертой програмных средств от AVR является их низкая стоимость.
Они необходимы для обмена данными с различными подключенными к нему устройствами, например, реле, световыми и звуковыми индикаторами, датчиками и т.п. С помощью АВР портов, осуществляется не только обмен данными, но и синхронизация схемы в целом. Количество AVR портов зависит от модели МК. В среднем имеется (1-7) портов. Обычно, порты AVR восьмиразрядные, если разрядность не ограничена количеством выводов на корпусе МК.
Давайте попробуем написать простую программу для "Мигания светодиодом". Писать программу для простоты понимания будем на языке С для этого нам понадобится специальная утилита CodeVisionAVR.
Для точных временных отсчетов микроконтроллеру нужен какой то внешний счетчик, который бы отсчитывал нужный временной интервал независимо от работы процессора, а последний мог в любой момент получить данные о времени. И такой счетчик в микроконтроллере имеется это периферийные таймеры. В AVR их может быть даже несколько, так в ATmega16 их три, в ATmega128 целых четыре.
Вы узнаете как можно управлять ЖК дисплеем с помощью команд имеющихся в компиляторе CodeVisionAVR, на примере МК семейства ATmega8 и алфавитно-цифровым ЖК экраном со встроенным чипом HD44780
Любой микроконтроллер способен “воспринимать” только цифровые сигналы – логический ноль или единицу. Например, у МК ATmega8 при напряжении питания 5 В логический ноль – это напряжение лежащие в интервале от 0 до 1,3 В, а единица – от 1,8 до 5 В. Довольно часто в радиолюбительской практике возникает необходимость измерять напряжения, которое может принимать любое значение в диапазоне от нуля до уровня напряжения питания. Для этих задач в составе всех микроконтроллеров АВР имеется аналого-цифровой преобразователь.
ПО используется для интегрированной среды разработки программного обеспечения под микроконтроллеры данного типа. Основными особенностями CodeVisionAVR является то, что он очень понятный для самостоятельного изучения, а также поддерживает все существующие МК этого семейства.
Информация по структуре, системе команд микроконтроллеров и периферийным устройствам. Издание поможет правильно выбрать МК требуемого типа, разработать функциональную схему устройства и программу работы МК на языке AVR Ассемблера
Особенностью данной схемы частотомера на микроконтроллере является то, что она работает вместе с компьютером и подсоединена к материнской плате через разъем IRDA. От этого же разъема конструкция получает питание
Многие считают, что из 8-разрядных устройств уже все выжато по максимуму, и единственный способ для дальнейшего повышения производительности микроконтроллера состоит в переходе к более мощным устройствам, например, к 32-разрядным микроконтроллерам. Тем не менее, переход на 32-битовые может быть несколько болезненным в технической перспективе. Например, может заметно возрасти энергопотребление и сложность использования схемы. Независимо от более высокой эффективности 32-разрядного устройства, 8-битный микроконтроллер потребляет гораздо меньше мощности.
Повышение производительности 8-разрядного микроконтроллера можно достигнуть с помощью нескольких простых решений. Во-первых, в полной мере используйте свой компилятор и полного набора функциональных возможностей, предоставляемых им. В настоящее время компиляторы являются очень продвинутыми, и многие из них с очень неплохой оптимизацией. В зависимости от задачи и доступной памяти компиляторы способны оптимизировать как по размеру кода, так и по скорости. Убедитесь, что вы хорошо знаете, для чего применяете МК, и используйте компилятор в соответствии с поставленными исходными данными.
Во-вторых, не брезгуйте ручной оптимизацией программного кода. Хотя нынешние компиляторы функциональны, но они не способны сделать всю работу за вас. Поэтому программист микроконтроллеров должен тщательно подходить к написанию кода. Здесь важно структурировать код и отделить часть кода коммуникационного стека от остальных частей программы. Это позволит существенно быстро изменять необходимые части и наблюдать за временем их исполнения.
Помимо структурирования используйте наиболее эффективные типы данных. Так, разные архитектурные решения имеют разные размеры баз данных. То есть в 8-разрядном микроконтроллере не стоит по возможности использовать 32-разрядными int-переменные. Лучше заменить их на переменные типа byte, если конечно это возможно. Кроме того не применяйте переменные с плавающей точкой при программировании микроконтроллеров.
Рассмотрим внутреннюю архитектуру микроконтроллеров AVR, попробуем разобраться из каких блоков состоит кристалл микросхемы и за какие функции отвечает каждый блок, как они взаимодействуют между собою. Также будут приведены полезные сравнения и примеры, ценные заметки что помогут прояснить принципы работы микроконтроллера с внешними устройствами и периферией.
AVR микроконтроллер изнутри
Микроконтроллер изнутри - это компьютер со своим вычислительным устройством, постоянной и динамической памятью, портами ввода-вывода и разной периферией.
Рис. 1. Структура AVR микроконтроллера. Рисунок с сайта digikey.com
Внутри микроконтроллер содержит:
- Быстродействующий процессор с RISC-архитектурой;
- FLASH-память;
- EEPROM-память;
- Оперативную память RAM;
- Порты ввода/вывода;
- Периферийные и интерфейсные модули.
RISC (Reduced Instruction Set Computer) - архитектура с тщательно подобранным набором команд, которые как правило выполняются за один такт работы процессора. Современные AVR микроконтроллеры содержат около 130 команд, которые очень быстро выполняются и не требуют больших затрат как по внутри-процессорным ресурсам, так и по потребляемой мощности.
Структурная схема AVR микроконтроллера
Посмотрим на рисунок ниже и разберемся из каких блоков состоит микроконтроллер и как они связаны между собою:
Рис. 2. Структурная схема AVR микроконтроллера.
Рассмотрим кратко что изображено на блоках в схеме:
- JTAG Interface (Joint Test Action Group Interface) - интерфейс внутрисхемной отладки (4 провода);
- FLASH - перепрограммируемая память для сохранения программы;
- Serial Peripheral Interface, SPI - последовательный периферийный интерфейс (3 провода);
- EEPROM (Electrically Erasable Programmable Read-Only Memory) - перепрограммируемое ПЗУ, энергонезависимая память;
- CPU (ЦПУ) - центральный процессор управления, сердце микроконтроллера, 8-битное микропроцессорное ядро;
- ALU (АЛУ) - арифметико-логическое устройство, основа блока CPU;
- RAM (Random Access Memory) - оперативная память процессора;
- Program Counter - счетчик команд;
- 32 General Purpose Registers - 32 регистра общего назначения;
- Instruction Register - регистр команд, инструкций;
- Instruction Decoder - декодер команд;
- OCD (On-Chip Debugger) - блок внутренней отладки;
- Analog Comparator - аналоговый компаратор, блок сравнения аналоговых сигналов;
- A/D Converter (Analog/Digital converter) - аналогово-цифровой преобразователь;
- LCD Interface (Liquid-Crystal Display Interface) - интерфейс для подключения жидко-кристаллического дисплея, индикатора;
- USART (Universal Asynchronous Receiver-Transmitter), UART - универсальный асинхронный приемопередатчик;
- TWI (Two-Wire serial Interface) - последовательный интерфейс с двухпроводным подключением;
- Watchdog Timer - сторожевой или контрольный таймер;
- I/O Ports - порты вода/вывода;
- Interrupts - блок управления и реакции на прерывания;
- Timers/Counters - модули таймеров и счетчиков.
Подробнее о внутренних блоках микроконтроллера
А теперь подробно рассмотрим все блоки микроконтроллера, разберемся что и для чего нужно, приведу простые примеры доступным языком.
JTAG Interface - важный интерфейс который позволяет производить внутреннюю отладку прямо в чипе используя блок внутренней отладки (OCD ), без использования эмуляторов. Можно сказать что JTAG - это интерфейс для "железной" отладки микроконтроллера. Через JTAG-адаптер микросхема напрямую подключается к программному комплексу для программирования и отладки.
Используя данный интерфейс можно в пошаговом режиме выполнять программу прямо в микроконтроллере, смотреть как изменяется содержимое регистров, как мигают индикаторы и светодиоды что подключены к микроконтроллеру после каждого шага и т.п. Для подключения к JTAG интерфейсу достаточно 4-х проводников: TDI(Test Data In), TDO(Test Data Out), TCK(Test Clock), TMS (Test Mode Select).
JTAG интерфейс доступен далеко не во всех микроконтроллерах AVR, как правило таким вкусным дополнением обладают чипы у которых 40 и более лапок, а объем памяти доступен в размере не менее 16КБ. Для серьезных задач - серьезные материалы и инструменты.)
FLASH - память программ, энергонезависимое ПЗУ(постоянное запоминающее устройство) что выполнено по технологии FLASH. Здесь хранится программа, которая будет исполняться блоком ALU микроконтроллера. Флешь-память чипа можно многократно перезаписывать, тем самым меняя или дополняя программный код для выполнения. Данный тип памяти может сохранять записанные в нее данные в течение 40 лет, а количество возможных циклов стирания/записи может достигать 10000.
В зависимости от модели микроконтроллера размер FLASH-памяти может достигать 256 KБ.
Serial Peripheral Interface, SPI - последовательный периферийный интерфейс (SPI) который зачастую применяется для обмена данными между несколькими микроконтроллерами со скоростью до нескольких MГц (нескольких миллионов тактов в секунду).
Для обмена данными по SPI интерфейсу между двумя устройствами достаточно 3-х проводников:
- MOSI (Master Output Slave Input) - Данные от ведущего к ведомому;
- MISO (Master Input Slave Output) - Данные от ведомого к ведущему;
- CLK (Clock) — тактовый сигнал.
Устройства с SPI-интерфейсом делятся на два типа: ведущий(Master) и ведомый(Slave). Если к интерфейсу подключено несколько устройств то для обмена данными между ними нужны дополнительные линии связи(проводники) чтобы мастеру можно было выбрать ведомое устройство и сделать запрос к нему.
Также SPI интерфейс используется для внутрисхемного SPI программирования, по этому интерфейсу к микроконтроллеру подключается программатор.
EEPROM - энергонезависимая память данных в которой данные будут храниться даже при отключении питания микроконтроллера. В данной памяти можно хранить настройки выполнения программы, собранные данные для статистики работы устройства и другую полезную информацию. К примеру, собрав маленькую метеостанцию на микроконтроллере, в EEPROM на каждый день можно сохранять данные о температуре воздуха, давлении, силе ветра, а потом в любой момент считать эти собранные данные и провести статистические исследования.
Для EEPROM выделено отдельное адресное пространство которое отличается от адресного пространства RAM и FLASH. Память EEPROM микроконтроллера - очень ценный ресурс, поскольку ее как правило очень мало - от 0,5 до нескольких килобайт на чип. Количество перезаписей для данного типа памяти составляет порядка 100000 что в 10 раз больше чем ресурс FLASH памяти.
ALU - Арифметико-логическое устройство, которое синхронно с тактовым сигналом и опираясь на состояние счетчика команд (Program Counter ) выбирает из памяти программ (FLASH ) очередную команду и производит ее выполнение.
Тактовый сигнал для микроконтроллера вырабатывается тактовым генератором, и может быть подан из нескольких доступных источников на выбор:
- внутренний RC-генератор, который можно калибровать на нужную частоту;
- керамический или кварцевый резонатор с конденсаторами (не у всех моделей);
- внешний тактовый сигнал.
Установка источника тактовых импульсов производится при помощи FUSE-битов.
FUSES (с англ.: плавление, пробка, предохранитель) - специальные 4 байта(4*8=32 бит) данных, которые настраивают некоторые глобальные параметры микроконтроллера в процессе прошивки. После прошивки данные биты нельзя изменить через внутреннюю программу что записана в МК.
Данной конфигурацией бит мы указываем микроконтроллеру вот что:
- какой использовать задающий генератор (внешний или внутренний);
- делить частоту генератора на коэффициент или нет;
- использовать ножку сброса (RESET) для сброса или же как дополнительный пин ввода-вывода;
- количество памяти для загрузчика;
- другие настройки зависимо от используемого микроконтроллера.
CPU - это мозг микроконтроллера, который содержит в себе АЛУ, регистры и оперативную память.
К ALU подключен блок из 32-х регистров общего назначения (32 General Purpose Registers - регистровая память), каждый из которых представляет собою 1 байт памяти (8 бит). Адресное пространство регистров общего назначения размещено в начале оперативной памяти (RAM) но не является ее частью. С данными что помещаются в регистры можно производить разнообразные арифметические, логические и битовые операции. Выполнение подобных операций в оперативной памяти не доступно. Для работы с данными из RAM нужно их записать в регистры, произвести в регистрах нужные операции, а потом записать результирующие данные из регистров в память или в другие регистры для выполнения каких-то действий.
RAM - оперативная память. В нее можно записывать данные из регистров, считывать данные в регистры, все операции с данными и расчеты производятся в регистрах. Для разных семейств AVR чипов размер оперативной памяти ограничен:
- ATxmega - до 32 KБ;
- ATmega - 16 Кб;
- ATtiny - 1 Кб.
Analog Comparator - данный блок сравнивает между собою два уровня сигнала и запоминает результат сравнения в определенном регистре, после чего сданный результат можно проанализировать и выполнить необходимые действия. Для примера: можно использовать этот блок как АЦП(Аналогово-Цифровой Преобразователь) и измерять напряжение батареи питания, в случае если если напряжение батареи достигло низкого уровня - произвести некоторые действия, помигать красным светодиодом и т.п. Также данный модуль можно применять для измерения длительности аналоговых сигналов, считывания установленных режимов работы устройства при помощи потенциометра и т.п.
A/D Converter - данный блок преобразовывает аналоговое значение напряжения в цифровое значение, с которым можно работать в программе и на основе которого можно выполнять определенные действия. Как правило диапазон напряжений что подаются на вход АЦП в AVR микроконтроллере находится в пределах 0-5,5 Вольт. Для данного блока очень важно чтобы микроконтроллер питался от стабильного и качественного источника питания. Во многих AVR микроконтроллерах есть специальный отдельный вывод для подачи стабильного питания на схему АЦП.
LCD Interface - интерфейс для подключения жидкокристаллического индикатора или дисплея. Применятся для отображения информации, состояния устройства и его узлов.
USART - последовательный асинхронный интерфейс для обмена данными с другими устройствами. Есть поддержка протокола RS-232, благодаря чему микроконтроллер можно соединить для обмена данными с компьютером.
Для подобной связи МК с COM-портом компьютера нужен конвертер логических уровней напряжения (+12В для COM - в +5В для микроконтроллера), или же просто RS232-TTL. Для подобных целей используют микросхемы MAX232 и им подобные.
Для подключения микроконтроллера к компьютеру через USB используя UART-интерфейс можно использовать специализированную микросхему FT232RL. Таким образом на новых компьютерах и ноутбуках можно не имея физического COM-порта привязать микроконтроллер используя USB-порт через USART интерфейс.
TWI - интерфейс для обмена данными по двухпроводной шине. К такой шине данных можно подключить до 128 различных устройств, используя две линии данных: тактовый сигнал (SCL) и сигнал данных (SDA). Интерфейс TWI является аналогом базовой версии интерфейса I2C.
В отличие от SPI интерфейса (один мастер и один/несколько ведомых) интерфейс TWI - двунаправленный, сто позволяет организовать между несколькими микроконтроллерами небольшую внутреннюю сеть.
Watchdog Timer представляет собою систему контроля зависания устройства с последующим его перезапуском. Это как автоматическая кнопка RESET для старенького компьютера с глючной ОС.))
I/O Ports , GPIO - это набор блоков портов ввода/вывода к пинам которых можно подключить разнообразные датчики, исполняющие устройства и цепи. Количество пинов вход/выход, что идут от портов в микроконтроллере, может быть от 3 до 86.
Выходные драйверы в портах AVR микроконтроллера позволяют напрямую подключать нагрузку з потребляемым током 20 мА(максимум 40 мА) при напряжении питания 5В. Общий нагрузочный ток для одного порта не должен превышать значение в 80 мА (например на 4 пина для одного из портов повесить по светодиоду с током 15-20 мА).
Interrupts - это блок который отвечает за реакцию и запуск на выполнение определенных функций при поступлении сигнала на определенные входы микроконтроллера или же по какому-то внутреннему событию (например тиканью таймера). Под каждое прерывание разрабатывается и записывается в память отдельная подпрограмма.
Почему этот блок называется блоком прерываний? - потому что при возникновении определенного для прерывания события выполнение основной программы прерывается и происходит приоритетное выполнение подпрограммы что написана для текущего прерывания. По завершению выполнения подпрограммы происходит возвращение к выполнению основной программы с того момента где она была прервана.
Timers/Counters - набор таймеров и счетчиков. Микроконтроллер, как правило, содержит в себе от одного до четырех таймеров и счетчиков. Они могут применяться для подсчета количества внешних событий, формирования сигналов определенной длительности, вырабатывать запросы на прерывания и т.п. Разрядность таймеров и счетчиков составляет - 8 и 16 бит (смотреть в даташите для чипа).
Заключение
Вот в принципе и все что изначально полезно знать о структуре микроконтроллера AVR. Дальше, в процессе работы и программирования, у вас будет возможность на практике изучить даташиты для разных моделей AVR чипов, узнать более детально принципы работы каждого из структурных кубиков МК и изучить как они работают, поиграться с отладкой и т.п.
В следующей статье попробуем разобраться с маркировкой микроконтроллеров, поразмышляем о наиболее доступных и подходящих для начального изучения чипах.
Семейство AVR – включает в себя 8 битные микроконтроллеры для широкого спектра задач. Для сложных проектов с большим количеством входов/выходов вам предоставлены микроконтроллеры AVR семейства Mega и AVR xmega, которые выпускаются в корпусах от 44 до 100 выводов и имеют до 1024 кб Flash памяти, а скорость их работы – до 32 миллионов операций в секунду. Практически все модели имеют возможность генерировать ШИМ, встроенный АЦП и ЦАП.
Миллионы радиолюбителей разрабатывают интересные проекты на AVR – это самое популярное семейство МК, о них написано очень много книг на русском и других языках мира.
Интересно: для прошивки нужен программатор, один из самых распространённых – это AVRISP MKII, который вы легко можете сделать из своей Arduino.
Популярность семейства АВР поддерживается на высоком уровне уже много лет, в последние 10 лет интерес к ним подогревает проект Arduino – плата для простого входа в мир цифровой электроники.
Четко описать сферу применения микроконтроллера нельзя, ведь она безгранична, однако можно классифицировать следующим образом:
- Tiny AVR – самые простые в техническом плане. В них мало памяти и выводов для подключения сигналов, цена соответствующая. Однако это идеальное решение для простейших проектов, начиная от автоматики управления осветительными приборами салона автомобиля, до осциллографических пробников для ремонта электроники своими руками. Они также используются в Arduino-совместимом проекте – Digispark. Это самая маленькая версия ардуины от стороннего производителя; выполнена в формате USB-флешки.
- Семейство MEGA долго оставалось основным у продвинутых радиолюбителей, они мощнее и имеют больший, чем в Tiny, объём памяти и количество выводов. Это позволяет реализовывать сложные проекты, однако семейство очень широко для краткого описания. Именно они использовались в первых платах Arduino, актуальные платы оснащены, в основном, ATMEGA
Выход любого МК без дополнительных усилителей потянет светодиоды или светодиодную матрицу в качестве индикаторов, например.
AVR xMega или старшие микроконтроллеры
Разработчики Atmel создали AVR xMega, как более мощный МК, при этом принадлежащий к семейству AVR. Это было нужно для того, чтобы облегчить труд разработчика при переходе к более мощному семейству.
В AVR xMega есть два направления:
- МК с напряжением питания 1.8-2.7 вольта, работают с частотой до 12 мГц, их входа устойчивы к величине напряжения в 3.3 В;
- МК с напряжением питания 2.7-3.6 вольта уже могут работать на более высоких частотах – до 32 мГц, а вход устойчив к 5 вольтам.
Также стоит отметить: AVR xMega отлично работают в автономных системах, потому что имеют низкое энергопотребление. Для примера: при работающих таймерах и часах реального времени RTC потребляют 2 мА тока, и готовы к работе от прерывания внешнего или по переполнению таймера, а также по времени. Для выполнения целого ряда функций применяется множество 16 разрядных таймеров.
Работа с USB портом
Начнем с того, что для программирования микроконтроллера нужно использовать последовательный порт, однако на современных компьютерах COM порт часто отсутствует. Как подключить микроконтроллер к такому компьютеру? Если использовать преобразователи USB-UART, эта проблема решается очень легко. Простейший преобразователь вы можете собрать на микросхемах FT232 и CH340, а его схема представлена ниже.
Такой преобразователь размещен на платах Arduino UNO и Aduino Nano.
Некоторые микроконтроллеры AVR имеют встроенный (аппаратный) USB:
- ATmega8U2;
- ATmega16U2;
- ATmega32U2.
Такое решение нашло применение для реализации связи компьютера и Arduino mega2560 по USB, в которой микроконтроллер «понимает» только UART.
Назначение ЦАП и АЦП микроконтроллеров AVR
Цифроаналоговыми преобразователями (ЦАП) называют устройства, преобразующие сигнал единиц и нолей (цифровой) в аналоговый (плавно изменяющийся). Главные характеристики – разрядность и частота дискретизации. В АЦП преобразуется аналоговый сигнал в цифровой вид.
Порты с поддержкой АЦП нужны для того, чтобы подключить к микроконтроллеру аналоговые датчики, например, резистивного типа.
ЦАП нашёл своё применение в цифровых фильтрах, где входной сигнал проходит программную обработку и вывод через ЦАП в аналоговом виде, ниже вы видите наглядные осциллограммы. Нижний график – входной сигнал, средний – этот же сигнал, но обработанный аналоговым фильтром, а верхний – цифровой фильтр на микроконтроллере Tiny45. Фильтр нужен для формирования нужного диапазона частот сигнала, а также для формирования сигнала определенной формы.
Пример использования АЦП – это осциллограф на микроконтроллере. К сожалению, частоты мобильных операторов и процессора ПК отследить не удастся, а вот частоты порядка 1 мГц – легко. Он станет отличным помощником при работе с импульсными блоками питания.
А здесь расположено подробное видео этого проекта, инструкции по сборке и советы от автора:
Какую литературу читать о микроконтроллерах AVR для начинающих?
Для обучения молодых специалистов написаны горы литературы, давайте рассмотрим некоторые из них:
- Евстифеев А.В. «Микроконтроллеры AVR семейства Mega». В книге подробно рассмотрена архитектура микроконтроллера. Описано назначение всех регистров и таймеров, а также их режимы работы. Изучена работа интерфейсов связи с внешним миром SPI и т. д. Система команд раскрыта для понимания радиолюбителю среднего уровня. Материал книги «Микроконтроллеры avr семейства mega: руководство пользователя» поможет изучить структуру чипа и назначение каждого из его узлов, что, безусловно, важно для любого программиста микроконтроллеров.
- Белов А.В. – «Микроконтроллеры AVR в радиолюбительской практике». Как видно из названия, эта книга, в большей степени, посвящена практической стороне работы с микроконтроллерами. Подробно рассмотрен ставший классическим микроконтроллер ATiny2313, а также многие схемы для сборки.
- Хартов В.Я. «Микроконтроллеры AVR. Практикум для начинающих». Поможет разобраться в AVR studio 4, а также стартовом наборе STK Вы научитесь работать с последовательными и параллельными интерфейсами, такими как UART, I2C и SPI. Книга «Микроконтроллеры AVR. Практикум для начинающих» написана преподавателем МГТУ им. Н.Э.Баумана и используется там для изучения этой темы.
Изучение этого семейства микроконтроллеров помогло начать работать и разрабатывать проекты многим любителям электроники. Стоит начинать именно с популярного семейства, чтобы всегда иметь доступ к морю информации.
Среди радиолюбителей начального уровня есть только один конкурент AVR – PIC микроконтроллеры.
Трудности, возникающие у разработчика при проектировании пятого или десятого контроллера, меркнут на фоне проблем, с которыми сталкивается новичок. Вопросам получения через сеть Internet минимального набора программ и документации, достаточного для работы с микроконтроллерами AVR, посвящена первая глава книги. В Приложении 1 даны рекомендации по поиску необходимой информации.Основная цель второй главы - обучение навыкам эффективной работы в среде разработки и отладки программ для микроконтроллеров AVR Studio 4.12. В этой главе возможности AVR Studio рассматриваются очень подробно. Освоение AVR Studio проходит на конкретном примере полного цикла разработки устройства сигнализации. Здесь же даны рекомендации по обнаружению и исправлению ошибок в программе.
Примерно одинаково построение остальных глав книги. В каждой из них предлагаются электрические схемы контроллеров на базе микроконтроллеров AVR, а также несколько различных программ, определяющих функционирование контроллеров. Функциональные узлы микроконтроллеров описаны в объеме, достаточном для понимания программ, полное их описание можно найти в техническом описании микроконтроллеров.
Все описываемые в книге программы для микроконтроллеров отлаживались в AVR Studio версии 4.12. Программное обеспечение для компьютера написано в Delphi.
Глава 1. Что нужно для работы с микроконтроллером
1.1. Где найти минимальный набор программного обеспечения и документации
для микроконтроллеров AVR
1.2. О выборе программатора
1.3. Источник питания
1.4. Дополнительные сведения
Глава 2. Первый проект: контроллер сигнализации
2.1. Постановка задачи
2.1.1. Устройства, подключаемые к контроллеру, и параметры входных и выходных сигналов
2.1.2. Логика работы контроллера
2.1.3. Схема сигнализации
2.1.4. Словесное описание алгоритма работы контроллера
2.2. Начинаем работу с AVR Studio
2.2.1. Создание первой программы на Ассемблере
2.2.2. Программа для контроллера сигнализации с использованием прерываний
2.3. Рекомендации
Глава 3. Работа с внешним статическим ОЗУ
3.1. Интерфейс микроконтроллера ATmega8515 для подключения внешней памяти
3.2. Пример схемы подключения внешней ОЗУ к микроконтроллеру ATmega8515
3.2.1. Схема
3.2.2. Установка адреса
3.2.3. О выборе микросхемы регистра
3.2.4. Считывание данных из внешней памяти
3.2.5. Запись данных во внешнюю память
3.3. Программный доступ к оперативной памяти
3.3.1. Простая программа обращения к оперативной памяти
3.3.2. Отладка программы
3.3.3. Сохранение содержимого ОЗУ на диске
3.3.4. Запись данных в начальную область памяти данных
3.4. Обращение к буферам для хранения данных как к ячейкам внешней памяти
3.4.1. Электрическая схема подключения буферов
3.4.2. Программа обслуживания буферов
3.4.3. Отладка программы обслуживания буферов
3.5. Подключение внешней памяти 512 Кбайт к микроконтроллеру ATmega8535
3.6. Схема подключения ОЗУ к микроконтроллеру ATmega8535
3.6.1. Описание схемы
3.6.2. Запись в ячейку
3.6.3. Считывание из ячейки
3.7. Программа записи данных в ОЗУ 512 Кбайт
3.7.1. Отладка программы
3.7.2. Подпрограмма установки адреса SetAddr
3.7.3. Подпрограмма копирования байта из внутреннего ОЗУ DataSt
3.7.4. Подпрограмма копирования данных из внешней памяти во внутреннее ОЗУ Datalld
Глава 4. Устройство динамической индикации на 7-сегментных светодиодных индикаторах
4.1. Принцип динамической индикации
4.2. Восьмиразрядное устройство отображения цифровой информации
4.2.1. Схема управления восьмиразрядным индикатором
4.2.2. Программа организации бегущей строки
4.2.3. Описание программы
4.3. Устройство управления двумя печами
4.3.1. Работа устройства
4.3.2. Программа управления двумя печами
4.3.3. Работа с устройством управления двумя печами
4.3.4. Особенности работы EEPROM микроконтроллера
Глава 5. Связь микроконтроллера с компьютером
5.1. Схема контроллера, обеспечивающая связь с COM-портом компьютера
5.2. Программное обеспечение связи по каналу RS-232
5.2.1. Простая программа микроконтроллера для СОМ-порта
5.3. Программное обеспечение для связи по интерфейсу RS-232
5.3.1. Протокол обмена
5.3.2. Общие положения
5.3.3. Структура сообщения
5.3.4. Передаваемые сообщения (команды компьютера и ответы контроллера)
5.3.5. Программа для микроконтроллера
5.3.6. Отладка работы USART BAVRStudio
5.4. Канал RS-232: программное обеспечение для компьютера
5.4.1. Минимальные сведения о Delphi
5.4.2. Программа обмена данными с микроконтроллером
5.4.3. Описание работы программы
5.4.4. Сохранение, запуск, использование программы
5.4.5. Программа с использованием функций Windows API
5.4.6. Описание работы программы
Глава 6. Организация аналоговых выходов для микроконтроллера
6.1. Преобразование кода в ширину импульса
6.1.1. ЦАП и генератор пилообразного напряжения с ШИМ
6.1.2. Таймер Т1 микроконтроллера в режиме PWM
6.1.3. Программа для генератора ШИМ
6.2. Преобразование кода в амплитуду импульса
6.2.1. Генератор пилообразного напряжения
6.2.2. Программа для генератора пилообразного напряжения
6.2.3. Генератор синусоидального сигнала
6.2.4. Программа для генератора синусоидального сигнала
6.3. Определение пространственного модуля сигнала
6.3.1. Алгоритм программы
6.3.2. Листинг программы вычисления модуля
6.4. Цифровой фильтр
6.4.1. Листинг С-программы цифрового фильтра Filter.c
Приложение 1. Как получить необходимые материалы через сеть INTERNET
Приложение 2. Устройства, облегчающие отладку контроллера в составе системы
Приложение 3. Программатор
Приложение 4. Работа программатора в Windows XP/2000/NT
Приложение 5. Fuse-байты: выбор режима работы микроконтроллера
Приложение 6. 8-битные RISC-микроконтроллеры фирмы Atmel
Название: Применение микроконтроллеров AVR. Схемы, алгоритмы, программы (3-е изд.)
Автор: Баранов В.Н.
Серия: Мировая электроника
Издательство: Додэка-XXI
Год: 2010
Страниц: 288
Язык: Русский
Формат: PDF
Качество: отличное
Размер: 11 Mb
Скачать: Баранов В.Н. Применение микроконтроллеров AVR. Схемы, алгоритмы, программы (3-е изд.)