Микроконтроллер что это такое простыми словами
Микроконтроллеры: что это такое и зачем нужны
Сегодня я хотел бы написать о микроконтроллерах в целом, чтобы свои знания подтянуть и заодно другим рассказать.
Для работы с микроконтроллерами, такими как Ардуино или Iskra JS и подобными, нужны дополнительные знания, которые мы постепенно будем познавать.
Что такое микроконтроллеры?
Микроконтроллеры широко используются в вычислительной технике (процессоры, материнские платы, контроллеры дисководов, накопители HDD/FDD), бытовой электронике (стиральные машины, микроволновые печи, телефоны и т.д.), в промышленности и т.д. Рассмотрим, как проходит подключение и управление микроконтроллером, а также другие нюансы, связанные с ними.
Подключение микроконтроллера
Нижеописанная схема является упрощенным вариантом подключения микроконтроллера AVR.
По-хорошему, необходимо добавить еще несколько дополнительных внешних элементов в схему.
Упрощенная схема подключения микроконтроллера
Провод, который указан на схеме пунктиром, использовать не обязательно в том случае, если питание микроконтроллера идет от внешнего источника.
АЦП (Аналого-цифровой преобразователь) — электронное устройство, преобразующее напряжение в двоичный цифровой код
На вывод AREF рекомендуется подключить конденсатор, который позволит увеличить качество напряжения АЦП и, тем самым, позволит провести правильные измерения АЦП. Между AVCC и GND установлен конденсатор и дроссель, а между GND и VCC установлен керамический конденсатор с емкостью 100 нФ (поближе к выводам питания схемы) для сглаживания кратких импульсов помех, образующихся в результате работы микросхемы.
Также между GND и VCC устанавливается ещё один конденсатор с емкостью в 47 мкФ для того, чтобы сгладить возможные броски напряжения.
Управление микроконтроллером
Микроконтроллеры AVR оснащены Гарвардской архитектурой. Каждая из областей памяти располагаются в своем адресном пространстве. Память данных в контроллерах осуществляется посредством регистровой, энергонезависимой и оперативной памяти.
Микроконтроллер AVR
Регистровая память предусматривает наличие 32 регистров общего назначения, которые объединены в файл, а также служебные регистры для ввода и вывода. И первые, и вторые располагаются в пространстве ОЗУ, однако не являются его частью.
Устройства на микроконтроллерах
Микроконтроллеры AVR являются простыми в использовании, имеют низкую потребляемую мощность и высокий уровень интеграции.
Как правило, такие микроконтроллеры могут использоваться на самых разных устройствах, в том числе системах общего назначения, системах оповещения, для ЖК-дисплеев, плат с ограниченным пространством.
Также они используются для измерителей уровня заряда аккумулятора, аутентификации, в автомобильной электронике, для защиты от короткого замыкания и перегрева и т.д. Кроме промышленных целей, микроконтроллеры могут использоваться (и чаще всего используются новичками) для создания следующих устройств:
Отметим, что для разных устройств используются разные модели микроконтроллеров. Так, 32-разрядные микроконтроллеры AVR UC3 (а также XMEGA, megaAVR, tinyAVR и т.д.) подойдут для систем общего назначения с технологиями picoPower, QTouch, EEPROM, системами обработки событий и самопрограммированием.
Микроконтроллеры для начинающих
Если вы собираетесь программировать микроконтроллеры, такие как Ардуино, например, а также собирать устройства, которые предусматривают их наличие в схеме, необходимо учитывать некоторые правила и рекомендации:
Для того, чтобы новичок мог заниматься микроконтроллерами, рекомендуется изучать базовые материалы. К таким материалам можно отнести следующие книги:
Данные книги являются практическим руководством, в котором затрагиваются аспекты и основы цифровой логики, а также рассматриваются примеры программ для микроконтроллеров, написанных на языке С с различными имитаторами схем, компиляторами и средами.
Сайт про изобретения своими руками
МозгоЧины
Сайт про изобретения своими руками
¡- Что такое микроконтроллер
¡- Что такое микроконтроллер
Наверное, не многие люди слышали такой термин как «микроконтроллер» (за исключением наших читателей), но на самом деле это очень распространенное устройство — без него редко обходится какая-либо современная техника. Телевизоры, стиральные машины, мобильные телефоны, компьютеры и периферия, автомобили и многое другое — все они содержат в себе микроконтроллеры.
В этой небольшой статье я постараюсь рассказать о том, что это за зверь такой «микроконтроллер», какие у них плюсы и минусы, их особенностях и возможностях, а также о том, как их можно применять в мозгочинских целях.
Что такое микроконтроллер?
Микроконтроллер по сути дела является небольшим компьютером, выполненным в виде небольшой микросхемы, в которой на одном «кристалле» содержатся все основные компоненты: процессор, периферия, устройства ввода-вывода, а также, чаще всего, оперативная память (ОЗУ) и энергонезависимая память (ПЗУ). Конечно, мощность такого компьютера совсем небольшая и не сравниться с мощностью настольного или портативного компьютера. Но ведь далеко не для всех задач она и нужна — для относительно простых зада и применяют микроконтроллеры, и их мощности предостаточно. Основным же плюсом использования одного микроконтроллера, в котором интегрированы все необходимые компоненты, вместо россыпи отдельных микросхем (процессор, ОЗУ, ПЗУ, периферия), является снижение стоимости, размеров, энергопотребления, а также затрат на разработку и сборку необходимого устройства. Ранее микроконтроллеры называли «однокристальными микро-ЭВМ», но со временем это название было вытеснено более современным (и лучше отражающим предназначение этого девайса) словом микроконтроллер (от англ. слова control — «управление»).
Общий вид микроконтроллера
Впервые такое устройство как микроконтроллер, которое тогда называлось еще однокристальной микро-ЭВМ, было разработано в 1971 году сотрудниками компании Texas Instruments, инженерами М. Кочрену и Г. Буну, которые и предложили интегрировать изобретенный незадолго до этого микропроцессор на один кристалл со всеми необходимыми компонентами.
Поскольку под разные задачи лучше всего использовать наиболее подходящие для них микроконтроллеры, а количество применений для микроконтроллеров поистине неиссякаемое, то логично, что компании производители выпускают большое, измеряемое в сотнях, количество самых разнообразных по своим техническим характеристикам микроконтроллеров. По своим характеристикам, микроконтроллеры бывают как совсем простые — четырех разрядные (4 битные) с небольшой рабочей частотой, измеряемой в килогерцах, так и очень навороченные — до 64 битных с тактовой частотой, измеряемой в мегагерцах.
Микроконтроллеры выпускаются очень большим количеством разнообразных компаний, для перечисления которых не хватило бы даже целой статьи, так что я расскажу о микроконтроллерах, которые производит корпорация Атмел (Atmel), основанная в далеком 1984 году. Семейство этих микроконтроллеров зовётся AVR — это восьмибитные микроконтроллеры, разработанные в 1996 году. Фирма Atmel выпускает несколько семейств микроконтроллеров:
Само семейство микроконтроллеров AVR делится на две большие группы микроконтроллеров: Tiny и Mega. Отличаются они между собой набором функций, которые в них заложены. Основным же различием внутри группы является внутренняя частота и объём памяти, используемый для хранения программы. Большее распространение среди радиолюбителей получили микроконтроллеры семейства Mega по причине того, что они имеют больше возможностей и функций, конкретнее – ATmega8, который имеет тактовую частоту 16 МГц и объём памяти в 8 Кбайт.
Возможности и особенности микроконтроллеров
Так что же могут микроконтроллеры? Благодаря тому что микроконтроллер является маленьким компьютером — его возможности очень широки. К примеру, микроконтроллеру можно поручить измерение разнообразных величин, обработку различных сигналов и управление широким спектром разных девайсов. Во многом возможности микроконтроллеров ограничены только вашим воображением и умениями работать с ними. Но у микроконтроллеров есть и определенные особенности, одной из которых является то, что все микроконтроллеры поступают с завода в продажу «пустые», то есть, если на них подать напряжение, то мы не получим ровным счетом ничего. Просто кусок кремния. Для того, что бы микроконтроллер начал выполнять какие-то операции, начиная с включения светодиода, заканчивая ШИМ-регулированием напряжения — ему нужно «объяснить» как это сделать, т.е. прошить микроконтроллер исполняющей программой, которую можно написать на ассемблере или на Си.
Многие, наверняка, уже догадались, что можно сделать с микроконтроллерами, дочитав для этого момента. Конечно же, их можно и нужно применять в компьютерном моддинге! Поскольку так называемым «обвесом» микроконтроллера (набором электродеталей, периферией и т.д.) может быть практически всё (реле, транзисторы, светодиоды, индикаторы, LCD дисплеи и многое другое), в зависимости от нужных функций микроконтроллера (сигнализация, управление), то и возможности использования микроконтроллеров в моддинге поистине безграничны. Коротко перечислим некоторые из них.
Микроконтроллеры можно «научить» считывать сигнал с таходатчика (датчика скорости вращения) вентилятора или помпы и выводить значения на LCD или индикаторный дисплей. Таким же образом микроконтроллер может послужить для вычисления основных электрических величин: сопротивления, напряжения и силы тока. Всё это так же можно вывести на LCD дисплей.
Если к микроконтроллеру подключить необходимый датчик, то из него можно сделать термометр на светодиодных индикаторах, который отлично впишется в ваш проект, а затраты на изготовление будут минимальными (до 4 у.е.)!
Если приловчиться, изучить микроконтроллеры более детально и освоить необходимый язык программирования, то можно написать программу для ШИМ-регулятора, который, в свою очередь, будет управлять скоростью вращения корпусных вентиляторов.
Так же можно использовать микроконтроллеры как средство вывода информации о загрузке процессора, оперативной памяти или заполненности винчестера на тот же LCD дисплей, который органично впишется в любой дизайн.
Использование микроконтроллеров
Как я уже писал, для того чтобы использовать микроконтроллер его необходимо прошить соответствующей программой, но это не все, поскольку микроконтроллер это не товар конечного потребления (как, например, MP3 плеер), а электронный компонент, на основе которого можно сделать необходимое устройство. Обычно этот процесс состоит из нескольких пунктов:
Для того чтобы прошить микроконтроллер его необходимо подключить к ПК, для чего используется специальное устройство, которое называется программатор. С его помощью и осуществляется взаимосвязь между микроконтроллером и компьютером. Можно даже сказать, что программатор — это своеобразный мост.
Программу для микроконтроллера пишете на языке программирования Си (кстати, Си намного проще, чем ассемблер), после чего создаёте файл прошивки и с помощью программы прошивальщика прошиваете ваш микроконтроллер данной прошивкой. На самом деле всё довольно просто и, при желании, достаточно легко осваивается! Лично я использую для всех этих действий программу CodeVisionAVR так как она очень удобна и поддерживает практически все виды программаторов. От себя — очень советую!
Собирать устройство на основе микроконтроллера можно как на протравленной плате, так и на макетной или даже методом навесного монтажа, в зависимости от того, как вам удобней и сложности предполагаемого устройства.
Выводы про микроконтроллеры
Микроконтроллеры — весьма перспективная штука, так как на ее основе можно создавать разнообразные гаджеты и примочки для вашего проекта, которые выведут его на качественно новый уровень, как по внешнему виду, так и по функционалу. Причем особый плюс заключается в том, что именно с помощью микроконтроллеров можно реализовать различные сложные кастомные гаджеты, которых попросту нет в продаже, что позволит сделать ваш проект действительно уникальным.
Из плюсов микроконтроллеров я бы выделил:
Ну, куда без минусов:
Электроника для всех
Блог о электронике
AVR. Учебный Курс. Вводная. Что такое микроконтроллер.
Микроконтроллер это, можно сказать, маленький компьютер. Который имеет свой центральный процессор (регистры, блок управление и арифметическо-логическое устройство), память, а также разную периферию, вроде портов ввода вывода, таймеров, контроллеров прерываний, генераторов разных импульсов и даже аналоговых преобразователей. Всего не перечислишь. Как нельзя перечислить все применения микроконтроллеров.
Но, если сильно все упростить, то основной функцией микроконтроллера является «дрыганье ножками». Т.е. у него есть несколько выводов (от 6 до нескольких десятков в зависимости от модели) и на этих выводах он может выставить либо 1 (высокий уровень напряжения, например +5вольт), либо 0 (низкий уровень напряжения, около 0.1 вольта) в зависимости от программного алгоритма зашитого в его память. Также микроконтроллер может определять состояние сигнала на своих ножках (для этого они должны быть настроены на вход) — высокое там напряжение или низкое (ноль или единица). Современные микроконтроллеры также почти поголовно имеют на борту Аналогово Цифровой Преобразователь — это штука подобная вольтметру, позволяет не просто отследить 0 или 1 на входе, а полноценно замерить напряжение от 0 до опорного (обычно опорное равно напряжению питания) и представить его в виде числа от 0 до 1024 (или 255, в зависимости от разрядности АЦП)
Из него можно сделать и умный дом, и мозги для домашнего робота, систему интеллектуального управления аквариумом или просто красивое светодиодное табло с бегущим текстом. Среди электронных компонентов МК это один из самых универсальных устройств. Я, например, при разработке очередного устройства предпочитаю не заморачиваться на различного рода схемотехнические извраты, а подключить все входы и выходы к микроконтроллеру, а всю логику работы сделать программно. Резко экономит и время и деньги, а значит деньги в квадрате.
Микроконтроллеров существует очень и очень много. Практически каждая уважающая себя фирма по производству радиокомпонентов выпускает свой собственный контроллер. Однако и в этом многообразии есть порядок. МК делятся на семейства, все их я не перечислю, но опишу лишь самые основные восьмиразрядные семейства.
MSC-51
Самое обширное и развитое это MSC-51, старейшее из всех, идущее от intel 8051 и ныне выпускаемое массой фирм. Иногда кратко зовется С51. Это 8-ми разрядная архитектура, отличается от большинства других восьмиразрядников тем, что это CISC архитектура. Т.е. одной командой порой можно совершить довольно сложное действие, но команды выполняются за большое число тактов (обычно за 12 или 24 такта, в зависимости от типа команды), имеют разную длину и их много, на все случаи жизни. Среди контроллеров архитектуры MSC-51 встречаются как динозавры вроде AT89C51, имеющие минимум периферии, крошечную память и неважнецкое быстродействие, так и монстры вроде продукции Silicon Laboratories имеющие на борту весьма мясистый фарш из разнокалиберной периферии, огромные закрома оперативной и постоянной памяти, мощные интерфейсы от простого UART‘a до USB и CAN, а также зверски быстрое ядро, выдающее до 100 миллионов операций в секунду. Что касается лично меня, то я обожаю архитектуру С51 за ее чертовски приятный ассемблер на котором просто кайфово писать. Под эту архитектуру уже написаны гигабайты кода, созданы все мыслимые и немыслимые алгоритмы.
Atmel AVR
Вторым моим любимым семейством является AVR от компании Atmel. Вообще Atmel производит и MSC-51 контроллеры, но все же основной упор они делают на AVR. Эти контроллеры уже имеют 8-ми разрядную RISC архитектуру и выполняют одну команду за один такт, но в отличии от классического RISC ядра имеют весьма развесистую систему команд, впрочем не такую удобную как у С51, за что я их недолюбливаю. Но зато AVR всегда снаряжены как на войну и просто напичканы разной периферией, особенно контроллеры подсемейства ATMega. А еще их очень легко прошивать, для этого не нужны ни специализированные программаторы, ни какое либо другое сложное обрудование. Достаточно лишь пяти проводков и компьютера с LPT портом. Простота освоения позволила этому контроллеру прочно запасть в сердца многих и многих радиолюбителей по всему миру.
Microchip PIC.
Еще один 8-ми разрядный RISC микроконтроллер, отличается весьма извратской системой команд, состоящей всего из пары десятков команд. Каждая команда выполняется за четыре такта. есть ряд достоинств, в первую очередь это низкое энергопотребление, и быстрый старт. В среднем PIC контроллере нет такого количества периферии как в AVR, но зато самих модификаций PIC контроллеров существует такое количество, что всегда можно подобрать себе кристалл с периферией подходящей точно под задачу, не больше не меньше. На PIC‘ax традиционно построены бортовые компьютеры автомобилей, а также многочисленные бытовые сигнализации.
Какое же семейство выбрать? О, это сложный вопрос. На многочисленных форумах и конференциях по сей день идут ожесточенные бои на тему какое семейство лучше, фанаты AVR грызутся с приверженцами MSC-51, попутно не забывая пинать по почкам PIC‘овцев, на что те отвечают тем же.
Ситуация тут как в Starcraft 🙂 Кто круче? Люди? Зерги? Протоссы? Все дело в применении, масштабах задач и массе других параметров. У каждого семейства есть свои достоинства и недостатки. Но лично я бы выбрал AVR и вот по каким причинам:
Ой, но этих же AVR целая прорва. Какой взять.
Интересный вопрос. Вообще МК лучше выбирать под задачу. Но для изучения лучше хапнуть что то фаршированное.
Для начала разберем маркировку, чтобы ты по прайсу сразу мог понять что за зверь перед тобой. Вот тебе пример
Рекоменую следующие модели:
Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!
А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.
Микроконтроллеры
Данная статья является обзорной, более подробную информацию по всем разделам можно найти в datasheet на конкретный микроконтроллер (далее МК). Основная цель этой статьи дать общее представление об основных модулях микроконтроллера, ответить на вопрос «Какие параметры МК являются ключевыми при выборе МК под проект?».
Мы будем осваивать все возможности МК сразу на приборах, начиная с простых и постепенно переходя к более сложным схемам. В каждом приборе мы будем подробно разбирать программу, и вы научитесь работать с МК на практике, сразу наблюдая результат своей работы. Также во всех приборах оставлено место для самостоятельной работы. Такой подход более продуктивный и интересный, чем работать с отладочной платой (например, Arduino или STM Discovery board). В этой статье мы не будем подробно рассматривать программирование МК (программированию посвящена отдельная статья Приемы программирования микроконтроллеров). Вам важно только запомнить название и назначение каждого модуля, его возможности и основные параметры. Статья является общей для всех видов МК, и не нацелена на какого то одного производителя.
Что такое микроконтроллер
Вы скорее всего хорошо представляете как устроен персональный компьютер. Рассмотрим его основные компоненты:
Микропроцессор (в англоязычной литературе MPU — Micro Processor Unit) содержит функционал компьютерного центрального процессора, или ЦП (CPU — Central Processing Unit) на одном полупроводниковом кристалле (ИМС — интегральная микросхема или на западный манер — Integrated Circuit). Он обрабатывает данные, поступающие с входных периферийных устройств и передаёт обработанные данные на выходные периферийные устройства.
Разработать и сделать какое-либо устройство на современном микропроцессоре довольно сложно. В домашних условиях нереально. Шина данных, адресная шина требует много выводов. Их количество у микропроцессора в настоящее время доходит до 1000 выводов. Чтобы развести такое количество ножек нужна как минимум 6-ти слойная плата, а также необходимо использовать микропереходные отверстия — диаметром 0.1 мм. Ну и конечно такая система будет стоить не дёшево.
Микроконтроллер был специально изобретён, чтобы иметь возможность использоваться в самых маленьких устройствах. Это было сделано за счёт объединения в одной микросхеме всех элементов компьютера. Рассмотрим это на схеме:
Все вспомогательные устройства, такие как постоянное запоминающее устройство, оперативная память, таймер, последовательный интерфейс, порты ввода/вывода являются встроенными. Поэтому не возникает необходимости создавать интерфейсы с этими вспомогательными устройствами, и это экономит много времени для разработчика системы.
На текущий момент выпущено очень много различных микроконтроллеров — нижняя граница стоимости начинается с 20 рублей за штуку! Чтобы использовать микроконтроллер практически не нужны дополнительные компоненты (несколько конденсаторов, и если необходимо кварц). Подал питание — и все работает.
Как устроен любой микроконтроллер, основные модули
Практически все микроконтроллеры имеют следующие основные модули:
CORE (ядро) — основной вычислительный модуль
Flash memory (ПЗУ) — память для хранения программы
RAM (ОЗУ) — оперативная память для проведения вычислений
EEPROM (ПЗУ) — память для хранения данных
Clock and Supply management — модуль управления частотой работы микроконтроллера и питанием
Timers — различные таймеры для генерации ШИМ, управления сном и т. д.
Comunications interfaces — периферия для связи с другими микросхемами
ADC (analog to digital converter) — аналого-цифровой преобразователь
DAC (digital to analog converter) — цифро-аналоговый преобразователь
DMA (direct memory access) — прямой доступ к памяти, без использования процессора
GPIO (generak port input output) — порты ввода вывода — управление «ножками»
Development support — модуль разработчика — интерфейс программирования и отладки микроконтроллера
Рассмотрим более подробно зачем нужен каждый модуль и какими возможностями он обладает.
Core and memory
Мы планируем программировать обычные микроконтроллеры (не DSP) на высокоуровневом языке программировать СИ, и в связи с этим, нам не важно какое ядро мы имеем, как оно работает внутри. Всю работу с ядром за нас делаем компилятор СИ. Именно он преобразует наши команды на языке программирования в машинный код. Какие же параметры ядра являются ключевыми для выбора микроконтроллера, и как они могут влиять на его работу?
Максимальная частота работы ядра
Для работы любого процессора необходима задающая частота — сигнал, который меняет напряжение с 0 (0 вольт) на логическую 1 (рабочее напряжение ядра). Именно в момент смены напряжения и происходят все вычисления. Момент изменения сигнала называется такт работы ядра МК, а количество тактов в секунду и есть частота работы ядра (измеряется в герцах). Можно грубо сказать, что данная частота определяет сколько простейших однотактных инструкций может выполнить микроконтроллер за 1 секунду. Например, 24Мгц — 24 миллиона инструкций в секунду. Здесь важно понимать, что речь идёт не об одной строчке кода на языке Си или операции деления, а об одной машинной операции. Все микроконтроллеры и микропроцессоры, в очень упрощённом варианте, работают примерно одинаково:
ядро имеет набор регистров — очень быстрых ячеек памяти определённой разрядности в битах — например, 8бит, 16бит, 32бит
в процессе работы, МК загружает машинные команды из памяти на конвейер (более быстрая память) и выполняет их последовательно
каждая машинная команда в качестве операндов берет данные из внутренних регистров, то есть, чтобы сложить 2 числа, надо сначала их записать в разные регистры, а потом выполнить команду сложения (ADD).
Из этого описания становится понятно, что для того чтобы выполнить реальную строчку кода на СИ бывает необходимо выполнить несколько сотен машинных команд. В datasheet на МК обычно есть отдельный раздел посвящённый описанию сколько тактов занимает выполнение команд на Ассемблере, на СИ обычно эти данные не приводятся, так как очень сильно зависят от компилятора. Несмотря на такую сложность, максимальную частоту ядра все же можно считать некоторым показателем производительности ядра (Более общепризнанная единица производительности процессоров — MIPS, однако она тоже не является реальной мерой производительности). На текущий момент есть микроконтроллеры работающие на частоте 200МГц, в простых же задачах хватает и 1 МГц.
Разрядность регистров
Вы, наверное, уже слышали или читали, что например STM8 — 8-ми битный МК, а вот STM32 — 32-х битный МК. Тут как раз и идёт речь о разрядности центральных регистров МК. Разрядность регистров определяет сколько бит в одном регистре, а это в свою очередь говорит о том, сколько данных за один такт может участвовать в машинной команде. Чем больше разрядность МК, тем быстрее выполняется код для больших чисел, но тем меньше плотность машинного кода самой программы во Flash памяти МК. Что это значит?
Представим себе простую задачу, надо сложить два числа 10 и 5. Если перевести их в двоичную систему, то это будет 0b1010 и 0b101, то есть 4-х битное число и 3-х битное — результат будет не больше 5 бит. Соответственно, если у нас МК 8-ми битный, то все операнды помещаются в 8-ми битный регистр, и для сложения таких чисел будет одинаково затрачено тактов на любом МК с разрядностью больше 8-ми бит. Но вот если нам надо сложить два больших числа, например, 10 000 и 10, это уже займёт 14 бит, и на МК с разрядностью 8 бит будет выполняться за большее число тактов, будет необходим целый алгоритм (чтобы привести каждое число к 8-ми битам), а на 32-битном МК — за то же самое число тактов. Вы можете самостоятельно это все увидеть в любой среде программирования, которая показывает итоговый код на ассемблере. Таким образом, чем больше разрядность — тем быстрее можно оперировать большими числами. Однако, есть и обратная сторона медали, плотность кода. Для самой простой программы, записать 0 во внутренний регистр, надо потратить 2-е команды (2 байта) на 8‑ми битном МК и 2-е команды (8 байт) на 32-ух битном, так как все команды данные и команды имеют разрядность 32бита. Конечно, производители МК с этим борются, вводят дополнительные наборы команд меньшей разрядности и т. д.
Таким образом, разрядность показатель производительности и стоимости МК. Чем она выше, чем больше памяти имеет МК, тем больше возможностей у вас будет, но тем он и дороже. Для простых проектов более чем достаточно 8-битных МК (хотя по цене сейчас разрыв существенно снизился). Также, восьми битные микроконтроллеры имеют много других преимуществ — энергопотребление, более быстрая обработка прерываний, широкий набор периферии, очень большой выбор корпусов и самих микроконтроллеров. Все это надо учитывать при выборе МК под проект.
Архитектура ядра ARM
Когда появились первые микроконтроллеры, каждая компания изобретала свой МК, со своими протоколами отладки и ядром. Но эта ситуация в корне изменилась с приходом на рынок компании ARM Limited. Данная компания осуществила переворот в мире микроконтроллеров. Бизнесом компании ARM всегда была продажа лицензий на производство ядер и сопутствующих элементов полупроводниковым компаниям, которые уже в свою очередь создавали микропроцессоры и микроконтроллеры на их основе. То есть, сама ARM не делала микроконтроллеры, но она разрабатывала ядра для них! В итоге, на текущий момент, очень большое количество разнообразных 32-х и 64-х битных микроконтроллеров, различных производителей работают на одном ядре — ARM!
Общее ядро даёт общие механизмы работы с памятью, отладкой, программированием, механизмом прерываний и другим свойствами ядра. Производители микроконтроллеров сосредоточились на периферийных модулях. Равные конкурентные возможности сказались не цене микроконтроллеров. В настоящее время, нижние ряды 32-х битных микроконтроллеров ARM по стоимости почти равны нижнему ряду восьми битных микроконтроллеров. Также, это позволяет, например, использовать программатор ST-Link, или другие универсальные программаторы, для программирования большинства микроконтроллеров ARM, что расширяет круг выбора процессоров для проекта. Результатом работы ARM можно считать и наличие единых сред разработки для ARM микроконтроллеров — IAR, KEIL, Mbed, Eclipse и другие.
Оперативная память
Это самая быстрая память, кроме регистров, которая есть у МК. Все данные переменных хранятся в ней, правда только когда у МК есть питание. И чем больше у нас в программе переменных, массивов данных, которые нуждаются в обработке, тем больше оперативной памяти нам необходимо. Во всех МК в качестве оперативной памяти используется SRAM память, а она очень недешево стоит. Поэтому, чем больше памяти у МК, тем он дороже. Сколько памяти необходимо под проект? На этот вопрос очень трудно ответить, основной расход памяти это массивы и глобальные переменные. Любой компилятор СИ при сборке программы показывает затраченный объем памяти, поэтому программа написана, то можно посмотреть сколько необходимо памяти, но если её нет, то остаётся примерно прикинуть. Чем меньше разрядность МК, тем меньшее её обычно нужно. Например на 8-ми битных МК можно встретить 1кбайт оперативной памяти, и его хватает для простых программ. На 32битных бывает 196кбайт ОЗУ и на сложный проект её может не хватить.
Ответ все тот же — чем больше памяти у нас есть — тем дороже МК. Для простых проектов нужен минимальный объем. Чем больше у вас массивов, различных буферов под данные, тем больше нужно памяти. Работа со строками, тоже предполагает увеличенный размер памяти.
Flash память
EEPROM — память данных
Это специальная область памяти, которая так же как и FLASH является энергонезависимой. Но обычно, она имеет гораздо больший ресурс перезаписи — сотни тысяч раз, она служит для хранения настроек программы, важных данных, и может перезаписываться в процессе работы программы.
Если вам нечего хранить, то можно об этом виде памяти не беспокоится. Если вы планируете хранить много данных в этом виде памяти, то её объем важен. Если данных совсем много, то необходимо использовать внешнюю память, в МК обычно этого вида памяти немного — до 10кб.
На этом мы закончим обзор параметров ядра и перейдём к другим модулям.
Как ядро взаимодействует с другими модулями
Например, чтобы послать 1 байт данных по SPI интерфейсу необходимо записать этот байт в специальную ячейку памяти по определённому адресу, в регистр данных SPI. После этого, необходимо в другом регистре SPI установить определённый бит в 1, чтобы началась передача данных. Точно также работают все другие модули. С точки зрения нас, как разработчиков, необходимо записывать в определённый адрес памяти данные или менять биты, или считывать бит. Так, через память, производится работа с прочими модулями МК. В дальнейшем, мы будем работать с каждым модулем в реальных проектах, и подробно их изучим. Если вы собрались программировать МК, то вам просто необходимо подтянуть работу на СИ с битовыми операциями. Для экономии памяти, производители плотно набивают регистры, используя каждый бит.
Clock and power management
Это очень важный модуль. Он отвечает за энергопотребление МК и рабочую частоту ядра. В зависимости от модели МК, данный модуль может позволять менять частоту ядра прямо в процессе работы (например, МК от STM так умеют). Он позволяет задавать различные параметры спящего режима, отключать и включать ту или иную периферию для экономии энергии. Этот же модуль отвечает за работу МК от внешнего генератора частоты или внутреннего кварца. Модуль очень специфический для каждого МК, и все его параметры необходимо изучать в datasheet.
Один из самых важных модулей МК. Остановимся на нем поподробнее.
GPIO — general port input output — порты ввода-вывода. Эта периферия отвечает за работу выводов микроконтроллера. Все выводы МК, кроме специальных (питание, GND), сгруппированы в ПОРТЫ, нумеруемые по буквам латинского алфавита PORT A PORT B PORT C. В зависимости от разрядности МК, может быть 8 выводов в одном порту, 16 или 32. За каждый порт отвечает соответствующий регистр, так, что каждый бит этого регистра отвечает за физический вывод МК. Структура регистров может отличаться у разных МК, но общее схематичное устройство выводов совпадает. Рассмотрим как оно выглядит на примере выдержки из datasheet на STM8. Вот схема одного вывода МК.
Подведём итоги. Что можно получить с одного вывода МК?
МК может выдать (режим OUTPUT) на выводе 0 или 1, если они идут через транзисторы — то это STRONG (сильные) 0 или 1
МК может выдать 0 или 1 через резисторы PULL-UP-DOWN, в этом случае они называются WEAK (слабые) 0 или 1
МК, через триггер Шмитта, может считать (режим INPUT) логическое состояние вывода — 0 там или 1
В ывод может быть подключен к системе прерываний, которая позволяет геренировать прерывание при смене состояния на входе данного вывода.
Также можно заметить, что выводом можно управлять напрямую, через регистр PORTx, или выводом может управлять периферийный модуль. Например, если на вывод подключён модуль UART RX, то вывод может работать как обычный вывод или как UART RX. Это называется альтернативная функция вывода. Производители МК стараются сделать работу выводов с альтернативными функциями как можно более гибкой. Например в STM32 есть возможность подключать UART и другие модули на несколько разных выводов, что упрощает разводку плат. Для того, чтобы не запутаться с выбором альтернативных выводов, производители выпускают специальные визуальные конструкторы, где можно назначить выводы в графической среде.
Для управления выводом обычно МК имеет следующие регистры (на примере STM8):
ODR — output data registr — управление состояние вывода — 0 или 1 имеем на выводе
DDR — direction data registr — направление вывода — вход или выход.
CR1 CR2 — конфигурационные регистры, различные параметры выхода, PULL-UP резисторы и т.д.
IDR — input data registr — считывание данных состояния вывода в цифровом формате 0 или 1
Стоит отметить, что в некоторых МК, если вывод находится в OUTPUT режиме, то все равно можно считать данные на нем через IDR регистр. Это можно использовать например для общения по протоколу 1-Wire.
То если подать на вывод 0 — светодиод не горит, 1 — горит. Дальше мы найдём более широкое применение выводам МК.
ADC и DAC
Аналого-цифровой преобразователь АЦП, англ. Analog-to-digital converter, ADC — устройство, преобразующее входной аналоговый сигнал в дискретный код (цифровой сигнал). Обратное преобразование осуществляется при помощи цифро-аналогового преобразователя (ЦАП, DAC). Если вы знакомы с Arduino, то как раз функция AnalogRead и работает через ADC.
Основные параметры ADC
ADC очень важный периферийный модуль в МК. По своей сути, он превращает МК в цифровой вольтметр, и позволяет измерить сколько вольт у нас находится в данный момент времени на определённом выводе МК. Как правило, в МК один модуль ADC имеет несколько каналов (10-16), которые распределены по разным выводам МК, они обозначаются ADC1 ADC2 … ADC10. Также, МК может иметь несколько независимых модулей ADC (в том время как каналы являются зависимыми, сам модуль один, просто на входе стоит мультиплексор, который подключает нужный канал к модулю). Что выдаёт нам этот модуль на выходе? Как по этому значению определить сколько вольт мы имеем на выводе МК? Зачем нам надо знать сколько у нас вольт, какая от этого польза?
ADC измеряет напряжение в диапазоне от 0В до напряжения питания МК или до напряжения на специальном выводе МК — AREF — analog reference. Одним из основных параметром ADC является его разрядность, то есть максимальное количество дискретных значений, которое он может выдать на всем диапазоне входного аналогового сигнала.
Например, если разрядность ADC равна 10, напряжение питания МК равно 3В, то ADC может выдать числа от 0 до 9. Все ADC являются линейными, то есть выходное число линейно зависит от напряжения. Это значит, что одно выдаваемое деление будет соответствовать 3В/10, что составляет 0.3В. В данном примере 0.3В называется Разрешением ADC (минимальное изменение величины аналогового сигнала, которое может быть преобразовано данным ADC).
Разрядность обычно является степенью числа 2, и о разрядности принято говорить как о количестве бит в числе представленном степенью числа 2. Например, 3-х битный ADC имеет разрядность = 8. К сожалению, все ADC имеют погрешность, и это необходимо учитывать при построении программы и выборе нужного модуля по параметрам.
Ещё одним важным параметром ADC является скорость одного измерения. Чем выше разрядность, тем ниже скорость. Обычно скорость одного измерения составляет несколько микросекунд. Как мы уже сказали выше, каналы в ADC, как правило, не являются независимыми. Это все создаёт свои проблемы при проектировании схем для работы с этим модулем. Сейчас мы не будем подробно рассматривать эти сложности. Мы вернёмся к ним, когда будет делать соответствующие приборы.
Как можно использовать ADС
Основное назначение этого модуля — преобразование сигналов с аналоговых датчиков в цифровой формат. Рассмотрим простую схему.
В данной схеме мы имеем NTC-термистр R2, который подключён к выводу МК. Вместе с резистором R1 он составляет делитель напряжения. В зависимости от изменения температуры, будет меняться его сопротивление и на выводе МК будет меняться напряжение, согласно схеме делителя. Измерив получившееся напряжение с помощью ADC, можно рассчитать сопротивление резистора R2 и по нему температуру. Таким образом, мы можем узнать температуру в градусах и оперировать ей в нашей программе. Еще одно применение ADC — считать состояние переменного резистора. Он тоже является делителем напряжения. В данном случае считанное значение позволит определить сопротивление резистора, а значит, положение его ручки. Так можно использовать резистор в приборе — регулировать громкость, скорость вращения и другие параметры в нашей программе.
К сожалению, ADC встроенные в МК обладают низким разрешением (10-16 бит) и невысокой точностью. Но даже таких ADC хватает для большого количества задач связанных с получением информации с датчиков. Когда нужно более точное измерение, используется внешний ADC. Например, для измерения температуры термопары мы будем использовать очень точный внешний 24-х битный сигма-дельта ADC.
Выбирая МК в проект, надо внимательно смотреть на параметры ADC. Сейчас есть МК и с сигма-дельта ADC на борту, правда стоят они дорого.
Назначение модуля DAC
Timers
Без всякой скромности можно сказать, что это главный модуль МК (после ядра конечно). Таймер — это что-то связанное со временем, подумаете вы. И будете почти правы. В любой программе на МК все привязано к временным интервалам, и умение измерять время просто необходимо. С точки зрения устройства, таймер — это простой счётчик, который с каждым тактом МК (или выделенной для таймера частоты) может или расти на 1 или уменьшаться на 1. Зачем нужен этот счётчик, как этим всем воспользоваться?
Первый параметр таймера — это разрядность, максимальное число до которого может считать счётчик. Оно также обозначается количеством бит, которое выделено под ячейку памяти счётчика. Например, 8-ми битный таймер может считать от 0 до 256, 16-ти битный от 0 до 65536. В основном в МК вы встретите 8, 16, 32 битные таймеры. Для большей гибкости при работе с таймером производители добавили второй регистр, который называется Предделитель. Предделитель считает от заданного числа до 0, и когда достигает 0, то на 1 изменяется основное значение таймера. То есть он как бы делит частоту таймера. Таким образом, использование предделителя позволяет расширить диапазон счётчика таймера до значения РазрядностьТаймера * Предделитель. В предыдущем примере, чтобы считать секунды можно задать предделитель 8000, и тогда 1 значение счётчика таймера будет равно 1 миллисекунде, а 1000 в нашем счётчике наступит когда пройдёт 1 секунда.
Основные события при работе таймера
При работе с таймерами обычно используются прерывания. Прерывания возникают по определенным событиям. Рассмотрим какие события могут возникать при работе с таймерами.
Обновление таймера, переполнение таймера
Сравнение таймера с определенным числом
Входящее событие — таймер может использоваться для анализа входящего сигнала, в этом случае считается время между изменениями сигнала на выводе с 0 на 1 или наоборот.
Самый просто вариант таймера — считающий вниз таймер. Работает он так. В специальный регистр настройки ARR (auto-reload-registr — регистр автообновления) записывается значение счётчика, с которого начинается таймер. По достижению счётчиком 0, срабатывает прерывание ОбновлениеТаймера, в счётчик опять записывается значение из ARR, и все продолжается дальше.
Точно также работает считающий вверх таймер, от 0 до ARR, потом срабатывает прерывание Переполнения и счётчик обнуляется.
Ещё один вариант таймера с использованием регистра ARR — выровненный по центру таймер, счётчик вверх и в низ.
Второй регистр настройки таймера CRR (capture compare registr — регистр захвата и сравнения), позволяет сформировать прерывание по сравнению значения таймера со значением регистра CRR. Используется обычный таймер считающий вверх, просто при достижении значения CCR срабатывает дополнительное прерывание.
При работе со входными событиями, при изменении состояния входа, срабатывает прерывание, и в число из регистра CRR будет соответствовать времени прошедшему от начала таймера.
Самое главное, что этот модуль никак не «загружает» ядро. После старта, таймер работает параллельно ядру, сам по себе, и только генерирует нужные прерывания, а также меняет значения регистров.
Примеры использования таймеров
В любом МК, как правило, очень много таймеров. Например, в старших моделях их число доходит до 20 и более. Также у каждого таймера есть независимые каналы, которые по сути имеют свои значения счётчиков и всех настроек. Они все необходимы, так как в большой сложной программе, очень много процессов отмеряется временными интервалами. Рассмотрим, что можно делать с помощью таймеров.
Организовать счётчик точных временных интервалов. Например мы можем завести переменную miliss, в которой будет храниться количество миллисекунд, прошедшее с включения МК. Запускаем самый просто таймер и так задаём ARR и предделитель, чтобы прерывание срабатывало 1 раз в миллисекунду. В теле прерывания добавляем 1 к переменной miliss. Теперь у нас есть счётчик миллисекунд, и мы можем мигать с нужной частотой светодиодом, и обрабатывать как нам необходимо миллисекундные интервалы.
Декодировать входные сигналы с датчиков, измеряя длину импульсов. С помощью входящего таймера можно измерять время между импульсами с нужной точностью.
По событиям таймера, через определённые настройки, МК может менять состояние выводов с 0 на 1. Таким образом, можно без всяких прерываний и программ можно мигать светодиодом с нужной частотой — 1 раз в секунду.
Таймеры можно связывать в цепочки. Событие одного таймера стартует другой таймер. Это позволяет делать сложные замеры времени между разными входными сигналами на разных выводах МК.
Таймеры могут инициализировать работу другой периферии. Например по событию таймеру можно проводить замер напряжения модулем ADC. Так мы получим измерения напряжения через равные интервалы времени или в нужные моменты времени.
С помощью таймеров можно синхронизировать разные события. После нажатия кнопки, через 3сек зажечь светодиод.
Используя регистр CRR можно с помощью таймера генерировать PWM (ШИМ — широтно импульсная модуляция) сигнал. Делается это очень просто. При обнулении таймера, мы на выводе устанавливаем 1, при сравнении 0. Получается такой сигнал. (Он очень важен, и позволяет получить некий аналог DAC на выводе, что в свою очередь позволяет управлять яркостью светодиода, скорость мотора, через специальный драйвер)
Таймер и кварцевый резонатор
В качестве генератора частоты работы МК может использоваться внутренняя RC цепочка или внешний кварцевый резонатор или кварцевый генератор. К сожалению генератор на основе RC цепочки очень неточный, погрешность составляет 10% и более. С изменением температуры она растёт. Если на основе такого генератора делать например часы, то они будут все время убегать вперёд или отставать. Получить точное измерение времени не получится. Использование кварцевого резонатора решает эту проблему. Они имеют очень высокую точность, погрешность измеряется в процентах на 1 000 000 тактов (ppm). Их точность не падает с нагревом или охлаждением.
Вы должны запомнить, что если вам необходимо точное измерение временных интервалов, то использование внешнего кварца или генератора необходимо!
Comunications interfaces
Для того, чтобы соединить вместе различные приборы, модули, микросхемы, было придумано большое количество цифровых (передаётся 0 или 1) интерфейсов, шин данных. Какие-то интерфейсы «умерли», а какие-то живут и широко используются по сей день. Некоторые из них настолько стали популярны, что производители микроконтроллеров стали добавлять их поддержку в виде отдельных периферийных модулей. В данном разделе коротко рассмотрим эти модули, что они могут, что дают, как ими пользоваться.
С точки зрения выбора микроконтроллера, вы должны понимать, что любой интерфейс можно запрограммировать в коде МК, и для этого ненужен отдельный периферийный модуль, достаточно модуля GPIO и таймеров (эта техника называется дрыгать ногами). Однако, безусловно, если вам в проекте необходим обмен по данным интерфейсам, необходимо выбирать МК, который имеет на «борту» поддержку всех необходимых шин данных. В отличие от программы в МК, работа модулей производится независимо от центрального процессора и не загружает процессор, вам остаётся только обрабатывать прерывания и пользоваться готовыми интерфейсами.
Вот самые распространённые интерфейсы, которые встречаются в МК:
Более подробно интерфейсы взаимодействия будут рассмотрены в других статьях. Здесь мы только приведём способы подключения каждого интерфейса и варианты использования.
Это очень широко используемый интерфейс. Родился он от протокола RS-232, но в настоящее время его возможности гораздо шире. Основные линии данных в нем — RX (чтение данных) и TX (передача данных). Общение по этому интерфейсу идёт асинхронно (может и синхронно) — то есть независимо, во время приёма данных, можно их передавать и наоборот. В данном интерфейсе нет задающей линии CLOCK. Все данные передаются на согласованной частоте.
В отсутствие потока данных на линии передаётся логическая 1. Данные передаются пакетами согласованной длины. Стартовый бит всегда является логическим 0. Он обозначает начало передачи пакета данных. Далее передатчик передаёт данные через равные промежутки времени. В конце посылки может передаваться контрольный бит чётности, для проверки корректности посылки. К сожалению, временные интервалы на разных сторонах могут оказаться разными. Важно, чтобы они не разошлись сильно хотя бы в рамках одного пакета(обычно 8-9 бит). Это основной минус этого интерфейса — частота должна отличаться не более чем на 3% (а лучше 1,5%). Поэтому, если используете этот интерфейс, то лучше сразу позаботиться о кварцевом резонаторе на обеих сторонах, хотя если вы будете работать с прибором в комнате, будет работать без резонатора (основное изменение внутренней частоты происходит из-за смены внешней температуры). Частоту интерфейса принято обозначать в виде скорости отправленных байт, например 9600 байт в секунду. Плюсом интерфейса являются только 2 задействованные сигнальные линии.
Данный интерфейс часто используется для:
передачи данных между компьютером (например прибор USB\UART)
общения с GPS, GSM модулями
загрузки прошивки в МК через bootloader
отладки работы программы
С точки зрения программирования МК, для обмена по этому интерфейсу, все очень просто. Необходимо настроить интерфейс на нужную скорость, определить прочие параметры. А дальше, записываете байт в специальный регистр и включаете передачу, периферия сама сформирует пакет битов, добавит бит чётности и т. д. Точно также при получении данных. Включаете режим получения, периферия получит байт, проверит чётность и поместит его в специальный регистр, останется в МК прочитать его. В СИ есть функция для форматирования строк Printf, очень часто она используются вместе с этим интерфейсом. Таким образом, МК может передавать текст на компьютер, и общаться с вами в специальной программе «Терминал».
Clock — тактовая частота — по этой линии передаётся тактовый сигнал, clock обеспечивает master, главный
MISO — master input slave output — вход главного модуля
По данному интерфейсу обмен может проводится с несколькими устройствами, достигается это за счёт дополнительных выводов CS (chip select) на каждый модуль. Низкий уровень сигнала на выводе CS, означает начало работы с данным модулем. Если у нас, например, на шине SPI три устройства, то надо будет три вывода CS — по одному на устройство. Если у нас одно устройство, то вывод CS все равно нужен, так как он определяет начало и конец обмена данными, сэкономить тут не получится.
Получение данных возможно одновременно с передачей.
Если вы выбираете какой-то датчик для проекта, то лучше выбирать датчик на шине SPI. На этой шине работает очень много датчиков, LCD экраны, микросхемы памяти.
Очень интересная шина данных. Ее преимущество в том, что используется всего 2 провода. При этом на этих двух проводах может быть подключено много устройств.
Интересно то, что каждое устройство может стать мастером в любой момент времени (но это редко используется из-за сложности алгоритма интерфейса). Для построения шины используют 2 вывода — SDA (данные) и SCL (тактовая частота). Частота может быть выбрана из предопределённых — 100 кГц, 400 кГц, 3мГц (не все устройства поддерживают эту частоту). Использовать меньшую частоту можно, превышать не рекомендуется. Данный интерфейс очень сложный с точки зрения программы в МК. Даже имея готовый модуль периферии I2С, разработчики часто сталкиваются с конфликтными ситуациями при работе с этой шиной. Основной причиной этого является очень сложный алгоритм работы шины, который в идеале имеет большое количество исключений. Не все модули полностью обрабатывают нештатные ситуации, и это приводит к конфликтным ситуациям на шине.
В datasheet на МК обычно подробно описан механизм работы с шиной в режиме прерываний или при работе в основном цикле программы. Стоит отметить, что работа через прерывания гораздо проще, но требует довольно высокого приоритета прерываний на эту шину. Работа в основном цикле сложна и требует перебора различных ситуаций при получении данных.
Каждое устройство на шине должно иметь уникальный адрес. Для различных датчиков, обычно он программируется на заводе, и не подлежит изменению — имейте это ввиду, когда покупаете микросхему. Отметим также, что эта шина часто называется по-разному (из-за того, что изначально она лицензировалась компанией Phillips) — TWI, SCCB, SMBus.
Данная шина часто встречается в датчиках, так как это позволяет расширять набор датчиков за счёт одной шины. Также она встречается при работе с памятью (в основном ПЗУ), image sensors (камеры), бывает даже в датчиках GPS (хотя там в основном UART).
Данная шина была специально разработана для объединения в единую сеть различных датчиков и исполнительных устройств. Она нашла своё применение в системах «умный дом», автомобильной промышленности, в промышленной автоматизации. Передача данных идёт по двум проводам CAN RX и CAN TX.
Для доступа к шине, кроме самого МК необходимы микросхемы драйверы, который переносят логику МК на физический уровень шины (это может быть другое напряжение или специальная технология передачи данных, например оптоволоконная линия).
Протокол обмена по данной шине содержит подробное объёмное описание. Передача данных ведётся кадрами, которые принимают все устройства. Каждый кадр состоит из идентификатора и пакета данных. Идентификатор говорит о содержимом пакета и его приоритете, приоритет используется при разрешении коллизии при одновременной передаче данных разными узлами.
Данную шину рекомендуем использовать только там, где это действительно требуется. Конечная реализация устройства на данной шине будет не дешёвым, за счёт драйверов, их обвязки и т. д. С другой стороны следует отметить, что данная шина на физическом уровне имеет очень высокую помехоустойчивость и ряд других преимуществ:
Возможность работы в режиме жёсткого реального времени.
Арбитраж доступа к сети без потерь пропускной способности.
Надёжный контроль ошибок передачи и приёма.
Широкий диапазон скоростей работы.
Большое распространение технологии, наличие широкого ассортимента продуктов от различных поставщиков.
Этот интерфейс настолько распространён, что известен всем. На текущий момент это основной интерфейс подключения периферийных устройств к персональному компьютеру. Если вам необходимо подключать устройство к компьютеру, то вам надо выбирать МК, имеющий данный интерфейс.
Передача данных в USB осуществляется по 2 проводам D+ и D-. Используется дифференциальная сигнальная линия. Шина постоянно разливается, на текущий момент есть стандарт USB 3.0, готовится USB 3.2.
Сам протокол описывать смысла не имеет, спецификация на него очень сложная и многостраничная. Спасает положение дел наличие у производителей МК готовых библиотек для работы по этому протоколу. Как МК может использовать шину USB:
Для прошивки — DFU (device firmaware update) стандарт прошивки по USB все чаше встречается в МК. Наличие такой возможности у МК сильно упрощает прошивку — подключаете прибор в компьютер и видите внешний диск, просто копируете туда прошивку и все готово.
Для организации COM порта и передачи любых данных на компьютер.
Организация устройств ввода — мышка, клавиатура, джойстик, какие-то новые устройства ввода.
USB audio устройство — ваше устройство может проигрывать звук с компьютера или получать его.
Mass storage device — внешний диск — ваше устройство может давать доступ к флеш карте или внутренним данным, сразу представляя их в виде файлов.
USB OTG — вы можете подключать к вашему устройству флешки и другие накопители, звуковые карты и другие устройства также как к компьютеру.
Данная аббревиатура переводится как прямой доступ к памяти. Как мы уже писали выше, любая периферия представлена в МК как ячейка памяти, поэтому в любой программе у вас будет очень много операций копирования информация из одной ячейки в другую. Представим, что нам необходимо получить данные с одного интерфейса, например UART, и отправить их на другой интерфейс, например SPI. Вам придётся прочитать данные из регистра UART и поместить их в регистр SPI, сделать все это в момент получения данных по UART. При этом МК будет занять выполнением этой программы. Вот для того, чтобы разгрузить МК от выполнения таких операций, и была разработана периферия DMA. С помощью этого модуля вы можете настроить копирование области памяти в другую область по событию. Набор событий очень широкий. Таким образом, если за событие взять получение данных по UART, далее настроить копирование данных по адресу UART в адрес SPI, то мы решим данную задачу полностью без участия МК.
Использование данной периферии очень сильно разгружает процессор, особенно при передаче больших массивов данных. Примеры применения DMA:
Копирование данных полученных, с ADC или другой периферии, сразу в ячейку памяти. Вам остаётся только работать с некоей переменной в Си, там всегда будут свежие данные датчика.
Копирование буфера в периферию, даже с побайтным разделением. Например необходимо передать 100байт по SPI, это можно сделать с помощью DMA.
Получение данных с периферии с наполнением кольцевого буфера. Получаем данные с UART и кладем сразу в буфер.
Передача изображения на экран из буфера.
Копирование одного массива памяти в другой.
Если вы планируете работать с большими массивами данных, или вам нужна быстрая обработка сигналов без участия прерываний, то наличие DMA необходимо.
Прочая периферия
Микроконтроллеры постоянно развиваются, и их производители добавляют все новые возможности за счёт периферийных модулей. На текущий момент есть МК, которые имею цифровой видео интерфейс HDMI и позволяют подключаться к ТВ и мониторам. Есть периферия для передачи звука по интерфейсу SPDIF, I2S, AC97. Управление TFT матрицами. МК имеют специальный модуль для работы с различной внешней памятью FMC (NAND flash, SDRAM, SRAM). Могут выходить в сеть — Ethernet интерфейс тоже на борту. Перечислять можно долго. Подбор МК под проект становится все более сложной задачей.
Самый простой способ познакомится с новой периферией – посмотреть топовые МК от различных производителей. Как правило, более новые МК содержат всю ту же периферию, что и младшие МК. Так можно быстро познакомиться с новыми возможностями.
Интерфейс программирования
Для разработки программы для МК используется персональный компьютер. Чтобы передать полученную программу (прошивку) на МК необходим специальный прибор — программатор. А для его работы, МК должен иметь специальный интерфейс программирования. Когда вы разрабатываете сложную программу, часто необходимо видеть, что содержится в переменных, как работает программа, какие условия выполняются. Тут на помощь приходит специальный прибор — отладчик и соответственно интерфейс отладки.
Если вы решили работать с определенным видом МК, вы должны будете приобрести или сделать самостоятельно, как минимум программатор, а ещё лучше отладчик. Наличие схем таких приборов или их низкая стоимость, снижает порог вхождения в данную группу МК. Прежде чем приобретать микроконтроллер, вам надо озаботится о том как вы будете его программировать.
Каждый производитель старается сделать самый лучший и удобный интерфейс отладки и программирования, поэтому все они разные. К сожалению на данный момент нет одного универсального отладчика, программатора всех видов МК.
С прошивкой дела обстоят немного проще. Производители стараются сделать процесс загрузки прошивки более универсальным. В микроконтроллеры в специальную область памяти встраиваются мини программы Bootloader, загрузчики прошивки. Они работают по широко распространненым универсальным интерфейсам. Сами используемые это:
UART — последовательный интерфейс.
CAN шина, есть МК которые можно прошивать по CAN шине, очень удобно для обновления прошивки в машине, в труднодоступных устройствах.
Если у вас есть такая возможность, обязательно надо планировать и использовать возможность загрузки прошивки в ваше устройство по стандартным интерфейсам.
А вот с отладкой все немного хуже. Самые распространённые интерфейсы отладки:
JTAG — используется 5 сигнальных линий, AVR, многие ARM МК.
SWIM — используется одна сигнальная линия, только МК STM8, иногда нужен RESET, если планируется программировать МК в спящем режиме.
SWD — общий протокол для ARM микроконтроллеров, использует 2 линии.
ICSP для МК PIC — PICKIT — свой протокол, свой прибор. Использует 3 линии.
ISP — программатор по порту SPI. Используется в AVR. Используется 4 линии.
Здесь перечислены не все интерфейсы, и общее правило простое — под каждый МК нужен свой программатор отладчик.
Все наши проекты, которые мы будем делать, мы будем сопровождать необходимыми программаторами. Их схемы и инструкции по изготовлению смотрите на нашем сайте.
Производители микроконтроллеров и основные классы
Микроконтроллеры производит очень много компаний. Все их перечислять смысла нет, так как не все можно купить на нашем рынке. Перечислим только наиболее распространённые серии МК и их производителей.
Производителей МК очень много, их параметры сильно отличаются друг от друга. Каждая серия МК имеет свою среду программирования, свои наборы регистров. Можно сказать, что это большой зоопарк. В наших проектах мы специально будем использовать разные МК, которые наиболее распространены на нашем рынке. У нас будут проекты на: