Данные статьи посвящены программированию микроконтроллеров AVR фирмы Atmel на языках С и С++. AVR – это, пожалуй, самое распространенное семейство микроконтроллеров.
Итак, что вообще такое микроконтроллер (далее МК)? Это, условно говоря, маленький компьютер, размещенный в одной интегральной микросхеме. У него есть процессор (арифметическо-логическое устройство, или АЛУ), flash-память, EEPROM-память, множество регистров, порты ввода-вывода, а также дополнительные «навороты», такие как таймеры, счетчики, компараторы, USARTы и т. п. Микроконтроллер после подачи питания загружается и начинает выполнять программу, записанную в его flash-памяти. При этом он может через порты ввода/вывода управлять самыми разнообразными внешними устройствами.
Что же это означает? Это значит, что в МК можно реализовать любую логическую схему, которая будет выполнять определенные функции. Это значит, что МК – микросхема, внутреннее содержимое которой, фактически, мы создаем сами. Что позволяет, купив несколько совершенно одинаковых МК, собрать на них совершенно разные схемы и устройства.
Учимся писать прошивки.
Если вам захочется внести какие-либо изменения в работу электронного устройства, то не нужно будет использовать паяльник, достаточно будет лишь перепрограммировать МК. При этом не нужно даже вынимать его из вашего дивайса, если вы используете AVR, т. к. эти МК поддерживают внутрисхемное программирование. Таким образом, микроконтроллеры ликвидируют разрыв между программированием и электроникой.
AVR – это 8-битные микроконтроллеры, т. е. их АЛУ может за один такт выполнять простейшие операции только с 8-ми битными числами. Теперь пора поговорить о том, какой МК мы будем использовать. Я работаю с МК ATMega16. Он очень распространенный и приобрести его можно практически в любом магазине радиодеталей где-то за 100 руб.
Если вы его не найдете – тогда можно купить любой другой МК серии MEGA, но в этом случае придется искать к нему документацию, т. к. одни и те же «ножки» разных МК могут выполнять разные функции, и, подключив, казалось бы, правильно все выводы, вы, может быть, получите рабочее устройство, а, может быть, лишь облако вонючего дыма. При покупке ATMega16 проверьте, чтобы он был в большом 40-ножечном DIP-корпусе, а также купите к нему панельку, в которую его можно будет вставить. Для работы с ним потребуются также дополнительные устройства: светодиоды, кнопки, разъемы и т. п..
ATMega16 обладает очень большим количеством самых разнообразных функций. Вот некоторые его характеристики:
- Максимальная тактовая частота – 16 МГц (8 МГц для ATMega16L)
- Большинство команд выполняются за один такт
- 32 8-битных рабочих регистра
- 4 полноценных 8-битных порта ввода/вывода
- два 8-битных таймера/счетчика и один 16-битный
- 10-разрядный аналогово-цифровой преобразователь (АЦП)
- внутренний тактовый генератор на 1 МГц
- аналоговый компаратор
- интерфейсы SPI, I2C, TWI, RS-232, JTAG
- внутрисхемное программирование и самопрограммирование
- модуль широтно-импульсной модуляции (ШИМ)
Как просто научиться программировать микроконтроллеры PIC и AVR / Бегущие огни за 8 минут!
Полные характеристики этого устройства, а также инструкции по их применению можно найти в справочнике (Datasheetе) к этому МК. Правда, он на английском языке. Если вы знаете английский, то обязательно скачайте этот Datasheet, в нем много полезного.
Приступим, наконец, к делу. Я рекомендую изготовить для микроконтроллера специальную макетно-отладочную плату, на которой можно будет без паяльника (или почти без него) собрать любую электрическую схему с микроконтроллером. Использование такой платы значительно облегчит работу с МК и ускорит процесс изучения его программирования. Выглядит это так:
Что для этого понадобится?
Во-первых, потребуется сама плата. Я купил уже готовую в магазине радиодеталей за 115 руб. Потом припаял к ней все необходимые детали. Получилась неимоверно удобная вещь, на которой можно за считанные минуты собрать какую-либо электрическую схему путем перетыкания шлейфов и установки микросхем и индикаторов.
Для соединения элементов схемы очень удобно использовать шлейфы, на концах которых установлены разъемы. Эти разъемы надеваются на «ножки», торчащие рядом с каждым портом МК. Микроконтроллер следует устанавливать в панельку, а не припаивать к плате, иначе его очень трудно будет вынуть в случае, если вы его случайно сожжете. Ниже приведена цоколевка МК ATMEGA16:
Поясним, какие ножки нас сейчас интересуют.
- VCC – сюда подается питание (4,5 – 5,5 В) от стабилизированного источника
- GND – земля
- RESET – сброс (при низком уровне напряжения)
- XTAL1, XTAL2 – сюда подключается кварцевый резонатор
- PA, PB, PC, PD – порты ввода/вывода (A, B, C и D соответственно).
В качестве источника питания можно использовать все, что выдает 7-11 В постоянного тока. Для стабильной работы МК нужно стабилизированное питание. В качестве стабилизатора можно использовать микросхемы серии 7805. Это линейные интегральные стабилизаторы, на вход которых подают 7-11 В постоянного нестабилизированного тока, а на выходе получают 5 В стабилизированного.
Перед 7805 и после него нужно поставить фильтрующие конденсаторы (электролитические для фильтрации помех низких частот и керамические для высоких). Если не удается найти стабилизатор, то можно в качестве источника питания использовать батарейку на 4,5 В. От нее МК нужно питать напрямую.
Ниже приведу схему подключения МК:
Давайте теперь разберемся, что здесь для чего.
BQ1 – это кварцевый резонатор, задающий рабочую частоту МК. Можно поставить любой до 16 МГц, но, поскольку мы планируем работать в будущем и с COM-портом, то рекомендую использовать резонаторы на следующие частоты: 14,7456 МГц, 11,0592 МГц, 7,3725 МГц, 3,6864 МГц или 1,8432 МГц (позже станет ясно, почему). Я использовал 11,0592 МГц. Понятное дело, что чем больше частота, тем выше и скорость работы устройства.
R1 – подтягивающий резистор, который поддерживает напряжение 5 В на входе RESET. Низкий уровень напряжения на этом входе означает сброс. После сброса МК загружается (10 – 15 мс) и начинает выполнять программу заново. Поскольку это высокоомный вход, то нельзя оставлять его «болтающимся в воздухе» — небольшая наводка на нем приведет к непредвиденному сбросу МК. Именно для этого и нужен R1.
Для надежности рекомендую также установить конденсатор С6 (не более 20 мкФ).
SB1 – кнопка сброса.
Кварцевый резонатор и фильтрующий конденсатор C3 должны располагаться как можно ближе к МК (не далее 5-7 см), т. к. иначе могут возникать наводки в проводах, приводящие к сбоям в работе МК.
Синим прямоугольником на схеме обведен собственно программатор. Его удобно выполнить в виде провода, один конец которого втыкается в LPT порт, а другой – в некий разъем рядом с МК. Провод не должен быть чрезмерно длинным. Если возникнут проблемы с этим кабелем (обычно не возникают, но всякое бывает) то придется спаять адаптер Altera ByteBlaster. О том, как это сделать, написано в описании к программатору AVReal.
Теперь, когда разобрались с железом, пора перейти к программному обеспечению.
Для программирования AVR есть несколько сред разработки. Во-первых, это AVR Studio – официальная система программирования от Atmel. Она позволяет писать на ассемблере и отлаживать программы, написанные на ассемблере, С и С++. IAR – это коммерческая система программирования на C, С++ и ассемблере. WinAVR – компилятор с открытыми исходниками.
AtmanAVR – система программирования для AVR с интерфейсом, почти «один в один» таким же, как у Visual C++ 6. AtmanAVR также позволяет отлаживать программы и содержит множество вспомогательных функций, облегчающих написание кода. Эта система программирования коммерческая, но, согласно лицензии, ее можно в течение месяца использовать «нахаляву».
Я предлагаю начать работу с IAR как с наиболее «прозрачной» средой разработки. В IAR проект целиком создается «ручками», соответственно, сделав несколько проектов, вы уже будете четко знать, что означает каждая строчка кода и что будет, если ее изменить. При работе же с AtmanAVR придется либо пользоваться предварительно созданным шаблоном, который очень громоздкий и трудный для понимания для человека, не имеющего опыта, либо иметь множество проблем с заголовочными файлами при сборке проекта «с нуля». Разобравшись с IAR, мы впоследствии рассмотрим другие компиляторы.
Итак, для начала раздобудьте IAR. Он очень распространен и его нахождение не должно быть проблемой. Скачав где-либо IAR 3.20, устанавливаем компилятор / рабочую среду, и запускаем его. После этого можно начинать работу.
Запустив IAR, выбираем file / new / workspace, выбираем путь к нашему проекту и создаем для него папку и даем имя, например, «Prog1». Теперь создаем проект: Project / Create new project… Назовем его также – «Prog1». Щелкаем правой кнопкой мыши на заголовке проекта в дереве проектов и выбираем «Options»
Здесь будем настраивать компилятор под конкретный МК. Во-первых, нужно выбрать на вкладке Target тип процессора ATMega16, на вкладке Library Configuration установить галочку Enable bit definitions in I/O-include files (чтобы можно было использовать в коде программы имена битов различных регистров МК), там же выбрать тип библиотеки С/ЕС++. В категории ICCAVR нужно на вкладке Language установить галочку Enable multibyte support, а на вкладке Optimization выключить оптимизацию (иначе она испортит нашу первую программу).
Далее выбираем категорию XLINK. Здесь нужно определить формат откомпилированного файла. Поскольку сейчас мы задаем опции для режима отладки (Debug), о чем написано в заголовке, то на выходе нужно получить отладочный файл. Позже мы его откроем в AVR Studio. Для этого нужно выбрать расширение .cof, а тип файла – ubrof 7.
Теперь нажимаем ОК, после чего меняем Debug на Release.
Снова заходим в Options, где все параметры, кроме XLINK, выставляем те же. В XLINK меняем расширение на .hex, а формат файла на intel-standart.
Вот и все. Теперь можно приступать к написанию первой программы. Создаем новый Source/text и набираем в нем следующий код:
#include «iom16.h» short unsigned int i; void main (void) < DDRB = 255; PORTB = 0; while(1) < if (PORTB == 255) PORTB = 0; else PORTB++; for (i=0; i > >
Файл «iom16.h» находится в папке (C:Program Files)IAR SystemsEmbedded Workbench 3.2avrinc. Если вы используете другой МК, например, ATMega64, то выбирайте файл «iom64.h». В этих заголовочных файлах хранится информация о МК: имена регистров, битов в регистрах, определены имена прерываний.
Каждая отдельная «ножка» порта A, B, C или D может работать либо как вход, либо как выход. Это определяется регистрами Data Direction Register (DDR). 1 делает «ножку» выходом, 0 – входом. Таким образом, выставив, например, DDRA = 13, мы делаем выходами «ножки» PB0, PB2, PB3, остальные – входы, т.к. 13 в двоичном коде будет 00001101.
PORTB – это регистр, в котором определяется состояние «ножек» порта. Записав туда 0, мы выставляем на всех выходах напряжение 0 В. Далее идет бесконечный цикл. При программировании МК всегда делают бесконечный цикл, в котором МК выполняет какое-либо действие, пока его не сбросят или пока не произойдет прерывание.
В этом цикле пишут как бы «фоновый код», который МК выполняет в самую последнюю очередь. Это может быть, например, вывод информации на дисплей. В нашем же случае увеличивается содержимое регистра PORTB до тех пор, пока он не заполнится. После этого все начинается сначала. Наконец, цикл for на десять тысяч тактов. Он нужен для формирования видимой задержки в переключении состояния порта В.
Если не выключить оптимизацию, то компилятор сочтет этот цикл бесполезной тратой времени и выкинет его из программы!
Теперь сохраняем этот файл в папке с проектом как Prog1.c, копируем в папку с проектом файл iom16.h, выбираем Project/Add Files и добавляем «iom16.h» и «Prog1.c». Выбираем Release, нажимаем F7, программа компилируется и должно появиться сообщение:
Total number of errors: 0 |
Total number of warnings: 0 |
Приведу фотографию своего программатора:
Скачиваем программатор AVReal. Копируем его (AVReal32.exe) в папку Release/exe, где должен лежать файл Prog1.hex. Подаем питание на МК, подключаем кабель-программатор. Открываем Far Manager (в нем наиболее удобно прошивать МК), заходим в эту папку, нажимаем Ctrl+O. Поскольку у нас совершенно новый МК, то набиваем
avreal32.exe +MEGA16 -o11.0592MHZ -p1 -fblev=0,jtagen=1,cksel=F,sut=1 –w
Не забудьте правильно указать частоту, если используете не 11059200 Гц! При этом в МК прошиваются т.н. fuses – регистры, управляющие его работой (использование внутреннего генератора, Jtag и т.п.). После этого он готов к приему первой программы. Программатору в качестве параметров передают используемый LPT-порт, частоту, имя файла и другие (все они перечислены в описании к AVReal). Набираем:
Avreal32.exe +Mega16 -o11.0592MHz -p1 -e -w -az -% Prog1.hex
В случае правильного подключения программатор сообщит об успешном программировании. Нет гарантии, что это получится с первого раза (при первом вызове программы). У меня самого бывает программируется со второго раза. Возможно, LPT-порт глючный или возникают наводки в кабеле. При возникновении проблем тщательно проверьте свой кабель.
По своему опыту знаю, что 60% неисправностей связаны с отсутствием контакта в нужном месте, 20% — с наличием в ненужном и еще 15% — с ошибочной пайкой не того не к тому. Если ничего не получится, читайте описание к программатору, попробуйте собрать Byte Blaster.
Предположим, у вас все работает. Если теперь подключить к порту В МК восемь светодиодов (делайте это в выключенном состоянии МК, и желательно последовательно со светодиодами включить резисторы в 300-400 Ом) и подать питание, то произойдет маленькое чудо – по ним побежит «волна»!
Источник: kernelchip.ru
Как научиться программировать микроконтроллеры
Я начинал с электроники. Увлекался с детства. Выписывал журналы «Радио», читал их от корки до корки. И из этих журналов узнал о микроконтроллерах (МК). Они меня сильно заинтересовали, поскольку схемы устройств на МК были значительно проще, чем на транзисторах или даже микросхемах.
Но научиться использовать микроконтроллеры я тогда не смог. В журналах было недостаточно сведений, а книг тогда по этой теме не было.
Другое дело сейчас — способов научиться программировать МК много. Осталось только выбрать подходящий. А самый подходящий — это
Переходите по ссылке выше — там вас ждёт лучший видеокурс о микроконтроллерах, который мне приходилось когда-либо видеть. Ну а я пока для тех, кто вообще не в теме, расскажу немного о микроконтроллерах.
- Что такое микроконтроллер
- Применение микроконтроллеров
- Язык программирования микроконтроллеров
- Что нужно для программирования МК
- Как работает микроконтроллер
- Практическое программирование микроконтроллеров
- Основы программирования микроконтроллеров
- Видеокурсы по программированию микроконтроллеров
Что такое микроконтроллер
Микроконтроллер — это микросхема, которую можно программировать. Это если кратко. Далее будет чуть подробнее, а пока небольшая предыстория появления микроконтроллеров на свет божий.
Когда-то давно кто-то умный понял, что на существующей элементной базе (транзисторах и обычных микросхемах) уже невозможно создавать устройства, которые удовлетворяли бы современным требованиям по размерам и массе.
Кроме того, требования к электронному оборудованию всё возрастали, и для их выполнения приходилось создавать всё больше и больше новых микросхем — каждая под свою задачу.
Тогда этот кто-то умный решил — а почему бы не сделать программируемую микросхему, и использовать её для всех устройств. Ведь в большинстве случаев задачи являются типовыми, и отличается лишь логика управления. И почему бы эту логику не прописать в программе, а не использовать для каждой операции отдельную микросхему?
Так появились микропроцессоры. Микропроцессор — это тоже программируемая микросхема. Но в микропроцессоре, как правило, была только управляющая программа. А память, модули ввода-вывода и т.п. реализовывались в других микросхемах.
Это было лучше, чем применение обычных транзисторов или микросхем. Но всё равно не очень удобно. Потому что даже для очень простых устройств приходилось использовать несколько микросхем: микропроцессор, микросхемы памяти, микросхемы ввода-вывода, тактовые генераторы и т.п.
Поэтому создание микроконтроллера было неизбежным этапом эволюции микропроцессорных систем.
Микроконтроллер — это программируемая микросхема, которая объединяет в одном корпусе все (или почти все) части микропроцессорной системы.
То есть сегодня можно создать достаточно сложное устройство, например, новогоднюю гирлянду с разными режимами работы, имея лишь одну микросхему — простенький микроконтроллер, к тому же очень недорогой (стоимость простых микроконтроллеров начинается примерно от 50 рублей).
Так что микроконтроллеры очень быстро завоевали популярность среди электронщиков, причём как любителей, так и профессионалов. И сегодня применяются практически везде.
Применение микроконтроллеров
Как уже было сказано выше, сегодня микроконтроллеры применяются почти во всех электронных устройствах: игрушках, утюгах, стиральных машинах, автомобилях, да вообще везде.
Даже в основе таких приборов для промышленной автоматизации, как ПЛК, используются микроконтроллеры.
Микроконтроллеры используются в оборонной промышленности. К таким микроконтроллерам очень высокие требования. И цена их соответствующая. МК для оборонки, которые производятся в России, стоят от 15000 рублей за штуку и выше. Сравните с простейшими МК для гражданки — от 50 рублей.
В космической технике МК также используются. К ним требования ещё выше. Например, они должны быть устойчивы к радиации и низким температурам. Про их стоимость я ничего не знаю. Но, думаю, что она самая что ни на есть “космическая”.
В общем, если вы выберите профессию, связанную с микроконтроллерами, то сможете работать практически в любой области: от фриланса и машиностроения до оборонки и космической отрасли.
Язык программирования микроконтроллеров
Я уже говорил, что микроконтроллер — это программируемая микросхема. Из этого следует, что для создания устройств на микроконтроллерах необходимо научиться их программировать.
А для программирования, как известно, используются языки программирования. Языков программирования сегодня существует огромное количество. И для многих из них имеются средства разработки для микроконтроллеров (средства для написания программ).
Однако я советую использовать стандартные средства разработки, которые предоставляют сами разработчики и производители МК. Во всяком случае на начальном этапе обучения. А стандартные средства разработки, как правило, поддерживают только два языка программирования: ассемблер и Си.
Несмотря на то, что ассемблер сложнее, я советую начинать обучение именно с него. Потому что так вы лучше разберётесь с тем, как работает МК и будете понимать, что и зачем вы делаете. А изучить Си можно будет потом.
Что нужно для программирования МК
Программы для программирования микроконтроллеров
Как я уже говорил, для создания программ потребуется среда разработки — это специальная программа, которая устанавливается на компьютер. С её помощью можно писать, отлаживать и загружать программы в микроконтроллер.
Повторюсь — лучше использовать стандартные средства разработки от производителей. Они, как правило, бесплатны, и их можно скачать с официального сайта производителя микроконтроллеров.
Имеются и другие полезные программы, которые по большей части используются для отладки и для эмуляции работы микроконтроллера. Это позволяет как следует отладить и проверить программу на компьютере без загрузки в микроконтроллер. Но на начальном этапе обучения вполне достаточно стандартных программ и стандартных отладочных средств.
Программы для прошивки микроконтроллеров
Загрузку готовой программы в микроконтроллер в простонародье называют “прошивкой”.
Когда вы написали программу, вам надо загрузить её в МК (прошить микроконтроллер). Для этого вам, кроме программы, потребуется специальное устройство — программатор, а также соединительные кабели.
Всё это можно купить в магазинах электроники или у производителя микроконтроллеров.
Для прошивки микроконтроллера обычно используется та же программа, что и для создания программы.
ВАЖНО! Некоторые микроконтроллеры допускают только одну прошивку, или количество перепрошивок может быть ограничено. Поэтому, прежде чем загружать программу в МК, постарайтесь её как следует проверить и отладить на компьютере.
Как работает микроконтроллер
Ну вообще вы можете об этом узнать, если внимательно прочитаете руководство на конкретный микроконтроллер. Но если сказать упрощённо, то микроконтроллер работает примерно так:
- При включении питания выполняется сброс всех модулей микроконтроллера в исходное состояние, а программа загружается в оперативную память и начинает выполняться. Обычно программа выполняется в цикле. То есть все команды выполняются последовательно одна за одной. После выполнения последней команды вновь выполняется первая и так до бесконечности — пока не будет отключено питания или выполнен сброс.
- Тактовый генератор задаёт тактовую частоту. Это позволяет синхронизировать по времени все процессы, происходящие внутри микроконтроллера. Например, если тактовая частота 1000 Гц, то это означает, что за одну секунду генератор выдаёт 1000 тактовых сигналов.
- Каждый микроконтроллер имеет определённый набор команд (инструкций), из которых и состоит программа. Например, есть команда для чтения входа, есть команда для установки выхода, есть команды для выполнения арифметических операций и т.е.
- Выполнение каждой команды программы занимает один или несколько тактов. Например, если команда занимает 2 такта, то это означает, что при тактовой частоте 1000 Гц она выполняется за 1 / (1000 / 2) = 0,002 с. Если в нашей программе будет 100 таких команд, то это будет означать, что вся программа будет выполнена за 0,002 * 100 = 0,2 секунды. Это, конечно, упрошённо. Но суть, я думаю, вы уловили.
- Программа, как правило, считывает какие-то входные значения, обрабатывает их, и выдаёт на выходы сигналы в соответствии с логикой программы. Например, у нас есть новогодняя гирлянда с двумя режимами работы (пусть это будут “бегущий огонь” и “бегущая тень”), которые устанавливаются переключателем. Тогда микроконтроллер, в зависимости от того, на какой вход замкнут переключатель (какой режим выбран), будет через определённые промежутки времени поочерёдно подавать сигнал на выходы (зажигать светодиод — бегущий огонь), или снимать сигнал с выхода (гасить светодиод — бегущая тень). Временные промежутки также программируются при создании программы.
То есть упрощённый принцип работы МК такой:
- Прочитать входы
- Обработать полученные данные
- Установить выходы
Практическое программирование микроконтроллеров
Пока всё кажется несложным. Но на самом деле, конечно, всё НАМНОГО сложнее. Я привёл лишь некоторые общие сведения для тех, кто совсем не в теме.
Но любым, даже самым сложным вещам, можно научиться. Было бы желание. Но, кроме обучения, требуется, конечно, практика. Без практики любое обучение не имеет ни смысла, ни результата.
Поэтому очень советую в ходе обучения как можно больше создавать программ. Пусть даже без реального микроконтроллера. Хотя бы просто на компьютере.
А вот что делать потом, когда вы уже чему-то научитесь? Где приложить полученные навыки на практике?
К счастью, сегодня и для этого есть множество путей — выбирайте любой из этих или придумайте свой:
- Устроиться на работу, связанную с программированием микроконтроллеров
- Разрабатывать, создавать и продавать свои устройства на МК
- Преподавать уроки по микроконтроллерам в техническом училище или ВУЗе, ну или в области дополнительного образования
- Работать как фрилансер — задач по микроконтроллерам на биржах фриланса довольно много
- Создать свой канал про МК на Ютубе или в соцсетях, и зарабатывать на рекламе
- Написать свою книгу или видеокурс по микроконтроллерам и также зарабатывать на их продаже
- В конце концов, просто создавать свои устройства для удовольствия, то есть превратить это в увлекательное хобби, дарить эти устройства друзьям и родственникам, увлекать этим своих детей и т.п.
Основы программирования микроконтроллеров
Конечно, я не расскажу вам в одной статье даже основы. Узнать их вы можете здесь. А я лишь покажу, как примерно выглядит программа для микроконтроллера (точнее, исходный текст программы):
//Заголовочный файл, который подключает определения //ввода-вывода для устройства, используемого в проекте #include //Здесь можно объявить функции, константы и т.п. int main(void) < //Здесь выполняем необходимые приготовления к работе: //устанавливаем режимы работы портов и т.п. DDRB = 0xFF; PORTB = 0x00; DDRB |= (1 >
Это пример программы для микроконтроллера на языке Си.
Эта программа бесполезная, потому что она просто устанавливает высокий уровень на одном выходе. Но для понимания структуры программы этого достаточно. Ну а чтобы создавать полезные программы — надо учиться.
И, как я говорил выше, начать лучше всё таки с ассемблера. А потом, если будет желание, можно перейти на Си. Как можно всему этому научиться — см. ниже.
Видеокурсы по программированию микроконтроллеров
В рунете я знаю только одного автора, который создал уже несколько видеокурсов по микроконтроллерам. Но это очень крутой автор. Прям очень-очень. Уж поверьте — мне есть с чем и с кем сравнивать, потому что я за свою программистскую жизнь прочитал огромное количество книг и просмотрел немало видеокурсов.
Если вы новичок, то советую пока изучить первый видеокурс. Изучить тщательно, с практической проработкой всех примеров. Ну а если у вас уже есть какой-то опыт, то выбирайте то, что вам наиболее интересно.
Программирование микроконтроллеров для начинающих
Программирование микроконтроллеров на языке Си
Создание устройств на микроконтроллерах
Программирование дисплеев Nextion
Три курса со скидкой
![]() |
Если вы уже фанатично полюбили микроконтроллеры, и окончательно решили их досконально изучить, то вы можете получить три первых курса со скидкой. Как говорится: оптом — дешевле. Описания курсов вы можете найти по ссылкам выше, а получить их все вместе можно здесь. Экономия по сравнению с покупкой курсов по отдельности составит 780 рублей. |
Все четыре курса со скидкой
![]() |
Вы также можете купить все четыре курса. В этом случае экономия будет ещё больше. По сравнению с покупкой курсов по отдельности она составит 1880 рублей. Ссылка на оформление заказа. |
Инженер умных устройств
Ну вот и всё, на этом краткое знакомство с МК можно закончить. Надеюсь, вам было интересно. Также советую подписаться на рассылку об МК, в которой я рассказываю чуть подробнее о микроконтроллерах для начинающих, и из которой вы будете узнавать о выходе новых статей, книг и обучающих курсов:
Источник: info-master.su
Осваиваем микроконтроллеры на примере Atmega8
В рамках данной статьи мы не станем сильно погружаться в многообразие внутренних процессов и дебри архитектуры микроконтроллера. А основной нашей задачей будет являться – освоение азов практической работы с микроконтроллером и получение навыков для самостоятельной разработки и изготовления какого-либо интересующего нас электронного устройства.
В качестве подопытного предлагаю выбрать популярный и довольно высокопроизводительный 8-разрядный AVR микроконтроллер Atmega8 в удобном для наших целей 28-выводном DIP корпусе.
Итак, что нам нужно для полного счастья?
1. Простая и, в приоритете, бесплатная среда разработки, в которой можно посредством слов и цифр написать программу, а затем скомпилировать её, т. е. перевести на язык, понятный микроконтроллеру.
Одним из удачных примеров такой среды является Atmel Studio. Скачать эту программу не составит никакого труда, в том числе и на официальном сайте разработчика – https://www.microchip.com/.
2. Отладочная плата для микроконтроллера, желательно с DIP28 панелькой для микросхемы.
Удачным вариантом такой платы я бы посчитал изделие под названием «плата разработки ATmega8 – сделай сам», предлагаемое нашими китайскими друзьями за символические 150 отечественных рублей.
В комплект поставки входят:
– собственно, сама плата;
– Панелька DIP28;
– Кварцевый резонатор на 8 МГц;
– Разъём для подключения программатора;
– Разные деталюшки в виде: конденсаторов, резисторов, кнопок, светодиодов, т. е. всего того, что позволит легко запрограммировать и проверить микропроцессор в работе.
Можно, конечно, обойтись и без отладочной платы и произвести прошивку ATmega8 непосредственно в готовом устройстве, тем более что микропроцессор это сделать позволяет. Однако на практике произвести эти манипуляции заранее, а уже потом устанавливать микросхему по месту прописки оказывается значительно удобнее.
3. Программатор AVR USB, для того чтобы запрограммировать микроконтроллер, то есть перенести в него информацию с компьютера.
Такой программатор оценивается на Aliexpress примерно в ту же стоимость, что и предыдущее изделие.
Программатор подсоединяется к USB порту компьютера, а другим своим концом к плате микроконтроллера.
Данное соединение осуществляется через ISP разъём кабеля, который также входит в комплект поставки.
Питание берётся от USB разъёма компьютера.
Работать программатор может под разными операционными системами, в том числе – под Windows.
Если тип приобретённого программатора не будет поддерживаться Atmel Studio, то придётся скачать и бесплатную программу прошивки микроконтроллеров, например, AVRDude.
4. Контактная макетная плата для монтажа без пайки.
Такая макетная плата совместно с набором соединительных проводов (джамперов) будет весьма полезна на начальном этапе освоения микроконтроллера.
Она без какого-либо напряга и паяльника позволит соединить любые электронные элементы обвеса микроконтроллера в единую конструкцию, превращая весь процесс создания схемы в увлекательную игру с конструктором LEGO.
Подобный набор, состоящий из беспаечной макетной платы и комплекта проводов, обойдётся не дороже 200 рублей.
5. Для того чтобы в процессе отладки не перепрошивать ATmega8 бесчисленное количество раз, жизненно необходима программа, позволяющая отладить прошивку без участия микроконтроллера.
Для этой цели как нельзя лучше подходит программа для автоматизированного проектирования электронных схем (в том числе и микроконтроллеров) – Proteus. Она значительно упрощает процесс отладки программы без участия микроконтроллера, ведь любой накопитель имеет конечное число перезаписей, хотя это число и достаточно большое.
6. Если написать и отладить программу для микроконтроллера можно и без его непосредственного участия, то, по-любому, рано или поздно встанет конкретный вопрос: «А на фига мы всё это делали?».
Поэтому хочешь, не хочешь, а приобрести ATmega8 нам также всё ж таки придётся. Стоит она на Али, как и всё остальное, довольно-таки гуманных денег – около 100 рублей за единицу продукции, поэтому кошелёк опорожнит не сильно, но уважительного к себе отношения потребует.
А теперь давайте-ка посмотрим: А что это за штука ATMEGA8 попала к нам в руки?
Рис.1 Внешний вид и назначение выводов Atmega8
У данного типа МК есть два типа питания – цифровое VCC (выв.7) и аналоговое AVCC (выв.20). В стандартном включении, когда на входы/выходы контроллера подаются логические 1 и 0, оба вывода питания соединяют (физически соединяются VCC и AVCC, поскольку GND выводы 8 и 22 уже замкнуты внутри ИМС через сопротивление 0,7 Ом). Однако при подключении нагрузки, эти земляные выводы необходимо замкнуть на плате, т. к. внутри они соединены тонким проводником, который при существенном токе не следует рассматривать как «перемычку».
Если используется встроенный АЦП, или входы/выходы задействованы для работы с аналоговыми сигналами, то для уменьшения помех производитель рекомендует использовать последовательный LC-фильтр по AVCC.
Между выводами питания и землёй (в непосредственной близости от выводов питания микросхемы) всегда следует устанавливать керамические конденсаторы ёмкостью 0,1 Мкф, которые обычно называют блокировочными конденсаторами.
Ещё один непомеченный цветом вывод (Рис.1) – 21 вывод (AREF).
AREF означает Analog Reference и является входом для подачи (при необходимости) опорного напряжения от внешнего источника питания.
Все раскрашенные выводы микроконтроллера (Рис.1) – это порты ввода-вывода, через которые микроконтроллер общается с внешним миром. У ATmega8 их три: PB0. PB7, PC0. PC6, PD0. PD7.
PB0. PB7 и PD0. PD7 – это полные, т. е. 8-разрядные порты, PC0. PC6 – неполный 7-разрядный порт, т. к. для полноты ему тупо не хватило лишнего вывода у микросхемы.
Каждый вывод порта может работать либо как вход, либо как выход. Для того чтобы выбрать режим работы ножки микроконтроллера необходимо прописать нужные биты в соответствующие регистры.
Однако есть у части портов ввода-вывода и специфические функции, прописанные в документации на микросхему. Давайте посмотрим, что это за функции:
1. Порты PB0. РВ7. Два вывода (РВ6 и PB7) используются для подключения кварцевого резонатора. Выводы РВ2. РВ5 зарезервированы для программирования МК.
Таким образом, для общего применения остаются порты PB0 и PB1.
2. Порты PC0. РС6. Порты PC0. РС5 есть возможность использовать в качестве аналоговых входов.
РС6 обычно используется для общего внешнего сброса настроек, т. е. перезагрузки прошивки МК.
3. Порты PD0. РD7. Эти порты можно использовать для общего применения.
Atmega8 выпускается с уже настроенным для использования встроенным RC-генератором с частотой 1МГц, который позволяет запустить МК без внешних элементов. Посредством конфигурационных манипуляций, значения этой частоты могут принимать также значения: 2, 4 и 8 MHz. Однако для решения многих задач стабильности RC-генератора оказывается явно недостаточно, в связи с чем для тактирования микроконтроллера используется внешний кварцевый резонатор.
Следует запомнить, что МК не является устройством, которое управляет большими мощностями, для этого есть транзисторы, тиристоры и прочие силовые элементы. Максимальный ток линии ввода/вывода составляет 40мА, максимальный суммарный ток по цепям питания и GND – 200мА.
И под занавес:
Основные технические параметры ATmega8:
— Память для программ составляет 8 Кб с возможностью перезаписать 10 000 раз;
— 512 байт флеш-памяти для хранения переменных (100 000 циклов перезаписи);
— 1 Кб ОЗУ и 32 регистра общего назначения;
— Два 8-разрядных Таймера/Счетчика с раздельным прескалером, режим сравнения;
— 16-разрядный Таймер/Счетчик с раздельным прескалером, режим сравнения, режим захвата;
— Таймер реального времени с независимым генератором;
— 3 канала ШИМ;
— 6 каналов 10-разрядного АЦП;
— Двухпроводный последовательный интерфейс;
— Программируемый последовательный USART;
— Интерфейс SPI с режимами Master/Slave;
— Программируемый сторожевой таймер с отдельным независимым генератором;
— Встроенный аналоговый компаратор;
— Сброс при включении питания, программируемая защита от провалов питания;
— Встроенный калиброванный RC-генератор;
— Обработка внутренних и внешних прерываний;
— 5 режимов с пониженным энергопотреблением: Idle, ADC Noise Reduction, Power-save, Power-down и Standby;
— Напряжение питания 4.5 — 5.5В;
— Тактовая частота 0-16 МГц.
Ну, на этом, пожалуй, и всё.
Для желающих посерьёзней углубиться в знания, могу порекомендовать datasheet производителя и русскоязычное описание ATmega8, с которым можно познакомиться по ссылке — ATMEGA8.
А на следующих страницах будем осваивать язык программирования, а также запускать несложные устройства, выполненные на микроконтроллерах.
Источник: vpayaem.ru