Применение микроконтроллеров. Управление разными устройствами
Микроконтроллер — это специальная микросхема, предназначенная для управления различными электронными устройствами. Микроконтроллеры впервые появились в том же году, что и микропроцессоры общего назначения (1971). Разработчики микроконтроллеров придумали – объединить процессор, память, ПЗУ и периферию внутри одного корпуса, внешне похожего на обычную микросхему. С тех пор производство микроконтроллеров ежегодно во много раз превышает производство процессоров, а потребность в них не снижается.
Микроконтроллеры выпускают десятки компаний, причем производятся не только современные 32-битные микроконтроллеры, но и 16, и даже 8-битные. Внутри каждого семейства часто можно встретить почти одинаковые модели, различающиеся скоростью работы ЦПУ и объемом памяти.
Схема первая
С помощью этого программатора можно прошивать практически любой AVR-контроллер от ATMEL, надо только свериться с распиновкой микросхемы.
СОМ-разъем на схеме — это "мама".
На всякий случай привожу разводку печатной платы для атмеги8 (скачать), хотя такую примитивную схему проще нарисовать от руки. Плату перед печатью нужно отзеркалить.
Файл печатной платы открывать с помощью популярной программы Sprint Layout (если она у вас еще не установлена, то качайте 5-ую версию или лучше сразу 6-ую).
Как понятно из схемы, для сборки программатора потребуется ничтожно малое количество деталек:
Вместо КТ315 я воткнул SMD-транзистор BFR93A, которые у меня остались после сборки микромощных радиомикрофонов.
А вот весь программатор в сборе:
Питание (+5В) я решил брать с USB-порта.
Если у вас новый микроконтроллер (и до этого никто не пытался его прошивать), то кварц с сопутствующими конденсаторами можно не ставить. Работа без кварцевого резонатора возможна благодаря тому, что камень с завода идет с битом на встроенный генератор и схема, соответственно, тактуется от него.
Если же ваша микросхема б/у-шная, то без внешнего кварца она может и не запуститься. Тогда лучше ставьте кварц на 4 МГц, а конденсаторы лучше на 33 пФ.
Как видите, я кварц с конденсаторами не ставил, но на всякий случай предусмотрел под них места на плате.
Заливать прошивку лучше всего с помощью программы PonyProg (скачать).
Прошивка с помощью PonyProg
Заходим в меню Setup -> Calibration -> Yes. Должно появиться окошко "Calibration OK".
Далее Setup -> Interface Setup. Выбираем "SI Prog API" и нужный порт, внизу нажимаем "Probe", должно появиться окно "Test OK". Далее выбираем микроконтроллер "Device -> AVR micro ATmega8".
Теперь втыкаем микроконтроллер в панельку программатора, и подаем питание 5 вольт (можно, например, от отдельного источника питания или порта ЮСБ). Затем жмем Command -> Read All.
После чтения появляется окно "Read successful". Если все ок, то выбираем файл с нужной прошивкой для заливки: File -> Open Device File. Жмем "Открыть".
Теперь жмем Command -> Security and Configuration Bits и выставляем фьюзы, какие нужно.
Тщательно все проверяем и жмем "OK". Далее нажимаем Command -> Write All -> Yes. Идет прошивка и проверка. По окончании проверки появляется окно "Write Successful".
Вот и все, МК прошит и готов к использованию!
Имейте в виду, что при прошивке с помощью других программ (не PonyProg) биты могут быть инверсными! Тогда их надо выставлять с точностью до наоборот. Определить это можно, считав фьюзы и посмотрев на галку "SPIEN".
Напряжение питания
Каждый микроконтроллер имеет точно определенный уровень напряжения питания, при котором производитель гарантирует его правильную работу. Иногда микроконтроллер одного типа может быть изготовлен в 2-х вариантах, различающихся допустимыми напряжениями питания.
Как правило, максимальный диапазон тактовой частоты микроконтроллера также связаны с напряжениями питания.
Самые распространенные ошибки новичков:
- они вообще не фильтруют линию питания или ставят фильтры только по выходу стабилизатора напряжения
- они размещают силовые фильтры подальше от микроконтроллера
- они не подключают все вводы питания «потому что схема и так работает»
- они не подключают питания к аналоговой части «потому что я аналоговой частью не пользуюсь»
Хорошая практика для питания микроконтроллеров:
- каждый вывод питания Vcc (Vdd) должен быть оборудован конденсатором емкостью 100 нФ на землю, расположенным как можно ближе к микроконтроллеру
- стабилизатор с конденсаторами, номиналы которых вы найдете в его техническом описании, должны гарантировать стабильное питание с максимально возможным энергопотреблением разработанной системой
- подключите питание к аналоговой части, даже если вы ее не используете.
Выводы
Кроме упомянутых выше производителей есть много других: Intel, Renesas Electronics, Texas Instruments и прочие. Но в сообществе электронщиков-любителей они не прижились, хоть и активно используются в промышленности.
Новичкам я рекомендую AVR в виде Arduino: по нему много информации на русском, а порог вхождения невелик. Но засиживаться на них не стоит, а то так и будешь до конца дней собирать и пересобирать этот конструктор.
После Arduino стоит перейти на STM. Для простеньких проектов бери восьмибитные чипы, для более сложных — 32-битные, и будет тебе счастье. И помни, что микроконтроллер — это уже не процессор, но еще не компьютер.
Как программировать микроконтроллеры?
Программирование микроконтроллеров стало более простым благодаря использованию современных интегрированных сред разработки IDE с полнофункциональными библиотеками. Они легко охватывают все наиболее распространенные задачи и имеют много готовых примеров кода.
В настоящее время микроконтроллеры могут быть запрограммированы на различных языках высокого уровня. Это такие языки как C, C++, С#, Ява, Python, Basic и другие. Конечно, всегда можно написать программу на ассемблере. Хотя это для более продвинутых пользователей с особыми требованиями (с намеком на мазохизм). В этом смысле, любой должен быть в состоянии найти язык программирования, который лучше всего соответствуют его вкусу и предыдущему опыту программирования.
Программировать микроконтроллеры становится еще проще, так как производители создают графические среды программирования. Это пиктограммы, которые содержат в себе несколько строк кода. Пиктограммы соединяются друг с другом. В результате создается программа визуально простая, но содержащая в себе большое количество кода. Например, одно изображение может представлять управление двигателем. От пользователя требуется только разместить пиктограмму там, где необходимо и указать направление вращения и обороты.
среда программирования Lego Education EV3
Разработанные микроконтроллерные платы достаточно удобны в эксплуатации. И их проще использовать долгое время. Они также обеспечивают удобные питание от USB и интерфейсы программирования. Следовательно, есть возможность подключаются к любому современному компьютеру.
Структурная схема работы микроконтроллера
Арифметико-логическое устройство
Основой любого МК является АЛУ, в этом узле производятся все возможные арифметические — сложение, вычитание, сравнение и логические операции. В зависимости от того с каким числом разрядов может работать МК , они бывают 8-ми, 16-ти и 32-разрядные.
Если например микроконтроллера имеет 8-ми разрядное АЛУ, то он может выполнить какую либо операцию только с 8-ми разрядными числами и выдать такой-же результат.
К логическим операциям относятся:
- умножение-логическое «И»;
- сложение — логическое «ИЛИ»;
- отрицание — логическое «НЕ»;
- исключающее «ИЛИ»;
- сдвиг влево;
- сдвиг вправо;
Также и МК есть и другого рода операции такие как сброс в «0» или установка в «1» которые не относятся ни к арифмитическим не к логическим операциям.
Регистр общего назначения (РОН)
Произведенные в АЛУ операции возвращают результат вычисления- тоже число которое нужно где то хранить.
Хранение таких результатов осуществляется в регистрах общего назначения (РОН) — такие регистры выполняют своего рода роль временной памяти. У каждого микронтроллера кол-во таких РОН может быть разным. На примере структурной схемы МК указаны 32 регистра общего назначения.
Но такие регистры имеют очень небольшой объем памяти и предназначены для временного хранения данных в процессе работы АЛУ. Для более длительного времени хранения информации используются ОЗУ, которая имеет больший объем нежели РОН.
Постоянно запоминающее устройство(ПЗУ)
Инструкции или последовательность команд для AЛУ хранятся в постоянной памяти — ПЗУ которая представляет собой Flash-память, именно в нее мы записываем исполняемый код написанной нами программы. Каждой команде в ПЗУ соответствует определенный адрес.
Если мы хотим получить какую либо команду то мы должны обратиться к адресу этой команды, обращение к адресам ПЗУ осуществляет счетчик команд.
После того как мы обратитиль к адресу той или иной командны, данные из ПЗУ поступает в регистр команд. АЛУ мониторит наличие команды в регистре и при ее наличии начинает ее выполнять.
Порты ввода/вывода
Для того чтобы наш МК взамодейтствовать с внешним миром существуют порты ввода вывода, именно на них цепляется внешие устройства будть то это кнопка, светодиот, LSD экран или подключение по USB интрефейсу.
Порты можно настроить на прием данных, так и на передачу. Для настройки портов существуют специальные регистры. Для настройки портов на ввод/вывод в эти регистры записываются определенные значения.
Также очень важным узлом любого микронтроллера является тактовый генератор, который синхронизирует работы всего МК. Он может быть как внешним так и внутренним.
Заключение
Итак, большинство компонентов, составляющих типовую обвязку, уже присутствуют в современных микроконтроллерах. Однако, их может оказаться недостаточно для стабильной работы в жестких условиях, в этом случае требуется принятие дополнительных мер. И здесь сложно предусмотреть все возможные ситуации и гарантировать успешную работу того или иного решения. Поэтому лучшая рекомендация — это всегда проверять работу схемы в реальных условиях.
Интересный документ по теме — рекомендации Microchip, которые необходимо соблюдать при проектировании оборудования с использованием микроконтроллеров AVR, ссылка: AN2519 AVR Microcontroller Hardware Design Considerations