Микроконтроллеры с чего начать. Программирование микроконтроллеров для начинающих

15.08.2019

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

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

Возраст

Начнём с главного: когда уже (ещё) можно начать прокладывать свой путь в профессию? Ответ предсказуем: чем раньше, тем лучше. И изобилие специальных наборов для детей к этому располагает. Даже дело не в том, что с возрастом вам будет сложнее перестраиваться и обучаться этой дисциплине. Просто опыт, как и во многих других IT-профессиях, здесь играет решающее значение.

Но не всё так плохо. Всё же в России этот рынок не очень развит. Начав путь разработчика ПО для МК после 30, вы сможете сделать неплохую карьеру в какой-то одной сфере или конкретном месте деятельности. Если, конечно, не пытаться стать «многостаночником». Всегда бывают исключения, но многое зависит от вашей прошлой деятельности. Наверное, стоит принять во внимание, что даже 10 лет в этой профессии не впечатляют работодателя.

Знания

От пустых слов перейдём к реальным требованиям. «MustKnow» в программировании микроконтроллеров - язык C/C++. Да, мировые тенденции сейчас указывают на переход на более совершенные или хотя бы простые языки ( Arduino или D). Но это будущее довольно отдалённое, закладывать путь в него можно разве что сегодняшним школьникам младших классов.

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

В остальном довольно общая компьютерная наука: протоколы передачи, простейшее знание электроники и схемотехники (хотя бы принципы работы АЦП/ЦАП, работать с ключами, питанием и пр.), умение читать (и понимать) техническую документацию на английском языке. Но главное - не работать по принципу “научного тыка”, в противном случае ваши микроконтроллеры рискуют превратиться в “камни”.

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

Литература

На прошлой неделе, подачи одного из пользователей GeekBrains, я всерьёз задумался над вопросом “Где можно пройти курсы по программированию микроконтроллеров?”, да и вообще о профильной литературе в целом (и это несмотря на профильное высшее образование и около 10 лет опыта работы). Дело не в том, что их не существует (есть и курсы , и книги), просто главный инструмент разработчика ПО для МК - техническая документация, поставляемая вместе с платформой.

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

Это означает, что абсолютно любой человек может взять, прочитать её и через несколько мгновений организовать стандартное мигание “светодиодами”. Но даже с 50 годами стажа вы не сможете сесть за незнакомый микроконтроллер и, не читая документацию, сделать с ним что-то полезное (придётся, как минимум взглянуть на расположение контактов и их назначение по умолчанию).

IDE

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

Работа

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

Финансово трудно придётся новичкам (до 1 года опыта): зарплата в районе 20 тыс. рублей в месяц для программиста МК. Это вполне реальная цифра в регионах. Зато если вы живёте в столице, у вас есть опыт работы с популярным видом МК (от 3 лет активной деятельности) и голова на плечах, то вполне можно рассчитывать и на 150 тыс. рублей в месяц. В целом, не сказать, что конкуренция за места у данных разработчиков высокая, но с течением времени она неизбежно растёт.

Опять же, для людей с опытом есть вариант поискать счастье за границей. Особенно если у вас уже есть опыт полноценной работы. Дело в том, что в России идея IoT пока не слишком развивается. Да и вообще автоматизация пока не затрагивает небольшие системы. А в США, Японии и других развитых странах хороший разработчик ПО для МК - на вес золота. Правда, придётся учитывать иной уровень конкуренции и серьёзные требования по производительности труда.

И кстати

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

Всем привет. Как и обещал, с сегодняшнего дня начинаем изучать программирования AVR микроконтроллеров (на примере Atmega8). Тем же читателям, которым интересно программирование платы ардуино, не волнуйтесь, статьи по данному направлению будут продолжаться 🙂 .

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

  • МК AVR повсеместно доступны;
  • У них достаточно невысокая цена;
  • В интернете можно найти много бесплатных программ, что помогут при работе с данными МК.
  • Кроме этого, существует великое множество написанных статей и форумов, на которых можно задать вопросы по данным МК AVR.

Как говорил ранее, в качестве подопытного будем использовать МК Atmega8 . Почему именно его?

Данный микроконтроллер может похвастаться наличием 3 портов ввода/вывода. Кроме этого он довольно дешевый.

Под портами, понимают шины данных, которые могут работают в двух противоположных направлениях (то бишь на вывод и на ввод).

У Atmega8 3 порта. Порт B состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7). Порт С состоит из 7 ножек-выводов (нумерация 0,1,2,3,4,5,6). Порт D состоит из 8 ножек-выводов (нумерация 0,1,2,3,4,5,6,7).

Запитывать микроконтроллер можно от 3,3 и 5 В. При напряжении питания 5 В максимальная частота тактирования составляет 16 МГц, а при напряжении питания 3,3 В – максимальная частота тактирования 8 МГц. Пока не будем заморачиваться относительно частот тактирования.

Питания подаётся на 7 ножку-вывод, а «земля» подводится к 8 ножке.

Скачивается бесплатно. Скачали, установили, запустили 🙂

Первое, с чего следует начать знакомство с Atmel Studio – это создание проекта.

Выбираем File -> new -> project .

Откроется окно выбора. Выбираем папку «Browse», в которой будем сохранять написанные проекты. Папку для проектов создал заранее.

Присваиваем имя проекту, в моём случае lesson_avr_1

Обратите внимание на галочку «create directory for solution». Если отметка стоит, то в той папке, которую мы выбрали для сохранения проектов, будет создана отдельная папка под текущий проект.

На этом всё – проект создан.

Займемся настройкой созданного нами проекта. Нажимаем Projest -> lesson_avr_1 properties или (alt+F7)

Переходим на вкладку Tool. Выбираем – симулятор. Совершенные нами действия сделают возможным отлаживать написанный код. Сохраняем изменения. Можно сохранить изменения в одном (текущем) файле или же во всех файлах проекта сразу. Закрываем настройки.

Микроконтроллеры (далее МК) прочно вошли в нашу жизнь, на просторах интернета можно встретить очень много интересных схем, которые исполнены на МК. Чего только нельзя собрать на МК: различные индикаторы, вольтметры, приборы для дома (устройства защиты, коммутации, термометры…), металлоискатели, разные игрушки, роботы и т.д. перечислять можно очень долго. Первую схему на микроконтроллере я увидел лет 5-6 назад в журнале радио, и практически сразу же перелистнул страницу, подумав про себя "все равно не смогу собрать". Действительно, в то время МК для меня были чем то очень сложным и непонятым устройством, я не представлял как они работают, как их прошивать, и что делать с ними в случае неправильной прошивки. Но около года назад, я впервые собрал свою первую схему на МК, это была схема цифрового вольтметра на 7 сегментных индикаторах, и микроконтроллере ATmega8. Так получилось, что микроконтроллер я купил случайно, когда стоял в отделе радиодеталей, парень передо мной покупал МК, и я тоже решил купить, и попробовать собрать что-нибудь. В своих статьях я расскажу вам про микроконтроллеры AVR , научу вас работать с ними, рассмотрим программы для прошивки, изготовим простой и надежный программатор, рассмотрим процесс прошивки и самое главное проблемы, которые могут возникнуть и не только у новичков.

Основные параметры некоторых микроконтроллеров семейства AVR:

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

Память FLASH

Память ОЗУ

Память EEPROM

Порты ввода/вывода

U питания

Дополнительные параметры МК AVR mega:

Рабочая температура: -55…+125*С
Температура хранения: -65…+150*С
Напряжение на выводе RESET относительно GND: max 13В
Максимальное напряжение питания: 6.0В
Максимальный ток линии ввода/вывода: 40мА
Максимальный ток по линии питания VCC и GND: 200мА

Расположение выводов моделей ATmega 8X

Расположение выводов моделей ATmega48x, 88x, 168x

Расположение выводов у моделей ATmega8515x

Расположение выводов у моделей ATmega8535x

Расположение выводов у моделей ATmega16, 32x

Расположение выводов у моделей ATtiny2313

В конце статьи прикреплён архив с даташитами на некоторые микроконтроллеры

Установочные FUSE биты MK AVR

Запомните, запрограммированный фьюз – это 0, не запрограммированный – 1. Осторожно стоит относиться к выставлению фьюзов, ошибочно запрограммированный фьюз может заблокировать микроконтроллер. Если вы не уверены какой именно фьюз нужно запрограммировать, лучше на первый раз прошейте МК без фьюзов.

Самыми популярными микроконтроллерами у радиолюбителей являются ATmega8, затем идут ATmega48, 16, 32, ATtiny2313 и другие. Микроконтроллеры продаются в TQFP корпусах и DIP, новичкам рекомендую покупать в DIP. Если купите TQFP, будет проблематичнее их прошить, придется купить или и паять плату т.к. у них ножки располагаются очень близко друг от друга. Советую микроконтроллеры в DIP корпусах, ставить на специальные панельки, это удобно и практично, не придется выпаивать МК если приспичит перепрошить, или использовать его для другой конструкции.

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

Для программирования используется 6 выводов:
RESET - Вход МК
VCC - Плюс питания, 3-5В, зависит от МК
GND - Общий провод, минус питания.
MOSI - Вход МК (информационный сигнал в МК)
MISO - Выход МК (информационный сигнал из МК)
SCK - Вход МК (тактовый сигнал в МК)

Иногда еще используют вывода XTAL 1 и XTAL2, на эти вывода цепляется кварц, если МК будет работать от внешнего генератора, в ATmega 64 и 128 вывода MOSI и MISO не применяются для ISP программирования, вместо них вывода MOSI подключают к ножке PE0, a MISO к PE1. При соединении микроконтроллера с программатором, соединяющие провода должны быть как можно короче, а кабель идущий от программатора на порт LPT так-же не должен быть слишком длинным.

В маркировке микроконтроллера могут присутствовать непонятные буквы с цифрами, например Atmega 8L 16PU, 8 16AU, 8A PU и пр. Буква L означает, что МК работает от более низкого напряжения, чем МК без буквы L, обычно это 2.7В. Цифры после дефиса или пробела 16PU или 8AU говорят о внутренней частоте генератора, который есть в МК. Если фьюзы выставлены на работу от внешнего кварца, кварц должен быть установлен на частоту, не превышающей максимальную по даташиту, это 20МГц для ATmega48/88/168, и 16МГц для остальных атмег.

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

Это миниатюрные компьютеры, все составляющие которых (процессор, ОЗУ, ПЗУ) располагаются на одном кристалле. От микропроцессоров их отличает наличие таймеров, контроллеров, компараторов и других периферийных устройств. В настоящее время микроконтроллеры используются при производстве:

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

Управление осуществляется при помощи специальных программ.

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

  • встраиваемые;
  • 8-, 16- и 32-разрядные;
  • цифровые сигнальные процессоры.

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

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

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

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

Чаще всего встречаются микроконтроллеры следующих семейств:

  • MSP430 (TI);
  • ARM (ARM Limited);
  • MCS 51 (INTEL);
  • STMB (STMicroelectronics);
  • PIC (Microchip);
  • AVR (Atmel);
  • RL78 (Renesas Electronics).

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

  • Mega - семейство мощных микросхем с развитой архитектурой.
  • Tiny - недорогие изделия, имеющие восемь выводов.

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

Изделия компании «Атмел» просты и понятны. Однако для использования всего функционала придется разработать программное обеспечение. Приступать к программированию микроконтроллеров AVR для начинающих рекомендуется с загрузки специализированной среды Atmel Studio. Актуальная версия предоставляется официальным сайтом производителя на бесплатной основе. Для разработки ПО в этой среде дополнительные программные компоненты не требуются.

Комплекс «Атмел Студио» включает огромное количество примеров готовых проектов. Это поможет новичку быстрее освоить базовые возможности и начать создавать собственные программы. В нем также имеются модули для компиляции и окончательной отладки кода. Параллельно с его освоением нужно изучать языки программирования. Без них разработать программное обеспечение невозможно.

Языки программирования

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

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

На самом деле, можно использовать практически любые языки программирования микроконтроллеров. Но популярнее всех С/С++. Это язык высокого уровня, позволяющий работать с максимальным комфортом. Более того, в разработке архитектуры AVR принимали участие создатели Си. Поэтому микросхемы производства «Атмел» адаптированы именно к этому языку.

С/С++ - это гармоничное сочетание низкоуровневых и высокоуровневых возможностей. Поэтому в код можно внедрить вставки на Ассемблере. Готовый программный продукт легко читается и модифицируется. Скорость разработки достаточно высокая. При этом доскональное изучение архитектуры МК и системы команд ЦП не требуется. Компиляторы Си снабжаются библиотеками внушительного размера, что облегчает работу программиста.

Нужно отметить, что выбор оптимального языка программирования зависит также от аппаратного обеспечения. При малом количестве оперативной памяти использовать высокоуровневый Си нецелесообразно. В данном случае больше подойдет Ассемблер. Он обеспечивает максимальное быстродействие за счет короткого кода программы. Универсальной среды программирования не существует, но в большинстве бесплатных и коммерческих приложений можно использовать как Ассемблер, так и С/С++.

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

Первые микроконтроллеры PIC появились во второй половине прошлого века. Быстрые 8-разрядные микросхемы компании Microchip мгновенно завоевали популярность. Двухшинная гарвардская архитектура обеспечивает беспрецедентную скорость. Ее разрабатывали на основе набора регистров, для которого характерно разделение шин.

Выбирая язык программирования микроконтроллеров PIC, необходимо учитывать, что в основе микросхем семейства лежит уникальная конструкция RISC-процессора. Симметричная система команд позволяет произвольно выбирать метод адресации, выполнять операции в любом регистре. На данный момент компания «Микрочип» выпускает 5 разновидностей МК, которые совместимы по программному коду:

  1. PIC18CXXX (75 команд, встроенный аппаратный стек);
  2. PIC17CXXX (58 команд 16-разрядного формата);
  3. PIC16CXXX (35 команд, большой набор периферийных устройств);
  4. PIC16C5X (33 команды 12-разрядного формата, корпуса с 18–28 выводами);
  5. PIC12CXXX (версии с 35 и 33 командами, интегрированный генератор).

В большинстве случаев МК PIC имеют однократно программируемую память. Встречаются более дорогие модели с Flash или ультрафиолетовым стиранием. Ассортимент из 500 наименований позволяет подобрать изделие для любой задачи. Сейчас производитель концентрирует усилия на развитии 32-разрядных версий с увеличенным объемом памяти.

Языки программирования микроконтроллеров PIC - это Ассемблер и Си. Для кодирования подходят любые интегрированные среды разработки (IDE). Программировать с их помощью очень удобно. Они автоматически переводят текст программы в машинный код. Важной характеристикой IDE является возможность пошаговой симуляции работы готового ПО. Мы рекомендуем пользоваться средой разработки MPLAB. Ее созданием занималась компания Microchip.

Перед началом работы в MPLAB советуем каждый раз заводить отдельную папку. Это нужно, чтобы не запутаться в файлах проектов. Интерфейс программы интуитивно понятный, и трудностей с ним возникнуть не должно. Для отладки используются фирменные отладчики Pickit, ICD, REAL ICE, IC PROG. В них имеется возможность просмотра содержимого памяти, установки контрольных точек.

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

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

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

Следует отметить: чипы памяти всегда являются неотъемлемым дополнением микропроцессоров – управляющих микросхем. В свою очередь микропроцессор является основой электроники любой современной техники.

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

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

Программы или данные хранятся в чипе памяти как ряд чисел — нулей и единиц (биты). Один бит может быть представлен логическими нулем (0) либо единицей (1).

В единичном виде обработка битов видится сложной. Поэтому биты объединяются в группы. Шестнадцать бит составляют группу «слов», восемь бит составляют байт — «часть слова», четыре бита — «кусочек слова».

Программным термином для чипов, что используется чаще других, является байт. Это набор из восьми бит, который может принимать от 2 до 8 числовых вариаций, что в общей сложности даёт 256 различных значений.

Для представления байта используется шестнадцатеричная система счисления, где предусматривается использование 16 значений из двух групп:

  1. Цифровых (от 0 до 9).
  2. Символьных (от А до F).

Поэтому в комбинациях двух знаков шестнадцатеричной системы также укладываются 256 значений (от 00h до FFh). Конечный символ «h» указывает на принадлежность к шестнадцатеричным числам.

Организация микросхем (чипов) памяти

Для 8-битных чипов памяти (наиболее распространенный тип) биты объединяются в байты (8 бит) и сохраняются под определённым «адресом».

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


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