Программирование микроконтроллеров
Микроконтроллер представляет собой небольшую черную коробочку, внутри которой находится полноценный компьютер. Под пластиковой крышкой скрывается память, процессор и материнская плата. Чтобы заставить все эти механизмы работать, используется программа (прошивка), написанная на языке Си или Ассемблере.
Без программы микроконтроллер ничем не отличается от обычного куска кремня с пластиковой крышкой. Опытный программист способен превратить невзрачную коробочку в настоящий слиток золота, под управлением которого будет работать сложное устройство.
Как выбрать микроконтроллер?
Программирование МК сильно отличается от написания кода обычных программ, поэтому у начинающих программистов может возникнуть масса вопросов: как писать прошивку, как её отлаживать, какой микроконтроллер выбрать и так далее.
Для начала нужно определиться с производителем микроконтроллеров. Новички предпочитают продукцию компании Ардуино или AVR. Они достаточно популярны и имеют подробный даташит. Если вы новичок, возьмите один МК и изучите все его особенности и возможности. Когда наберётесь опыта, сможете без проблем перейти на другие типы устройств.
При выборе своего первого МК, обратите внимание на следующее:
- Цена.
- Доступность, то есть вы можете приобрести устройство в любом магазине.
- Публичный и понятный даташит.
- Примеры кода.
Последний пункт самый важный. Чем больше примеров работы МК вы найдёте, тем лучше сможете написать свой код.
Типы корпусов МК
При выборе также следует обращать внимание на тип корпуса. Некоторые устройства имеют очень маленькие размеры, из-за чего новичкам будет очень тяжело припаять их на схему, другие, наоборот, довольно большие и не помещаются на макетную плату. Среди радиолюбителей наиболее популярны 3 типа, каждый из них стандартизирован и имеет определённое количество ножек-выводов.
- DIP – корпус с двумя рядами контактов, между которыми расстояние целых 2.54 мм. Иногда устройство маркируют как PDIP. Первая буква обозначает материал корпуса – пластик. МК легко устанавливается на макетную плату, а большие выводы позволяют припаять его к схеме даже новичку.
- SOIC – корпус меньшего размера. В отличие от предыдущей модели, его ножки не вставляются в плату, а припаиваются сверху. Из-за этого, такие МК нельзя использовать на макетной плате. Расстояние между контактами – 1.27 мм.
- QFT – корпус в виде квадрата, выходы находятся на всех четырёх сторонах. Иногда их маркируют TQFT (Т – Thin, тонкий).
Это далеко не весь список МК. Иногда профессионалы используют QFN. Расстояние между его выходами в 6 раз меньше, чем у DIP.
Что может МК?
Ножки контроллера могут либо принимать сигнал, либо выдавать его. Исключением являются контакты земли и питания. Внутри устройства сигнал, полученный на вход, обрабатывается в зависимости от написанной программы. На кристалле часто размещают аналоговые преобразователи. Благодаря им вы сможете сделать амперметр или вольтметр.
Также контроллер вырабатывает переменные импульсы, которые используют для создания таймеров и часов. Интерфейсы передачи данный позволят общаться с другими устройствами. Например, большинство МК поддерживает USB-интерфейс.
Как писать программу для микроконтроллера?
Процесс состоит из 3 шагов:
- Составляем алгоритм работы прошивки.
- Пишем код и компилируем его.
- Прошиваем устройство, проверяем работоспособность.
На чём писать?
Перед тем, как приступить к коду, нужно чётко понять, что будет делать МК. Затем составляется алгоритм работы прошивки. Хорошо продуманный алгоритм может сильно сократить время разработки больших программ. Обычно прошивку пишут на Ассемблере или Си. Первый представляет собой набор инструкций, в то время как Си – полноценный язык программирования.
Для сложных и больших проектов часто выбирают второй язык. Си позволяет сократить время разработки и упрощает отладку. Однако, в си-шном коде иногда делают ассемблерные вставки. Когда вы наберётесь опыта, то сможете сами выбирать язык для своих задач.
Код представляет собой простой текст. Его можно набрать даже в Блокноте, но удобнее использовать среду разработки (IDE). Это программы, в которых есть подсветка синтаксиса и ошибок, подсказки, а также большие возможности для отладки.
Компиляция и прошивка
Когда прошивка готова, её нужно скомпилировать. Сейчас программа представляет собой простой текст, который непонятен МК. Устройство может воспринимать только двоичные команды. Преобразованием текста в двоичный код занимается компилятор.
Когда бинарный файл готов, его нужно загрузить в память МК. Для этого предназначены программаторы. Некоторые люди делают их самостоятельно, но лучше купить готовый. Самое дешёвое устройство стоит 3$. Для новичков вполне подойдёт USBASP. Когда устройство прошито, нужно протестировать работу программы на железе.
Программы для работы
Для работы понадобиться IDE. Среди бесплатных продуктов большой популярностью пользуются AtmelStudio и WinAVR. Ещё есть CodeVisionAVR, но она платная. Если вы новичок, не используйте платный софт. Вы не знаете, будете ли заниматься программированием МК в будущем, а потраченные впустую деньги могут убить всю мотивацию.
Также старайтесь писать код вручную, не используя автоматическое дополнение команд. Так вы сможете выработать нужные для работы навыки. Помимо IDE, вам понадобится софт для прошивки. У каждого программатора своя программа. Например, у USBASP – это AVRDUDE. Также для программатора понадобиться драйвер.
Отлаживать контроллер на «железе» не очень удобно. Во-первых, вы не можете контролировать процесс: нельзя пользоваться дебагом, смотреть значение переменной и так далее. Во-вторых, нельзя прошивать МК бесконечное количество раз.
Если вы обнаружите ошибку в процессе отладки, то придётся прошивать устройство заново. Чтобы избежать этих проблем, существует программа Proteus. Она позволяет имитировать работу устройства прямо на компьютере. Также в ней собирают и проверяют схемы.
Если плохо владеете паяльником, приобретите в магазине макетную плату, тогда вам не придётся паять контроллер и остальные компоненты на схему.
С чего начать?
Как показывает практика, начинающие радиолюбители и программисты просто не знают с чего начать свой путь, а советы опытных людей сводятся к «Собери какую-нибудь схему». Полный энтузиазма новичок сразу же берётся за LCD дисплей, электронные часы или радиоприёмник. Минус такого подхода в том, что человек не имеет достаточных знаний и опыта, а также не осознаёт насколько трудоёмкой может быть задача.
90% новичков забрасывают свой проект, остальные же идут за помощью на форумы. Там, не очень общительные, а иногда даже грубые электронщики сначала просто пинают неопытного бойца, а затем начинают поливать грязью. В итоге, человек или полностью забрасывают программирование, или возвращается к началу изучать основы.
Чтобы стать хорошим программистом МК нужно начинать с основ. Сначала разбираемся с тем, что такое резистор, конденсатор, учимся паять и изучаем схемотехнику и интерфейсы, а уже потом переходим к разработке своего уникального продукта. Если нет денег или возможности приобрести компоненты, можно использовать Proteus и другие программы.
Для изучения лучше использовать книги. Например, по Си большой популярностью пользуется книга создателей языка – Кернигана и Ритчи «ANSI C». Если нет желания читать, можно изучать тему на YouTube и других площадках.
Чтобы понять работу контроллера, придётся разобраться со схемотехникой. В интернете по этой дисциплине информации довольно мало, поэтому придётся обратиться к книгам. Часто советуют «Искусство схемотехники» и «Что нужно знать инженеру об аналоговой электронике». Если хорошо понимаете английский язык на слух, то можно записаться на онлайн-курсы. Например, «ShapeTheWorld – EmbeddedSystem».