Для чего нужны микроконтроллеры

Что такое микроконтроллеры и зачем они нужны

Общие сведения о микроконтроллерах

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

О микроконтроллерах

Около 55% проданных в мире процессоров приходится на 8ми битные микроконтроллеры. Более 4 млрд. 8ми битных микроконтроллеров продано в 2006. Они установлены в микроволновках, стиральных машинах, музыкальных центрах… При этом они являются однокристальными компьютерами, со своим процессором, памятью, портами ввода-вывода. В статье я постараюсь кратко объяснить что это за звери и как их приручают.

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

Микроконтроллер – это однокристальная ЭВМ. В 1971 придумали разместить всю обвязку процессора (ОЗУ, контроллеры портов, ПЗУ и т.д.) на одном чипе. В 1980 intel уже выпускает первый микроконтроллер. На сегодняшний момент на чипе микроконтроллера содержится процессор, flash память для программ, объемом 1К – 256K; 32 B — 8KB SRAM (ОЗУ); 64 B – 4KB EEPROM. Тактовая частота 1 – 16 Мгц. Конечно же цифры только примерные, всё зависит от производителя и модели. Таким образом микроконтроллер имеет гарвардскую архитектуру, т.е. раздельные памяти данных и программ.

Естественно без холивара не обошлось и тут. На рынке примерно по 30% занимают контроллеры разных производителей и архитектур. Старое семейство MCS-51 (8051), семейство PIC от фирмы microchip и семейство AVR от фирмы Atmel. Всяческие специализированные микроконтроллеры мы не рассматриваем. (Есть кстати даже наш, отечественный микроконтроллер КР1878ВЕ1 (An15E03) от фирмы Ангстрем, только для него пишут и на нем разрабатывают устройства военные и законченные гики, т.к. нет ни развитой поддержки, ни инструментария). На тех форумах, что я обитаю, подавляющим большинством используются микроконтроллеры фирмы atmel, поэтому дальнейшее повествование будет в основном о них. Глобально они от PIC и других не отличаются, различия лишь в параметрах (скорость, количество команд, памяти, наличие перефирии…).

Причины использования микроконтроллеров.

Несмотря на то, что микроконтроллер устройство довольно сложное, их использование значительно упрощает разработку электронных устройств. Аппаратные схемотехнические решения переносятся в плоскость программного кода. Реле в шкафу автоматики заменяется строкой на Си. Этим и достигается огромная гибкость, ведь большинство микроконтроллеров можно перепрошивать не вынимая из платы. Часы будильник с функцией включения нагрузки (например чайника) в заданное время может быть аппаратно абсолютно таким же, как например блок управления микроволновкой, только программы будут различаться. Именно из-за этого, когда производитель не может себе позволить разработать специализированную микросхему он задает всю логику работы виде программы и зашивает ее в микроконтроллер.

На чем программируется микроконтроллер?

Исторически основной язык – ассемблер. В частности КР1878ВЕ1 программируется только на ассемблере. Для других микроконтроллеров существую компиляторы для языка Си. Для atmelовских микроконтроллеров существует опенсорсный компилятор WinAVR (порт gcc). Также есть компилятор для бейсика Bascom AVR, и даже для языка Forth. Изначально архитектура микроконтроллеров AVR была оптимизирована для того, что бы программы написанные на Си выполнялись быстрее.

Рассмотрим на примере.
Давайте возьмем микроконтроллер ATMEGA8 и на его примере рассмотрим что он может.
За 28 руб. (опт) / 41 руб. (розн) мы получаем чип, который содержит в себе:
• 8 ми битный RISC процессор, 130 команд, большая часть из которых выполняется за 1 такт, 32 регистра общего назначения. Производительность до 16 MIPS при 16 Мгц.
• 8К flash памяти для программ, 512 байт EEPROM памяти, 1K SRAM
• Два 8ми битных и один 16 битный таймер (позволяют формировать импульсы заданной длительности/ подсчитывать импульсы автономно, не отвлекая CPU)
• 3 канала ШИМ
• 8ми канальный АЦП
• Аппаратный модуль Two Wire Interface (клон I2C)
• Модуль USART
• Аналоговый компаратор.
• 23 линии ввода/вывода
Подробно всё описано в даташите к этому микроконтроллеру: www.atmel.com/dyn/resources/prod_documents/doc2486.pdf (308 стр, англ.). Среди выпускаемых фирмой Atmel это не самый слабый и не самый крутой микроконтроллер.
Так как количество ножек у микросхемы ограничено, то практически все имеют по 2 функции, переключаемые программно.
Линии ввода-вывода объединены группами по 8 в порты, именуемые PORTA, PORTB и т.д. Управление портами и встроенной периферией производится путем записи и чтения данных из специальных регистров. Так например что бы выставить высокий логический уровень (+5 В) на третьей линии порта A нужно выставить третий бит в регистре PORTA вот так:
PORTA |= (1 ADCSRA |= (1

Работа с остальными модулями микроконтроллера (USART, TWI, таймеры) примерно такая же – выставить нужные биты, что бы их настроить, и забрать/записать данные в специальные регистры.

У микроконтроллера развитая система прерываний. Что бы не нагружать процессор постоянной проверкой состояния (завершилось ли преобразование АЦП, достиг ли счётчик таймера требуемого значения, поступил ли сигнал на порт) включаются прерывания на соответствующие события и пишутся обработчики прерывания.
Программа микроконтроллера представляет собой бесконечный цикл. Вот например программа которая будет мигать светодиодом, подключенным в 3 ноге порта A:

#include
void main (void)
<
while(1)
<
PORTA |= (1

Источник

Микроконтроллеры: что это такое и зачем нужны

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

Для работы с микроконтроллерами, такими как Ардуино или 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, системами обработки событий и самопрограммированием.

Микроконтроллеры для начинающих

Если вы собираетесь программировать микроконтроллеры, такие как Ардуино, например, а также собирать устройства, которые предусматривают их наличие в схеме, необходимо учитывать некоторые правила и рекомендации:

Для того, чтобы новичок мог заниматься микроконтроллерами, рекомендуется изучать базовые материалы. К таким материалам можно отнести следующие книги:

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

Источник

Разработчики микроконтроллеров придумали остроумную идею – объединить процессор, память, ПЗУ и периферию внутри одного корпуса, внешне похожего на обычную микросхему. С тех пор производство микроконтроллеров ежегодно во много раз превышает производство процессоров, а потребность в них не снижается.

Микроконтроллеры выпускают десятки компаний, причем производятся не только современные 32-битные микроконтроллеры, но и 16, и даже 8-битные (как i8051 и аналоги). Внутри каждого семейства часто можно встретить почти одинаковые модели, различающиеся скоростью работы ЦПУ и объемом памяти.

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

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

На сегодняшний день существует более 200 модификаций микроконтроллеров, совместимых с i8051, выпускаемых двумя десятками компаний, и большое количество микроконтроллеров других типов. Популярностью у разработчиков пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры, архитектуры ARM, которую разрабатывает фирма ARM Limited и продаёт лицензии другим фирмам для их производства.

Для чего нужны микроконтроллеры. Смотреть фото Для чего нужны микроконтроллеры. Смотреть картинку Для чего нужны микроконтроллеры. Картинка про Для чего нужны микроконтроллеры. Фото Для чего нужны микроконтроллеры

16-битный 28-pin PDIP PIC24 микроконтроллер

Для чего нужны микроконтроллеры. Смотреть фото Для чего нужны микроконтроллеры. Смотреть картинку Для чего нужны микроконтроллеры. Картинка про Для чего нужны микроконтроллеры. Фото Для чего нужны микроконтроллеры

Микроконтроллер Atmel AVR ATmega8 в корпусе DIP

Для чего нужны микроконтроллеры. Смотреть фото Для чего нужны микроконтроллеры. Смотреть картинку Для чего нужны микроконтроллеры. Картинка про Для чего нужны микроконтроллеры. Фото Для чего нужны микроконтроллеры

Устройство микроконтроллера AVR

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

В ходе работы микрконтроллер считывает команды из памяти или порта ввода и исполняет их. Что означает каждая команда, определяется системой команд микроконтроллера. Сиситема команд заложена в архитектуре микрконтроллера и выполнение кода команды выражается в проведении внутренними элементами микросхемы определенных микроопераций.

Микроконтроллеры позволяют гибко управлять различными электронными и электрическими устройствами. Некоторые модели микроконтроллеров настолько мощны, что могут непосредственно переключать реле (к примеру, на елочных гирляндах).

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

Софт для микроконтроллеров может привлечь внимание тех, кто обожает «гоняться за битами», так как обычно память в микроконтроллерах составляет от 2 до 128 Кб. Если меньше, то писать приходится на ассемблере или Форте, если есть возможность, то используют специальные версии Бейсика, Паскаля, но в основном – Си. Прежде чем окончательно запрограммировать микроконтроллер, его тестируют в эмуляторах – программных или аппаратных.

Для чего нужны микроконтроллеры. Смотреть фото Для чего нужны микроконтроллеры. Смотреть картинку Для чего нужны микроконтроллеры. Картинка про Для чего нужны микроконтроллеры. Фото Для чего нужны микроконтроллеры

Тут может возникнуть вопрос: микропроцессор и микроконтроллер это просто разное название одного и того же устройства, или это все-таки разные вещи?

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

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

Зарубежная же вычислительная техника на месте не стояла, поэтому ОМЭВМ стали называться контроллерами (от англ. Control – управлять, управление). И в самом деле, контроллеры оказались весьма пригодны для управления различной техникой, даже не очень сложной.

Для чего нужны микроконтроллеры. Смотреть фото Для чего нужны микроконтроллеры. Смотреть картинку Для чего нужны микроконтроллеры. Картинка про Для чего нужны микроконтроллеры. Фото Для чего нужны микроконтроллеры

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

Так что же такое микроконтроллер и чем отличается от собственно процессора или это совершенно различные электронные компоненты?

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

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

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

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

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

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

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

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

Смотите также у нас на сайте:

Смотрите также по этой теме обучающие видеокурсы Мaкcима Селиванова:

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

Курс замечательно подойдет и тем, кто только недавно предпринял первые попытки изучить программирование микроконтроллеров, но уже готов все бросить от того, что у него ничего не работает или работает, но не так как ему нужно (знакомо?!).

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

Курс рассчитан на подготовленного слушателя. То есть, в курсе не рассматриваются базовые основы информатики и электроники и микроконтроллеров. Но, что бы освоить курс понадобятся минимальные знания по программированию микроконтроллеров AVR на любом языке. Знания электроники желательны, но не обязательны.

Курс идеально подойдет тем, кто только начал изучать программирование AVR микроконтроллеров на языке С и хочет углубить свои знания. Хорошо подойдет и тем, кто немного умеет программировать микроконтроллеры на других языках. И еще подойдет обычным программистам, которые хотят углубить знания в языке Си.

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

Материал курса прежде всего ориентирован на практику использования. Рассматриваются следующие темы: радиочастотная идентификация, воспроизведение звука, беспроводной обмен данными, работа с цветными TFT дисплеями, сенсорным экраном, работа с файловой системой FAT SD-карты.

Источник

Микроконтроллеры

Данная статья является обзорной, более подробную информацию по всем разделам можно найти в 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 линии.

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

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

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

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

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

Источник

Добавить комментарий

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