Что это? Программирование микроконтроллеров тесно связано с интернетом вещей. То есть вы пишите программу для компактного умного устройства, который управляет, к примеру, десятками девайсов в вашем умном доме или определенными процессами на производстве.
Как научиться? Чтобы научиться программировать микроконтроллеры, необходимо для начала разобраться в самой архитектуре этих устройств, понять, как они работают, выучить один из языков программирования. Всё это можно сделать на специальных курсах.
В статье рассказывается:
- Что такое микроконтроллер
- Классификация микроконтроллеров
- 3 условия для программирования микроконтроллеров
- Программы и алгоритмы для микроконтроллеров
- Языки программирования микроконтроллеров
- Быстрый способ начать программировать микроконтроллеры
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Что такое микроконтроллер
Эту микросхему (микроконтроллер) можно назвать ЭВМ, собранной на одном кристалле. Она также содержит процессор и периферийные устройства, оперативную память и ПЗУ. Такой однокристальный компьютер предназначен для управления периферией и вполне способен выполнять некоторые вычислительные функции.
В классическом исполнении ПК или телефон оснащен микропроцессором, у которого все вспомогательные модули (блок питания, таймеры, устройства ввода-вывода и др.), без которых невозможна его работа, находятся отдельно.
Микроконтроллер принципиально отличается тем, что в единую микросхему интегрированы не только ядро процессора и память, но и множество дополнительных устройств, предназначение которых состоит в решении различных задач. Между основными производителями подобных микросхем происходит даже негласное соревнование по количеству и функционалу периферийных устройств, а не по тактовой частоте или объёму памяти.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Бывало, что разрабатывались модели микроконтроллеров с внешним основным запоминающим устройством, и, наоборот, производители процессоров часто реализовывали интеграцию периферийных устройств на одном кристалле. Можно вспомнить, что ранние ПК оснащались вычислителями с вынесенным кэшем. Но, тем не менее эволюция осуществляется по двум независимым направлениям.
За последние 10 лет наибольшую популярность завоевали такие модели микроконтроллеров:
- 8-битные микроконтроллеры PIC фирмы Microchip Technology и AVR фирмы Atmel;
- 16-битные MSP430 фирмы TI;
- 32-битные микроконтроллеры, архитектуры ARM. Разработчики других компаний могут её приобрести и использовать как базу для конструирования своих наработок.
Такие интегральные устройства разработали и начали производить с целью значительно снизить размеры изделий, функционирование которых не требует больших вычислительных мощностей. Кроме этого, монтаж одного чипа обходится дешевле, чем сборка на плате нескольких отдельных элементов.
Но здесь есть, конечно, и свои ограничения. На современном технологическом уровне пока ещё невозможно на одном кристалле получить устройство, сравнимое по мощности и функциональным возможностям со сборками интегральных схем на довольно внушительных по размерам платах персонального компьютера.
- Тактовая частота колеблется около величины в 200 МГц (чаще даже ниже – не превышая 100 МГц).
- Объём ОЗУ и памяти программ составляет от нескольких десятков килобайт до 1 Мб.
Классификация микроконтроллеров
Устройства подразделяются по параметрам:
- разрядность;
- система команд;
- архитектура памяти.
Разрядность – это удельная величина количества информации, передаваемой за один цикл работы процессора или микроконтроллера. Это понятие неразрывно связано с понятием тактовой частоты — количества операций за единицу времени. Объединение всех элементов на одном кристалле породило проблему скорости передачи информации между процессором и другими устройствами на шине, так как любая пересылка данных не может происходить быстрее продолжительности одного такта.
По разрядности различают:
- 8-бит;
- 16-бит;
- 32-бита;
- 64-бита.
Классификация по типу системы команд:
- RISC-архитектура, или вычислитель с комплектом редуцированных команд. Этот подход к проектированию процессоров с целью повышения их скорости за счет упрощения декодирования инструкций позволяет повысить тактовую частоту. Часто UNIX-системы работают на устройствах с этой архитектурой.
- СISC-архитектура (complexinstruction set computer) характеризуется нефиксированным значением длины команд и небольшим количеством регистров, имеющих жестко заданный набор функций. Классическим примером является процессоры Motorola MC680x0. Некоторые процессоры Intel совместимы с СISC, но у них всё же RISC-ядро, и их можно отнести к гибридным.
Типы памяти:
- Архитектура Фон-Неймана – это принцип одновременного хранения в ячейках памяти и данных. Недостатком такого принципа является ограничение пропускной способности между вычислителем и памятью. Отчасти такая проблема решается кэшировнием, но оно приводит к усложнению всей архитектуры и вызывает когерентность памяти. Основы были заложены Нейманом в 1944 году.
- Гарвардская архитектура. Отличается от предыдущей тем, что для хранения инструкций и данных предназначены отдельные физические устройства. По такому же принципу построены каналы данных и команд. Была разработана Говардом Эйкеном в конце 30-х годов 20 века.
Применение систем на микропроцессорах позволило значительно уменьшить габариты устройств при одновременном увеличении функционала. Выбор компонентов, различных по архитектуре, разрядности, объёму и типу памяти, оказывает влияние на итоговую цену всего устройства. В условиях серийного и массового выпуска стоимость значительно снижается.
3 условия для программирования микроконтроллеров
Условие №1: Готовность к реализации поставленной задачи
Без этого ничего не получится. Даже закончив курсы по программированию микроконтроллеров, без настойчивости в решении возникающих проблем, невозможно получить положительные результаты.
Условие №2: Иметь понятие о структуре микроконтроллера
Без чёткого представления принципа действия этого устройства вряд ли получится освоить даже азы программирования микроконтроллеров. Не стоит, конечно же, изучать его строение до уровня эксперта, но основы должны быть достаточно хорошо изучены.
Условие №3: Уверенное знание инструкций управления микроконтроллером
Микроконтроллер не может работать без полученной команды. Программирование микроконтроллеров с нуля начинается с изучения этих инструкций, которых насчитывается свыше 130 единиц. Не следует зубрить все из них без исключения, так как некоторые команды часто дублируют друг друга.
Но первыми шагами в программировании микроконтроллеров для начинающих будет освоение управляющих инструкций, без которых не получить красивый и лаконичный код. Зная команды управления, вы заставите работать устройство в соответствии с вашими желаниями.
Программы и алгоритмы для микроконтроллеров
Программа
В основе программирования микроконтроллеров лежит набор выполняемых в определённой последовательности инструкций. Это и есть программа (в переводе с греческого это слово означает – “запись”), которая, по сути, является последовательными шагами определённого алгоритма действий. Руководствуясь этими предписаниями, устройство и будет осуществлять те или иные действия.
Что-то вроде такого:
Активировать светодиод:
- подготовить вывод микроконтроллера, к которому подключен светодиод для работы;
- осуществить подачу логического уровня, который позволит светодиоду начать излучение в видимом диапазоне.
Читайте также!
Выдержать паузу:
- выполнить подпрограмму, формирующую задержку, значение которой необходимо указать;
- после завершения подпрограммы паузы сделать возврат в основную программу.
Потушить светодиод:
- подать на вывод микроконтроллера логический уровень, гасящий светодиод. Указать число итераций.
Понятие «Программа» тесно связано с другим термином – «Алгоритм».
Алгоритм является совокупностью точно заданных правил, задающих порядок их выполнения для решения определённых задач
Алгоритм – набор инструкций, описывающих порядок действия для достижения нужного результата. Одна и та же совокупность правил в разных средах программирования микроконтроллеров может быть реализована неодинаковыми методами.
Отличие алгоритма от программы состоит в том, что он определяет общий порядок действия устройства, который потом и находит подробнейшее воплощение в коде. По аналогии с вышеприведенном примером:
- Активировать светодиод.
- Сделать паузу.
- Деактивировать светодиод.
В самом широком смысле алгоритм является универсальным описанием процесса, который уже при помощи различных языков воплощается в программе. И чем подробнее составлен набор инструкций, тем легче потом будет его кодировать.
Языки программирования микроконтроллеров
К большому сожалению электронные устройства не понимают человеческую речь. Все команды должны быть переведены на понятный им язык.
Инструкции, воспринимаемые микроконтроллером, имеют вид последовательности единичек и нулей:
- 00110101 011000100
Это код команд. Для того чтобы перевести наши слова в этот вид, существуют специальные программы.
Они помогают описать в понятных нам терминах порядок работы устройства, а затем представить этот алгоритм в виде, доступном пониманию микроконтроллера. В итоге получается машинный код, то есть последовательность команд в виде опкода (двоичное исчисление). Программа, написанная человеком на одном из языков, называется исходным кодом. Перевод программы с исходного кода на машинный осуществляют трансляторы. Использование различных языков позволяет реализовывать, например, программирование микроконтроллеров на ассемблере.
Существует большое количество языков, но подразделяются они на два типа:
- Низкоуровневые языки программирования.
- Языки программирования высокого уровня.
Их отличие состоит в «близости» к микроконтроллеру.
Когда были изобретены первые электронные устройства, программы для них составлялись только при помощи машинного кода, то есть алгоритм работы записывался последовательностью двоичного кода. Пример такой программы:
01010010
01000110
10010011
Такое лаконизм и отсутствие наглядности даже у специалиста вызовет затруднения в определении, о чём же конкретно идёт речь. Поэтому в стремлении сделать инструкции более понятными большинству людей стали разрабатываться языки программирования, содержащие слова. Другими словами, чем больше единиц и нулей – тем ниже уровень.
Наиболее востребованные языки программирования:
- язык низкого уровня – Ассемблер.
- язык высокого уровня – С (Си).
Таким образом, подходят не только низкоуровневые, но возможно и программирование микроконтроллеров на С.
Приведём абстрактный пример их различия:
Допустим перед нами стоит задача найти сумму чисел: 25 и 35.
Машинным кодом это описывается так:
- 00000101 1101001
На языке низкого уровня:
- ADD Rd, Rr
На языке высокого уровня:
- 25+35
Как видите, разница в наглядности очевидна.
Поговорим об этих примерах подробнее. Не будем заострять внимание на примере машинного кода, так как он подобен реализации на Ассемблере. На этом языке команды, по своей сути, это те же наборы единиц и нолей, только их последовательностям присвоены буквенные обозначения.
Инструкция ADD Rd, Rr ставит перед микроконтроллером задачу сложения двух чисел, находящихся соответственно в Rd и в Rr (но предварительно необходимо их туда записать). Таким образом, контроллер получает чёткое указание: где что находится, что надо просуммировать, и куда записать результат. В этом заключается работа с электронным устройством напрямую.
Третий пример выглядит как обычная математическая запись. Но, в этом случае микроконтроллер не является прямым объектом нашего воздействия. Перед ним поставлена задача, аналогичная команде на Ассемблере: записать эти числа, произвести арифметическое действие. Записать сумму.
Здесь то и есть главное принципиальное отличие высокоуровневых и языков низкого уровня. Кодирование на Ассемблере независимо от нашего желания подразумевает полный контроль всего процесса: нам известно, в каком месте записаны эти два числа, и мы знаем, где будет результат. Другая картина при использовании языка С: программа сама решает местонахождение чисел и их суммы. В большинстве случаев в этом и нет необходимости, главное получить итог – число 60 на выходе.
Эту задачу выполнит компилятор – «переводчик» на машинный код. Тут и скрывается один из недостатков: один и тот же алгоритм, реализованный на Ассемблере и на С после компиляции, будет иметь разный размер. Низкоуровневая программа будет чуть ли не вдовое короче. В некоторых случаях даже делают вставки на Ассемблере в программу, написанную на С.
Быстрый способ начать программировать микроконтроллеры
Специалисты, проектирующие электронные устройства, часто оперируют таким термином как «быстрый старт». Им описывают случаи, когда необходимо в сжатые сроки испытать после тестового программирования, например, микроконтроллер Atmel и посмотреть, как он выполняет элементарные задачи.
Оперативно получив приемлемый результат, можно более углубленно изучить все тонкости и «подводные камни» этого процесса.
Ознакомиться с принципами работы с микроконтроллерами, используя «быстрый старт», освоить методы программирования и создания различных по функционалу умных электронных устройств вам помогут некоторые курсы, обучение в которых построено по принципу «от простого к сложному». Наглядность и обилие практических примеров позволит вам в короткие сроки достигнуть мастерства в программировании микроконтроллеров.
Как изучить новый, но необычайно перспективный вид деятельности? Станьте специалистом в сфере интернета вещей. Вы познакомитесь с основами программирования и создания устройств для Интернета вещей. Научитесь проектировать, разрабатывать и тестировать умные устройства, которые будут управляться через интернет. Курс проводится профессиональными преподавателями, которые помогут вам освоить все необходимые знания и навыки для успешной карьеры в IT-сфере. Не упустите свой шанс стать разработчиком умных устройств!
GeekBrains представляет учебное пособие «Факультет. Инженер умных устройств».
Пройдя этот курс вы можете стать специалистом в области интернета вещей — Internet of Things (IoT) и научиться создавать сеть умных гаджетов. Изучите язык C, способы компилирования, отладки и программирования микроконтроллеров Arduino. Кроме этого, овладев необходимыми знаниями, наработаете опыт работы по технологиям удалённого доступа (Bluetooth, Wi-Fi). Что позволит с лёгкостью конструировать современные встраиваемые системы.
на обучение «Инженер-аналитик» до 24 ноября
Плюсы прохождения данного курса:
- Регулярно обновляемая программа. Фундаментом служит принцип experiential learning, или по-русски: «повторение – мать учения», который поможет систематизировать накопленные знания и получить практический опыт. Между теоретическими блоками предусмотрен практикум в 7-14 дней для самостоятельного проектирования.
- Получение в виде бонуса Starter box. Подаренное оборудование для работы в первой четверти пригодится для практической работы. Теория чередуется с тренировками, закрепляющими полученные знания. Изучите устройство и принцип действия транзисторов, датчиков и др., и, наконец, самостоятельно сможете осуществить программирование микроконтроллеров.
- Улучшение навыков программирования. В конце каждой четверти в рамках дискуссионного клуба происходит выступление эксперта. Все участники могут напрямую обмениваться опытом и своими наработками.
Читайте также!
Суть языков программирования: для чего они нужныПодробнее - Компетентные учителя. Авторами этой программы являются преподаватели GeekBrains, имеющие опыт запуска проектов в масштабах России. Единственные представители СНГ на международном форуме Arduino Day 2021, объединившим как любителей, так и профессионалов, занятых конструированием умных устройств.