Вострухин А.В. Вахтина Е.А. Введение в программирование микроконтроллера AVR на языке Ассемблера
Вострухин А.В. Вахтина Е.А. Введение в программирование микроконтроллера AVR на языке Ассемблера
Введение
Современные электронные устройства работают под управлением микроконтроллеров, основой функционирования которых является программное обеспечение. Его разработка становится необходимой составляющей инженерной деятельности. Об этом убедительно и образно писал в 1984 году Ч.А.Р. Хоар, профессор Оксфордского университета, ученый с мировым уровнем признания: «…программирование… подобно открытию древними греками аксиоматической геометрии – оснований для землемерной и картографической деятельности, а затем для проектирования и возведения зданий и мостов. Оно подобно открытию законов Ньютона и дифференциального исчисления – оснований для астрономии, а также для таких мирских начинаний, как навигация и управление артиллерийским огнем. Оно подобно открытию сопромата – основания для надежного и экономичного строительства железобетонных зданий, мостов и нефтехранилищ…»
Области применения микроконтроллеров многогранны. Это бытовая техника, интеллектуальные датчики, автомобильная электроника, биомедицинская диагностическая аппаратура, системы управления летательными аппаратами, электроэнергетика, автоматизированные системы управления технологическими процессами. Звание структуры, функциональных возможностей микроконтроллеров, методов в средств разработки устройств в систем на их основе является необходимым для каждого специалиста в области электроники, автоматики, вычислительной и измерительной техники.
Известно, что наиболее совершенным будет то электронное устройство, которое построено на базе микропроцессора (иногда микроконтроллер называют микропроцессором, что вполне допустимо). Отсутствие литературы, ориентированной на непрофессиональных разработчиков электронных устройств, приводит к тому, что научно-технические задачи в большинстве диссертационных и студенческих работ решается на базе электронных устройств без микропроцессоров – это снижает качество научных работ. В учебной литературе по электронике микропроцессорные системы рассматриваются в недостаточном объеме или совсем не рассматриваются.
Микроконтроллер (в переводе с англ. – средство управления) раньше называли микроЭВМ, это сложная программируемая система, размещенная на одном полупроводниковом кристалле и ориентированная на выполнение функций управления. Разработчику микроконтроллерных устройств необходимо уметь выбрать наиболее подходящий микроконтроллер, подключить к нему датчики, клавиатуру, индикатор, ключи, организовать при необходимости связь (интерфейс) с другими микропроцессорными устройствами и т. д., а также разработать наиболее сложную и трудоемкую часть микроконтроллерного устройства – программ.
…
Программирование микроконтроллеров начинающим
Программирование микроконтроллеров
Термин программирование микроконтроллеров обозначает процесс записи (программирования) информации в постоянное запоминающее устройство (ПЗУ) микроконтроллера. Помимо программирования микроконтроллеров, в практике встречается программирование микросхем памяти и программирование логических матриц. Как правило, программирование микроконтроллеров и микросхем памяти производится при помощи специальных устройств – программаторов. Хороший программатор позволяет не только программировать (записывать), но и считывать информацию, а в ряде случаев, производить и другие действия (стирание, защита от чтения, защита от программирования и т.п.).
Используя различные признаки, все многообразие устройств со встроенным ПЗУ можно систематизировать следующим образом:
1.
По функциональному назначению1.1. Микросхемы памяти;
1.2. Микроконтроллеры с внутренним ПЗУ;
1.3. Микросхемы программируемой логики (программируемые матрицы).
2.
По возможности программирования2.1. Однократно программируемые – устройства допускающие единственный цикл программирования;
2.2. Многократно программируемые (перепрограммируемые) – устройства допускающие множество циклов программирования (перепрограммирования).
3.
По допустимым способам программирования3.1. Микросхемы, программируемые в программаторе. Для осуществления необходимой операции, подобные микрocхемы вставляются в специальную колодку программатора, обеспечивающую электрический контакт со всеми выводами микрocхемы. Для реализации выбранного режима, программатор формирует в соответствии со спецификацией производителя необходимые последовательности сигналов, которые через колодку подаются на определенные выводы программируемого микроконтроллера (микрocхемы).
3.2. Микрocхeмы, поддерживающие режим внутрисхемного программирования (“ISP mode”), и программируемые непосредственно в плате пользователя.
Подобные микрocхeмы предполагают выполнение необходимой операции (программирование, стирание, чтение, верификация и т.п.) непосредственно в плате пользователя. Все действия по программированию производятся с помощью внешнего программатора, определенным образом подключенного к плате пользователя. При этом плата пользователя должна быть разработана с учетом специфических требований данного режима.
3.3. Микросхемы, поддерживающие режим внутреннего самопрограммирования. Подобные микрocхeмы допускают выполнение необходимой операции (запись, стирание, чтение, верификация и т.п.) непосредственно в устройстве пользователя, без использования какого либо программатора. При этом устройство пользователя должно быть разработано с учетом специфических требований данного режима.
Программирование микроконтроллера подразумевает заполнение внутренней памяти микроконтроллера нужной информацией. В зависимости от типа программируемого микроконтроллера, внутренняя память микроконтроллера обладает своей структурой и организацией. В общем случае, внутренняя память микроконтроллера это: память данных, память программ, регистры специального назначения (fuse – биты) – содержимое которых определяет режимы работы микроконтроллера и/или его периферии. Таким образом: программирование микроконтроллера – это заполнение каждой области памяти своей специфической информацией.
Каждый программируемый микроконтроллер обладает своим индивидуальным набором допустимых режимов:
программирование (запись), чтение, стирание, защита от чтения, защита от программирования и т.п.
Некоторые программируемые микроконтроллеры не имеют отдельного режима «стирание». Для них стирание прежней информации в памяти происходит в теневом режиме, при каждом новом цикле программирования микроконтроллера;
Некоторые программируемые микроконтроллеры поддерживают различные режимы ограничения доступа. Выбор режима ограничения доступа производится при программировании микроконтроллера. В зависимости от выбранного режима, либо все ПЗУ микроконтроллера, либо его определенные части могут быть:
- – защищены от возможности записи/дозаписи;
- – защищены от возможности считывания содержимого извне. При попытке считать информацию, защищенный микроконтроллер будет выдавать либо «мусор», либо «все 0», либо «все 1».
Говоря о программируемых устройствах, можно считать общепринятой следующую систему мнемонических обозначений:
- PROM (Programmable Read-Only Memory) – программируемая пользователем энергонезависимая память (ПЗУ).
- EPROM (Erasable Programmable Read-Only Memory) – перепрограммируемое ПЗУ. Стирание содержимого производится при помощи ультрафиолетовых лучей, после облучения подобное ПЗУ готово к новому циклу записи информации (программированию). Устаревший тип памяти.
- EEPROM (Electrically Erasable Programmable Read-Only Memory) – электрически стираемое перепрограммируемое ПЗУ. Память такого типа может стираться и заполняться данными многократно, от несколько десятков тысяч раз до миллиона.
- FLASH (Flash Memory) – одна из технологических разновидностей энергонезависимой перезаписываемой памяти.
- NVRAM (Non-volatile memory) – «неразрушающаяся» память, представляющая собой ОЗУ со встроенным источником электропитания. По своей функциональности для пользователя – аналогична традиционному ПЗУ.
- PLD (Programmable Logic Device) – Программируемая логическая интегральная схема. (ПЛИС).
- MCU (Microcontroller Unit) – микроконтроллер.
Программирование микроконтроллеров | LAZY SMART
Белов А. В.
Микроконтроллеры AVR в радиолюбительской практике. — СПб.: Наука и Техника, 2007. — 352 с: ил. ISBN 978-5-94387-365-2 Серия «Радиолюбитель»
скачать книгу
Данная книга представляет собой справочник, в котором представлено полное и подробное описание одной конкретной микросхемы — микроконтроллера ATiny2313 семейства AVR фирмы Atmel. Описание построено на основе оригинальной технической документации на микросхему и содержит описание всех регистров, всех видов памяти и всех внутренних систем микроконтроллера.
Имеется и практический раздел для радиолюбителей. Книга содержит описание нескольких практических схем, выполненных с применением данного микроконтроллера. Каждая схема снабжена подробным описанием и примером управляющей программы. Программы приведены в двух вариантах: на Ассемблере и языке СИ. Все программы также подробно описаны. Книга рассчитана на широкий круг читателей. Она будет полезна разработчикам электронных устройств, работникам ремонтных организаций, радиолюбителям и студентам технических ВУЗов.
Белов А. В.
Создаем устройства на микроконтроллерах. — СПб.: Наука и Техника, 2007. — 304 с: ил.
ISBN 978-5-94387-364-3
Серия «Радиолюбитель»
скачать книгу
Данная книга представляет собой практическое пособие по разработке электронных схем с применением микроконтроллеров и управляющих программ к ним. Основа книги — это ряд практических примеров, которые от простого к сложному раскрывают принципы построения схем и написания программ для микроконтроллеров. Специально разработанные примеры вводят читателя в мир программирования с самых азов, пройти по всем этапам усложнения задачи и заканчиваются описанием нескольких интересных конструкций имеющих определенную практическую ценность.
После урока по программированию и схемотехники читатель получает подробные сведения о том, как происходит написание трансляция и отладка программ, познакомится с программными средствами, облегчающими редактирование и отладку программ. В заключении вы познакомитесь с принципами построения программаторов для прошивки оттранслированных программ в микросхему микроконтроллера, рассмотрите конкретную схему программатора и научитесь работать с программой, управляющей этим программатором.
Комментарии закрыты.
Зачем и как мы учим программировать микроконтроллеры. Как?
Учить программированию можно по-разному. У себя в 169-ой мы пришли к тому, что один из наиболее продуктивных подходов — программирование микроконтроллеров на примере создания компьютерных игр. Почему так? Зачем вообще нужны какие-то микроконтроллеры? Давайте разбираться.
Для начала полезно будет вспомнить, зачем мы в принципе учим детей программированию. Только лишь для решения прикладных задач? Призываю всех перечитать ещё раз Сеймура Пейперта, “Переворот в сознании: Дети, компьютеры и плодотворные идеи”.
Сеймур Пейперт использует метафору естественного для ребенка освоения нового языка в новой стране. “Две основополагающие идеи проходят через эту книгу. Первая состоит в утверждении, что можно придумать такие компьютеры, научение общению с которыми превратится в естественный процесс, скорее напоминающий изучение французского живущими во Франции людьми, а не мучительную процедуру постижения иностранных языков в американских школах. Вторая идея состоит в утверждении, что научение общению с компьютерами позволит изменить и другие формы обучения. Компьютер может говорить как на языке математика, так и на языке, использующем обычный алфавит. Мы учимся делать компьютеры, с которыми детям нравилось бы общаться.
Иными словами, с точки зрения обучения важно то, что компьютер способен стать средством имитации, моделирования физической реальности. А программирование – это инструмент, позволяющий самим детям заниматься компьютерным моделированием физической реальности, и свободно экспериментируя, глубоко осваивать ее законы.
Давайте вспомним и о том, что любая компьютерная игра, воссоздающая реальное поведение объектов, включает соответствующую физическую модель. Чтобы предметы падали, нужно научить их падать. Чтобы предметы сталкивались, нужно научить их сталкиваться. Создавая компьютерную игру, дети создают физические модели, то есть занимаются компьютерным моделированием физической реальности. Именно это и является самым главным с точки зрения обучения. Кроме того, создание игр вызывает у детей живой интерес.
Только есть одна загвоздка… Игры — это как атомная энергия. Чтобы использовать её в мирных целях, ею необходимо очень и очень хорошо управлять. Но человек (уж мы с вами точно!), в отличие от прочих животных, в большей степени способен осознанно контролировать происходящее. И несмотря на существование такого феномена как “компьютерная зависимость” (ru.wikipedia.org/wiki/Компьютерная_зависимость) и “зависимость от компьютерных игр” (ru.wikipedia.org/wiki/Зависимость_от_компьютерных_игр), мы всё-таки храбро будем продолжать программировать игры на занятиях.
Какую роль играют микроконтроллеры в свете всего вышеописанного? Это тот самый “мостик”, который связывает два мира, физический и виртуальный, не дает “увязнуть” в иллюзорности.
Использование микроконтроллеров позволяет продемонстрировать детям применимость созданных компьютерных моделей для решения практических задач, в том числе для управления реальными объектами. Пример — проект “Умный домик” из книги “Scratch и Arduino для юных программистов и конструкторов”. В зависимости от реального уровня освещенности не только меняется изображение на экране, но и щелкает вполне реальный модуль реле, включая и выключая вполне реальную лампочку.
Пример проекта продвинутого уровня из нашей новой книги “Игровая робототехника для юных программистов и конструкторов: mBot и mBlock”. Робот сканирует пространство вокруг себя, с использованием показаний дальномера на экране компьютера рисуется “карта” препятствий, в результате можно управлять перемещениями компьютерного персонажа так, чтобы он объехал метки препятствий, а робот воспроизводит траекторию перемещения компьютерного персонажа на местности.
Но оба примера выше — достаточно сложны, чтобы с них начинать. Что можно предложить поначалу? Программируя игры, мы стараемся использовать такие проекты, в которых управление будет осуществляться именно на основании показаний датчиков, подключенных к роботу или микроконтроллеру. Это позволяет детям не “увязать” в игровом процессе, акцентирует внимание на инженерных задачах, например, создании эргономичных игровых пультов, вопросах считывания и преобразования значений и т.д.
Например, можно управлять “летающей тарелкой” во время “звездных гонок”, накреняя корпус робота (или игровой пульт на базе микроконтроллера с подключенным гироскопом) налево или направо (проект из книги “Игровая робототехника для юных программистов и конструкторов”).
Хотите узнать на практике, как всё это выглядит? Давайте создадим очень простой, первоначальный вариант несложной игры. Управление будет осуществляться одной кнопкой. Можно использовать готовый контроллер mCore робота mBot с уже встроенной кнопкой и готовым блоком “кнопка нажата” в визуальной среде mBlock. Но не надо забывать, что нажатие и отпускание кнопки это всего лишь замыкание и размыкание контакта, появление и исчезновение электрического напряжения на “ноге” (pin) микроконтроллера. Поэтому с тем же самым успехом можно использовать распространенную и доступную плату Arduino в сочетании с кнопочным модулем или платой расширения “Joystick Shield”, а также базовый блок чтения состояния порта “digitalRead” (на русский переведено в mBlock как “читать цифровой pin”).
Сюжет: голодная рыбка плавает влево-вправо, разворачиваясь у края экрана, кроме того, ее можно развернуть в произвольный момент, нажав на кнопку игрового пульта. Сверху периодически опускаются съедобные предметы, которые вовремя надо суметь подобрать.
Проверяем настройки: “Language” — “Русский”, “Boards” — “Arduino Uno”, “Extensions” — “Arduino”.
Подключаем игровой пульт на базе Arduino Uno и Joystick Shield к компьютеру при помощи кабеля USB. Устанавливаем соединение через последовательный порт. “Соединить” — “Serial Port” — “COM3” (предположим). Загружаем прошивку: “Соединить” — “Обновить прошивку”. Проверяем наличие соединения, щелкаем мышью по блоку “читать аналоговый pin (A) 0” из группы “Робот” на палитре блоков. Мы должны увидеть какое-то значение, отличное от нуля.
Удаляем спрайт “M-Panda” (базовые навыки работы в Scratch у всех есть?), добавляем спрайт “Fish4” из библиотеки. Далее собираем для этого спрайта следующий набор скриптов (необходимо будет создать переменную “датчик”). Кнопку будем использовать нижнюю, связанную с пином 4.
Добавляем из библиотеки спрайт “Apple”, создаем для него скрипт.
Дублируем спрайт “Apple” один или несколько раз, при желании заменяем костюм. Пробуем!
Ваша программа работает? Есть ли ошибки, всё ли происходит именно так, как вам хотелось бы? “Ошибки приносят нам пользу, поскольку они заставляют нас разобраться в том, что произошло, понять, где мы пошли по ложному пути, и через такое понимание исправить их. Опыт программирования на компьютере эффективнее любой другой деятельности заставляет уверовать в отладку” (Сеймур Пейперт).
Функционирующий проект — это “лакмусовая бумажка”, заменяющая оценку учителя и наглядно демонстрирующая ребенку, что он добился результата, достиг поставленной цели. И это тот самый путь, идя по которому, ребенок в конце концов перестанет лишь пассивно усваивать информацию, сможет заняться самообучением, осознанно формулируя персональные задачи и выбирая методы, позволяющие их решить.
Программирование микроконтроллеров
Продолжительность курса
Курс “Программирование микроконтроллеров” читается для студентов 2 курса в течение осеннего и весеннего семестров. Занятия проводятся один раз в неделю в течение 4 академических часов (5 и 6 пары). Учебная нагрузка – 60 часов/семестр. ОборудованиеОбучение производится на микроконтроллерах STM32F429. Курсовые и зачётные работы могут выполняться с использованием других микроконтроллеров STM32, а также на устройствах TI Stellaris или TI Tiva. |
STM32F429I-DISCOVERY |
Базовая часть
Тема 1. Введение. Программирование микроконтроллеров на языке С
Теория. Микроконтроллеры. Функции и применение микроконтроллеров. Основные параметры микроконтроллеров. Архитектура микроконтроллеров. Семейства микроконтроллеров ARM и их назначение. Устройство микроконтроллеров. Ядра Cortex-M0/M3/M4F. Периферийные блоки микроконтроллеров: ввод-вывод общего назначения, тактирование, таймеры, прерывания.
Язык С для микроконтроллеров ARM. Особенности разработки программ для микроконтроллеров по сравнению с программированием для ПК. Ввод и вывод. Адресация. Двоичное и шестнадцатеричное счисления. Среда программирования IAR EWARM. Возможности отладки программ.
Практика. Создание и настройка проекта в среде IAR. Создание прошивки, осуществляющей работу с блоком ввода-вывода общего назначения. Работа с технической документацией (поиск адресов аппаратных регистров, работа с принципиальной схемой тестовой платы).
Тема 2. Прерывания
Теория. Прерывания. Виды прерываний. Контроллер прерываний NVIC в ядре Cortex-M. Вектора прерываний. Приоритеты. Флаги прерываний в контроллерах STM. Рекомендации по написанию обработчиков прерываний.
Практика. Создание программы, реализующей асинхронный ввод-вывод сигналов. Освоение документации NVIC. Настройка прерываний блока ввода-вывода общего назначения.
Тема 3. Таймеры
Теория. Таймеры. Виды таймеров. Режимы работы таймеров. Измерение малых промежутков времени. Система тактирования микроконтроллера и методы её настройки.
Практика. Разработка программы для периодического вывода сигналов с использованием таймера и делителей частоты. Измерение параметров сигналов с помощью цифрового осциллографа.
Тема 4. Широтно-импульсная модуляция
Теория. Широтно-импульсная модуляция. Применение ШИМ для управления электронными устройствами. Особенности реализации ШИМ на микроконтроллере. Сглаживание. Специальные режимы работы таймеров.
Практика. Разработка программы для генерации ШИМ сигнала с заданными параметрами.
Тема 5. Цифро-аналоговые и аналого-цифровые преобразования
Теория. АЦП и ЦАП. Частота дискретизации и разрядность. Основные виды АЦП (АЦП прямого преобразования, АЦП последовательного приближения, сигма-дельта АЦП) и их характеристики. Режимы запуска АЦП. Дифференциальный режим измерения. Алгоритмы усреднения измеряемых величин: скользящее среднее и экспоненциальное усреднение. Библиотека для работы с периферийными блоками HAL Driver.
Практика. Разработка программы, осуществляющей измерение напряжения внешнего аналогового сигнала с помощью АЦП.
Тема 6. Обмен данными
Теория. Последовательные и параллельные интерфейсы. UART. Принцип работы шины UART, протокол передачи данных. События блока UART на микроконтроллерах STM32. Протоколы SPI и I2C, их принципы работы. Концепция ведущий-ведомые.
Практика. Разработка прошивки для микроконтроллера, осуществляющей приём и отправку данных по UART. Освоение программного обеспечения для работы с COM-портами на ПК.
Тема 7. Флеш-память
Теория. Принцип работы ячейки флеш-памяти (транзистор с плавающим затвором, чтение и запись данных). NOR и NAND конструкции флеш-памяти. Многоуровневые ячейки. Особенности работы с флеш-памятью из программ.
Практика. Разработка программы для подсчёта импульсов с использованием флеш-памяти для сохранения значения счётчика на случай перезагрузки или потери питания.
Дополнительные темы (читаются по усмотрению преподавателя)
Тема Д1. Дисплеи
Теория. Виды дисплеев. Электронно-лучевые трубки (принцип работы, развёртка). Жидкокристаллические дисплеи (принцип действия ЖК ячейки, устройство мониторов, адресация). Кодирование цветов, битность изображения. Плазменные дисплеи. Светодиодные дисплеи. Проекторы (3LCD, LC0S, DLP). Резистивные и ёмкостные сенсорные дисплеи. Перспективные виды дисплеев (OLED, интерференционные дисплеи, SED, PixelSense).
Практика. Написание программы, осуществляющей вывод графических примитивов и текста на TFT-LCD дисплей тестовой платы. Освоение высокоуровневых библиотек для работы с периферийными блоками и внешними устройствами.
Тема Д2. Система тактирования микроконтроллера
Теория. Классификация и принципы работы генераторов тактовой частоты. Кварцевые и RC-генераторы. Фазовая автоподстройка, делители и умножители частоты. Тактовые частоты шин данных и периферийных блоков микроконтроллера.
Практика. Настройка системы тактирования микроконтроллера, вывод тактового сигнала микроконтроллера. Измерение частоты тактирования с помощью осциллографа. Изучение зависимости формы сигнала от значения тактовой частоты.
Тема Д3. USB
Теория. Краткая история внедрения шины USB. Физический уровень (кабели и разъёмы, состояния шины, кодирование данных). Пакетный уровень (структура и виды пакетов). Транзакционный уровень (адреса, конечные точки). Логический уровень (виды каналов, передача данных по периодам). Дескрипторы и классы устройств. Краткий обзор спецификаций USB.
Практика. Передача данных с ПК на контроллер по USB c использованием CDC класса.
Тема Д4. Операционные системы реального времени
Теория. Операционные системы мягкого и жёсткого реального времени, а также их особенности. Диспетчеризация задач. Синхронизация задач. Операционная система FreeRTOS. Некоторые функции для управления задачами во FreeRTOS.
Практика. Настройка FreeRTOS и создание многозадачной программы для управления светодиодами.
Программа курса (весенний семестр)- Тематические лекции
- Дополнительные разделы программирования микроконтроллеров
- Выполнение курсовой работы по программированию
Осенний семестр – зачет
Весенний семестр – зачет с оценкой
– В конце осеннего семестра в течение 4 занятий выполняется зачетная работа.
Примеры тем зачетных работ:
- Измерение частоты внешнего сигнала с выводом результата на дисплей.
- Генерация ШИМ сигнала с регулировкой частоты и скважности.
- Измерение ёмкости конденсатора путём анализа формы отклика RC-цепи на периодический сигнал.
- Измерение индуктивности путём анализа формы отклика RL-цепи на периодический сигнал.
- Генерация гармонического сигнала путём модуляции одиночными импульсами.
- Измерение расстояния между акустическим излучателем и микрофоном с помощью измерения задержки распространения звука.
- Измерение скорости звука импульсным методом
- Стабилизация напряжения в RC цепи с обратной связью. Напряжение задаётся с компьютера и выводится на дисплей.
– В течение весеннего семестра выполняется курсовая работа.
По согласованию с научными руководителями курсовая работа по программированию может быть совмещена с курсовой работой по физике. Для этого нужно, чтобы работа в значительной мере была посвящена автоматизации эксперимента или другим задачам, подразумевающим программированию микроконтроллеров.
Курсовые работы прошлых лет можно посмотреть здесь.
Литература
- Конспекты первых 2 лекций: лекция 1, лекция 2.
- Мартин М. Инсайдерское руководство по STM32
- Брайан Керниган, Деннис Ритчи “Язык программирования С”
- Майоров С.А., Кириллов В.В., Приблуда А.А. “Введение в микро-ЭВМ”
- Тревор Мартин, “Микроконтроллеры фирмы STMicroelectronics на базе ядра Cortex-M3. Серия STM32”
- Фрунзе А.В. “Микроконтроллеры это же просто” (Том1, Том2, Том3)
- К. Хамахер, З. Вранешич, С. Заки “Организация ЭВМ”
- Paul Scherz. Practical electronics for inventors.
Программирование AVR микроконтроллеров в Linux на языках Asembler и C
Поделюсь информацией и соображениями о том как начать программировать AVR микроконтроллеры фирмы ATMEL под операционной системой Linux. Используем мощные и свободные программные инструменты, настраиваем рабочее окружение и применяем на практике. Приведены примеры простейших программ на языках Assembler и C, которые помогут сделать первые шаги при обучении работе с микроконтроллерами AVR в Линукс.
Если вам раньше никогда не приходилось программировать микроконтроллеров и вы хотите попробовать все на практике то не стоит пугаться того что что-то может не получиться или пойти не так. На самом деле все очень просто, главное быть внимательным и не бояться экспериментов.
Если же вы раньше программировали AVR’ки под Windows но перейдя на Linux не знаете с чего начать и боитесь что в данной ОС у вас не будет достаточно инструментов для разработки, то поспешу вас обнадежить – инструментов предостаточно, к тому же большинство программ и утилит которые вы использовали под Windows прекрасно функционируют и под Linux используя транслятор Wine.
К чему-то придется привыкнуть, от чего-то отказаться, а что-то начать использовать по другому. Со временем, все настроив под себя, вы будете удивлены насколько все просто и удобно, так что программирование AVR микроконтроллеров в Linux – это вполне реально!
Цикл статей по AVR в Linux
Содержимое статей рассчитано на знакомство с AVR микроконтроллерами под Linux снуля, мы с самого начала разберем что такое AVR микроконтроллер, как его подключать и работать с ним в Linux.
Также я предполагаю что вы знакомы с основами радиоэлектроники и уже что-то мастерили сами или с помощью других, знаете как подключать источник питания, умеете прозвонить при помощи тестера светодиод и т.п.
В качестве ОС для работы у нас будет Linux, так что вы должны быть знакомы с консолью и уметь выполнять простые команды, это нам пригодится в процессе изучения работы базовых инструментов и настройки окружения. Все работы по программирования микроконтроллеров AVR в Linux можно и вовсе производить в консоли даже без графических оболочек типа KDE, Gnome, FluxBox.
Так что программировать AVR в Linux можно даже на очень старом компьютере с минимумом ресурсов, к примеру на стареньком ноутбуке Pentium-233/64MB RAM/2GB HDD, такая возможность бывает иногда очень полезной.
Все описанное дальше будет также полезено в качестве справочного сундучка, где собраны:
- принципы маркировки микроконтроллеров AVR;
- подключение питания к микроконтроллеру;
- схемы наиболее популярных программаторов;
- описание подключения микроконтроллера к программатору;
- распиновка интерфейсов LPT, COM;
- примеры команд для чтения, стирания и записи Flash микроконтроллера;
- и многое другое.
Изначально я планировал изложить весь материал в виде одной статьи, но написав 8 пунктов (порядка 70%) статьи я понял что она получится очень большой как по размеру текста, так и по количеству картинок. Решил разделить статью на части, пусть каждый пункт будет отдельной статьей.
Рис. 1. Коллаж отрывков фото из цикла статей по AVR в Linux.
Работать будем под Debian GNU Linux, также все описанное в публикациях будет справедливо для Ubuntu и других дистрибутивов Linux.
В статье предоставлена базовая информация которой достаточно чтобы сделать первые шаги к изучению и программированию AVR микроконтроллеров под операционной системой Linux.
Содержание
- Что такое AVR микроконтроллер
- Для чего можно использовать AVR микроконтроллер
- Архитектура AVR микроконтроллеров
- Маркировка микроконтроллеров AVR, выбор чипа для начала знакомства
- Аппаратное обеспечение для изучения микроконтроллеров
- Программаторы для AVR микроконтроллеров
- Как подключить программатор к микроконтроллеру
- Инструменты для программирования AVR микроконтроллеров в Linux
- Настройка среды программирования Geany для работы с AVR
- Параметры запуска и примеры использования AVRDUDE
- Настраиваем среду и работаем с программаторами
- Простая программа для AVR микроконтроллера на Ассемблере
- Простая программа для AVR микроконтроллера на Си
- Работа с регистрами, битовые операции
- Подключаем кнопку к микроконтроллеру ATtiny2313, простая программа
- Что такое Fuse и Lock биты в AVR микроконтроллере, как с ними работать
- AVR Си – выносим функции и переменные в модули, компиляция нескольких файлов в avr-gcc, Makefile
Может быть что я что-то упустил или указал не точно – пишите, будем дополнять и исправлять!
Желаю вам удачного изучения и позитивного настроения! Все обязательно получится.
Программирование микроконтроллеров EFM8 с помощью встроенного загрузчика программ
В статье описаны аппаратные средства программирования микроконтроллеров EFM8, совместимых с MCS-51, с помощью встроенного загрузчика программ. Микроконтроллеры EFM8UB10, EFM8UB30 программируют по интерфейсу USB, EFM8LB12 – по интерфейсу RS232. Этих средств нет в руководстве пользователя [1], тем не менее они способны работать под управлением поставляемых производителем микроконтроллеров программных средств. Произведена проверка работоспособности программ, загруженных с помощью описанных средств в микроконтроллеры.
Компания Silicon Laboratories начала производить совместимые с MCS-51 микроконтроллеры EFM8 в 2015 г. Среди них, например, недорогой микроконтроллер EFM8UB10 с интерфейсом USB в сверхминиатюрном корпусе QFN20. Для него компания бесплатно поставляет программные средства USBXpress, позволяющие программировать обмен информацией по USB с помощью простейших функций записи/чтения. В параметрах этих функций нужно указать только имя пересылаемого массива и число его элементов. Никаких знаний спецификаций интерфейса USB и особенностей программирования его многочисленных регистров не требуется. Наличие в EFM8UB10 встроенных интерфейсов UART, SMBus/I2C, SPI позволяет легко конструировать на его основе преобразователи интерфейсов USB-RS232, USB-RS485, USB-SPI.
Недорогой сверхскоростной (75 МГц) микроконтроллер EFM8LB12, оснащённый 14-разрядным высокоскоростным АЦП (900000 преобразований в секунду) и прямым доступом к памяти, позволяет с помощью известного метода передискретизации и усреднения получить разрешение до 19-20 двоичных разрядов и превзойти практически любой сигма-дельта АЦП как по точности, так и по скорости. Встроенный блок логики (CLU) позволяет использовать примитивы FPGA – аппаратные функции И, ИЛИ, НЕ, триггеры. С их помощью легко реализовать, например, кнопочное управление процессом измерения, построив простейшие антидребезговые узлы без каких-либо дополнительных аппаратных средств. Таким же блоком CLU оснащён и микроконтроллер EFM8UB30, совместимый по выводам с EFM8UB10, но с утроенной по сравнению с ним программной памятью и существенно увеличенным ОЗУ
Наличие во всех микроконтроллерах семейства EFM8 матрицы соединений позволяет с помощью команд skip перемещать сигналы интерфейсов по всему микроконтроллеру и размещать их в оптимальном месте.
Бесплатно поставляемые для EFM8 программные средства Simplicity Studio существенно облегчают их программирование (в частности, автоматически формируют подпрограммы инициализации устройств). В семействе EFM8 есть и другие новинки, например, EFM8SBXX и EFM8BBXX.
Однако среди разработчиков аппаратно-программных средств существует давно устоявшееся негативное отношение к микроконтроллерам компании Silicon Laboratories. Основной камень преткновения – дороговизна аппаратных средств поддержки. До последнего времени для программирования таких микроконтроллеров требовался универсальный адаптер USB-DEBUG, высокая стоимость которого в подавляющем большинстве случаев приводила к отказу от их использования и к выбору иных, пусть даже с несколько худшими параметрами микроконтроллеров, не требующих высоких затрат на загрузку программ.
Микроконтроллеры семейства EFM8 оснащают встроенным загрузчиком программ. Достаточно подключить их к компьютеру (EFM8UBXX – по интерфейсу USB, остальные – по интерфейсу RS232), запустить на компьютере программу загрузки и необходимые коды будут записаны в память микроконтроллера. Идея эта не нова. Ведущие фирмы-производители микроконтроллеров давно уже используют встроенные в них загрузчики программ, не требующие практически никаких затрат на аппаратные средства программирования.
К микроконтроллерам семейства EFM8 имеются готовые компьютерные программы-загрузчики, написанные на языке Python в виде скрипта и выполняемые в режиме командной строки в 32-разрядной ОС Windows 7 и в более поздних версиях этой ОС.
Описания семейства микроконтроллеров EPM8 и программных средств их программирования приведены в [1, 2]. Однако там абсолютно отсутствуют принципиальные схемы устройств сопряжения микроконтроллера с компьютером для программирования. Кроме того, в [2] описаны не все программные средства, требующиеся для адекватной работы загрузчика.
В предлагаемой статье автор восполняет указанные пробелы. Приведены схемы программаторов и показано, что необходимо для адекватной работы встроенного загрузчика.
Сначала о программировании EFM8UB10 и EPM8UB30 по интерфейсу USB. В [3] и более подробно в [4] описаны аппаратно-программные преобразователи USB-SPI на базе микроконтроллеров EFM8UB10, сопрягаемые с компьютером по интерфейсу USB. В устройстве, схема которого показана на рис. 1, использован подобный способ сопряжения, однако в нём оставлено только то, что требуется для работы загрузчика. Сигналы USB поступают на разъём XS1 по кабелю, второй конец которого вставлен в стандартный разъём USB компьютера. Такой кабель входит в комплект практически любого сотового телефона, поэтому специально приобретать его не требуется.
Рис. 1. Схема устройства
Разъём XP1 при необходимости может служить для подключения адаптера USB-DEBUG. Однако здесь он использован лишь для того, чтобы разрешить перевод микроконтроллера в режим загрузки программ. Для этого достаточно установить перемычку между контактами 1 и 2 этого разъёма.
RC-цепь R1R2C2С3 предназначена для того, чтобы сохранить низкий уровень напряжения на выводе 9 микроконтроллера, по крайней мере, в течение 40 мкс после подачи питания. Это требуется для перевода микроконтроллера в режим программирования с помощью встроенного загрузчика.
Отдельный источник питания напряжением 5 В для описанного устройства не требуется. Оно поступает по линии Vbus интерфейса USB.
Микроконтроллер EFM8LB12 не имеет интерфейса USB, поэтому его программируют по интерфейсу RS232 (COM-порту компьютера). Следует заметить, что в современных ноутбуках (кроме дорогих специализированных) такой интерфейс почти не встречается. В современных настольных компьютерах COM-порт имеется довольно часто. Однако бывает, что его разъём не выведен наружу, но тем не менее присутствует на материнской плате компьютера в виде десятиштыревого разъёма. Чтобы вывести его наружу, в один из свободных слотов на задней стенке системного блока нужно вставить заглушку стандартного размера с разъёмом DB-9M, к которому присоединён отрезок плоского кабеля с ответной частью разъёма, установленного на материнской плате. Несколько дороже можно приобрести готовую плату с одним или двумя COM-портами, которую соединяют с системной шиной компьютера.
И наконец, существуют преобразователи интерфейсов USB-RS232, выполненные в виде кабелей с соответствующими разъёмами на концах. Однако их работу с описанным ниже программатором для EFM8LB12 автор не проверял.
Схема такого программатора, показанная на рис. 2, не намного сложнее изображённой на рис. 1. Она содержит RC-цепь R2R3C3 для задержки сигнала перевода микроконтроллера в режим программирования и разъём XP2 для установки перемычки, разрешающей перевод микроконтроллера в режим программирования и возможного подключения адаптера USB-DEBUG. Сигналы интерфейса RS232 RxDM и TxDM, имеющие ТТЛ-уровни, с разъёма XP1 поступают соответственно на выводы 28 и 29 микроконтроллера DD1.
Рис. 2. Схема программатора
Источником питающего напряжения 5 В может быть любой стабилизированный блок питания с таким выходным напряжением при токе нагрузки 100 мА. Интегральный стабилизатор LP2950Z-3.3(DA1) выдаёт стабилизированное напряжение +3,3 В, поступающее на выводы 2 и 3 микроконтроллера, а также на контакт 4 разъёма XP1 для питания подключённого к нему устройства. Индикатором наличия напряжения 5 В в устройстве служит светодиод зелёного свечения HL1 с ограничивающим его ток резистором R1.
Программатор собран на макетной плате, все соединения на которой выполнены проводом МГТФ-0,03. Поскольку микроконтроллер EFM8LB12 имеет корпус QFP32 с шагом выводов 0,8 мм, для непосредственной установки на такую плату он непригоден. Необходима плата-переходник, на которой выводы для внешних подключений расположены с шагом 2,5 или 2,54 мм. Такая плата описана в [3] и [4].
Для сопряжения устройства, схема которого изображена на рис. 2, с компьютером потребуется изготовить по схеме рис. 3 преобразователь уровней сигналов интерфейса RS232 в уровни TTL и обратно. Этот преобразователь собран на микросхеме ADM3101EACPZ (DA1). Это недорогая миниатюрная микросхема, выпускаемая в корпусе CP-12-1 размервми 3×3 мм, требует для своей работы только пять конденсаторов (C1-C5) и отличается от распространённой микросхемы MAX232 уменьшенным до двух числом каналов преобразования и пониженным до 3,3 В напряжением питания. Для сигналов уровней ТТЛ и напряжения питания предназначен разъём XS1, а для сигналов уровней RS232 – разъём XP1.
Рис. 3. Схема преобразователя
Преобразователь собран на плате из фольгированного с одной стороны стеклотекстолита, изображённой на рис. 4 в масштабе 2:1. Кабель его связи с компьютером сделан по схеме рис. 5 в виде “косички” из трёх сплетённых проводов МГТФ. Для того чтобы зажать “косичку” в корпусе разъёма DB-9F (XS2), на неё надеты две ПВХ-трубки.
Рис. 4. Плата преобразователя
Рис. 5. Схема кабеля связи с компьютером
Все резисторы и конденсаторы в устройствах, собранных по схемам на рис. 1 и рис. 3, типоразмера 0603 для поверхностного монтажа. Конденсаторы должны быть рассчитаны на напряжение не менее 16 В. В устройстве по схеме рис. 2 резисторы – С1-4, конденсаторы – К10-17б. Светодиод HL1 – L-1344GT или любой другой зелёного свечения. По фотоснимку на рис. 6 можно убедиться в миниатюрности платы преобразователя RS232 – она не больше обычной канцелярской скрепки.
Рис. 6. Внешний вид платы преобразователя
Для программирования микроконтроллеров EFM8LB12 с помощью встроенного загрузчика программ необходимо и достаточно сделать следующее:
– подключить плату с микроконтроллером к порту СОМ компьютера через преобразователь уровней;
– соединить вывод C2D микроконтроллера с общим проводом;
– включить питание.
Аналогичные действия для программирования EFM8UB10 или EFM8UB30:
– соединить вывод C2D микроконтроллера с общим проводом;
– подключить плату с микроконтроллером к порту СОМ компьютера.
После распаковки архива AN945SW.zip (URL: http://www.silabs.com/documents/public/example-code/AN945SW.zip (23.09.2018)) необходимо перейти в папку Tools, в которой находятся ещё три папки: 3rd_party, Source и Windows. В папку Source, где расположены тексты программ на языке Python (файлы *.py), необходимо скопировать библиотеку SLABHID-Device.dll. Если на компьютере установлена Security Studio, эту библиотеку можно найти, например, в папке C:Sil icon Lab sSimpl icityStudio v4_2developersdks8051v4.1.2anHI D_BlinkyHost_Application_Source Release и в других местах папки C:SiliconLabsSimplicityStudio.
Далее следует перейти в папку Windows распакованного архива AN945SW.zip, где расположены программа hex2boot.exe – преобразователь файлов из формата *.hex в двоичный загружаемый формат *.efm8 и программа efm8load.exe – собственно загрузчик файлов формата *.efm8 в микроконтроллер.
Пусть имеется файл EFM8LB1_ADC_ Lib_Autoscan_Large_Buffer_4.hex. Чтобы загрузить его в микроконтроллер EFM8LB12 по интерфейсу RS232, необходимо создать два пакетных (*.bat) файла. Файл hex2bootLB1_Large_Buf.bat (табл. 1) создаст файл EFM8LB1_ADC_ Lib_Autoscan_Large_Buffer_4.efm8. При запуске файла Efm8loadLB1_Large_Buf.bat (табл. 2), разумеется, если микроконтроллер подключён соответствующим образом к компьютеру, откроется окно, изображённое на рис. 7, в котором будет указано, что коды выгружаются из компьютера через порт COM1. Затем растущей строкой символов @ отображается ход процесса, a по его завершении будет сообщено число ошибок (нулевое в рассматриваемом случае). При нажатии на любую клавишу окно закроется.
Таблица 1
Таблица 2
Рис. 7. Вид окна на компьютере
Для загрузки в микроконтроллер EFM8UB30 файла EFM8UB3_USBXpress_ TestPanel_6. hex также потребуется создать два bat-файла. После запуска файл hex2bootUB3.bat (табл. 3) сформирует файл EFM8UB3_USBXpress_ TestPanel_6.efm8. Перед запуском файла efm8loadUB3.bat (табл. 4) проверьте, что перемычка, соединяющая вывод С2D микроконтроллера с общим проводом, установлена. В этом случае ОС компьютера опознаёт микроконтроллер как безымянное HID (Human Interface) устройство, которое не отобразится ни в “Диспетчере устройств”, ни среди скрытых значков в правом нижнем углу экрана монитора.
Таблица 3
Таблица 4
После запуска файла efm8loadUB3. bat откроется окно (рис. 8), отображающее ход программирования и его результат. По завершении загрузки в разделе USB списка “Диспетчера устройств” появится новое устройство – USBXpress Device. Кроме того, среди скрытых значков появится значок устройства USB. Если навести на него курсор, всплывёт подсказка “Безопасное извлечение устройства”.
Рис. 8. Вид окна, отображающее ход программирования и его результат
На первый взгляд, кажется, что сообщения на рис. 7 и рис. 8 красноречиво свидетельствуют о том, что соответствующие программы без ошибок загружены в микроконтроллеры и будут работать. Но у автора были некоторые сомнения на этот счёт, поскольку подтверждения факта работоспособности загруженных программ он не имел.
Для чистоты эксперимента с помощью адаптера USB-DEBUG у микроконтроллеров EFM8LB12 и EFM8UB30 была стёрта вся программная память вместе с загрузчиком и заново занесена в неё программа-загрузчик. Файлы загрузчиков для всех микроконтроллеров семейства EFM8 имеются в папке AN945SWProductionDeviceHexfiles распакованного архива AN945SW.zip.
Затем была выполнена повторная загрузка прикладных программ и вновь получены сообщения, показанные на рис. 7 и рис. 8. После этого программы были запущены и, к немалому удивлению автора, идеально отработали. Кроме того, экземпляр микроконтроллера EFM8UB30, который ещё ни разу не программировался, был протестирован на предмет того, записан ли в него загрузчик на заводе-изготовителе. Тестирование показало успешную загрузку программы в микроконтроллер и её идеальную работу.
И наконец, работоспособность показали устройства с микроконтроллерами EFM8UB10, запрограммированными также с помощью встроенного загрузчика. Всё это позволило констатировать, что загрузчик программ efm8load.exe успешно программирует микроконтроллеры семейства EFM8, и его можно применять, не имея адаптера USB-DEBUG.
С помощью описанных в статье средств можно программировать микроконтроллеры семейства EPM8, в том числе в готовом устройстве без отдельного программатора. Это даёт возможность обойтись без дорогостоящего адаптера USB-DEBUG и существенно сэкономить на аппаратных средствах программирования при разработке устройств на микроконтроллерах этого семейства.
Литература
1. AN945: EFM8 Factory Bootloader User’s Guide. – URL: https://www.silabs.com/ documents/public/application-notes/an945-efm8-factory-bootloader-user-guide.pdf (15.09.2018).
2. Инструкция для Silicon Labs EFM8BB31F16G-QFN24. – URL: https:// dl5.rebyte.me/files/gbsX0jlSLMBNj0lqupau yw==, 1 537026894/1 /4/3/0/9/4/0/AN945S W.zip (15.09.2018).
3. Кузьминов А. Преобразователь интерфейсов USB-SPI на базе нового 51 -совместимого микроконтроллера EFM8UB1. – Современная электроника, 2017, № 1, с. 48- 53; № 2, с. 48, 49; № 3, с. 50-57.
4. Кузьминов А. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. – М.: Издательство “Перо”, 2018.
Автор: А. Кузьминов, г. Москва
Руководство по микроконтроллерам для новичков: 10 шагов (с изображениями)
Слишком много микроконтроллеров, чтобы охватить их в одном руководстве. Если у вас есть особые потребности, возможно, для этого есть микроконтроллер (как и приложения!). Чтобы получить представление о некоторых других платах, не упомянутых в этом руководстве, просмотрите инвентарь SparkFun Electronics и Adafruit Industries и / или спросите людей в этой области!
Вот несколько моих любимых:
Particle Photon
Подобно Arduino Nano, Photon представляет собой микроконтроллер с подключением к Wi-Fi, который можно программировать по беспроводной сети. Самая простая установка использует (бесплатное) приложение для смартфона, но его также можно запрограммировать напрямую через USB почти на том же языке, что и для Arduino *.
Рекомендуемый возраст : 12+ (или дети удобны со схемами и кодированием)
Сложность : средний
Стоимость : ~ 20 долларов
Для получения дополнительной информации и настройки Photon посетите веб-сайт Particle хранить здесь.
Язык программирования: Подключение (более или менее)
Пример проекта
Промышленные масштабы IoT
* Подключение – это структура кода, поэтому большая часть кода Arduino будет работать без изменений.Может также писать на C / C ++ или сборке ARM.
Adafruit HUZZAH ESP8266 Breakout
Супер маленький, супер дешевый (и в настоящее время очень популярный в сообществе IoT *) WiFi-микроконтроллер. Вам понадобится FTDI или консольный кабель. Вы можете использовать Arduino IDE для программирования этой платы или интерпретатора Lua от NodeMCU.
Рекомендуемый возраст : 14+ (или дети, удобные с аппаратным и программным обеспечением)
Сложность : Средний ++
Стоимость : ~ 10 долларов США
Для получения дополнительной информации посетите страницу продукта HUZZAH Adafruit.
(SparkFun также имеет аналогичную плату, «ESP8266 Thing», которую вы можете найти здесь примерно за 15 долларов.)
Язык программирования : Lua (вроде как Python) или Wiring (Arduino IDE)
* IoT расшифровывается как «Интернет вещей», который относится к подключению к Интернету различных аппаратных устройств, таких как датчики и бытовая электроника, и управления ими.
Adafruit Trinket M0
Крошечный, но мощный микроконтроллер, стирающий границы между компьютером и микроконтроллером (в нем 32-битный процессор Cortex M0 ATSAMD21E18). Его можно запрограммировать с помощью Circuit Python или в среде Arudino IDE.
Рекомендуемый возраст : 14+ (или дети, удобные с аппаратным и программным обеспечением)
Сложность : средний
Стоимость : ~
долларов СШАДля получения дополнительной информации посетите страницу продукта Adafruit для Trinket M0.
Язык программирования : CircuitPython или Wiring (Arduino IDE)
Существует ТОННА других плат M0, аналогичных по объему подключаемым микроконтроллерам Arduino Zero.Если это не соответствует вашим потребностям или вашей фантазии, поищите на сайтах Adafruit и SparkFun!
Микроконтроллер – Написание первой программы и передача
Микроконтроллер – Руководство для начинающих – Написание первой программы для включения светодиода и перенос программы в микроконтроллер
Я знаю, что вы готовы написать первую программу.Вы через многое прошли до сих пор! Раз уж мы затронули эту тему, давайте подведем итоги событий. Вы вышли и купили микроконтроллер AVR Atmel на ваш выбор. Я выбрал ATMega32 для моего использования. Вас познакомили с представление о микроконтроллерах, как они работают; а также были представлены программатор, устройство, помогающее переносить программу в микроконтроллер. Ты построен удобный интерфейс, который используется для подключения контактов SPI к правильные выводы микроконтроллера.Вы подтвердили, что программатор (USBTinyISP) правильно установил драйверы для 32-битной и 64-битные версии Windows (XP, 7 и Vista). Вы также установили программу среда установлена “Среда программирования” под названием WinAVR, чтобы у вас была среда в котором можно написать свою программу, а затем передать ее в микроконтроллер. А также чтобы убедиться, что все работает правильно, вы использовали avrdude для протестировал программатор при подключении к компьютеру и микроконтроллеру.Напомним, что эта программа является утилитой передачи программ для перемещения нашей скомпилированной программы. в память микроконтроллера. Наконец, вы построили первую схему, так что что у нас есть для чего написать программу. Уф … это было много! Но так как вы преодолели все эти препятствия, тяжелая работа окончена и все гладко плавание отсюда. Надеюсь, вы смогли пройти предыдущие шаги без проблем – так что приступим к нашей первой программе.
Для упрощения разберем функции микроконтроллера по категориям. на три категории: контроль, зондирование и коммуникация. Подробности оставим о том, как разработать каждую из этих функций, и углубляться в эти детали, когда мы будем писать различные программы. Обратите внимание, что есть много способов запрограммировать эти функции. Для первой программы мы заставим микроконтроллер чем-то «управлять».И, как Вы знаете из предыдущего поста, что для этой цели мы будем использовать светодиод. По сути, мы включим светодиод. Да я знаю … скучно, правда? Что ж, мне нужно с чего-то начать! По мере того, как я знакомлю вас с опытом программирования, я добавляю больше сложности понемногу, чтобы вы могли легко осмыслить эти важные концепции.
Так что здесь вы, вероятно, спрашиваете…как сделать программу для управления ВЕЛ? Что ж, это действительно просто: мы просто скажем Pin0 на PORTB вывести 5 вольт. Помните, что это вывод, к которому подключен положительный вывод (анод). В первый ключ в этом сценарии – «выход», а следующий – «5 вольт». Есть выход мы можем указать, что конкретный вывод должен быть установлен как выход из MCU. Однажды булавка настроен для вывода, вы сможете управлять этим контактом и делать он либо высокий (5 вольт), либо низкий (нулевое напряжение).А поскольку есть только два состояния для этого вывода в режиме вывода (5 В или 0 В) и только два состояния для сам режим (ввод или вывод), вам нужно только установить значение либо логическое 1 или 0. Обратите внимание, что это должно быть выполнено для каждого вывода, который мы хотим использовать в нашем схема. Но прежде чем мы перейдем к подключению 1 или 0, давайте поговорим о вводе по сравнению с выход. Когда вывод находится в режиме ввода, он прослушивает напряжение.Когда булавка находится в режиме вывода, он может заряжаться при 5 В или не заряжаться при 0 В. Это оно!
Есть много способов сделать это. Это не для того, чтобы вас запутать, а для того, чтобы проще. Я познакомлю вас с одним из многих способов выполнить эту задачу, а позже я объясню некоторые другие методы при написании других программ. Однако обратите внимание что, хотя этот первый метод отлично подходит для ознакомления с концепцией, он, вероятно, не так хорошо на практике.Поэтому в будущих программах вы увидите другие методы. что оставит контекстные булавки (эти булавки по обе стороны от интересующей булавки) не затронуты, поскольку они вполне могли быть ранее установлены в программе. Но с тех пор мы пишем простую программу, сейчас мы не будем беспокоиться об этой сложности.
Чтобы выбрать режим вывода для вывода, вы будете использовать регистр направления данных (DDR). О чувак! Что такое реестр?!? Пусть это вас не беспокоит.Регистр – это просто память место, которое заставляет микроконтроллер каким-то образом реагировать. Мы используем регистр для установить состояние микроконтроллера или заставить микроконтроллер что-то делать. Это как рефлексы или щекотки. Когда человек щекочет другого человека, это вызывает смех. Мы можем заставить MCU что-то делать, установив определенное значение в регистре. Это все, что вам нужно знать на данный момент.
Поэтому, когда вы используете регистр DDR, вы можете установить вывод для вывода данных, или примите ввод данных.Но мы сказали ввод или вывод, теперь вы также говорите данные. Используемый здесь термин “данные” просто добавляет еще одно измерение к этой идее в форма “время”. Если сделать пин 5 вольт, потом ноль вольт, а потом снова 5 вольт … вы фактически отправляют единицы и нули. Для штифта это не что иное, как высокий (5 вольт), а затем состояние низкого (ноль вольт): MCU видит эту логику высокого / низкого уровня. Таким же образом можно получать данные.
Есть несколько способов установить pin0 для порта B на вывод. Один из способов сделать это – напишите:
DDRB = 0b00000001;
Позволь мне объяснить. «DDRB» относится к регистру направления данных для порта B; «0b» – это чтобы сообщить компилятору, что далее следует двоичное выражение числа; а также цифра «1» на конце обозначает положение вывода 0 (первый вывод в порту B).Отзывать что есть 8 контактов для порта B; пины от 0 до 7. В нашем строка кода. Таким образом, каждая цифра представляет собой контакт порта, и мы можем использовать индивидуальный цифры, которые конкретно относятся к любому из контактов в порту B. Таким образом, «1» на конец нашего оператора кода относится к первому контакту порта B, который в данном случае является выводом 0. (Напомним, что C и C ++ – это языки с нулевым отсчетом, поэтому первый индекс структура данных относится к нулевому элементу; второй индекс относится к первый элемент и т. д.) На этом этапе нам действительно не нужно усложнять, так как это будет более подробно рассмотрено в будущих руководствах. Однако если вы хотел бы узнать больше о двоичная система, проверьте здесь.
Теперь нам нужно подать на вывод 5В. Это работает так же, как оператор кода DDR. мы использовали выше. Мы будем использовать двоичное число, чтобы подать 5 В на этот вывод (вывод 0), используя этот выписка:
PORTB = 0b00000001;
Единственная разница между этим и предыдущим утверждением состоит в том, что теперь мы используем регистр ПОРТ.Этот регистр знает контакты этого конкретного порта и дает us, чтобы указать фактическое значение данных (логический 0 или 1) для этих контактов.
Теперь нам нужно немного поговорить об общей структуре нашей программы. Все программы нужно указанное место для начала исполнения. Это как дать кому-то набор инструкции о том, как приготовить торт, не говоря им, с какого шага начать. «Основная» функция – это место, где все программы на C / C ++ начинают выполнение.Итак, мы создаст основную функцию.
int main (пусто)
{
}
Чтобы программа понимала информацию о регистрах DDR и PORT и как они работают в микроконтроллере, необходимо добавить оператор include, содержит всю информацию о микроконтроллерах AVR. Это заявление о включении вероятно будет во всех ваших программах.
#include
int main (пусто)
{
}
Когда начинается процесс компиляции, препроцессорная часть компилятора выглядит в каталоге «avr» для файла «io. h». Расширение “.h” здесь означает, что это файл заголовка, и (как следует из его названия) код в этом файле будет быть вставленным в начало (заголовок) исходного файла, который вы создаете.Сейчас мы может вставлять операторы DDR и PORT в наш код, поскольку включение Заголовочный файл io.h сообщил о них компилятору.
#includeint main (пусто)
{
DDRB = 0b00000001; // Регистр направления данных устанавливает pin0 для вывода, а остальные выводы в качестве ввода
PORTB = 0b00000001; // Установите pin0 на 5 вольт
}Теперь направление pin0 установлено на выход со значением, установленным на 5 В.Но мы все еще не закончен. Нам нужно, чтобы микроконтроллер работал бесконечно, поэтому нам нужен распорядок, чтобы сделать это. Это называется бесконечным (или бесконечным) циклом. В бесконечный цикл гарантирует, что микроконтроллер не перестанет выполнять свои операции. Я объясню это более подробно, когда у нас будет что-то делать в этом цикле. Там несколько типов циклов, которые мы можем использовать для этой цели, но для этой демонстрации Я буду использовать цикл while.На английском это означает то же самое, что и в коде: For Например, «пока» я поднял руку, вы должны продолжать хлопать в ладоши.
#includeint main (пусто)
{
DDRB = 0b00000001; // Регистр направления данных устанавливает вывод 0 на вывод а остальные контакты как вход
PORTB = 0b00000001; // Установите pin0 на 5 вольт
, а (1)
{
// Код был бы здесь, если бы его нужно было выполнить повторно и снова и снова . .. бесконечно
} }Обратите внимание, что мы используем «1» в качестве аргумента цикла while, потому что все остальные чем «0» – логическая истина. Следовательно, условие цикла while никогда не будет ничем кроме логически истинного, и программа будет продолжать выполняться бесконечно (т.е. я держу руку поднятой).
Итак, вот плод нашего труда.До сих пор это была долгая поездка, но я обещаю, что с этого момента все будет в порядке. будет приятным и займет гораздо меньше времени. В следующем видео и инструкции, мы заставим светодиод мигать. Мы исследуем, как создать задержку, чтобы светодиод не мигает так быстро, как будто не мигает.
Сортировать по: актуальность –
Дата Агмехтроникс Сильвер-Сити, NM 88061
115 000–135 000 долларов в год
Ай-КОН Системс Холдингс, ООО Овьедо, Флорида 32765
Sunrise Labs Бедфорд, NH 03110
Технические решения Solidus Лексингтон, Массачусетс 02420
Energy Technologies, Inc. Мэнсфилд, Огайо 44902
PharmaSeq Монмут-Джанкшен, Нью-Джерси 08852
| Будьте первым, кто увидит новые вакансии программиста микроконтроллераСоздавая оповещение о вакансиях, вы соглашаетесь с нашими Условиями. Вы можете изменить настройки своего согласия в любое время, отказавшись от подписки или как указано в наших условиях. |
Руководства по программированию микроконтроллеров – Microchip PIC Microcontrollers
В этом руководстве вы узнаете, что такое микроконтроллеры? Что внутри типичного микроконтроллера? Как на самом деле работает микроконтроллер? Настройте все и ознакомьтесь со средой разработки или экосистемой микроконтроллеров Microchip PIC, которую мы будем использовать в этой серии руководств.
Введение в микроконтроллеры
Как мы заявляли ранее, встроенная система – это компьютеризированная система, которая в большинстве случаев не будет похожа на компьютер.Мы также упомянули множество примеров приложений для встраиваемых устройств. Компьютеры, встраиваемые в эти устройства, представляют собой небольшие микроконтроллеры (MCU) или также сокращенно µC. Вы также должны знать, что микроконтроллеры – не единственный вариант для встраиваемых решений / устройств, но микроконтроллеры – это наш главный интерес в этой серии руководств.
Теперь мы рассмотрим один из предыдущих примеров встраиваемых устройств, чтобы поближе познакомиться с его основными компонентами. Возьмем, к примеру, дрон.
Типичный дрон будет иметь внутреннюю структуру, как показано на схеме ниже.
Ну, этот воздушный робот состоит из механических и электрических частей. Нас интересует только встроенная электронная система, которая состоит из следующих компонентов:
Датчики | Камера | Электронный датчик, используемый для обработки изображений и видеозаписи. |
GPS | Этот датчик используется для получения информации о координатах транспортного средства в любой момент времени.Широко используется для передвижения. | |
IMU | IMU – это инерциальная единица измерения. Обычно он используется для получения информации о статических / динамических свойствах автомобиля. Например, угловые скорости, угол наклона и ускорение по 3 осям. Чтобы сохранить равновесие и обеспечить плавное маневрирование. | |
Компас | Этот датчик используется для измерения угла курса транспортного средства, что очень полезно для управления его ориентационным движением. | |
Модули | WiFi | Эти модули добавляют автомобилю возможность подключения к Интернету через WiFi. Используется для управления или передачи данных |
RF | Эти модули добавляют к автомобилю возможность радиочастотного подключения. Используется для связи со станцией управления. | |
Внешняя память | Встроенная дополнительная память для хранения данных и настроек | |
Схема драйверов | ESCs | Электронные регуляторы скорости. Эти электронные схемы представляют собой готовые и упакованные устройства, которые продаются в качестве электронного драйвера для бесщеточных двигателей. |
Приводы | 4 x бесщеточных двигателя | Это приводы, которые приводят в движение этот автомобиль. |
Источник питания постоянного тока | Батареи | Перезаряжаемый источник питания, используемый для дронов. Это узкое место всей системы, которое определенно может сказать, как долго эта машина может летать в воздухе. |
Центральный компьютер | Микроконтроллер | Это мозг системы, который обрабатывает все вычисления, реализованные в математической модели системы управления. Он также взаимодействует со всеми датчиками для сбора всех необходимых данных для надежного контролируемого поведения, а также обменивается данными с оператором ( вы, ) через радиочастотный модуль, чтобы передавать ваши команды транспортному средству, которое будет следовать за ними. |
Нет сомнений в том, что микроконтроллер или встроенный компьютер является наиболее важной частью этих компонентов, поскольку он управляет почти всем.С типичным датчиком или исполнительным механизмом может быть связано техническое описание, которое может занимать не более 10 страниц. С другой стороны, очень простой микроконтроллер обычно имеет таблицу размером не менее 100 страниц. Фактически, большинство микросхем микроконтроллеров имеют таблицы данных размером от 200 до 2000 страниц! Каждый модуль в этих небольших микросхемах может иметь документацию объемом в среднем 25 страниц.
Вот почему в следующих руководствах мы больше сосредоточимся на программировании микроконтроллеров и подробно обсудим каждый из модулей, чтобы понять лежащую в основе механику.Однако мы также будем сопрягать многие из распространенных модулей и датчиков по пути. Мы сделаем все возможное, чтобы найти баланс между детальным пониманием всех модулей MCU и практическим взаимодействием некоторых датчиков / исполнительных механизмов для создания небольших проектов. Так что оставайся со мной! Это будет действительно сложно, но оно того стоит и определенно стоит того!
Что такое микроконтроллер?
A Микроконтроллер – это однокристальный автономный компьютер, который включает в себя все основные компоненты персонального компьютера в гораздо меньшем масштабе.Микроконтроллеры обычно используются в качестве встроенных контроллеров, которые управляют некоторыми частями более крупной системы, такими как мобильные роботы, компьютерная периферия и т. Д.
Микроконтроллер – это, по сути, уменьшенная версия ваших персональных компьютеров. Он имеет точно такой же компонент, но с ограниченными возможностями и ресурсами. Произвольное сравнение между X-Computer и Y-MCU может привести к таблице, похожей на приведенную ниже.
Компьютер | Микроконтроллер | |
ОЗУ | 1 – 8 ГБ | 128 байт – 512 Кбайт |
90 Кбайт | ||
Тактовая частота | 1 – 4 ГГц | 32 кГц – 20 МГц |
Ядра ЦП | до 16 | 1 |
Последовательные порты | и RS-USB. , SPI, I2C и USB | |
Потребление тока | 1.5А | 50 мА |
Примечание | |||
Микроконтроллер – это не то же самое, что микропроцессор. Микропроцессор – это однокристальный процессор, используемый в других компьютерных системах. А микроконтроллер – это полноценная однокристальная компьютерная система! |
Мы широко используем микроконтроллеры при проектировании встроенных систем. Вы можете заметить его существование в огромном количестве приложений и устройств вокруг вас.Микроконтроллер, возможно, может показать более высокую эффективность и производительность в некоторых приложениях, чем любой компьютер, который мы используем.
Что касается бюджетных устройств и минимального энергопотребления, то нет ничего сопоставимого с микроконтроллерами. Он потребляет несколько миллиампер, что значительно увеличивает время автономной работы устройства!
Варианты микроконтроллеров
Микроконтроллеры можно классифицировать по-разному в зависимости от множества показателей.Их можно разделить на категории в зависимости от архитектуры памяти, ширины шины, архитектуры процессора, производителя и так далее. Здесь я перечислю некоторые из этих категорий и, наконец, расскажу вам, какие микросхемы MCU мы будем использовать в этих руководствах и почему.
Ширина шины
Ширина шины (количество проводов) определяет способность компьютера обрабатывать слова данных определенной длины. Микроконтроллер X-Bits может обрабатывать данные размером до X бит. Однако существует множество микроконтроллеров с полным набором инструкций, которые обрабатывают 8-битные данные, а также несколько микроконтроллеров для обработки 16-битных слов.В этом случае его следует называть 8-битной машиной! Конкретный микроконтроллер считается X-битным компьютером, если у него есть набор инструкций, большинство его инструкций предназначены для управления словами данных размером X-бит.
8-битные микроконтроллеры являются наиболее распространенными на рынке с наибольшим объемом поставок. Однако существуют 16-битные и 32-битные микроконтроллеры, которые используются для высокопроизводительных приложений, требующих чрезмерной вычислительной мощности. В заключение, рыночные стандарты микроконтроллеров по ширине шины – это 3 стандарта, перечисленные ниже.
8-битный микроконтроллер | 16-битный микроконтроллер | 32-битный микроконтроллер |
Тип памяти
Память микроконтроллера может быть встроена в сам чип быть спроектированным для работы с использованием внешней памяти, подключенной к микросхеме микроконтроллера извне.
MCU с внутренней памятью | MCU с внешней памятью |
Эти устройства разработаны со всеми необходимыми встроенными памятью RAM и ROM.Никаких внешних подключений для памяти не требуется. Это представляет большинство микроконтроллеров, производимых в настоящее время. | Раньше некоторые микросхемы не имели встроенной памяти программ, и их приходилось подключать извне. Именно это произошло с микропроцессорами Intel 4004 еще в конце 60-х годов. Этот тип микроконтроллеров должен был исчезнуть с появлением конструкций внутренней памяти всего 5 лет спустя, в 1975 году. |
Набор команд
Каждый отдельный микропроцессор имеет свой собственный набор команд, который определяет базовую функцию, с которой он только может справиться. .Некоторые сложные функции могут быть реализованы с помощью базовых инструкций, имеющихся в наборе команд микропроцессора. Вот пример набора инструкций по сборке, которые можно найти на любом устройстве.
Имя инструкции | Функция, которую она выполняет |
ADD | Складывает два операнда вместе |
SUB | Умножение двух операндов |
DIV | Разделение первого операнда на второй |
AND | Выполнение логического AND Bit-Wise для двух операндов |
Выполнение логического OR Bit-Wise для двух операндов | |
XOR | Выполнение Bit-Wise логического исключающего ИЛИ для двух операндов |
And So On… |
Рассмотрим микроконтроллер который имеет очень простой набор инструкций, который не включает модуль % операция, которая возвращает остаток от деления. (например, 5% 2 = 1, 7% 3 = 1, 6% 2 = 0, 10% 4 = 2 и так далее)
Тогда задачей программиста будет использовать основные функции, доступные в инструкции MCU установлен для реализации функции модуля. И так далее по остальным функциям.
Следовательно, в основном есть две категории наборов инструкций. Существуют устройства с инструкциями только по основным функциям, которые называются RISC-Machines . (RISC = Компьютеры с сокращенным набором команд). И есть устройства с множеством сложных функций, реализованных аппаратно (с цифровой логикой), которые имеют сложные наборы команд.Поэтому такие устройства называются CISC-Machines . (CISC = Компьютеры со сложным набором команд). В заключение, две основные компьютерные архитектуры перечислены ниже.
Архитектура
Еще в конце 40-х годов правительство США попросило Гарвардский и Принстонский университеты разработать архитектуру для компьютера, который можно было бы использовать в военных приложениях. Компьютерная архитектура Принстона была названа в честь гениального математика Джона фон Неймана.У которого была единственная память для хранения программных инструкций, а также переменных данных. В то время как у гарвардской архитектуры было два разных воспоминания. ПЗУ для программных инструкций и ОЗУ для переменных данных. На диаграмме ниже показана разница между этими двумя архитектурами.
В целом, гарвардская архитектура является наиболее распространенным вариантом микроконтроллеров, используемых во встроенных системах. Однако иногда вы столкнетесь с машинами фон-Неймана, особенно когда вы работаете с более крупными компьютерами (процессорами).
Микроконтроллеры, которые мы будем использовать в этой серии руководств, – это, очевидно, машина Гарварда, как и большинство микроконтроллеров на рынке. Вот почему мы будем интересоваться только этой архитектурой и посвятить себя пониманию механики, в которой на самом деле работает гарвардская машина. Мы рассмотрим этот процесс ниже в этом руководстве, так что не торопитесь.
Вот краткое обобщенное сравнение компьютерных архитектур Гарварда и Фон-Неймана
Гарвардская архитектура | Архитектура фон Неймана |
Он использует два отдельных пространства памяти для программных инструкций и переменных данных | Он использует одно и то же пространство памяти для хранения как программных инструкций, так и переменных данных |
Позволяет использовать разную ширину шины | Он ограничивает ширину рабочей шины |
Передачи данных и выборки команд могут выполняться одновременно | Передачи данных и выборки команд не могут выполняться одновременно |
Создание блока управления для двух разных шин – это слишком сложный и дорогостоящий процесс | Создание блока управления для одной шины намного проще, дешевле и быстрее |
Процессор нужен как lo w как один единственный тактовый цикл для выполнения инструкции | Процессору требуется больше тактовых циклов для выполнения инструкции |
Широко используется в микроконтроллерах и устройствах цифровой обработки сигналов (DSP) | Обычно используется в наших персональных настольных компьютерах ( ПК) и ноутбуки |
Семейства производителей
Каждая компания, занимающаяся производством микроконтроллеров, выпускает различные серии (семейства) своей архитектуры.Очевидная причина для этого – удовлетворить потребности множества различных сегментов, которым требуются микроконтроллеры с определенными уровнями производительности. Некоторые приложения требуют чрезмерной вычислительной мощности, некоторые – меньше, а некоторые могут требовать минимального использования электроэнергии и так далее.
В настоящее время наиболее распространенным выбором будет микросхема Microchip PIC, Atmel AVR или ARM. Это самые распространенные и широко доступные архитектуры. 8-битный микроконтроллер среднего класса PIC очень поможет вам начать работу.Или, что то же самое, 8-битный AVR действительно справится с этой задачей.
Не обращайте особого внимания на конкретные устройства, которые используются на производственном уровне. Поскольку индустрия встраиваемых систем настолько обширна, и есть место для каждой отдельной архитектуры, которая в какой-то момент будет наиболее подходящей для работы.
Какие микроконтроллеры мы будем использовать и почему?
В этой серии руководств по программированию микроконтроллеров мы будем использовать 8-битный микроконтроллер PIC среднего уровня. Он называется PIC16F877A , который вы, возможно, видели раньше хотя бы раз.Несмотря на то, что это старый продукт, он по-прежнему очень полезен и экономичен как для обучения, так и для создания проектов. Недавно произведенные чипы, имея то же старое название и архитектуру, технически более эффективны, чем раньше, с точки зрения энергопотребления и общей производительности.
Мы также будем использовать некоторые варианты семейства 16F и некоторые члены семейства 18F для разработки сложных драйверов USB и создания некоторых интересных приложений. Это поможет вам увидеть, насколько легко портировать ваши проекты и перенести свои знания / навыки с одной платформы на другую.
Вы всегда можете использовать любой чип, какой захотите, никаких ограничений на чип 16F877A нет. Пока вы убедитесь, что все настроено правильно. В этом случае советуем использовать мои листинги кодов на свой страх и риск. Или просто прокомментируйте, где это уместно, чтобы сообщить нам свою конкретную ситуацию, чтобы вам помогли.
Почему, , мы будем использовать 8-битные микроконтроллеры среднего уровня? Что ж, для этого есть несколько причин
- Это удобное для новичков устройство с ограниченными ресурсами, которое определенно поможет вам сосредоточиться на конкретных модулях при написании эффективной прошивки, которая подходит для этих чипов с ограниченными ресурсами
- Простая архитектура MCU означает краткое описание (около 200 страниц), которое намного легче понять
- Доступность на рынке. 8-битные микроконтроллеры занимают львиную долю рынка встраиваемых систем с точки зрения устройств, отгружаемых каждый год. Так что проще получить свой стартовый комплект на месте.
- Большое сообщество, которое поддерживало и поддерживает эти устройства. Это означает, что вы легко найдете полезный контент в Интернете, даже если что-то застрянет.
- Низкая стоимость. Очевидно, что 8-битный микроконтроллер намного дешевле сложного. На всякий случай, если вас не интересуют встраиваемые системы, вы не потеряете много денег на модном комплекте.
Я считаю, что платформы с очень ограниченными ресурсами – лучший выбор для начала работы во встраиваемых системах. Дизайн встроенных систем – это оптимизация и выполнение большего с меньшими затратами. Меньше инструкций, меньше памяти, меньше энергии и меньше денег. Мы решаем проблемы и оптимизируем. Наличие платформы с чрезмерными ресурсами способствует росту вредных привычек программирования, которые навсегда остаются неисправленными.
Что внутри микроконтроллера?
Микроконтроллер – это обычно черная ИС с кучей выводов, выходящих из нее.Наиболее распространенный тип корпуса, используемый для прототипирования, – это DIP (двухрядный), который хорошо вписывается в типичную макетную плату. Хотя пакеты QFP являются наиболее эффективными, обычно используются для создания профессиональных печатных плат, которые занимают гораздо меньше места.
Следует также отметить, что внешний упаковочный материал представляет собой твердую эпоксидную смолу в целях защиты. Но настоящий микроконтроллер на самом деле намного меньше. Вот изображение внутренней структуры микросхемы микроконтроллера. В котором вы можете видеть, что типичный микроконтроллер – это что-то еще меньше, чем самый маленький из ваших ногтей!
Вы видите эти крошечные провода, выходящие из сердечника? Что ж, эти провода фактически подключены к внешним контактам на обеих сторонах микросхемы, которые мы обычно используем для целей ввода-вывода (ввода / вывода). По сути, это означает, что максимальный ток, который может потребляться или подаваться с вывода ввода / вывода, в лучшем случае будет составлять всего несколько миллиампер.
Ранее мы заявляли, что микроконтроллер – это всего лишь уменьшенная версия полноценной компьютерной машины. Вот краткая таблица основных компонентов (модулей), которые обычно встречаются в универсальном микроконтроллере.
Компонент | Краткое описание |
ЦП | Основной процессор |
RAM | Оперативная память для хранения данных |
ПЗУ только для чтения | |
ПЗУ хранилище | |
Контакты ввода / вывода (порты) | 8,10,16,20,28,40 или более контактов |
Последовательные порты | USART, SPI, I2C и, возможно, USB |
Таймеры | 1,2,3 или более таймеров |
Прерывания | Полная логическая схема для генерации и управления сигналами прерывания |
Периферийные устройства | Дополнительные функции, такие как EEPROM, PWM, компараторы и т. Д. |
Осциллятор | Генерация или управление входным синхросигналом, чтобы гарантировать гармоническое поведение для всей машины |
На следующей рисованной диаграмме показаны основные компоненты, обычно встречающиеся в универсальном микроконтроллере, и их организация . С упрощенными взаимосвязями, которые соединяют все эти модули вместе.
CPU
Это рабочая лошадка внутренней системы микроконтроллера.Он обрабатывает инструкции вашей программы и выполняет их после процессов выборки и декодирования. Он также имеет внутри АЛУ, которое выполняет все арифметические и логические вычисления. Типичный простой 8-битный процессор выполняет одну инструкцию примерно за 4 машинных цикла. В то время как конвейерный дизайн, по-видимому, будет запускать 1 цикл инструкций / машин.
RAM
Оперативная память – это блок, который содержит регистры данных, которые используются для хранения данных, а также для управления работой всех других модулей.Регистры RAM можно разделить на две категории: GPR и SFR.
GPR: означает регистры общего назначения. Которые используются для хранения переменных данных, которые будут выделять случайные адреса. Большинство регистров в типичной оперативной памяти – это георадары.
SFR: означает регистры специальных функций. Которые жестко подключены к большинству модулей микроконтроллера. Это позволяет управлять каждым модулем, перемещая 0 и 1 в специальный регистр, соответствующий этому модулю.Например, TIMERx можно включить / выключить, переместив 1 или 0 в бит TMRxON, где x может быть 0,1 или 2. И так далее
ROM
Постоянная память для чтения. Этот блок памяти предназначен для хранения программных инструкций (сборки). Каждая инструкция хранится в регистре x-Bits. Количество битов зависит от архитектуры и дизайна самого процессора и его набора команд. MCU, который мы будем использовать, имеет ПЗУ шириной 14 бит.
Программные инструкции сохраняются в ПЗУ в последовательном порядке, в отличие от случайного характера ОЗУ.Инструкции адресуются специальным регистром, называемым счетчиком программ PC , который указывает на инструкцию, которая должна быть выполнена сейчас. Выполнение полной программы – это вопрос увеличения ПК, указывающего на инструкции, которые будут выполняться центральным процессором.
Порты ввода-вывода
Порты ввода / вывода – это самый простой способ связи с микроконтроллером. Вы можете ввести цифровой сигнал в микроконтроллер с помощью простой кнопки или датчика.Точно так же вы можете получить цифровой выход (0 или 1) из микроконтроллера, который можно использовать для мигания светодиода или запуска схемы драйвера двигателя или чего-то еще.
Последовательные порты
Последовательные порты обеспечивают расширенную связь с микроконтроллером. Так как мы можем отправлять или получать потоки данных поочередно. Это могут быть числа, аудио, изображения или даже файлы. Последовательные порты широко используются для создания машинно-машинных интерфейсов, а также человеко-машинных интерфейсов.
Последовательные порты включают USART, SPI, I2C, USB и многие другие протоколы специального назначения.Мы подробно обсудим каждый из них ниже в этой серии руководств.
Таймеры
В реальном приложении нет встроенного приложения, которое бы делало что-то реальное и не использовало бы таймер тем или иным образом.
Типичный микроконтроллер может иметь 1, 2 или более модулей аппаратного таймера. Которые в основном используются для генерации временных интервалов, которые разделяют определенные события и управляют зависящими от времени событиями. Он также используется для расчета времени между любой парой аппаратных / программных событий, как если бы это был секундомер!
Схема прерываний
Прерывание – это событие, которое приостанавливает выполнение основной программы, пока событие обслуживается (обрабатывается) другой программой.Прерывания существенно увеличивают скорость реакции системы на внешние события. Различные микроконтроллеры имеют разные источники прерываний, которые могут включать таймеры, последовательные порты, IRQ или даже программные прерывания.
Сразу после получения сигнала прерывания текущая инструкция приостанавливается, затем определяется источник прерывания, и ЦП выполняет переход (векторы) к подпрограмме обслуживания прерывания, сохраненной по определенному адресу в памяти. Программа (код) обработчика прерывания обычно называется подпрограммой обслуживания прерывания или ISR .
Блок схемы прерывания – это цифровая логическая схема, которая управляет генерацией сигналов прерывания и дает команду ЦП обрабатывать эти запросы прерывания вовремя.
Генератор
Этот модуль отвечает за гармоническую синхронную работу внутри самого микроконтроллера. Даже если микроконтроллер не имеет внутреннего генератора, этот модуль будет прямо там, чтобы управлять входным синхросигналом для генерации унифицированного синхросигнала (внутренне), который синхронизирует все события / операции в микроконтроллере.
Шины
Это в основном провода, которые соединяют все внутри микроконтроллера. Шина определяется ее шириной, эта характеристика называется шириной шины. Ширина шины – это количество физических проводов, составляющих саму шину. Это может быть 4, 8, 16 или любое другое число.
Если устройство A подключено к устройству B через 4-проводную шину, это можно символически представить, как показано на схеме ниже.
Шину можно нарисовать как прямую линию, соединяющую одну цифровую цепь с другой.Ширина шины сокращается до небольшого числа, которое говорит о количестве проводов.
Разное. Периферийные устройства
Микроконтроллер может иметь или не иметь какие-либо из следующих модулей. Может быть, они и все. В общем, эти модули являются дополнительными дополнительными функциями, без которых микроконтроллер может безупречно работать. Вы всегда можете купить любой из этих модулей как отдельный пакет микросхем и так легко подключить его к своему микроконтроллеру.
EEPROM | электрически стираемая программируемая постоянная память.Этот блок памяти используется для хранения данных, которые нам нужно, чтобы наш MCU сохранял даже при отключении питания. |
АЦП | Аналого-цифровой преобразователь. Этот модуль используется для преобразования аналоговых значений напряжения 0-5 В в цифровое значение по шкале, которая зависит от разрешения АЦП. 8-битный АЦП может преобразовывать (0-5 В) в шкалу (0-255), а 10-битный АЦП может преобразовывать ее в шкалу (0-1024) и так далее. |
DAC | Цифро-аналоговый преобразователь.Этот модуль преобразует цифровые значения в аналоговое напряжение (0-5 В), которое можно использовать для генерации звуковых сигналов или чего-либо еще. |
ШИМ | Широтно-импульсная модуляция. В этом модуле используется один из модулей аппаратного таймера, имеющихся на микросхеме MCU, для генерации прямоугольного сигнала, средним значением которого можно управлять (с изменением его рабочего цикла). Вы также можете контролировать частоту выходного сигнала. |
Компаратор | Этот модуль представляет собой аналоговый компаратор, интегрированный в сам чип MCU.Таким образом, вам не нужно преобразовывать аналоговые сигналы в цифровые значения для сравнения. С помощью этого модуля вы можете сравнивать аналоговые сигналы на ходу. |
В этой серии руководств по программированию микроконтроллеров мы обсудим все вышеперечисленные модули и многое другое. Но это будет сделано после окончания основного содержания курса.
Микроконтроллеры VS Микропроцессоры
Между микроконтроллерами (MCU) и микропроцессорами (MPU) существует фундаментально огромная разница.Однако многие до сих пор путают эти термины. Итак, давайте посмотрим на это в перспективе.
Чип слева – это микроконтроллер . Это atmega16 от Atmel. Этот единственный чип имеет встроенный ЦП, ОЗУ, ПЗУ, порты ввода-вывода, последовательные порты (SPI, I2C и UART), 3 таймера и многие другие периферийные устройства. Это полноценный компьютер с одним чипом! На котором вы можете прошивать и запускать свой код, а также использовать все встроенные периферийные устройства.
Чип справа – микропроцессор Zilog Z80 .Это старый микропроцессор, выпущенный еще в 1976 году. Это чистый процессор, которому требуется ОЗУ, ПЗУ и интерфейсы для выполнения любых вычислительных задач, как и любому микроконтроллеру.
Теперь я подключу к своему MPU Z80 некоторые периферийные устройства, такие как динамическое ОЗУ, ПЗУ, АЦП, ЦАП и контроллер ввода-вывода. Как показано на изображении ниже
Теперь мы говорим! Теперь микропроцессор подключен к RAM и ROM. Это означает, что мы можем загрузить программу для ее выполнения. Он также подключен к АЦП, ЦАП и контроллеру ввода-вывода, что означает, что он способен выполнять некоторые основные операции ввода / вывода.
А разве с микроконтроллером сравнимо? Неа! возможно, после подключения периферийных устройств, как показано выше, мы сможем сравнить MPU с внешне подключенными периферийными устройствами с MCU, который все равно будет намного опережать MPU. MCU по-прежнему имеет больше периферийных устройств, портов и функций, чем несколько внешних, которые мы добавили в MPU.
Итог
Микроконтроллер обычно представляет собой уменьшенную версию компьютера, в котором микропроцессор является собственным процессором.С внутренней RAM, ROM и кучей периферии. Это полноценная компьютерная система на одном чипе!
В то время как микропроцессор – это однокристальный процессор, который ничего не может делать без подключения внешнего оборудования для создания компьютерной системы.
Основные термины
Вы должны быть знакомы со следующими основными терминологиями. Как новичку в программировании микроконтроллеров, совершенно необходимо понимать все следующие термины.Прочтите их внимательно и отметьте те, которые вы не можете понять прямо сейчас. В конце этого руководства вас снова отправят для повторного прочтения этих определений. Тогда все должно быть ясно. Если нет, воспользуйтесь своей поисковой системой, чтобы узнать, что на самом деле означают эти термины.
Программа | Набор инструкций для компьютера, написанных на языке программирования, реализующем алгоритм. Наконец, собранные в сборочные инструкции, которые кодируются и записываются в память в виде 0 ‘s & 1 ‘ s |
Пейджинг | Страница – это логический блок памяти.Система страничной памяти использует адрес страницы и адрес смещения для ссылки на конкретную ячейку памяти. |
Банк | Логическая единица памяти, которая зависит от оборудования. Размер банка дополнительно определяется количеством битов в столбце и строке на чип, умноженным на количество чипов в банке. |
Указатель | Адрес определенного объекта в памяти, который используется для ссылки на этот объект. |
Стек | Аппаратный стек – это раздел памяти, который используется для хранения временных данных или значений регистров. Программный стек – это структура данных «последний вошел – первый ушел» (LIFO), которая содержит информацию, которая сохраняется ( PUSH, ed) и восстанавливается ( POP ed). |
Указатель стека | Регистр, который содержит адрес вершины аппаратного стека. |
Счетчик программ | Сокращенный и широко известный как ПК . Это регистр, в котором хранится адрес следующей инструкции, которая должна быть выполнена. Счетчик программы увеличивается после выборки каждой инструкции (увеличивается один раз за цикл инструкции). |
Прерывания | Прерывание – это событие, которое приостанавливает выполнение основной программы, пока событие обслуживается (обрабатывается) другой программой. Прерывания существенно увеличивают скорость реакции системы на внешние события. |
Вектор прерывания | Место, откуда программа продолжает выполнение.Ячейка, содержащая вектор прерывания, обычно пропускается во время обычного выполнения программы. |
Часы | Это бьющееся сердце микроконтроллера. это сигнал с фиксированной частотой, который запускает или синхронизирует работу и события ЦП. Часы имеют частоту, которая описывает частоту их колебаний в МГц. Источником синхронизации может быть внешняя RC-сеть, кварцевый осциллятор, резонатор или даже встроенный внутренний источник синхронизации. Частота колебаний обычно обозначается как F OSC |
Машинный цикл | Машинный цикл – это время, за которое системные часы повторяются.Для микроконтроллера, который имеет кварцевый OSC 4 МГц, подключенный к его входным контактам, машинный цикл будет 1/4000000 = 250 наносекунды |
Цикл команд | Цикл команд – это время, которое требуется микроконтроллеру для завершения выполнение единственной инструкции. Это включает в себя выборку, декодирование, выполнение и сохранение результата, что занимает 4 тактовых цикла для микроконтроллера, который мы будем использовать. Итак, 1 цикл команд = 4 машинных цикла. Мы также можем сказать, что процессор, работающий на частоте 4 МГц, выполняет F OSC /4 инструкций в секунду = 1 MIPS (миллион инструкций в секунду) |
Cross-Development
Мы будем программировать микроконтроллеры во время этих руководств, как и следовало ожидать.Но что это за развитие? Что ж, когда вы пишете код на своем ПК для создания приложений, которые также работают на ПК, это называется процессом « Development ». Однако это не всегда так.
Во многих ситуациях вы будете писать код на определенной машине (например, на вашем ПК), который в конечном итоге будет скомпилирован в машинный код, работающий на другой машине (например, Android, iOS, MCU и т. Д.). Это то, что мы называем « Cross-Development », и это относится к программированию встроенного микропрограммного обеспечения.
Примечание | |||
Компилятор, используемый для кросс-разработки, часто называется кросс-компилятором . |
Какой язык использовать?
На самом деле существует множество доступных языков программирования, которые можно использовать для разработки встроенного программного обеспечения. Однако язык программирования Си является стандартом в этой отрасли. Это был и до сих пор считается наиболее эффективным способом взаимодействия с низкоуровневым оборудованием на уровне регистров.Большинство продвинутых крупносерийных качественных продуктов разрабатываются на C. В некоторых моментах мы можем упомянуть сборку.
Слишком давно было известно, что вы можете сделать больше оптимизаций в вашей системе с помощью языка ассемблера. И это правда, но используйте его в учебных целях только на этом этапе. В противном случае вы потратите слишком много времени, не получив полезных навыков. Поскольку у каждого процессора есть свои собственные инструкции, следовательно, у него есть свои собственные команды сборки, так что это будет только учебная практика.
Однако вы не ограничены выбором других. У каждого свои предпочтения. Поэтому я призываю вас использовать знакомый вам язык. , если , он доступен для семейства устройств, которое вы используете!
Компилятор (XC8)
Язык программирования, на котором мы будем писать микропрограммы для микроконтроллеров PIC, называется C -Language, стандарт ANSI-C . Это был наиболее эффективный вариант для разработки встроенного программного обеспечения за последние несколько десятилетий.И до сих пор наиболее пригоден для написания прошивок.
Имейте в виду, что этот курс построен на предположении, что вы знакомы с основными концепциями языка Си. Однако все листинги кода написаны так, чтобы быть удобными для новичков, сохраняя при этом максимально высокий общий уровень эффективности.
Почти все промышленные машины, военные истребители, ракеты, космические корабли, компиляторы и даже другие языки программирования построены на C .Помня об этом, вы должны ценить усилия и время, которые требуются человеку, чтобы хорошо овладеть этим языком. Просто практикуйте это как можно больше. Это ключ к мастерству практически во всех областях знаний.
C-компилятор, который мы будем использовать, называется XC8 от Microchip для 8-битных микроконтроллеров. Вы можете скачать подходящую версию для вашей ОС по этой ссылке.
Скачать XC8 Compiler
Установка компилятора также несложный процесс, который вы можете легко сделать своими руками.Или вы можете выполнить шаги из следующего руководства по установке компилятора MPLAB IDE + XC8.
IDE (MPLAB X)
Интегрированная среда разработки (IDE) – это программная платформа, на которой мы будем разрабатывать наши проекты. Это компьютерное программное обеспечение, которое включает в себя набор инструментов, которые устраняют накладные расходы на менее важные задачи. Это помогает разработчикам сосредоточить свое внимание на системе в целом и выявить основные проблемы, требующие дополнительного изучения.
IDE, которую мы будем использовать для этого курса (учебных пособий), называется MPLAB X от самой Microchip inc, того же производителя микроконтроллеров PIC. Это официальный вариант, но самый мощный из имеющихся. В нем слишком много замечательных функций, которые могут вас немного расстроить. В любом случае, не беспокойтесь, вы очень скоро к этому привыкнете. Вы можете загрузить подходящую версию для вашей операционной системы (Windows, Linux и MAC) по этой ссылке внизу.
Загрузить MPLAB IDE
Другими вариантами IDE являются пиратское (взломанное) программное обеспечение или среды, подобные Arduino с возможностью перетаскивания. Это основано на том, что я испытал на себе, возможно, есть достойный выбор, который мне не удалось найти. В общем, официальной MPLAB IDE более чем достаточно для нашего курса.
Для установки вы можете посмотреть видео ниже (в разделе «Компилятор»). Однако на самом деле это не обязательно. Установка MPLAB – это довольно простой процесс, который звучит так: Далее, Далее, Далее, Да, Готово!
Следует отметить, что ДОЛЖЕН установить MPLAB IDE перед установкой компилятора, чтобы избежать проблем с интеграцией между ними обоими.
Примечание | |||
Несмотря на то, что IDE созданы, чтобы быть очень полезными и эффективными инструментами, другой стороной медали является то, что она дала нам достаточно роскоши, чтобы отказаться от всякой дисциплины в какой-то момент. указывает и настраивает кое-что, надеюсь, пока решение не будет успешным. В конце концов, у нас оказалось слишком много инженеров с ограниченным опытом оценки поведения систем при определенных обстоятельствах.Будьте осторожны |
Как микроконтроллер выполняет программу?
Теперь мы собираемся обсудить, как встроенная программа работает на типичном микроконтроллере с технической точки зрения. Прежде всего, программа должна быть загружена в программную память (ПЗУ) микроконтроллера. После написания кода на C компилятор и ассемблер сгенерируют файл .hex, который вы должны затем записать (прошить) на микросхему микроконтроллера.Очевидно, что программные инструкции представляют собой связку нулей и единиц.
Далее необходимо включить микросхему, как любое электронное устройство. Типичные микроконтроллеры работают от 3,3 или 5 В постоянного тока. Мы также должны подключить кварцевый генератор, чтобы обеспечить микросхему входом тактовой частоты.
Теперь микроконтроллер начнет последовательно выполнять инструкции, хранящиеся в памяти. Каждое выполнение команды занимает до 4 тактовых циклов, которые работают следующим образом.
- ЦП извлекает команду из памяти программ.И программный счетчик PC увеличивается, чтобы указать на следующую команду в программной памяти.
- Выбранная инструкция будет декодирована во 2-м такте.
- Операция инструкции выполняется (выполняется), это может быть ADD, SUB, MOV, DIV или что-то еще. Выполнение происходит в течение третьего такта.
- Наконец, результат сохраняется в рабочем регистре в 4-м цикле. Это был последний шаг в выполнении первой инструкции программы.
- Теперь ПК указывает на вторую инструкцию, как вы видели на шаге 1.И все повторяется снова и снова до тех пор, пока не отключится питание!
Это, очевидно, объясняет, почему машинный цикл = 1/4 цикла команд. Другими словами, MCU выполняет F osc /4 MIPS .
Компьютерное моделирование
Использование программного обеспечения для компьютерного моделирования может существенно улучшить ваш опыт обучения с несколькими платформами встроенных систем (например, ARM, AVR, PIC и т. Д.)). Однако типичное программное обеспечение для моделирования (например, Proteus) выявляет только логические (код , код ) ошибки! Несмотря на то, что это по-прежнему мощный инструмент, который помогает избежать перепрограммирования и тестирования прошивки на реальном оборудовании, при условии, что мы можем легко доказать, что эта прошивка не работает правильно или не дает ожидаемых результатов. С помощью всего нескольких щелчков мышью и перетаскивания ваши схемы будут полностью подключены и готовы к тестированию.
Вы можете использовать любой симулятор, который вам больше нравится. Я настоятельно рекомендую Proteus большинству новичков.И вы можете проверить их веб-сайт, чтобы найти студенческую версию или любую другую версию, подходящую для вашего бюджета.
Pro Tip | |||
Если ваш код безупречно работает в симуляторе с ошибкой 0%. По-прежнему нет гарантии, что он будет без проблем работать в реальных условиях на реальной макетной плате. Любая система на основе MCU может сойти с ума! просто из-за крошечных проблем с оборудованием. Эти проблемы невозможно предсказать с помощью компьютерного моделирования. |
Комплект оборудования для разработки
Типичный курс по встроенным системам носит практический характер. Следовательно, важно получить приличный комплект оборудования для игры. Список ниже включает все необходимые части и компоненты, необходимые для практических лабораторных работ в следующих учебных пособиях.
Мы также можем разделить эти компоненты на 2 категории: базовый комплект и дополнительные модули. Первый – это все, что вам нужно иметь, чтобы следовать этим руководствам и самостоятельно создавать все базовые проекты в реальном смысле.В последнем списке есть несколько дополнительных модулей для начинающих с большим бюджетом, которые помогут вам пройти почти все учебные пособия, описанные здесь, или создать любой проект, который вы хотите развивать в своем собственном темпе.
- The Basic Course Kit (Essentials) *
- Дополнительные модули для Advanced Tutorials (необязательно)
Проверьте названия деталей и количество конкретных компонентов на странице ресурсов набора курсов.
Прототипная плата
В практике встроенных систем вы должны работать с различными частями оборудования, особенно с микроконтроллерами, что приводит к следующим проблемам.
I- Обычное программирование микроконтроллеров включает снятие их с макета и установку на схему программатора. Когда прошивка загружается в MCU, вы возвращаете ее в среду тестирования макета. Как вы могли заметить, обновление прошивки включает удаление и повторное подключение MCU к макетной плате. Это может повредить MCU и привести к изогнутым и сломанным контактам.
II- MCU обычно работают на 3.3в или 5в. Для этого требуется, чтобы у вас был собственный источник питания и регулировка напряжения на борту, чтобы гарантировать требуемую рабочую мощность.
По указанным выше причинам мы будем использовать фиксированное встроенное соединение для разработки. Это означает, что вам нужно будет построить базовую схему внизу только один раз. Тогда вы сможете легко протестировать свои проекты на борту. Это соединение имеет следующие характеристики:
- Встроенный порт ICSP (внутрисхемный последовательный программатор). Это означает, что вы можете легко прошить чип, не снимаясь с макета.
- Регулируемое подключение к источнику питания 5 В для питания микросхемы. Со светодиодным индикатором.
- Штифт сброса вытягивается и прикрепляется к кнопке.
- Входные контакты генератора подключены к нашему кварцевому генератору.
Последняя полностью подключенная схема показана ниже.
В конце этого руководства, пожалуйста, еще раз проверьте терминологию, которую вы видели ранее. Просто чтобы убедиться, что эти концепции теперь яснее, чем раньше.Щелкните ссылку внизу
Основные термины
Как это:
Нравится Загрузка …
СвязанныеКак лучше всего изучить программирование микроконтроллеров? : robotics
Хотя лично мне AVR больше нравится, для начала я бы порекомендовал узнать про PIC. Некоторые ссылки:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=82
Обратите особое внимание на темы «Начало работы с PIC» и «Начало работы с MPLAB» здесь.(MPLAB – это бесплатная IDE для программирования микроконтроллеров, которую люди, которые делают PIC, раздают бесплатно.)
Для программирования микроконтроллеров вам понадобится программный ключ. Парни, которые делают PIC, продают полные комплекты для разработки, но они, как правило, немного дороги. Если на вашем компьютере есть параллельный порт, и вы не боитесь паяльника, можете накатить собственный.
Книги Myke Predko , как правило, очень простые, для начинающих. Пролистайте несколько его книг и посмотрите, какая из них вам больше нравится.
Вам также следует прочитать лист данных для любого PIC, с которого вы хотите начать. (Их можно бесплатно загрузить с веб-сайта производителя.) PIC 12C508 / 12C509 – хороший вариант для начинающих. Если нет местного магазина электроники, который их продает, вы можете сделать заказ в Digikey или в любом другом интернет-магазине запчастей. Возможно, вам придется обратиться в местную радиорубку за резисторами, конденсаторами и т. Д.
Одна вещь, которую следует учитывать для начинающих, – это использовать проволочную обмотку вместо макета.Макетная плата менее интуитивно понятна, чем подключение провода между точками A и B. Эмм … вы знаете, если подумать, возьмите удар и узнайте о макетах. Это легко, и рано или поздно вам придется их выучить. (По общему признанию, готовый набор для разработки часто избавит вас от необходимости использовать либо …)
Поскольку вы занимаетесь робототехникой, вы захотите узнать о схемах привода шаговых двигателей, H-мостах и т. Д. I рекомендовал бы вам НЕ прыгать в эти вещи сразу. Силовая электроника тонкая, а ваши микроконтроллеры вкусны с кетчупом.
Для вашего первого проекта вы должны использовать микроконтроллер, чтобы мигать и светиться с определенной частотой, которую вы выберете. (Включено на 0,5 секунды, выключено на 0,5 секунды – хорошее место для начала). Когда у вас это будет холодно, в следующий раз я попробую, возможно, последовательный бит-бэнг (только передача). Третий проект, научитесь читать кнопку / переключатель (на самом деле только два соединенных провода или нет) и заставляйте светодиод загораться при нажатии кнопки и гаснуть при отпускании. Как только у вас все это остынет, ТОГДА приступайте к чтению схем двигателя и прочего.
Я оставлю это на ваше усмотрение, хотите ли вы изучить некоторую сборку PIC или полностью придерживаться C. Если вы поглощаете все остальное и готовы принять вызов, дерзайте. Если вы боретесь с другими вещами, я бы посоветовал пропустить это на потом.
Вот поиск Google Video по запросу “pic микроконтроллер учебник”.
Давайте изучим программирование микроконтроллеров 8051 – Gadgetronicx
Gadgetronicx> Давайте изучим программирование микроконтроллера 8051
Добро пожаловать, дорогие зрители, изучение микроконтроллера будет сложной задачей, если вы не будете руководствоваться должным образом.Помня об этом, мы выбрали некоторые из лучших руководств с нашего сайта и в Интернете. Эта страница предлагает вам все необходимые ссылки для освоения программирования микроконтроллера 8051.
1) Основы программирования микроконтроллеров (начинающие)
Задача:
|
ВЗАИМОДЕЙСТВИЕ:
1) 7-сегментный интерфейс с микроконтроллером 8051
2) Подключение двух 7 сегментов к одному порту микроконтроллера 8051
Задача:
|
3) Сопряжение ЖК-дисплея 16 × 2 с микроконтроллером 8051
4) Прокрутка анимированного текста в микроконтроллере 8051
Задача:
|
5) Подключение клавиатуры 4 × 4 к микроконтроллеру 8051
Задача:
|
8051 КОНЦЕПТУАЛЬНЫЕ РУКОВОДСТВА:
Задача:
|
2) Программирование счетчиков в микроконтроллере 8051
Задача:
|
3) Последовательная связь в микроконтроллере 8051 (UART)
Задача:
|
4) Программирование прерываний по таймеру в микроконтроллере 8051.
Задача:
|
5) Программирование внешних прерываний в микроконтроллере 8051
Задача:
|
6) Программирование последовательного прерывания в микроконтроллере 8051
Задача:
|
$ 62- $ 118 000 рабочих мест программиста микроконтроллеров (СЕЙЧАС НАЙМ)
Размещено в любое время В течение 30 дней В течение 10 дней В течение 5 дней В течение 1 дня
На любом расстоянии В пределах 5 миль В пределах 10 миль В пределах 25 миль В пределах 50 миль В пределах 100 миль
Все зарплаты 60 000 долл. США + (405 941) 85 000 + (331 679) 105 000 долл. США + (256 388) 125 000 долларов США + (170 329) 145 000 долларов США + (89 585)
Все виды занятости Полная занятость (1,539,369) Неполный рабочий день (53,826) Контракт (48 217) Временный (7 485) Договор найма (6,121)
Все должности Инженер-программист (6,324) Старший инженер-программист (5 459) Менеджер проекта (4773) Инженер по обработке данных (2,848) Инженер (2620) Инженер проекта (2563) DevOps-инженер (2,505) Инженер-электрик (2318) Менеджер по продукту (2311) Системный инженер (2,040) Техник по обслуживанию (1812) Инженер-механик (1,768) Инженер по качеству (1,758) Сетевой инженер (1,751) Программный менеджер (1721)
Все компании Наемные (32 472) Амазонка (21 673) Киберкодеры (14,051) Intel (12 248) Оракул (11 878) Яблоко (8999) Facebook (8 772) Веб-сервисы Amazon (6022) Лейдос (5 421) VMware (5 353) Deloitte (4990) Google (4949) Библиотека резюме (4,847) Корпорация Northrop Grumman (4399) Армия Национальной гвардии (4393)