Программирование микроконтроллеров AVR — первый шаг

Программирование микроконтроллеров для начинающих — первый шаг

Три условия для желающих освоить микроконтроллер
Что такое программа
Что такое алгоритм
Языки программирования

Я, наверное, немного поспешил, назвав статью «Программирование микроконтроллеров AVR — первый шаг». Скорее, эта статья, как и все последующие, — маленький шажок в мир микроконтроллеров. И таких «шажков» у нас будет много, пока не дойдем до того момента, когда сможем сказать: «Микроконтроллер — последний шаг». Но и это, скорее всего, из области фантастики — нельзя объять необъятное, — мир микроконтроллеров постоянно развивается и совершенствуется. Наша задача — сделать первый шаг, логическим итогом которого должна стать первая, самостоятельно разработанная и собранная конструкция на микроконтроллере. А дальше,  -дальше каждый поплывет своей дорогой в совершенствовании полученных на сайте знаний. И тогда, завершающую статью можно будет назвать так: «Программирование микроконтроллеров — последний шажок первого шага» (надо же, как загнул!).
И так, приступаем.

Устройство и программирование микроконтроллеров для начинающих

Три условия для желающих освоить микроконтроллер

1. Желание и настойчивость в достижении поставленной цели
Этот пункт, на мой взгляд, — самый главный. Не будет желания, а еще хуже — настойчивого желания, то и не будет результата. Главное не пасовать и не останавливаться, проявите настойчивость — и все получится (и не только в деле освоения микроконтроллеров).

2. Знание устройства микроконтроллера.
Немаловажный фактор. Ведь, согласитесь, не зная как устроен микроконтроллер, что он имеет в своем распоряжении, как это все работает, — мы не сможем использовать все возможности микроконтроллера, выжать из него все, на что он способен.
Возможно и не стоит очень глубоко копаться во «внутренностях» микроконтроллера, но основное, так сказать — азы, мы знать должны (этим мы и будем заниматься на страницах сайта — изучать азы работы с микроконтроллером).

3. Знание команд управления микроконтроллерам.
Микроконтроллер, как собака (такое вот интересное сравнение), будет смотреть на нас умными глазами и вилять своим хвостом, пока не подадим ему команду на выполнение каких-то действий.
В отличие от умной собаки, микроконтроллер понимает намного больше команд — более 130 штук.
Так вот, чтобы микроконтроллер не только вилял хвостом, но и выполнял нужную нам работу,  — необходимо знать команды управления им.
Сразу хочу сказать, для начала не надо зубрить все 130 команд, достаточно будет знания и половины (и даже меньше). К тому же, многие команды дублируют друг-друга. Но чем больше команд мы будем знать, тем эффективней мы сможем управлять микроконтроллером и тем красивее и элегантнее будут выходить из-под нашего пера программы.

Итого, если у вас есть настойчивое желание освоить микроконтроллер, тогда продолжаем.


Что такое программа

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

Программа (в переводе это слово означает – “предписание”) – предварительное описание предстоящих событий или действий.

К примеру, мы хотим, чтобы микроконтроллер помигал светодиодом. Довольно простая задача, но тем не менее, для того, чтобы микроконтроллер выполнил ее, мы, предварительно, должны шаг за шагом описать все действия микроконтроллера — написать программу, которую он должен выполнить для получения нужного нам результата – мигающий светодиод.
Что-то вроде такого:
♦ Зажечь светодиод:
— настроить вывод микроконтроллера,к которому подключен светодиод, для работы на вывод информации
— подать на этот вывод логический уровень, который позволит зажечь светодиод
♦ Подождать некоторое время:
— перейти к подпрограмме формирующей паузу (которую тоже нужно “прописать”)
— по выполнению подпрограммы паузы вернуться в основную программу
♦ Погасить светодиод:
— подать на вывод микроконтроллера логический уровень, гасящий светодиод
и так далее.

С термином Программа неразрывно связан другой термин – Алгоритм.


Что такое алгоритм

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

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


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

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

Команды для микроконтроллера имеют вид набора единичек и нулей, типа:
00110101 011000100
так называемые – коды команд, а коды команд – это язык который понимает микроконтроллер. А для того, чтобы перевести наш язык общения на язык микроконтроллера – в эти самые наборы нулей и единичек, существуют специальные программы.

Эти программы позволяют описать порядок работы для микроконтроллера на более-менее понятном для нас языке, а затем перевести этот порядок на язык понятный микроконтроллеру, в результате чего получается так называемый машинный код – последовательность команд и инструкций (те самые нули и единички) которые только и понимает микроконтроллер. Текст программы, написанный программистом, называется исходным кодом. Перевод программы с языка программирования (исходного кода) на язык микроконтроллера (машинный код) производится трансляторами. Транслятор превращает текст программы в машинные коды, которые потом записываются в память микроконтроллера.

В таких программах порядок работы микроконтроллера описывается специальным языком – языком программирования.

Язык программирования – это способ передачи команд, инструкций, чёткого руководства к действию для микроконтроллера.

Из множества языков программирования можно выделить два типа:
языки программирования низкого уровня
языки программирования высокого уровня
Чем они отличаются. А отличаются они своей близостью к микроконтроллеру.

На заре зарождения микропроцессорной техники, программы писали в машинных кодах, то есть весь алгоритм работы последовательно прописывали в виде нулей и единичек. Вот так, примерно, могла выглядеть программа:
01010010
01000110
10010011

Трудно, даже профессионалу, разобраться в такой комбинаций из двух цифр. Для облегчения своей жизни, программисты стали создавать первые языки программирования. Так вот, чем ближе язык программирования к такому набору нулей и единиц тем больше он “низкого уровня”,  а чем дальше от них – тем больше “высокого уровня”.

Самые распространенные языки программирования для микроконтроллеров:
— язык низкого уровня – Ассемблер
— язык высокого уровня – С (Си)

Давайте посмотрим на примере их различия (эти примеры абстрактные).
Допустим нам надо сложить два числа: 25 и 35.
В машинных кодах эта команда может выглядеть так:
00000101 1101001
На языке низкого уровня:
ADD Rd, Rr
На языке высокого уровня:
25+35

Различие языков низкого и высокого уровня видны невооруженным глазом.

Но давайте копнемся в этих примерах поглубже. Пример машинного кода разбирать не будем, так как он идентичен примеру на Ассемблере. По своей сути, Ассемблерные команды это те же машинные коды (команды) которым просто, чтобы не заблудиться в нулях и единицах, присвоены буквенные аббревиатуры. Ассемблерной командой ADD Rd, Rr мы ставим микроконтроллеру задачу сложить два числа, которые находятся (а для этого мы должны их туда предварительно записать) – первое в Rd, второе в Rr, а результат сложения поместить в Rd. Как видите мы ставим очень конкретную задачу микроконтроллеру: где взять, что с этим сделать и куда поместить результат. В этом случае мы работаем напрямую с микроконтроллером.

Команда на языке высокого уровня: 25+35, привычная для нас математическая запись, радующая наш глаз. Но в этом случае мы не работаем напрямую с микроконтроллером, мы просто ставим ему задачу сложить два числа. Результат и последовательность действий в данном случае будет тот-же, что и при выполнении ассемблерной команды: сначала эти два числа будут куда-то записаны, затем сложены а результат куда-то помещен.

И вот тут кроется главное отличие языков высокого уровня и низкого уровня. Если в Ассемблере мы контролируем весь процесс (хотим мы того, или нет): мы знаем где записаны эти два числа, и мы знаем где будет находиться результат, то в языке высокого уровня мы процесс не контролируем. Программа сама решает куда предварительно записать числа и куда поместить результат. В большинстве случаев нам это и не надо знать, ведь для нас главное итог – число 60 на выходе. Как результат, программы на языках высокого уровня более читаемы (спорный вопрос), приятны для глаза (спорный вопрос) и меньше по размеру – ведь нам не приходится “лезть во все дыры” и расписывать каждый шаг микроконтроллера, программа это делает потом за нас, когда компилирует ее – переводит в машинные коды. Но тут есть и минус. Два одинаковых алгоритма написанных на Ассемблере и на Си, после преобразования их в машинные коды будут иметь разный размер: программа написанная на Ассемблере будет на 20-40% короче программы написанной на Си – черт его знает, каким путем идет Си для достижения нужного нам результата. И бывают случаи, когда нет доверия к языку высокого уровня и в программе на Си делают вставки кода, написанные на Ассемблере.

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


Следующие статьи:
1. Системы счисления: десятичная, двоичная и шестнадцатиричная
2. Логические операции, логические выражения, логические элементы
3. Битовые операции
4. Прямой, обратный и дополнительный коды двоичного числа


Примечание: к этой записи прикреплена форма для оценки. Чтобы оценить её, зайдите на сайт.
Устройство и программирование микроконтроллеров AVR для начинающих: что такое программа, что такое алгоритм, языки программирования
Published by: Мир микроконтроллеров
Date Published: 04/19/2015

20 ответов к “Программирование микроконтроллеров AVR — первый шаг”

Доброго времени суток, спасибо за ваши труды, очень познавательно. Начал изучать программирование языка си, все вроде делаю правильно программатор usbasp, пишу в атмел студио, мк атмега 8A-PU, прошиваю avrdude, вот код
int main(void)
{
DDRC = 0b0000001;
while (1)
{
PORTC = 0b0000001;
}
}
нету у меня на этом порту этих пяти вольт чтобы зажечь светодиод. Там 0,26 вольта на ножке. Атмел говорит компиляция успешна. Avrdude говорит все верно прошилось без ошибок. А светодиод не горит нету этих 5-вольтов. Что делать не пойму. Может подскажете

{
DDRC = 0b00000001; // — по 1 нулю добавил и всё получилось.
while (1)
{
PORTC = 0b00000001; // — по 1 нулю добавил и всё получилось.
}
}

Молодцы. Еще на одного знатока микроконтроллеров AVR в этом мире становится больше ))

Согласен с автором, что ассемблер нужно знать…Но изучать его крайне неинтересно и нудно. Особенно для начинающих. Ладно если светиком помигать, а если что то посерьезнее и посложнее?
Недаром народ собирает на ардуино, не вникая в тонкости, куда что записывается и какие регистры как работают. для меня главное, чтоб моя самоделка делала то, что мне хочется, и чтоб было просто в программе изменить пару параметров задержки или на другой пин переключиться, а не перелопачивать тонны чужого кода, и мучаясь неделями. Обычный народ ведь не знает, какие кода пульт от телевизора передает или на автомобиле какие датчики на каких принципах работают и какие циферки в компьютер передают… Но все ездят на авто и пользуются телевизором. Лучше оставим сложности спецам, раз они от этого кайфуют!))) Поэтому огромная благодарность автору за информацию, доступную для нашего понимания!

Спасибо, что оценили наш труд. А так да, согласен, количество схем на Arduino в сети уже превысило в несколько раз количество схем на микроконтроллерах AVR. Но мне кажется прежде чем начинать изучение Arduino, необходимо хотя бы немного изучить принципы работы микроконтроллеров AVR — так потом гораздо легче будет осваивать Arduino и глубже понять логику ее работы потому что в основе плат Arduino лежат микроконтроллеры AVR

Да, на Atmel Atmega сделаны самые популярные модели плат Arduino. А где вы увидели противопоставление?

PRAVIL’NO.Den’gi na morozhenoe luchshe vziat’ u babuli ili u papy.Zachem golovu lomat’ ,truditsia.
VLAD! TEBE NE SIUDA!!! TY UZHE NA MNOGO VUSHE!!! LETI VYSHE!!!

Попал случайно на ваш сайт и хочу прочитать может что0то отложится и хоть для начала понять что находится внутри и как этим пользоваться.

Здравствуйте!
Как убрать окно»Подпишись на новости». Я подписался, адрес подтвердил.

OK!Хотелось научиться программировать микроконтроллер MK1841D SAMSUNG Практически нет информации, кроме datasheet

А какой смысл? Это однократно программируемые контроллеры- нужно иметь под боком завод по производству чистых не прошитых контроллеров. И продают их только десятками тысяч.
Прошитый уже не перепрограммируешь и ошибку не исправишь.

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

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

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