Программирование микроконтроллера Текст научной статьи по специальности «Компьютерные и информационные науки»
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Митарова Джамиля Магомедовна
В статье анализируется, какие задачи вы возлагаете на микроконтроллер, и как он будет их выполнять, определяется заложенной в него программой программой, которую для микроконтроллера составляете вы сами. Программа (в переводе это слово означает «предписание») предварительное описание предстоящих событий или действий. К примеру, мы хотим, чтобы микроконтроллер помигал светодиодом. Довольно простая задача, но, тем не менее, для того чтобы микроконтроллер выполнил ее, мы, предварительно, должны шаг за шагом описать все действия микроконтроллера написать программу, которую он должен выполнить для получения нужного нам результата мигающий светодиод.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Митарова Джамиля Магомедовна
Назначение и область применения и схемы подключения микроконтроллера
Сравительный анализ средств разработки и отладки программного обеспечения для различных типов микроконтроллеров
Аппаратно-программный комплекс на базе универсального лабораторного стенда для изучения 8, 16 и 32-разрядных микроконтроллеров
Avr: программирование в среде avr Studio
Обзор программных средств разработки для встраиваемых приложений
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Текст научной работы на тему «Программирование микроконтроллера»
8. Бродин Б.В., Шагурин И.И. Микроконтроллеры: Справочник. М.: ЭКОМ, 1999. 395 с.
9. Программируемые логические ИМС на КМОП-структурах и их применение. / П.П. Мальцев, Н.И. Гарбузов, А.П. Шарапов, А.А. Кнышев. М.: Энергоатомиздат, 1998. 158 с.
10. Соловьев В.В., Васильев А.Г. Программируемые логические интегральные схемы и их применение. Мн.: Беларуская наука, 1998. 270 с.
11. Лаптев В. Цифровой измеритель температуры на базе AVRмикроконтроллера и RC-цепочки. Электронные компоненты, 2001. № 2. С. 46—49.
ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРА Митарова Д.М.
Митарова Джамиля Магомедовна — студент, кафедра информационных сетей и техносферной безопасности, Российский государственный социальный университет, г. Москва
Аннотация: в статье анализируется, какие задачи вы возлагаете на микроконтроллер, и как он будет их выполнять, определяется заложенной в него программой — программой, которую для микроконтроллера составляете вы сами.
Программа (в переводе это слово означает — «предписание») — предварительное описание предстоящих событий или действий.
К примеру, мы хотим, чтобы микроконтроллер помигал светодиодом. Довольно простая задача, но, тем не менее, для того чтобы микроконтроллер выполнил ее, мы, предварительно, должны шаг за шагом описать все действия микроконтроллера — написать программу, которую он должен выполнить для получения нужного нам результата — мигающий светодиод.
Ключевые слова: микроконтроллер, язык С++. ВВЕДЕНИЕ
Какие задачи вы возлагаете на микроконтроллер, и как он будет их выполнять, определяется заложенной в него программой — программой которую для микроконтроллера составляете вы сами.
Программа (в переводе это слово означает — «предписание») — предварительное описание предстоящих событий или действий [1].
К примеру, мы хотим, чтобы микроконтроллер помигал светодиодом. Довольно простая задача, но тем не менее, для того, чтобы микроконтроллер выполнил ее, мы, предварительно, должны шаг за шагом описать все действия микроконтроллера — написать программу, которую он должен выполнить для получения нужного нам результата — мигающий светодиод. Что-то вроде такого: Зажечь светодиод:
настроить вывод микроконтроллера, к которому подключен светодиод, для работы на вывод информации
подать на этот вывод логический уровень, который позволит зажечь светодиод Подождать некоторое время:
перейти к подпрограмме формирующей паузу (которую тоже нужно «прописать») по выполнению подпрограммы паузы вернуться в основную программу Погасить светодиод:
подать на вывод микроконтроллера логический уровень, гасящий светодиод и так далее.
Алгоритм — набор инструкций, описывающих порядок действия для достижения нужного результата [2].
Если в программе мы подробнейшим образом прописываем все действия микроконтроллера, то в алгоритме, — мы определяем порядок действий микроконтроллера, на основе которых мы потом создадим программу. По аналогии с вышеприведенном примером: Зажечь светодиод Подождать некоторое время Погасить светодиод и так далее.
Таким образом, алгоритм — это предшественник программы. И чем тщательно и продумано будет создан алгоритм, тем проще будет создавать программу. 1 Языки программирования
К сожалению, если любимой собачке мы можем подавать команды на человеческом языке, то общение с микроконтроллером должно происходить на языке, который понятен ему — языке микроконтроллерных команд.
Команды для микроконтроллера имеют вид набора единичек и нулей, типа: 00110101 011000100
так называемые — коды команд, а коды команд — это язык, который понимает микроконтроллер. А для того, чтобы перевести наш язык общения на язык микроконтроллера -в эти самые наборы нулей и единичек, существуют специальные программы [4].
Эти программы позволяют описать порядок работы для микроконтроллера на более-менее понятном для нас языке, а затем перевести этот порядок на язык понятный микроконтроллеру, в результате чего получается так называемый машинный код — последовательность команд и инструкций (те самые нули и единички) которые только и понимает микроконтроллер. Текст программы, написанный программистом, называется исходным кодом. Перевод программы с языка программирования (исходного кода) на язык микроконтроллера (машинный код) производится трансляторами. Транслятор превращает текст программы в машинные коды, которые потом записываются в память микроконтроллера [5].
В таких программах порядок работы микроконтроллера описывается специальным языком — языком программирования.
Язык программирования — это способ передачи команд, инструкций, чёткого руководства к действию для микроконтроллера [3].
Из множества языков программирования можно выделить два типа: o языки программирования низкого уровня o языки программирования высокого уровня
Чем они отличаются. А отличаются они своей близостью к микроконтроллеру. На заре зарождения микропроцессорной техники, программы писали в машинных кодах, то есть весь алгоритм работы последовательно прописывали в виде нулей и единичек [7]. Вот так, примерно, могла выглядеть программа: 01010010 01000110 10010011
Трудно, даже профессионалу, разобраться в такой комбинаций из двух цифр. Для облегчения своей жизни, программисты стали создавать первые языки программирования. Так вот, чем ближе язык программирования к такому набору нулей и единиц тем больше он «низкого уровня», а чем дальше от них — тем больше «высокого уровня». 2Программированиемикроконтроллера
Разрабатываемое устройство вычисляет две независимые величины E и F по следующим формулам: Z = = n i i A n E 1 1 ; Z = = n i i B n F 1 1 , где A и F — аналого- вое сигналы, B и E -цифровые сигналы, n — количество введенных на данный момент значений. Для программирования микроконтроллера можно использовать язык Си, либо, ассемблер. Программирование производилось на языке ANSI C ввиду его наглядности и неизменности стандартов [8].
2.1. Особенности программирования на языке С++
Программирование микроконтроллеров на Си имеет ряд особенностей, связанных со спецификой управления реальным объектом. Во-первых, программа для микроконтроллера никогда не должна заканчиваться, а значит помимо главной программы main(), обязательным является наличие главного бесконечного цикла while(1) внутри main() [10]. Таким образом, код будет выполняться пока на микроконтроллер подается питание. Второй особенностью работы с микроконтроллерами на языке Си являются побитовые операции, которые встречаются очень редко при классическом программировании. Все «переключатели» и переменные микроконтроллера находятся внутри 8-битных регистров и очень часто бывает необходимо взаимодействовать только с одним битом регистра, а все остальные оставить, как было и не учитывать [13].
2.2. Управление битами регистра
Стандартные порты ввода-вывода организованы таким образом, что каждому выводу микроконтроллера соответствует один бит в трех 8- ЭВМ и программная обработка данных 31
битных регистрах. В микроконтроллерах AVR, порты (регистры, связанные с физическими контактами) именуются буквами (A,B,C. ), а контакты цифрами от 0 до 7. Каждому порту соответствуют следующие регистры:
• DDRx — регистр направления передачи сигнала (0 — Выход, 1 — Вход);
• PORTx — регистр значения (для выхода) и подтяжки (для входа);
• PINx — регистр состояния (реальный логический уровень на контакте). Подтяжка (Pull-up) — Подключение контакта к питанию или земле через высокоомный(около 40 КОм) резистор
Алгоритм управления был написан на одном из самых распространенных языков, следовательно модификация этого устройства под любые нужды не составит никакого труда. Устройство можно настроить на работу с полноценным знаковым дисплеем, а так же, благодаря аппаратному UART, легко организовать связь с ПК через RS-232 или USB. С помощью микроконтроллера можно управлять шаговыми двигателями и сервоприводами. Столь широкие возможности по обработке данных и управлению физическими объектами нашли применение во многих отраслях науки и промышленности.
1. Прокопенко В.С. Программирование микроконтроллеров ATMEL на языке C. СПб.: КОРОНА-ВЕК, 2012. 307 с.
2. Дхананья Гадре, Нигуал Мэлхотра. Занимательные проекты на базе микроконтроллеров tinyAVR. СПб.: БХВ-Петербург, 2012. 330 с.
3. Википедия — свободная энциклопедия. [Электронный ресурс]. // Wikimedia Foundation, Inc.: [сайт], 2001. Режим доступа: http://ru.wikipedia.org/ (дата обращения: 30.08.2013).
4. Краткий Курс — Самоучитель AVR, ATmega и ATtiny. [Электронный ресурс], 2007. Режим доступа: http://123avr.com/ (дата обращения: 30.08.2013).
5. Белов А.В. Программирование микроконтроллеров для начинающих и не только. Книга + виртуальный диск / А.В. Белов. СПб.: Наука и техника, 2016. 352 с.
6. Брей Б. Применение микроконтроллеров PIC 18. Архитектура, программирование и построение интерфейсов с применением С и ассемблера / Б. Брей. СПб.: КОРОНА-Век, 2008. 576 c.
7. Брей Б. Применение микроконтроллеров PIC 18. Архитектура, программирование и построение интерфейсов с применением С и ассемблера / Б. Брей. СПб.: КОРОНА-Век, 2014. 576 c.
8. Иванов В.Б. Программирование микроконтроллеров для начинающих. Визуальное проектирование, язык С, ассемблер / В.Б. Иванов. СПб.: КОРОНА-Век, 2015. 176 с.
9. Иванов В.Б. Программирование микроконтроллеров для начинающих: Визуальное проектирование / В.Б. Иванов. СПб.: Корона-Век, 2010. 176 с.
10. Каспер Э. Программирование на языке Ассемблера для микроконтроллеров семейства i8051 / Э. Каспер. М.: ГЛТ, 2012. 192 с.
11. Магда Ю.С. Программирование и отладка С/С++ приложений для микроконтроллеров ARM / Ю.С. Магда. М.: ДМК, 2014. 168 с.
12. Магда Ю.С. Программирование и отладка C/C++ приложений микроконтроллеров ARM / Ю.С. Магда. М.: ДМК Пресс, 2012. 168 с.
13. Прокопенко В.С. Программирование микроконтроллеров ATMEL на языке C / В.С. Прокопенко. СПб.: Корона-Век, 2013. 320 с.
14. Ревич Ю.В. Практическое программирование микро-контроллеров Atmel AVR на языке ассемблера / Ю.В. Ревич. СПб.: BHV, 2012. 352 с.
15. Хелибайк Ч. Программирование PIC- микроконтроллеров на PICBask / Ч. Хелибайк. М.: Додэка XXI, 2007. 336 c.
Разработка программного обеспечения Разработка ПО
От того, как написано программное обеспечение (ПО) зависит, как будет работать само устройство, его быстродействие, загрузка. Скорость отработки микроконтроллером программного обеспечения, написанного программистами разного уровня, может отличаться в разы. Ниже мы рассмотрим разработку ПО, применительно к микроконтроллерам. Но для создания системы способной, что–либо контролировать, или чем-либо управлять, к микроконтроллеру необходимо подключить датчики, модули памяти, исполнительные устройства, передающие и принимающие устройства, и прочие электронные компоненты. При «увязке» всех компонентов в систему необходима разработка ПО, которое создано исключительно для разрабатываемого устройства или системы. Мы создадим требуемые Вам устройства или системы, и разработаем ПО для их качественной и быстрой работы. Звоните! И мы решим Вашу задачу!
Практически любое электронное устройство, это логическое устройство, состоящее из микроконтроллеров и схем сопряжения с периферийными устройствами (другими электронными устройствами, датчиками, исполнительными механизмами). У большинства микроконтроллеров имеется память программ, которая представляет собой некоторое количество ячеек (от тысячи до десятков тысяч). В этих ячейках хранятся та самая программа (программное обеспечение), которую выполняет микроконтроллер.
Программа (программное обеспечение) – это последовательность выполняемых микроконтроллером команд. Каждой команде в памяти соответствует свое число – код. При включении питания микроконтроллер один за другим считывает эти коды, осуществляет их дешифрацию (определяет, что ему нужно сделать), а затем исполняет одну за другой эти дешифрованные команды. Главная особенность памяти, это то, что занесенные в нее коды, сохраняются неизменными, при отсутствии питания микроконтроллера. Именно программное обеспечение определяет поведение всей системы. Все изменения и модификации программного обеспечения вносятся в микроконтроллер с помощью программатора. Один и тот же микроконтроллер, но с программным обеспечением, написанным под определённую задачу, может применяться в различных системах – для управления котлом теплоснабжения или в устройствах автоматизированной телефонной связи. В процессе создания программного обеспечения, программист пишет текст программы на компьютере так же, как он пишет любой другой текст. Затем он запускает специальную программу – транслятор. Транслятор – это специальная программа, которая переводит текст, написанный программистом, в машинные коды, то есть в форму, понятную для микроконтроллера. Написанный программистом текст программы называется исходным кодом. Код, полученный в результате трансляции, называется результирующим или машинным кодом. Именно этот код записывается в программную память микроконтроллера при помощи программатора.
Все языки программирования делятся на две группы:
— языки низкого уровня (машино-ориентированные);
— языки высокого уровня;
Язык программирования – это специально разработанный язык, служащий посредником между машиной и человеком. Как и обычный человеческий язык, любой язык программирования имеет свой словарь (набор слов) и правила их написания.
Главная задача языка – описать последовательность действий, которую должен выполнить Ваш микроконтроллер. В то же время язык должен быть удобен и понятен человеку.
Типичным примером машино-ориентированного языка программирования, является язык Ассемблер. Этот язык максимально приближен к системе команд микроконтроллера. Каждый оператор (команда) этого языка, это, по сути, словесное название какой-либо конкретной команды машинного кода. В процессе трансляции такая команда просто заменяется кодом операции. Специфика языка Ассемблер состоит еще в том, что набор команд для этого языка напрямую зависит от системы команд конкретного микроконтроллера. В недавнем прошлом язык Ассемблер был единственным языком программирования для микроконтроллеров. Только он позволял эффективно использовать скудные ресурсы самых первых микроконтроллеров. Однако в настоящее время, когда возможности современных микроконтроллеров значительно выросли, для написания программного обеспечения, в основном используются языки высокого уровня, такие как Бейсик, СИ. Эти языки в свое время были разработаны для больших компьютеров. Но сейчас их широко используют для программирования микроконтроллеров. Языки высокого уровня отличаются тем, что они гораздо больше ориентированы на человека. Большинство команд языков высокого уровня не связаны с конкретными командами микроконтроллера.
Транслятор с языка высокого уровня производит более сложные преобразования, чем транслятор с Ассемблера. Но в результате тоже получается программа в машинных кодах. При этом транслятор использует все ресурсы микроконтроллера по своему усмотрению.
В каких именно регистрах или ячейках памяти будут храниться значения, программист не решает. Программа – транслятор выбирает все это сама. Поэтому задача эффективности алгоритма полученной в результате трансляции программы целиком ложиться на программу – транслятор. В целом, программное обеспечение, написанное на языках высокого уровня, занимает в памяти микроконтроллера объем на 30 — 40% больший, чем аналогичное программное обеспечение, написанные на языке Ассемблер. И это в лучшем случае, бывает и больше. Однако если микроконтроллер имеет достаточно памяти и запас по быстродействию, то увеличение программы – не проблема. Преимуществом языков высокого уровня является существенное ускорение процесса разработки программы. Для программирования современных контроллеров не нужен программатор. Все программирование можно сделать по интерфейсу USB или RS232, RS-485. Пишется программа, при помощи компилятора переводится в машинные коды и загружается в микроконтроллер. Существует оптимизирующий компилятор, позволяющий повысить скорость исполнения кода (отработки программного обеспечения микроконтроллером) в несколько раз.
Поводя черту под сказанным, следует отметить, если необходимо произвести замену неисправного модуля в старой системе, под которую обучен персонал, то для этого, можно приобретать недорогие микроконтроллеры и разрабатывать программное обеспечение на языке Ассемблер. Все устройство может быть выполнено на контроллерах, и связь между модулями может быть выполнена на языке низкого уровня, в этом случае цена в производстве будет относительно низкой, но возрастает цена и сроки разработки программного обеспечения для такого устройства. Это занимает больше времени, и требует более высокой квалификации программиста, так как ему необходимо знать специфику каждого микроконтроллера. Если же требуется выполнить работы как можно быстрее, и стоимость микроконтроллеров не особенно лимитируется, то в данном случае, в систему встраивается современный модуль, разработка программного обеспечения, для которого осуществляется на языке СИ. В остальных случаях необходимо ориентироваться на современные микроконтроллеры и средства разработки. Мы пропагандируем изготовление устройств на современной элементной базе. Это позволяет выполнить устройство с современным программным обеспечением, обслуживание которого, у Вас не вызовет затруднений. Стоимость разработки программного обеспечения, зависит от его сложности, объемов, и соответственно сроков выполнения. Здесь должен быть соблюден баланс между многими факторами, такими, как: размеры устройства, скорость работы, устойчивость работы, стоимость разработки программного обеспечения, стоимость в производстве и многое другое. Для решения этой задачи необходим комплексный подход, и мы всегда готовы подсказать приемлемое решение, исходя из технического задания и уровня финансирования.
Мы работаем по отработанной технологии взаимодействия с заказчиком.
Вы звоните нам, описываете задачу так, как Вы её видите. Если принципиально мы можем принять задание в работу, Вы через форму обратной связи, в разделе «Контакты» , отправляете технические условия (ТУ), или техническое задание (ТЗ), или в письменном виде передаете то, что Вы говорили по телефону. Мы оцениваем возможные решения и примерную стоимость. Сообщаем Вам стоимость решения задачи. Если ориентировочная стоимость и срок разработки программного обеспечения , в принципе Вас устраивают, начинаем официальную часть: подписание договора, согласование технического задания, его утверждение, календарный план выполнения работ ит.д. В некоторых случаях, когда необходимо обрабатывать большое количество информации, связанной с Вашей задачей (техническое задание, техническая документация), мы оставляем за собой право оговорить стоимость работ по изучению предоставленной Вами информации, и подготовки коммерческого предложения по разработке программного обеспечения . В процессе работы над задачей может возникнуть необходимость в выезде на объект для согласования и уточнения вопросов с заказчиком, поиск дополнительной информации, проведение предварительных исследований. В этом случае, мы также оставляем за собой право оговорить стоимость вышеперечисленных работ. Если Вам удобно, то связаться с нами, и сделать предварительный запрос, можно через обратную связь в разделе «КОНТАКТЫ» .
Как правило, неразрешимых технических задач нет, вопрос только в стоимости решения и сроке выполнения работ.

Наши решения
ТОЛЬКО ДЛЯ СТУДЕНТОВ ТПУ!
Целью подготовки слушателей по программе является получение компетенций обучающимися по специальностям и направлениям подготовки, не отнесенным к ИТ-сфере, необходимой для выполнения нового вида профессиональной деятельности в области «Связь, информационные и коммуникационные технологии» приобретение новой квалификации «Программист» (3 уровень)
К освоению программы в рамках проекта допускаются лица:
получающие высшее образование по очной (очно-заочной) форме, лица, освоившие основную профессиональную образовательную программу (далее – ОПОП ВО) бакалавриата в объеме не менее первого курса (бакалавры 2-го курса), ОПОП ВО специалитета – не менее первого и второго курсов (специалисты 3-го курса), а также магистратуры, обучающиеся по ОПОП ВО, не отнесенным к ИТ-сфере
Что такое программирование задачи жизнеобеспечения на микроконтроллере
ОСНОВНЫЕ МОДЕЛИ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ
В практике программирования микроконтроллеров (МК) наиболее часто используются следующие модели организации управляющих программ:
Система с суперциклом (С2Ц) (superloop systems) – все задачи/действия выполняются в теле бесконечного цикла в строго определенной, линейной последовательности.
Многозадачная система (МЗС) – задачи планируются и выполняются под управлением операционной системы реального времени (RTOS).
Использование различных моделей конечных автоматов (МКА) (state machine).
Система с суперциклом
Для подобной системы существует и другое определение – однозадачная система, поскольку при использовании этой модели определенная задача выполняется ЦПУ в определенное время. Поскольку здесь ни в коей мере не используется система реального времени, для реализации фрагментов алгоритма управляющей программы, критичных ко времени выполнения, используется система прерываний МК. На рис. 1 приведена пример обобщенной схемы, иллюстрирующей ход выполнения действий в С2Ц с использованием подпрограмм-обработчиков прерываний (ISR). Разработка программ по модели С2Ц усложняется по мере увеличения размера управляющего кода. Поскольку выполнение одного программного модуля не может быть прервано другим модулем иначе, как только через механизм прерываний, время реакции или обращения к конкретному модулю зависит от времени выполнения остальных модулей системы. Таким образом, такая система плохо удовлетворяет требованиям реального времени и может быть использована для реализаций алгоритмов, не требовательных ко времени.
Многозадачная система с приоритетом
Использование системы реального времени подразумевает возможность одновременного выполнения процессором множества задач. Выполнение задач планируется системой реального времени – это означает, что RTOS может запустить или остановить выполнение каждой задачи. В МЗС могут использоваться различные алгоритмы планирования задач. Одним из наиболее распространенных алгоритмов реализации систем реального времени является многозадачность с приоритетом прерывания. В RTOS с приоритетом используется периодическое прерывание по таймеру, в обработчике которого происходит прерывание выполнения текущей задачи и, при необходимости, переключение задач. При этом будет выполняться задача, имеющая наиболее высокий приоритет и находящаяся в состоянии готовности. Если в обработчике прерывания другой задаче будет установлен более высокий приоритет, произойдет переключение задач – текущая задача будет остановлена, задача с более высоким приоритетом – запущена. Этот процесс иллюстрирует рис. 2.
Рис. 2 – Схема функционирования МЗС с приоритетом
Использование моделей конечных автоматов
МКА подразумевает простое преобразование входящих событий в соответствующие действия, и, по сути, представляет собой чисто реактивное устройство, работа которого не зависит от операционной системы. В любой момент времени такая система находится в одном из нескольких возможных состояний. Переход из одного состояния в другое происходит в зависимости от внешних условий. Как только происходит изменение состояния, может быть выполнено определенное действие. Например, электронное устройство может находиться в состояниях «ВКЛ» и «ВЫКЛ», дверь может быть «Открыта» или «Закрыта_И _Незаблокирована» и пр. КА не обязательно должен иметь карту всех возможных физических состояний и переходов, достаточно описать набор состояний, необходимых для решения конкретной задачи. Одним из важных свойств КА является возможность параллельной работы. Например, представим себе торговый автомат и все возможные случаи, которые необходимо принять во внимание при разработке программного обеспечения:
что произойдет, если чашка будет убрана до того, как она наполнится (например, в кофейном автомате)?
что случится со счетом кредитной карты, если пользователь отменит заказ уже в процессе оплаты и обработки карты терминалом?
как поведет себя машина, если новый заказ будет сделан до завершения обработки текущего заказа?
будут ли пользователю возвращены деньги, если во время обработки заказа произойдет поломка какого-либо электромеханического узла автомата?
Использование МКА предпочтительно в приложениях, связанных с управлением, где основными критериями являются надежность, размер и предсказуемость поведения программного кода.
По материалам IAR Systems. Первоисточник – Getting started with IAR Embedded Workbench, раздел Developing embedded application (GSEW-2, 2010 г.).