Применение avr микроконтроллеров инструкция. AVR-программирование. Программирование микроконтроллеров AVR для начинающих. Программы для микроконтроллера

Применение avr микроконтроллеров инструкция. AVR-программирование. Программирование микроконтроллеров AVR для начинающих. Программы для микроконтроллера

04.03.2019

Вместо вступления: Долго и усердно писал развёрнутую статью, но в итоге случайная горячая клавиша в браузере и всё, что было написано - кануло в небытие. «Спасибо» Хабр, что не сохраняешь черновики автоматически, как на нормальных сайтах, уверен многие с этим хоть раз да сталкивались… Обидно, досадно, но ладно, в следующий раз воспользуюсь текстовым редактором.

Итак, первый «герой» - Logitech MX Anywhere 2 .

Какие же различия между новой и предыдущей моделью?

1. Возможность использовать мышь на трёх разных устройствах;


+ можно использовать одновременно на трёх разных устройствах (дома, в дороге, на работе)
- переключение между устройствами происходит при помощи кнопки на пузе грызуна
- невозможна параллельная работа без дополнительных usb радио-датчиков (но даже с ними, совершенно неудобно использовать переключение в параллельной работе между компьютером и ноутом например, потому что приходится постоянно жать кнопку на пузе - а это просто EPIC FAIL. Гораздо удобнее было бы разместить кнопку переключения сверху, над миниатюрной третьей кнопкой)
- необходимо носить с собой радио-датчик от мыши и вытаскивать/вставлять его между всеми используемыми устройствами (вытаскивать сложно даже из ноутбука, т.к. форма радио-датчика не имеет «зацепов» для ногтей или пальцев, жутко неудобно)
- датчик легко потерять, т.к. он ещё меньше предыдущего и теперь его не спрятать внутри мышки (а без датчика мышь работать не будет даже по подключаемому проводу)

2. Уменьшенный usb-датчик приёма/передачи сигнала;
- при крутых 1000 DPI радио-датчик по прежнему работает на доисторических 125Hz, что совершенно нивелирует достоинства высоко разрешения сенсора (при том, что минимальной комфортной частотой для работы с графикой, моделированием или для игр можно считать 200Hz. Возьмите любую игровую мышь, там нет частот ниже 200Hz. Проверить можно при помощи программы Mouse Rate Checker)
- если использовать на нескольких устройствах, то совершенно неудобно вытаскивать и вставлять (за исключением работы с одним устройством - вставил и забыл)

3. Встроенный аккумулятор, вместо пальчиковых батареек;


+ мышь стала легче
+ можно подзаряжать от провода
+ не нужно заморачиваться с батарейками типа АА
- работа без подзарядки сократилась с 4 до 2 месяцев
- аккумулятор имеет свойство деградировать, теряя ёмкость (со временем ваша радио мышь превратится в проводного грызуна)
- аккумуляторы не съёмные (как было раньше на некоторых игровых моделях игровой серии)

4. Подзарядка мыши от USB-провода во время работы;
+ подзарядка во время работы
- провод короткий
- только зарядка, работать через провод нельзя, как например на игровой G700s (в случае потери радио-датчика получите красивый кирпич, если конечно не найдёте другой радио-датчик, только вот в продаже я их не видел)

5. Новый видоизменённый сенсор;
+ два диода вместо одного
+ DPI от 400 до 1600
- из-за идиотского ограничения в 125Hz DPI выше 400, увы, особой роли не играют (проверить можно при помощи программы Mouse Rate Checker)

6. Новый дизайн;
+ сделано добротно и качественно
- нет металлических элементов, которые придавали дорогой вид этой серии мышей

7. Новое ПО;
- нет функционала по смене DPI

8. Цена.
- цена за такой девайс в $70 совершенно не оправданно завышена (на момент написания статьи 5 500р. - 12.09.2015)

Честная ОЦЕНКА: 2,5 балла из 5.

ВЫВОД: Грызун получился явно сырой и недоработанный, цена на него завышена, а характеристики значительно ниже среднего из-за идиотского ограничения в 125Hz. К покупке не рекомендую, ну только если вы не жертва маркетологов и не фанат спонтанных покупок нового девайса только потому, что у него новый цвет, чуть-чуть другая форма и новая клёвая надпись на корпусе…

Второй «герой» - Logitech MX Master .

Особо добавить нечего, все те же самые болячки, что и у первого экземпляра.
- заряд батареи ещё меньше - 40 дней, вместо 2 месяцев
- цена ещё выше - $100
- те же самые убогие 125Hz
- мышь только для правши
- отсутствуют боковые кнопки качения на основном колесе прокрутки
+ колесо прокрутки включается автоматически на скоростной режим при резком рывке
+ есть дополнительный боковой валик прокрутки под большой палец
- боковой валик медленный

При ценах в $70 (5 500р.) и $100 (6 800р.) однозначно НЕ РЕКОМЕНДУЮ эти сырые девайсы, которые практически ничем не отличаются от прототипа MX Anywhere.

P.S. Надеюсь представители некогда легендарной компании Logitech, которая в последнее время жёстко сдала свои позиции, прочтут эту статью и хоть немного задумаются над тем, что вместо того, чтобы тратить миллионы на редизайн и маркетинг, лучше бы вернулись к истокам и продолжили традицию выпуска передовых девайсов, которым на самом деле когда-то не было равных. Сейчас же это просто размазанные по модельным рядам технологии, и отсутствие действительно качественных продуктов.

P.P.S. Раньше гуляли по сети видоизменённые драйверы, которые позволяли обходить ограничение в 125Hz и использовать грызунов на 200Hz, но сейчас я под новые ОС таких драйверов не встречал. Если кто знает, как можно заставить работать грызуна на частотах выше 125Hz был бы очень признателен за информацию и даже написал бы с вашей помощью развёрнутую статью на данную тематику, не говоря уже о лучах добра и огромной благодарности с моей стороны.

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

Прежде всего, разберемся с самим понятием «микроконтроллер». Микроконтроллер можно определить как миниатюрный компьютер на базе одного-единственного чипа, включающий, помимо процессора ряд вспомогательных элементов, таких, как ОЗУ, ППЗУ, таймер, и.т.д. Микроконтроллер предназначен для выполнения каких-либо заранее определенных заданий.

Проще всего сравнить микроконтроллер с персональным компьютером. Как и ПК, микроконтроллер имеет процессор, оперативную и постоянную память. Однако, в отличие от ПК, все эти элементы расположены на одном-единственном чипе.

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

Существует несколько популярных семейств микроконтроллеров, которые используются для различных целей. Наиболее распространенными из них являются семейства микроконтроллеров 8051, PIC и AVR. И о последнем семействе мы и собираемся вам рассказать подробнее.

История семейства

Семейство микроконтроллеров AVR было создано в 1996 г. корпорацией Atmel, а разработчиками архитектуры микроконтроллеров являются Alf-Egil Bogen и Vegard Wollan. Отсюда и происходит название семейства – от первых букв имен разработчиков – A и V, и первой буквы аббревиатуры RISC – типа архитектуры, на которой базируется архитектура микроконтроллера. Также эту аббревиатуру часто расшифровывают как Advanced Virtual RISC (модернизированный эффективный RISC).

Первым микроконтроллером в серии был AT90S8515, однако первым микроконтроллером, выпущенным на рынок, стал AT90S1200. Это случилось в 1997 г.

На сегодняшний день доступны 3 линейки микроконтроллеров:

Внешний вид микроконтроллера TinyAVR

  • MegaAVR – наиболее распространенная линейка, имеющая большой объем встроенной памяти (до 256 КБ), множество дополнительных устройств и предназначенная для задач средней и высокой сложности.

Внешний вид микроконтроллера MegaAVR

  • XmegaAVR – используется в сложных коммерческих задачах, требующих большого объема памяти и высокой скорости.

Пример микроконтроллера XmegaAVR

Сравнительные характеристики различных линеек:

Особенности семейства

Прежде всего, микроконтроллеры этой серии являются быстрыми. Большинство инструкций процессор микроконтроллера выполняет за один цикл. Микроконтроллеры AVR примерно в 4 раза быстрее, чем PIC. Кроме того, они потребляют немного энергии и могут работать в 4 режимах экономии энергии.

Большинство контроллеров AVR являются 8-разрядными, хотя сейчас существует и 32-разрядная разновидность контроллеров AVR32. Кроме того, как уже упоминалось выше, AVR принадлежат к типу RISC-микроконтроллеров. Архитектура RISC (Complex Instruction Set Computers) означает, что набор инструкций, которые может выполнять процессор устройства, является ограниченным, но, в то же время, подобная архитектура дает преимущество в скорости. Противоположностью архитектуры RISC является архитектура CISC (Complex Instruction Set Computers).

32-разрядная разновидность контроллеров AVR32

8-битность контроллера означает, что он способен передавать и принимать 8-битные данные. Доступные регистры ввода/вывода также являются 8-битными.

Архитектура контроллера основана на регистрах. Это означает, что для хранения исходных данных операции и ее результата в контроллере используются регистры.

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

Архитектура контроллера

Всего контроллер AVR имеет 32 8-битных регистра общего назначения. В течение цикла процессор берет данные из двух регистров и помещает их в арифметико-логическое устройство (АЛУ), которое производит операцию над данными и помещает их в произвольный регистр. АЛУ может выполнять как арифметические, так и логические действия над операндами. Также АЛУ может выполнять и действия с одним операндом (регистром). При этом контроллер не имеет регистра-аккумулятора, в отличие от контроллеров семейства 8051 – для операций могут использоваться любые регистры, и результат операции также может быть помещен в любой регистр.

Контроллер соответствует Гарвардской вычислительной архитектуре, согласно которой компьютер имеет отдельную память для программ и данных. Поэтому в то время, пока выполняется одна инструкция, происходит предварительное извлечение из памяти следующей инструкции.

Котроллер способен выполнять одну инструкцию за цикл. Отсюда следует, что если тактовая частота контроллера составляет 1 МГц, то его производительность составит 1 млн. оп./c. Чем выше тактовая частота контроллера, тем выше будет его скорость. Однако при выборе тактовой частоты контроллера следует соблюдать разумный компромисс между его скоростью и энергопотреблением.

Помимо флэш-памяти и процессора контроллер имеет такие устройства, как , аналого-цифровой преобразователь, таймеры, коммуникационные интерфейсы – I2C, SPI и последовательный порт UART. Все эти устройства могут контролироваться программно.

Типовая архитектура микроконтроллеров AVR

Программы для микроконтроллера

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

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

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

Преимуществом ассемблера является очень быстрый, компактный и эффективный код, но создание таких программ одновременно требует и глубоких знаний работы процессора контроллера, ручного управления памятью и контроля структуры программы. Поэтому зачастую для написания программ используются и языки высокого уровня, такие, как С, Basic и Java. В этом случае задачу по контролю структуры программы и управлению памятью берет на себя компилятор. Кроме того, часто используемые функции могут быть при этом помещены в библиотеки и извлекаться из них по мере надобности.

Заключение

Микроконтроллеры семейства 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). После подачи сигнала сброса он инициализируется нулями.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows