Главная · Windows 7 · Что такое микроконтроллеры и с чем его едят. Введение

Что такое микроконтроллеры и с чем его едят. Введение

Микроконтроллеры уже практически полностью заполнили современный мир электроники. Поэтому каждый начинающий или опытный электронщик рано или поздно сталкивается с этими, на первый взгляд загадочными устройствами. По сути, микроконтроллер – это всего лишь кусок кремния в пластиковом корпусе с металлическими выводами, который самостоятельно не выполняет никаких функций. Однако он способен решать множество сложных задач с довольно высокой скоростью при наличии записанной («прошитой») в него программы. Поэтому нашей задачей является научиться писать программы для микроконтроллера, тем самым превращая его из куска кремния в кусок «золота».

Естественно возникают вопросы что такое микроконтроллер, с чего начинать его изучение, и на каком типе остановит свой выбор? На эти и другие вопросы мы найдем ответ далее. Сейчас же давайте посмотрим, как они могут выглядеть, и вкратце рассмотрим область применения и некоторые возможности микроконтроллеров.

Типы корпусов микроконтроллеров

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

DIP корпус

К первому виду относится DIP корпус. Сокращенно от английского D ual I n L ine P ackage – корпус с двумя рядами выводов. Расстояние между выводами составляет 0,1 дюйма, что равно 2,54 мм. Также подобные корпуса еще обозначают PDIP . Первая буква “Р” обозначает, что корпус пластиковый P lastic . Микроконтроллеры в таком корпусе будем использовать и мы, поскольку такие МК легко устанавливаются на макетную плату, что значительно облегчает выполнять отладку.

Рис.1 – Микроконтроллер ATmega 8 в DIP корпусе

SOIC корпус

Следующим, в порядке снижения габаритов, будет SOIC корпус. Его аббревиатура расшифровывается так: S mall O utline I ntegrated C ircuit . Он используется при пайке поверхностным монтажом, т. е. выводы микросхемы припаиваются к контактным площадкам, расположенным на поверхности платы, а не вставляются в отверстия, как DIP корпус. Расстояние между у SOIC корпусов выводами в два раза меньше, чем в DIP и составляет 1,27 мм.

Рис. 2 – Микроконтроллер AT 89 C 2051 в SOIC корпусе

QFP и TQFP корпуса

Еще меньшие габариты имеет тип корпуса QFP (Q uad F lat P ackage ) или TQFP (T hin Q uad F lat P ackage ) (рис. 3 ). Отличительной особенностью его является расположение выводов по всем четырем сторонам, а сам корпус имеет форму квадрата. Как и SOIC, TQFP предназначен для поверхностного монтажа. Расстояние между выводами в 3 раза меньше, чем в DIP корпусах.

Рис. 3 – Микроконтроллер ATmega 328 P в TQFP корпусе

QFN корпус

Наиболее экзотическим с точки зрения любительской практики является корпус QFN (Q uad F lat N o leads ) . Такой корпус имеет наименьшие габариты среди всех рассмотренных корпусов. В качестве выводов здесь используются контакты, расстояние между которыми в 6 раз меньше, чем в DIP корпусах. По этой причине они редко применяются радиолюбителями. Одна в промышленности такие корпуса находят широкое применение, поскольку габариты готового электронного устройства можно снизить в десятки раз. На рис.4 наглядно видно различия в габаритах одного и того же микроконтроллера (ATmega8) в DIP и QFN корпусах.

Рис. 4 – Микроконтроллер ATmega 8 в DIP и QFN корпусах

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

Рис. 5 – Микроконтроллеры в разных типах корпусов

Микроконтроллеры всюду окружают нас

Область применения МК с каждым днем все больше и больше расширяется. Они используются в самых различных устройствах: от музыкальной открытки до высокоскоростного электропоезда, самолета и ракеты. МК повсеместно применяются в бытовой технике: тостерах, микроволновых печах, кофеварках, холодильниках, стиральных машинах. Они широко внедрены в мобильных телефонах, планшетах, электронных часах, автомобилях, т. е. практически во всех электронных устройствах. И это не удивительно, ведь благодаря микроконтроллерам устройства становятся компактней, легче, надежней, дешевле; снижается их энергопотребление.

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

Основные возможности микроконтроллеров

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

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

Также МК применяются для подсчета импульсов, что дает возможность сосчитать количество срабатываний какого-либо устройства. Например, можно подсчитать количество срабатываний реле с целью контроля или автоматизации определенного процесса.

Наличие встроенного устройства широтно-импульсной модуляции (ШИМ) позволяет управлять частотой вращения вала двигателя.

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

Еще микроконтроллеры могут обмениваться данными между компьютером и другим МК. Для этого практически в любом МК имеется встроенный один или несколько интерфейсов передачи данных: USART, SPI, CAN, USB и др.

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

В чем отличие микроконтроллера от микропроцессора?

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

Какой тип микроконтроллера выбрать для начального изучения?

Для того, что бы освоить программирование микроконтроллеров на достаточно хорошем уровне, сначала необходимо научится программировать какой-то один тип микроконтроллеров и изучить все его возможности. Тогда гораздо проще будет освоить и другие типы МК.

К основным критериям выбора МК относится :

— доступность, т. е. МК можно легко купить в любом радиомагазине;

— низкая стоимость. Здесь все понятно;

— наличие подробной технической документации;

— бесплатное программное обеспечение;

— наличие литературы и достаточного количества примеров по выбранному типу МК.

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

На мой взгляд, и по личному опыту всем названным критериям отвечает микроконтроллер ATmega8 компании Atmel. Его мы и возьмем за основу.

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

Общее устройство микроконтроллеров: основа микроконтроллера, периферийные устройства

Ну вот, уважаемые читатели, мы и подошли к одному из главных вопросов в деле изучения микроконтроллеров – устройству микроконтроллеров.

Микроконтроллеры фирмы ATMEL

Для начала давайте условимся, что слово микроконтроллер в тексте будет прописываться двумя заглавными буквами – МК , так проще и удобнее.

Немножко истории.
Фирма ATMEL была создана в 1984 году, ее полное название – Advanced Technologi Memory and Logic.
Первый МК фирма выпустила в 1993 году.
В 1995 году была придумана новая архитектура процессорного ядра для МК, так называемое RISС-ядро (что это за диво, вы при желании можете ознакомиться в любой популярной литературе, а мы отвлекаться не будем).
Новую архитектуру МК назвали AVR. Идея новой архитектуры ядра оказалась очень удачной, и уже с 1997 года ATMEL начала серийный выпуск МК на основе RISC-ядра.

В настоящее время ATMEL выпускает в год несколько миллиардов МК разнообразных типов. Из всего этого множества мы выделим два семейств восьмиразрядных МК :

- TINY AVR
MEGA AVR

Семейство Tiny – более простые, менее навороченные и, соответственно, более дешевые.
Семейство Mega – более навороченные, но и стоят дороже.
В каждом семействе большое разнообразие различных МК, что позволяет нам выбрать для создаваемой конструкции наиболее оптимальный вариант МК как по его возможностям, так и по цене.

Почему эти семейства МК называются восьмиразрядными (заодно узнаем что такое шины).

МК – сложная штука, в нем (в одном корпусе) размещено много разных устройств, которые, естественно, должны общаться между собой – передавать или принимать данные (нули и единички), передавать и принимать различные сигналы управления, записывать данные в память или считывать их из памяти. Общение устройств между собой а также с «внешним миром» происходит с помощью шин .
Шину можно представить как жгут с несколькими проводами с помощью которых все устройства соединены между собой и по которым передаются цифровые сигналы – логические нули и логические единицы.

В МК имеется три шины :
1. Шина данных (Data Bus – по английски).
Шина данных - шина, предназначенная для передачи информации.
Эта шина служит только для передачи различных данных между устройствами. Эта шина двунаправленная: по ней устройство может как передавать, так и принимать данные. МК семейства Tiny и Mega могут за один раз передать или принять восемь бит информации (бит – наименьшая единица измерения данных в цифровой технике, одна логическая единица или один логический ноль – это один бит информации) . Такая шина называется восьмиразрядной (иногда встречается название – восьмибитовая), а отсюда и сами МК – восьмиразрядными (если грубо, то можно сказать, что все устройства соединены жгутами из восьми проводов).
Минимальная разрядность шины данных – 8 бит (меньше не бывает). Современные компьютеры имеют 64-разрядную шину данных. Разрядность шины данных всегда кратна 8 (восьмиразрядная, шестнадцатиразрядная, тридцатидвухразрядная…)
2. Шина адреса (Addr Bus – по английски).
Шина адреса - шина, на которой в ходе выполнения программы выставляется адрес ячейки памяти, к которой в данный момент времени должен обратиться МК чтобы считать или следующую команду, или данные, или в которую необходимо записать данные.
3. Шина управления (Control Bus – по английски).
Шина управления – шина, а точнее набор линий (проводников) по которым передаются управляющие сигналы с помощью которых определяется как будет происходить обмен информацией – или ее считывание из памяти, или запись в память, а также некоторые специальные сигналы – сигнал готовности, сигнал сброса.
Небольшой пример работы шин.
Необходимо записать число 60 в ячейку памяти:
– на шине адреса выставляется адрес ячейки памяти в которую необходимо записать число
– на шине управления выставляется сигнал записи
– по шине данных передается число 60, которое записывается в выбранную ячейку памяти.
Ну вот, как общаются устройства в МК между собой, мы вроде-бы разобрались. Идем дальше.

В современном МК много различных устройств, в каком-то типе больше, а в каком-то меньше, а кроме того, в разных МК эти устройства могут различаться по своим характеристикам. Но в МК есть то, что составляет его основу и присутствует во всех типах – процессорное ядро (микропроцессорная система – по аналогии с компьютером), которое состоит из трех основных устройств:
1. АЛУ – арифметико-логическое устройство (микропроцессор) которое выполняет все вычисления (выполняет нашу программу).
2. Память -предназначена для хранения программ, данных, а также любой другой нужной нам информации.
3. Порты ввода – вывода . Это выводы МК с помощью которых он общается с «внешним миром». При передаче информации МК выставляет на своих выводах соответствующие логические уровни (0 или 1). При приеме информации МК считывает с этих выводов логические уровни, которые выставлены внешним устройством.
Это трио – основа МК:

Эту основу МК мы с вами рассмотрим очень подробно, но в следующей статье, как и то, что вы прочтете ниже.

В зависимости от модели МК в нем могут присутствовать дополнительные или, как еще говорят – периферийные устройства . Все периферийные устройства работают сами по себе, т.е. отдельно от процессора МК и не мешают выполнению программы. Когда периферийное устройство выполнит свою работу, оно может об этом сообщить процессору, а может и не сообщать – зависит от нашего желания, сами потом посмотрим на результаты.

1. Аналоговый компаратор
Присутствует во всех моделях МК
Аналоговый компаратор – устройство сравнения. Основная задача компаратора – это сравнение двух напряжений: одно из них – образцовое (с чем сравниваем), а второе – измеряемое (сравниваемое). Если сравниваемое напряжение больше образцового – компаратор вырабатывает сигнал логической единицы. Если сравниваемое напряжение меньше образцового – компаратор формирует на своем выходе логический ноль.
С помощью компаратора можно, к примеру, контролировать напряжение на заряжаемом аккумуляторе. Пока напряжение не достигнет нужного уровня, на выходе компаратора – логический ноль, как только напряжение аккумулятора достигло уровня нужного нам, компаратор вырабатывает логическую единицу, и значит можно завершить зарядку аккумулятора.

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

3. Таймер/счетчик
Присутствует во всех моделях МК, но в разных количествах – от 1 до 4, и с разными возможностями.
Таймер/счетчик – это как бы два устройства в одном флаконе: таймер + счетчик.
Таймер – устройство, которое позволяет формировать временные интервалы. Таймер представляет собой цифровой счетчик который считает импульсы или от внутреннего генератора частоты, или от внешнего источника сигнала.
С помощью таймера/счетчика можно:
– отсчитывать и измерять временные интервалы
– подсчитывать количество внешних импульсов
– формировать ШИМ-сигналы
К примеру, мы хотим создать прибор позволяющий измерять частоту входного сигнала (частотомер). В этом случае мы можем использовать два счетчика/таймера. Первый будет отсчитывать временные интервалы равные 1 секунде, а второй будет считать количество импульсов за промежуток времени в 1 секунду которые отсчитывает первый таймер. Количество импульсов подсчитанное вторым таймером/счетчиком за 1 секунду будет равно частоте входного сигнала.
ШИМ - широтно-импульсный модулятор, предназначен для управления средним значением напряжения на нагрузке.
ШИМ – один из вариантов работы таймера/счетчика, позволяющий генерировать на выходе МК прямоугольное импульсное напряжение с регулируемой длительностью между импульсами (скважностью), которое применяется в различных устройствах:
– регулирование частоты вращения электродвигателя
– осветительные приборы
– нагревательные элементы

4. Сторожевой таймер.
Есть во всех моделях МК. Может быть включен или выключен по усмотрению программиста.
У сторожевого таймера только одна задача – производить сброс (перезапускать программу) МК через определенный промежуток времени.
При работе МК могут возникать различные ситуации при которых его нормальная работа будет нарушена (внешние помехи, дурацкая программа, за которую надо голову оторвать программисту). В таких случаях говорят, что МК «завис».
При нормальной работе МК и включенном сторожевом таймере, программа должна периодически производить сброс сторожевого таймера (а периодический сброс мы должны сами предусмотреть в программе) еще до того, как он должен сработать и перезапустить МК. Если программа «зависла», то сброса сторожевого таймера не будет, и через определенный промежуток времени он перезапустит МК.

5. Модуль прерываний.
Прерывание – сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей программы приостанавливается и управление передается обработчику прерывания, который реагирует на событие и обслуживает его (выполняется программа, которую должен выполнить МК при наступлении соответствующего события – прерывания), после чего возвращается в прерванную программу.
Прерывания бывают внутренние и внешние .
Внутренние прерывания могут возникать при работе периферийных устройств МК (АЦП, компаратор, таймер и т.д.)
Внешнее прерывание – событие, которое возникает при наличии сигнала на одном из специальных входов МК (таких специальных входов для внешних прерываний у МК может быть несколько).
Пример.
Внутреннее прерывание. Собрали на МК устройство, которое еще обладает и функцией зарядки резервного источника питания. МК выполняет свою основную программу, аналоговый компаратор в это время проверяет напряжение на аккумуляторе. Как только напряжение аккумулятора снизится ниже допустимого, компаратор вырабатывает сигнал процессору – прерывание, процессор останавливает выполнение основной программы и переходит к выполнению программы прерывания, вызванного компаратором – к примеру, включает схему зарядки аккумулятора, а затем возвращается к выполнению прерванной программы.
Внешнее прерывание. Работа МК происходит также, как и при внутреннем прерывании, но вызываться оно может любым устройством, подключенным к специальному входу МК.

6. Интерфейсы и модули для передачи данных. Мы подробно рассматривать их будем только в том случае, если они потребуются для собираемой нами (в будущем) конструкции. Более подробно о них можно прочитать в популярной литературе.
Последовательный периферийный интерфейс SPI
Имеется во всех моделях МК.
Мы его в 99,9 случаях из 100 применяем для программирования МК.
Кроме программирования МК интерфейс SPI позволяет:
– обмениваться данными между МК и внешними устройствами
– обмениваться данными нескольким МК между собой
Универсальный приемопередатчик
Имеют все модели МК, но разных типов:
– USART
– UART
Предназначены для обмена данными по последовательному каналу.
Последовательный двухпроводный интерфейс TWI Порты ввода/вывода микроконтроллера

Многие не знают, как выглядит микроконтроллер, но наверняка все видели небольшие микросхемы, находящиеся на печатной плате. Одна из таких микросхем запросто может оказаться микроконтроллером. Основная его функция – это управление электронными устройствами. Часто микроконтроллер называют «чипом» или «микрочипом», «мозгами» или просто контроллером.

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

Микроконтроллер представляет из себя микросхему , внутри которой располагаются процессор, оперативно-запоминающее устройство (ОЗУ), постоянное запоминающее устройство (ПЗУ), генератор тактовой частоты и периферийные устройства , такие как аналоговые и цифровые порты, интерфейсы, компараторы, таймеры и т.п. То есть это настоящий мини компьютер в одном маленьком кристалле, предназначенный для решения относительно простых задач. Центром микрочипа является процессор, выполняющий программу, записанную во внутреннее или внешнее ПЗУ. Посредством выполнения программы и происходит решение задач, для которых предназначено электронное устройство.

История микроконтроллеров

Появились микроконтроллеры в 1971 году, благодаря американцам М. Кочрену и Г. Буну. С тех пор их стали массово использовать в компьютерной технике и промышленной автоматизации. В Советском Союзе также велись разработки подобных устройств. Первый отечественный микроконтроллер был создан в 1979 году.

В настоящее время изготовлением микроконтроллеров занимается множество компаний по всему миру. Выпускаются 8-битные, 16-битные и современные производительные 32-битные микроконтроллеры. Наиболее популярными считаются микроконтроллеры PIC, AVR, MSP430 и ARM.

Разнообразие микроконтроллеров

Внешне одинаковые, все они отличаются друг от друга скоростью работы процессора, его разрядностью и размером внутренней памяти. Существует более 200 модификаций микроконтроллеров. Для каждого устройства необходимы микроконтроллеры с определенными параметрами (желательно максимально подходящими под решаемую устройством задачу при минимальной стоимости). Поэтому помимо производительности, при создании микроконтроллера, учитывается и его итоговая стоимость. Наиболее востребованы рынком массовые типы микроконтроллеров, имеющие простое устройство и наиболее дешевые в производстве. Такие микроконтроллеры предназначены для решения простых задач и используются в детских игрушках, бытовой технике, в системах автоматического открывания дверей и т.д. Но существуют и микроконтроллеры, которые могут выполнять множество различных сложных операций за короткий промежуток времени. Такие микрочипы ставят в современные смартфоны, планшеты и другую сложную технику. Конечно, и цена на такие микросхемы соответствующая.

Как программируют микроконтроллеры?

Для того чтобы быть использованным в электронном устройстве, микроконтроллер должен быть запрограммирован управляющей микропрограммой («прошивкой»), которая будет управлять данным устройством. Прошивки, в большинстве случаев, пишутся на таких языках программирования как Си и ассемблер. Язык Си имеет преимущество перед ассемблером, поскольку предоставляет возможности для более быстрой разработки микропрограммы, обладает универсальностью, лучшей читаемостью алгоритма. Если же задача требует использования высокопроизводительных микроконтроллеров для своего решения, то в большинстве случаев в качестве прошивки используют какую либо операционную систему и специально написанное для нее программное обеспечение.

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

Процесс программирования микроконтроллеров

Процесс программирования микроконтроллеров состоит из нескольких этапов. В первую очередь определяются задачи, которые будет выполнять микроконтроллер. Затем разрабатывается схема электрическая принципиальная – графическая модель, предназначенная для обозначения взаимосвязей элементов. Далее составляется алгоритм работы микроконтроллера в устройстве и пишется микропрограмма (или используется уже имеющаяся). По завершению разработки можно приступить непосредственно к загрузке программы в микроконтроллер («прошивке»). С помощью симуляторов и эмуляторов можно промоделировать работу микрочипа на компьютере и увидеть, как он будет работать в устройстве. Для того чтобы файл-прошивку записать в микроконтроллер, используется специальное устройство – программатор, который вместе с микроконтроллером подключается к персональному компьютеру. Есть два способа прошивки – параллельное программирование и внутрисхемное программирование. Первое более быстрое и используется при массовом производстве. Второй вид программирования часто используется для перепрошивки готового устройства.

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

Использование микроконтроллеров

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

Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2015 года составляет
80 000 рублей).

Чтобы понимать то, о чём я буду говорить, желательно, чтобы вы хотя бы на начальном уровне знали электронику или хотя бы более-менее помнили школьный курс физики. Если этим вы похвастаться не можете, то тоже не страшно, так как я буду стараться объяснять всё максимально доступно. Ну а если какие-то вещи останутся для вас непонятными, то задавайте вопросы . Только прошу описывать вашу проблему как можно более подробно, чтобы не тратить своё и моё время на переписку с дополнительными уточнениями.

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

Итак, микропроцессор и микроконтроллер - это специальные микросхемы. Но чем они отличаются друг от друга?

Вопрос не такой простой, как хотелось бы. Скажу больше, я не уверен, что знаю правильный ответ))) Однако, опираясь на свои немалые знания и опыт, я могу попытаться на него ответить.

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

Мне довелось работать на первой советской автоматической телефонной станции (АТС) с программным управлением. Её процессор был собран на микросхемах 155-й серии (электронщики меня поймут). Эта АТС занимала целую комнату.

Но со временем элементная база становилась всё меньше и меньше по размеру. То, что раньше собирали из нескольких десятков микросхем, удалось впихнуть в одну микросхему. Так и получился микропроцессор.

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

Однако техника не стояла на месте. Учёным и инженерам удалось сделать кристаллы микросхем ещё меньше. И кому-то пришла идея объединить все элементы микропроцессорной системы в одну микросхему. Так появился микроконтроллер .

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

Таким образом, чтобы собрать какое-нибудь простейшее устройство, нужно всего лишь:

  • Разработать схему устройства
  • Выбрать микроконтроллер
  • Написать программу для микроконтроллера
  • Загрузить программу в микроконтроллер (“прошить” микроконтроллер)
  • Собрать устройство
  • Наслаждаться результатом

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

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

Сегодня микроконтроллеры применяются практически во всех электронных устройствах - от китайских гирлянд до систем управления атомными станциями. Разумеется, функциональность и надёжность микроконтроллеров в гирляндах и на АЭС отличаются.

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

В современных автомобилях также используются микроконтроллеры в бортовых компьютерах.

В общем, трудно в современном мире найти сферу человеческой деятельности, где бы не применялись микроконтроллеры.

Какой из этого вывод?

Правильно. Если вы станете профессиональным программистом в области разработки устройств на микроконтроллерах и их программирования, то без работы вы не останетесь. А с учётом того, что профессия эта сложная, и не каждому охота с ней связываться, эта работа будет ещё и высокооплачиваемой, так как спрос на таких специалистов высок.

Но об этом мы ещё поговорим в следующих статьях. Ждите писем. А если вы ещё не подписаны, то

Данная статья является обзорной, более подробную информацию по всем разделам можно найти в datasheet на конкретный микроконтроллер (далее МК). Основная цель этой статьи дать общее представление об основных модулях микроконтроллера, ответить на вопрос «Какие параметры МК являются ключевыми при выборе МК под проект?».

Мы будем осваивать все возможности МК сразу на приборах, начиная с простых и постепенно переходя к более сложным схемам. В каждом приборе мы будем подробно разбирать программу, и вы научитесь работать с МК на практике, сразу наблюдая результат своей работы. Также во всех приборах оставлено место для самостоятельной работы. Такой подход более продуктивный и интересный, чем работать с отладочной платой (например, Arduino или STM Discovery board). В этой статье мы не будем подробно рассматривать программирование МК (программированию посвящена отдельная статья Приемы программирования микроконтроллеров). Вам важно только запомнить название и назначение каждого модуля, его возможности и основные параметры. Статья является общей для всех видов МК, и не нацелена на какого то одного производителя.

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

Вы скорее всего хорошо представляете как устроен персональный компьютер . Рассмотрим его основные компоненты:

Микропроцессор (в англоязычной литературе MPU - Micro Processor Unit) содержит функционал компьютерного центрального процессора, или ЦП (CPU - Central Processing Unit) на одном полупроводниковом кристалле (ИМС - интегральная микросхема или на западный манер - Integrated Circuit). Он обрабатывает данные, поступающие с входных периферийных устройств и передаёт обработанные данные на выходные периферийные устройства.

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

Разработать и сделать какое-либо устройство на современном микропроцессоре довольно сложно. В домашних условиях нереально. Шина данных, адресная шина требует много выводов. Их количество у микропроцессора в настоящее время доходит до 1000 выводов. Чтобы развести такое количество ножек нужна как минимум 6-ти слойная плата, а также необходимо использовать микропереходные отверстия - диаметром 0.1 мм. Ну и конечно такая система будет стоить не дёшево.

Микроконтроллер был специально изобретён, чтобы иметь возможность использоваться в самых маленьких устройствах. Это было сделано за счёт объединения в одной микросхеме всех элементов компьютера. Рассмотрим это на схеме:

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

На текущий момент выпущено очень много различных микроконтроллеров - нижняя граница стоимости начинается с 20 рублей за штуку! Чтобы использовать микроконтроллер практически не нужны дополнительные компоненты (несколько конденсаторов, и если необходимо кварц). Подал питание - и все работает.

Как устроен любой микроконтроллер, основные модули

Практически все микроконтроллеры имеют следующие основные модули:

    CORE (ядро) - основной вычислительный модуль

    Memory (память)

    • Flash memory (ПЗУ) - память для хранения программы

      RAM (ОЗУ) - оперативная память для проведения вычислений

      EEPROM (ПЗУ) - память для хранения данных

    Clock and Supply management - модуль управления частотой работы микроконтроллера и питанием

    Interrupt manager - менеджер управления прерываниями

    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бит

    любая программа - это последовательный набор машинных команд, которые записаны и хранятся в определённой области памяти МК (обычно FLASH памяти)

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

    каждая машинная команда в качестве операндов берет данные из внутренних регистров, то есть, чтобы сложить 2 числа, надо сначала их записать в разные регистры, а потом выполнить команду сложения (ADD).

Из этого описания становится понятно, что для того чтобы выполнить реальную строчку кода на СИ бывает необходимо выполнить несколько сотен машинных команд. В datasheet на МК обычно есть отдельный раздел посвящённый описанию сколько тактов занимает выполнение команд на Ассемблере , на СИ обычно эти данные не приводятся, так как очень сильно зависят от компилятора. Несмотря на такую сложность, максимальную частоту ядра все же можно считать некоторым показателем производительности ядра (Более общепризнанная единица производительности процессоров - MIPS , однако она тоже не является реальной мерой производительности). На текущий момент есть микроконтроллеры работающие на частоте 200МГц, в простых же задачах хватает и 1 МГц.

Как выбирать частоту микроконтроллера под проект? Самый простой ответ - чем больше тем лучше, однако с частотой растёт цена и энергопотребление процессора. Основной критерий выбора частоты - это необходимая частота обработки данных и сложность алгоритма их обработки. Например, если мы строим метеостанцию и будем опрашивать датчик раз в секунду, то скорее всего нам хватит 1МГц. А вот если мы делаем квадр о коптер и пересчитываем все его параметры по очень сложным алгоритмам 1000 раз в секунду, то необходимо около 100Мгц и более. Для обработки видео HD качества нужен уже процессор с частотой 1Ггц (микроконтроллер с этим не справится). Обычно этот параметр устанавливается опытным путём и берётся с запасом, чтобы была возможность поменять частоту в процессе работы и подобрать оптимальный режим загрузки МК и энергопотребления. Частоту можно программно сделать меньше максимальной. Для почти всех наших проектов частоты в 16Мгц более чем достаточно. На текущий момент практически все МК могут работать на такой частоте.

Разрядность регистров

Вы, наверное, уже слышали или читали, что например 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 память

Это специальная область памяти, которая является энергонезависимой. То есть, она сохраняется при отключении питания МК. Обычно в ней хранится программа или данные программы, которые меняются редко. Ресурс её перезаписи обычно ограничен, хоть и измеряется тысячами раз. Чем больше у нас этого вида памяти, тем более объёмную программу можно использовать в проекте. Это ваш жёсткий диск. Но опять же ограничение - это цена. При переходе на более высокую разрядность опять же объем доступной Flash растёт, но обычно та же самая программа занимает уже больше места. Например 8-ми битные МК имеют 8кб памяти, и это очень много. А 32-ух битные начинаются, как правило, с 32кб, и это не так уж много для них. На первых проектах нам будет хватать 8-ми битных МК с 8 кб на борту.

EEPROM - память данных

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

Если вам нечего хранить, то можно об этом виде памяти не беспокоится. Если вы планируете хранить много данных в этом виде памяти, то её объем важен. Если данных совсем много, то необходимо использовать внешнюю память, в МК обычно этого вида памяти немного - до 10кб.

На этом мы закончим обзор параметров ядра и перейдём к другим модулям.

Как ядро взаимодействует с другими модулями

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

Например, чтобы послать 1 байт данных по SPI интерфейсу необходимо записать этот байт в специальную ячейку памяти по определённому адресу, в регистр данных SPI. После этого, необходимо в другом регистре SPI установить определённый бит в 1, чтобы началась передача данных. Точно также работают все другие модули. С точки зрения нас, как разработчиков, необходимо записывать в определённый адрес памяти данные или менять биты, или считывать бит. Так, через память, производится работа с прочими модулями МК. В дальнейшем, мы будем работать с каждым модулем в реальных проектах, и подробно их изучим. Если вы собрались программировать МК, то вам просто необходимо подтянуть работу на СИ с битовыми операциями. Для экономии памяти, производители плотно набивают регистры, используя каждый бит.

Clock and power management

Это очень важный модуль. Он отвечает за энергопотребление МК и рабочую частоту ядра. В зависимости от модели МК, данный модуль может позволять менять частоту ядра прямо в процессе работы (например, МК от STM так умеют). Он позволяет задавать различные параметры спящего режима, отключать и включать ту или иную периферию для экономии энергии. Этот же модуль отвечает за работу МК от внешнего генератора частоты или внутреннего кварца. Модуль очень специфический для каждого МК, и все его параметры необходимо изучать в datasheet.

GPIO

Один из самых важных модулей МК. Остановимся на нем поподробнее.

GPIO - general port input output - порты ввода-вывода. Эта периферия отвечает за работу выводов микроконтроллера. Все выводы МК, кроме специальных (питание, GND), сгруппированы в ПОРТЫ, нумеруемые по буквам латинского алфавита PORT A PORT B PORT C. В зависимости от разрядности МК, может быть 8 выводов в одном порту, 16 или 32. За каждый порт отвечает соответствующий регистр, так, что каждый бит этого регистра отвечает за физический вывод МК. Структура регистров может отличаться у разных МК, но общее схематичное устройство выводов совпадает. Рассмотрим как оно выглядит на примере выдержки из datasheet на STM8. Вот схема одного вывода МК.


Разберём эту схему для понимания методики работы с выводами микроконтроллера. Во первых, обратим внимание на защитные диоды, как правило они есть у всех (но их может не быть). Их задача защитить вывод от отрицательного напряжения, превышения напряжения, статического напряжения и других неприятностей. К сожалению, микроконтроллеры очень маленькие, и всё внутри рассчитано на очень небольшие токи. Вы должны сразу запомнить, что выводы МК выдерживают токи не более 30 мА (точные данные смотри в datasheet) , а в случае превышения напряжения больше рабочего - ещё меньше - 2 мА . Во вторых, мы видим два транзистора, которые работают в ключевом режиме, и открыт может быть только один из них. Если открыт нижний транзистор, то вывод подключается к GND, и на нем мы наблюдаем логический 0. Если открыт верхний транзистор - то к VDD, и на выводе логическая 1.

Отдельно есть транзистор, который подключает вывод к VDD через резистор (около 50кОм). Такая схема подключения называется PULL-UP. Бывает такой же вариант, но с подключением резистора к GND, тогда это называется PULL-DOWN. При тако м подключении, мы имеем на выводе логическую 1, с малым током через резистор PULL-UP, пока закрыт нижний транзистор. Если же его открыть, то на выходе будет логический 0, потому что соединение к GND будет через меньшее сопротивление транзистора . Данная схема очень часто используется в схемах получения данных на выводе с кнопок или других датчиков.

Сам вывод может быть подключён к линии Analog Input - эта линия используется модулем ADC. Также, вы видите Триггер Шмитта на входе вывода. Он необходимо для того, чтобы можно было считать состояние вывода в логическом формате - 0 или 1.

Подведём итоги. Что можно получить с одного вывода МК?

    МК может выдать (режим OUTPUT) на выводе 0 или 1, если они идут через транзисторы - то это STRONG (сильные) 0 или 1

    МК может выдать 0 или 1 через резисторы PULL-UP-DOWN, в этом случае они называются WEAK (слабые) 0 или 1

    МК может иметь на выводе неопределённое состояние (HIGH IMPENDANCE - Z), см. Three-state logic , когда ни один транзистор не включен.

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

Также можно заметить, что выводом можно управлять напрямую, через регистр 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 на выводе? Зачем это нужно? Самое простое, что приходит в голову - можно светить светодиодом. Если собрать такую схему:

То если подать на вывод 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-х битный сигма-дельта AD .

Выбирая МК в проект, надо внимательно смотреть на параметры ADC. Сейчас есть МК и с сигма-дельта ADC на борту, правда стоят они дорого.

Назначение модуля DAC

Данный модуль встречается в МК не так часто как ADC. Основное его назначение - это генерация аналогового сигнала на выходе МК, например звука. Аналоговый сигнал можно использовать для управления другими аналоговыми участками схемы. Он обладает такими же основными параметрами - разрядность и разрешение, только все работает наоборот. Мы записываем нужную цифру в регистр DAC в программе МК, а на выводе устанавливается соответствующее этой цифре напряжение.

Timers

Без всякой скромности можно сказать, что это главный модуль МК (после ядра конечно). Таймер - это что-то связанное со временем, подумаете вы. И будете почти правы. В любой программе на МК все привязано к временным интервалам, и умение измерять время просто необходимо. С точки зрения устройства, таймер - это простой счётчик, который с каждым тактом МК (или выделенной для таймера частоты) может или расти на 1 или уменьшаться на 1. Зачем нужен этот счётчик, как этим всем воспользоваться?

Допустим частота работы МК 8МГц, значит 1 такт длится 125 наносекунд (1/8 000 000). Если в начале запуска счётчика его значение было равно 0, то когда там будет 8 000 000, то пройдёт ровно 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 и более. Также у каждого таймера есть независимые каналы, которые по сути имеют свои значения счётчиков и всех настроек. Они все необходимы, так как в большой сложной программе, очень много процессов отмеряется временными интервалами. Рассмотрим, что можно делать с помощью таймеров.


Таймер и кварцевый резонатор

В качестве генератора частоты работы МК может использоваться внутренняя RC цепочка или внешний кварцевый резонатор или кварцевый генератор. К сожалению генератор на основе RC цепочки очень неточный, погрешность составляет 10% и более. С изменением температуры она растёт. Если на основе такого генератора делать например часы, то они будут все время убегать вперёд или отставать. Получить точное измерение времени не получится. Использование кварцевого резонатора решает эту проблему. Они имеют очень высокую точность, погрешность измеряется в процентах на 1 000 000 тактов (ppm). Их точность не падает с нагревом или охлаждением.

Вы должны запомнить, что если вам необходимо точное измерение временных интервалов, то использование внешнего кварца или генератора необходимо!

Comunications interfaces

Для того, чтобы соединить вместе различные приборы, модули, микросхемы, было придумано большое количество цифровых (передаётся 0 или 1) интерфейсов, шин данных. Какие-то интерфейсы «умерли», а какие-то живут и широко используются по сей день. Некоторые из них настолько стали популярны, что производители микроконтроллеров стали добавлять их поддержку в виде отдельных периферийных модулей. В данном разделе коротко рассмотрим эти модули, что они могут, что дают, как ими пользоваться.

С точки зрения выбора микроконтроллера, вы должны понимать, что любой интерфейс можно запрограммировать в коде МК, и для этого ненужен отдельный периферийный модуль, достаточно модуля GPIO и таймеров (эта техника называется дрыгать ногами). Однако, безусловно, если вам в проекте необходим обмен по данным интерфейсам, необходимо выбирать МК, который имеет на «борту» поддержку всех необходимых шин данных. В отличие от программы в МК, работа модулей производится независимо от центрального процессора и не загружает процессор, вам остаётся только обрабатывать прерывания и пользоваться готовыми интерфейсами.

Вот самые распространённые интерфейсы, которые встречаются в МК:

    общения с GPS, GSM модулями

    загрузки прошивки в МК через bootloader

    отладки работы программы

С точки зрения программирования МК, для обмена по этому интерфейсу, все очень просто. Необходимо настроить интерфейс на нужную скорость, определить прочие параметры. А дальше, записываете байт в специальный регистр и включаете передачу, периферия сама сформирует пакет битов, добавит бит чётности и т. д. Точно также при получении данных. Включаете режим получения, периферия получит байт, проверит чётность и поместит его в специальный регистр, останется в МК прочитать его. В СИ есть функция для форматирования строк Printf, очень часто она используются вместе с этим интерфейсом. Таким образом, МК может передавать текст на компьютер, и общаться с вами в специальной программе «Терминал».

SPI

Последовательный интерфейс с поддержкой очень высоких скоростей передачи данных - до 30Мгц. Отметим также, что этот интерфейс прост в использовании. Он имеет 3 сигнальные линии:

    Clock - тактовая частота - по этой линии передаётся тактовый сигнал, clock обеспечивает master, главный

    MISO - master input slave output - вход главного модуля

    MOSI - master output slave input - выход главного модуля

По данному интерфейсу обмен может проводится с несколькими устройствами, достигается это за счёт дополнительных выводов CS (chip select) на каждый модуль. Низкий уровень сигнала на выводе CS, означает начало работы с данным модулем. Если у нас, например, на шине SPI три устройства, то надо будет три вывода CS - по одному на устройство. Если у нас одно устройство, то вывод CS все равно нужен, так как он определяет начало и конец обмена данными, сэкономить тут не получится.


Получение данных возможно одновременно с передачей.

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

Если вы выбираете какой-то датчик для проекта, то лучше выбирать датчик на шине SPI. На этой шине работает очень много датчиков, LCD экраны, микросхемы памяти.

I2C

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


Интересно то, что каждое устройство может стать мастером в любой момент времени (но это редко используется из-за сложности алгоритма интерфейса). Для построения шины используют 2 вывода - SDA (данные) и SCL (тактовая частота). Частота может быть выбрана из предопределённых - 100 кГц, 400 кГц, 3мГц (не все устройства поддерживают эту частоту). Использовать меньшую частоту можно, превышать не рекомендуется. Данный интерфейс очень сложный с точки зрения программы в МК. Даже имея готовый модуль периферии I2С, разработчики часто сталкиваются с конфликтными ситуациями при работе с этой шиной. Основной причиной этого является очень сложный алгоритм работы шины, который в идеале имеет большое количество исключений. Не все модули полностью обрабатывают нештатные ситуации, и это приводит к конфликтным ситуациям на шине.

В datasheet на МК обычно подробно описан механизм работы с шиной в режиме прерываний или при работе в основном цикле программы. Стоит отметить, что работа через прерывания гораздо проще, но требует довольно высокого приоритета прерываний на эту шину. Работа в основном цикле сложна и требует перебора различных ситуаций при получении данных.

Каждое устройство на шине должно иметь уникальный адрес. Для различных датчиков, обычно он программируется на заводе, и не подлежит изменению - имейте это ввиду, когда покупаете микросхему. Отметим также, что эта шина часто называется по-разному (из-за того, что изначально она лицензировалась компанией Phillips) - TWI, SCCB, SMBus.

Данная шина часто встречается в датчиках, так как это позволяет расширять набор датчиков за счёт одной шины. Также она встречается при работе с памятью (в основном ПЗУ), image sensors (камеры), бывает даже в датчиках GPS (хотя там в основном UART).

CAN

Данная шина была специально разработана для объединения в единую сеть различных датчиков и исполнительных устройств. Она нашла своё применение в системах «умный дом», автомобильной промышленности, в промышленной автоматизации. Передача данных идёт по двум проводам CAN RX и CAN TX.

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

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

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

    Возможность работы в режиме жёсткого реального времени.

    Простота реализации.

    Арбитраж доступа к сети без потерь пропускной способности.

    Надёжный контроль ошибок передачи и приёма.

    Широкий диапазон скоростей работы.

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

USB

Этот интерфейс настолько распространён, что известен всем. На текущий момент это основной интерфейс подключения периферийных устройств к персональному компьютеру. Если вам необходимо подключать устройство к компьютеру, то вам надо выбирать МК, имеющий данный интерфейс.

Передача данных в USB осуществляется по 2 проводам D+ и D-. Используется дифференциальная сигнальная линия. Шина постоянно разливается, на текущий момент есть стандарт USB 3.0, готовится USB 3.2.

Сам протокол описывать смысла не имеет, спецификация на него очень сложная и многостраничная. Спасает положение дел наличие у производителей МК готовых библиотек для работы по этому протоколу. Как МК может использовать шину USB:

    Для прошивки - DFU (device firmaware update) стандарт прошивки по USB все чаше встречается в МК. Наличие такой возможности у МК сильно упрощает прошивку - подключаете прибор в компьютер и видите внешний диск, просто копируете туда прошивку и все готово.

    Для организации COM порта и передачи любых данных на компьютер.

    Организация устройств ввода - мышка, клавиатура, джойстик, какие-то новые устройства ввода.

    USB audio устройство - ваше устройство может проигрывать звук с компьютера или получать его.

    Mass storage device - внешний диск - ваше устройство может давать доступ к флеш карте или внутренним данным, сразу представляя их в виде файлов.

    USB OTG - вы можете подключать к вашему устройству флешки и другие накопители, звуковые карты и другие устройства также как к компьютеру.

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

DMA

Данная аббревиатура переводится как прямой доступ к памяти. Как мы уже писали выше, любая периферия представлена в МК как ячейка памяти, поэтому в любой программе у вас будет очень много операций копирования информация из одной ячейки в другую. Представим, что нам необходимо получить данные с одного интерфейса, например 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 линии.

Здесь перечислены не все интерфейсы, и общее правило простое - под каждый МК нужен свой программатор отладчик.

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

Производители микроконтроллеров и основные классы

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