Atmel микроконтроллеры: помощники начинающим программистам

Платы Atmel – самые популярные микроконтроллеры

7 ноября в 21:47

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

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

Плата Atmel AVR

Какие бывают микроконтроллеры Atmel

Начнем с самого популярного, для освоения микроконтроллеров в целом, – Atmel AVR. Его можно разделить на два направления:

  1. 8-битные микроконтроллеры.
  2. 32-битные микроконтроллеры.

Среди простых проектов для любителей электроники особую популярность снискала именно 8-битная часть семейства.

Есть хорошая справочная литература «Микроконтроллеры AVR семейства classic фирмы Atmel», в которой описана вся архитектура, назначение отдельных узлов, регистров и прочего.

Не стоит беспокоиться, что она посвящена уже устаревшему семейству AVR Classic – в наши дни оно вытеснено контроллерами Attiny и Atmega, хотя самая маленькая и быстрая модель – AT90S2313 выпускается и по сей день, слегка в модернизированном виде – Attiny 2313.

Современные семейства программно и функционально совместимы с более старыми, а переход с Classic на Mega и Tiny требует минимальных трудозатрат и изменений программного кода.

Среди семейства особенную популярность заслужил микроконтроллер с маркировкой Atmega 328p, применяемый во многих популярных платах Arduino.

Почти все они имеют небольшое количество энергонезависимой памяти с ограниченным числом циклов записи (до 100 000) – EEPROM.

Такая память нужна не для текущих вычислений, потому что быстро закончится её ресурс, а для хранения данных в долгосрочной перспективе. Энергонезависимость EEPROM памяти обеспечивает сохранность всей информации после обесточивания микроконтроллера.

Семейство Atmel Smart базируется на архитектуре ARM. Компания правообладатель ARM свободно продает лицензии на разработку контроллеров со своей архитектурой разным производителям, что ускоряет распространение и популяризацию первых.

Стоит отметить яркого представителя – микроконтроллер AT91SAM3X8E, является сердцем Arduino DUE, 32-бита. Это позволяет очень легко начать знакомство с такой архитектурой и разработку устройств энтузиастам электроники.

Atmel ARM по характеристикам превосходит большинство микроконтроллеров Atmel AVR

Семейство Atmel 8051 – основано на по-настоящему легендарной архитектуре. Intel 8051 является одним из первых массовых микроконтроллеров с широчайшей сферой применения.

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

В линейке есть микроконтроллеры, работающие на частотах в 100 МГц, при этом выполняющие 100 миллионов операций в секунду, а это отличные показатели для этой архитектуры. Вы можете добиться быстродействия в долях микросекунд.

Способы связи компьютера и микроконтроллера Atmel

Чаще всего связь с МК устанавливается через COM-порт. На современных компьютерах и ноутбуках последовательного порта нет. Это вызывает необходимость использования USB-UART преобразователь, который распознаётся как виртуальный COM-порт.

Чтобы заливать прошивку в микроконтроллер, нужен либо этот преобразователь, либо специализированный программатор, например, AVRISP MKii – вы можете его собрать сами, но и в его составе есть микроконтроллер.

Происходит «каламбур»: для сборки программатора нужен программатор. Чтобы выйти из этой ситуации, используется специальный чип AT90USB162. Он, в свою очередь, при подключении к USB порту компьютера распознаётся как полноценное USB устройство, прошивку в которое можно загрузить с помощью утилиты Flip от Atmel.

Утилита Flip поддерживает программирование через следующие интерфейсы:

С помощью flip можно загрузить прошивку для программатора микроконтроллеров Атмела без использования COM-порта, а схема AVRISP mk II изображена ниже.

Для работы микроконтроллеров по интерфейсу UART (маркировка интерфейса – rs-232) в Atmel AVR выделен регистр UDR (UART data register), а настройки его работы хранятся в конфигурационных регистрах UCSRA, UCSRB и UCSRС. Настройки битов приемопередатчика Rx, Tx, кстати, хранятся в UCSRA.

Вопросы программирования микроконтроллеров

Для программирования МК ваш код нужно компилировать, для этого есть множество программного обеспечения, пример одного из них – это компилятор IAR. Использование этого компилятора не ограничено одними лишь Atmel. 8051, AVR, AVR32, ARM – это лишь небольшой перечень из более чем 20 поддерживаемых архитектур.

IAR – это универсальное решение для программирования микроконтроллеров различного типа и уровня. Хотя компиляторов есть большое количество, например, WinAVR и CodeVision, но они не осуществляют компилирование программ для тех же АРМов и других архитектур.

IAR Embedded Workbench – полное название этой мощной рабочей среды. Применение ИАРА позволяет добиться меньше размера и большего быстродействия кода; он набирает всё большую популярность из-за своих огромных возможностей.

Пример экрана IAR Embedded Workbench

Работа с микроконтроллерами требует постоянного выполнения одинаковых действий, таких как компиляция, прошивка, сброс к заводским установкам; для автоматизации этих процессов нужно использовать Makefile – набор инструкций для компилятора, в нём записаны обозначения действий с файлами программного кода и другие команды.

Для отладки готовых программ был разработан Atmel ice. Он нужен для внутрисхемной отладки программирования и прошивки устройств. Имеет два разъёма:

  1. Универсальный AVR, поддерживающий любой интерфейс;
  2. ARM.

Судя по отзывам реальных пользователей, работает он быстрее аналогов – AVR Dragon, например, при этом захватывает архитектуру АРМов и имеет больше функций.

Выводы

Фирма Atmel сейчас принадлежит Microchip’у, но продолжает выпускать свои семейства микроконтроллеров. Их популярность не угасала за многие годы, однако в последнее время наблюдается активная конкуренция с STM. Пока рано говорить, кто из них вырвется вперед, рассуждения об этом – тема отдельной статьи.

Выбор семейства зависит только от разработчика и поставленных перед ним задач, а AVR контроллеры помогли многим разработчикам «войти» в программирование микроконтроллеров.

Источник: https://ArduinoPlus.ru/mikrokontrollery-atmel/

Путь программиста микроконтроллеров

Популярное хобби и востребованная профессия.

18 января 20174 минуты19503

Людей, работающих с программной частью микроконтроллеров, редко причисляют к классическим разработчикам ПО. Всё дело в том, что помимо софтверных знаний, им требуются ещё кое-какие сведения об используемом железе. Многих программистов такие знания не касаются вовсе. 

Плюс, разработчик приложений или сайтов всегда подсознательно стремится к триумфу. Создание уникального и популярного продукта является той отметкой, разделяющей карьеру на нормальную и успешную. А создавая программу для микроконтроллера, вы вряд ли будете думать об общественной оценке вашего вклада. Впрочем, давайте по порядку.

Возраст

Начнём с главного: когда уже (ещё) можно начать прокладывать свой путь в профессию? Ответ предсказуем: чем раньше, тем лучше. И изобилие специальных наборов для детей к этому располагает. Даже дело не в том, что с возрастом вам будет сложнее перестраиваться и обучаться этой дисциплине. Просто опыт, как и во многих других IT-профессиях, здесь играет решающее значение.

Но не всё так плохо. Всё же в России этот рынок не очень развит. Начав путь разработчика ПО для МК после 30, вы сможете сделать неплохую карьеру в какой-то одной сфере или конкретном месте деятельности.

Если, конечно, не пытаться стать «многостаночником». Всегда бывают исключения, но многое зависит от вашей прошлой деятельности.

Наверное, стоит принять во внимание, что даже 10 лет в этой профессии не впечатляют работодателя.

Знания

От пустых слов перейдём к реальным требованиям. «MustKnow» в программировании микроконтроллеров – язык C/C++. Да, мировые тенденции сейчас указывают на переход на более совершенные или хотя бы простые языки (вспомните Arduino или D). Но это будущее довольно отдалённое, закладывать путь в него можно разве что сегодняшним школьникам младших классов.

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

В остальном довольно общая компьютерная наука: протоколы передачи, простейшее знание электроники и схемотехники (хотя бы принципы работы АЦП/ЦАП, работать с ключами, питанием и пр.), умение читать (и понимать) техническую документацию на английском языке. Но главное – не работать по принципу “научного тыка”, в противном случае ваши микроконтроллеры рискуют превратиться в “камни”.

Еще один совет: постигать все эти знания необходимо на практике. Начать можно с дешёвых, но эффективных готовых плат со всей необходимой обвязкой, вроде Arduino или Raspberry Pi, которые в будущем наверняка станут для вас хорошими помощниками. А уже потом, если возникнет желание, поиграть с периферией.

Литература

На прошлой неделе, подачи одного из пользователей GeekBrains, я всерьёз задумался над вопросом “Где можно пройти курсы по программированию микроконтроллеров?”, да и вообще о профильной литературе в целом (и это несмотря на профильное высшее образование и около 10 лет опыта работы). Дело не в том, что их не существует (есть и курсы, и книги), просто главный инструмент разработчика ПО для МК – техническая документация, поставляемая вместе с платформой.

Все универсальные книги могут описать отличия, преимущества и недостатки тех или иных микроконтроллеров, на что обратить внимание при написании кода, обучить “красоте” и основным принципам. Но огромный плюс и он же главный недостаток данной профессии – подробная индивидуальная инструкция по работе с каждым более-менее серьёзным контроллером.

Это означает, что абсолютно любой человек может взять, прочитать её и через несколько мгновений организовать стандартное мигание “светодиодами”. Но даже с 50 годами стажа вы не сможете сесть за незнакомый микроконтроллер и, не читая документацию, сделать с ним что-то полезное (придётся, как минимум взглянуть на расположение контактов и их назначение по умолчанию).

IDE

Как и у популярных направлений программирования, здесь также имеются собственные IDE. Каждая крупная компания выпускает собственную среду разработки для своих продуктов. Есть и универсальные решения. Стоит обратить внимание на Keil uVision – это такой универсальный и, пожалуй, наиболее популярный инструмент (хоть и не лучший) на все случаи жизни. Полный перечень можете найти здесь.

Работа

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

Финансово трудно придётся новичкам (до 1 года опыта): зарплата в районе 20 тыс. рублей в месяц для программиста МК. Это вполне реальная цифра в регионах.

Зато если вы живёте в столице, у вас есть опыт работы с популярным видом МК (от 3 лет активной деятельности) и голова на плечах, то вполне можно рассчитывать и на 150 тыс. рублей в месяц.

В целом, не сказать, что конкуренция за места у данных разработчиков высокая, но с течением времени она неизбежно растёт.

Опять же, для людей с опытом есть вариант поискать счастье за границей. Особенно если у вас уже есть опыт полноценной работы. Дело в том, что в России идея IoT пока не слишком развивается.

Да и вообще автоматизация пока не затрагивает небольшие системы. А в США, Японии и других развитых странах хороший разработчик ПО для МК – на вес золота.

Правда, придётся учитывать иной уровень конкуренции и серьёзные требования по производительности труда.

И кстати

В любом случае, прежде чем осознанно встать на эти рельсы, займитесь программированием МК в качестве хобби. Сделайте “умной” свою комнату или дом, повторите несколько экспериментов из популярных блогов, опубликуйте собственные достижения, посвятите этому делу мозги и душу. И если не возникнет ощущения “колхоза”, то… добро пожаловать в клуб! 

Читайте также:  Как выбрать инвертор для солнечных батарей? - arduino+

Для новичков в программировании: бесплатный онлайн-интенсив “Обучение программированию для новичков”.

Источник: https://geekbrains.ru/posts/programming_mk

AVR для начинающих.Урок 0.Знакомство с микроконтроллерами

Урок 0.

Итак, сегодня мы открываем цикл уроков программирования микроконтроллеров семейства AVR.

Сегодня будут рассмотрены следующие вопросы:

  1. Что такое микроконтроллер?
  2. Где применяются микроконтроллеры?

Вступление.

Микроконтроллеры везде. В телефонах, стиральных машинах, «умных домах»,станках на заводе а так же ещё в бесчисленном множестве технических устройств. Их повсеместное применение позволяет заменить сложные аналоговые схемы, более сжатыми цифровыми.

Так что же такое, микроконтроллер?

Микроконтроллер (Micro Controller Unit, MCU) — микросхема, предназначенная для управления электронными устройствами.

Можно представить его в виде простейшего компьютера, способного взаимодействовать с внешними устройствами.Например, открывать и закрывать транзисторы, получать данные с датчиков температуры, выводить данные на lcd экраны и т. д. .

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

То есть, микроконтроллеры открывают нам практически безграничные возможности управления какими либо устройствами, благодаря наличию портов I/0(портов ввода(input)/вывода(output)), а так же возможности их программирования.

Где используются микроконтроллеры?

  1. Бытовая техника(Стиральные машины, микроволновые печи и.т.д.).
  2. Мобильная техника(Роботы, робототехнические системы, средства связи и др.).
  3. Промышленное оборудование(Системы управления станками).
  4. Вычислительная техника(Материнские платы,системы управления периферийными устройствами).
  5. Развлекательная техника(Детские игрушки, украшения).
  6. Транспорт(Системы управления двигателем автомобиля, системы безопасности)

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

Начало знакомства с AVR

AVR — семейство микроконтроллеров фирмы Atmel.Обладают достаточной производительностью для большинства любительских устройств. Так же находят широкое применение в промышленности.

Для их программирования используются языки AVR C и AVR Assembler.

Начать работу с ними достаточно просто. Существует несколько способов приступить к разработке устройств на базе микроконтроллеров AVR, о них мы поговорим в следующей части.

Спасибо за внимание!

Читайте также  Программаторы AVR.

Администрация сайта MKPROG.RU.

Другие уроки цикла.

Источник: http://mkprog.ru/avr/avr-dlya-nachinayushhih-urok-0-znakomstvo-s-mikrokontrollerami.html

AVR. Учебный Курс. Программирование на Си. Часть 1

Я не раз и не два говорил, что изучение МК надо начинать с ассемблера. Этому был посвящен целый курс на сайте (правда он не очень последовательный, но постепенно я его причесываю до адекватного вида) .

Да, это сложно, результат будет не в первый день, но зато ты научишься понимать что происходит у тебя в контроллере. Будешь знать как это работает, а не по обезьяньий копировать чужие исходники и пытаться понять почему оно вдруг перестало работать.

Кроме того, Си намного проще натворить быдлокода, который вылезет вилами в самый неподходящий момент.

К сожалению все хотят результат немедленно. Поэтому я решил пойти с другой стороны — сделать обучалку по Си, но с показом его нижнего белья. Хороший программист-эмбеддер всегда крепко держит свою железку за шкварник, не давая ей ни шагу ступить без разрешения. Так что будет вначале Си код, потом то что родил компилятор и как все это работает на самом деле 🙂

С другой стороны у Си сильная сторона это переносимость кода. Если, конечно, писать все правильно. Разделяя алгоритмы работы и их железные реализации в разные части проекта.

Тогда для переноса алгоритма в другой МК достаточно будет переписать только интерфейсный слой, где прописано все обращение к железу, а весь рабочий код оставить как есть. И, конечно же, читаемость. Сишный исходник проще понять с первого взгляда (хотя..

мне, например, уже пофигу на что фтыкать — хоть си, хоть асм 🙂 ), но, опять же, если правильно все написать. Этим моментам я тоже буду уделять внимание.

В качестве подопытной железки на которой будет ставиться львинная доля всех примеров будет моя отладочная плата PinBoard.

Дальше все будет разжевано буквально по шагам для старта с полного нуля.<\p>

Выбор компилятора и установка среды Для AVR существует множество разных компиляторов Си:

В первую очередь это IAR AVR C — почти однозначно признается лучшим компилятором для AVR, т.к. сам контроллер создавался тесном сотрудничистве Atmel и спецов из IAR. Но за все приходится платить.

И этот компилятор мало того, что является дорогущим коммерческим софтом, так еще обладает такой прорвой настроек, что просто взять и скомпилить в нем это надо постраться.

У меня с ним правда не срослось дружбы, проект загнивал на странных ошибках на этапе линковки (позже выяснил, что это был кривой кряк).

Вторым идет WinAVR GCC — мощный оптимизирующий компилятор. Полный опенсорц, кроссплатформенный, в общем, все радости жизни. Еще он отлично интегрируется в AVR Studio позволяя вести отладку прямо там, что адски удобно. В общем, я выбрал его.

Также есть CodeVision AVR C — очень популярный компилятор. Стал популярен в связи со своей простотой.

Рабочую программу в нем получить можно уже через несколько минут — мастер стартового кода этом сильно способствует, штампуя стандартыне инициализации всяких уартов.

Честно говоря, я как то с подозрением к нему отношусь — как то раз приходилось дизасмить прогу написаную этим компилером, каша какая то а не код получалась.

Жуткое количество ненужных телодвижений и операций, что выливалось в неслабый обьем кода и медленное быстродействие. Впрочем, возможно тут была ошибка в ДНК писавшего исходную прошивку. Плюс он хочет денег. Не так много как IAR, но ощутимо. А в деморежиме дает писать не более чем 2кб кода.
Кряк конечно есть, но если уж воровать, так миллион, в смысле IAR 🙂

Еще есть Image Craft AVR C и MicroC от микроэлектроники. Ни тем ни другим пользоваться не приходилось, но вот SWG очень уж нахваливает MicroPascal, мол жутко удобная среда программирования и библиотеки. Думаю MicroC не хуже будет, но тоже платный.

Как я уже сказал, я выбра WinAVR по трем причинам: халявный, интегрируется в AVR Studio и под него написана просто прорва готового кода на все случаи жизни.

Так что качай себе инсталяху WinAVR с и AVR Studio. Далее вначале ставится студия, потом, сверху, накатывается WinAVR и цепляется к студии в виде плагина. Настоятельно рекомендую ставить WinAVR по короткому пути, что то вроде C:WinAVR тем самым ты избежишь кучи проблем с путями.

Cоздание проекта
Итак, студия поставлена, Си прикручен, пора бы и попробовать что нибудь запрограммировать. Начнем с простого, самого простого. Запускай студию, выбирай там новый проект, в качестве компилятора AVR GCC и вписывай название проекта.

Также не забудь поставить галочу Create Folder, чтобы у тебя все сложилось в одной директории. Ну и укажи место Location, где будет лежать проект. Указывай по короткому пути, что то вроде C:AVR Как показывает практика, чем короче путь тем лучше — меньше проблем при компиляции и линковке проектов.

Проц у меня в Pinboard по дефолту ATmega16, поэтому выбираю его. Те же у кого в PinBoard стоит Mega32 (по спец заказу ставил некторым 🙂 ) выбирают, соответственно ее.

Открывается рабочее поле с пустым *.c файлом.

Теперь не помешает настроить отображение путей в закладках студии. Для этого слазь по адресу:
Меню Tools — Options — General — FileTabs и выбираем в выпадающем списке «Filename Only». Иначе работать будет невозможно — на вкладке будет полный путь файла и на экране будет не более двух трех вкладок.

Настройка проекта
Вообще, классическим считается создание make файла в котором бы были описаны все зависимости. И это, наверное, правильно. Но мне, выросшему на полностью интегрированных IDE вроде uVision или AVR Studio этот подход является глубоко чуждым. Поэтому буду делать по своему, все средствами студии.

Тыкай в кнопку с шестеренкой.

Это настройки твоего проекта, а точнее настройки автоматической генерации make файла. На первой странице надо всего лишь вписать частоту на которой будет работать твой МК.

Это зависит от фьюз битов, так что считаем что частота у нас 8000000Гц.
Также обрати внимание на строку оптимизации. Сейчас там стоит -Os это оптимизация по размеру.

Пока оставь как есть, потом можешь попробовать поиграться с этим параметром. -O0 это отстутсвие оптимизации вообще.

Следующим шагом будет настройка путей. Первым делом добавь туда директорию твоего проекта — будешь туда подкладывать сторонние библиотеки. В списке появится путь «.»

Make файл сгенерирован, его ты можешь поглядеть в папке default в своем проекте, просто пробегись глазами, посмотри что там есть.

На этом пока все. Жми везде ОК и переходи в исходник.

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

Работать будет так:
При приходе по COM порту единички (код 0х31) будем зажигать диодик, а при приходе нуля (код 0х30) гасить. Причем сделано будет все на прерываниях, а фоновой задачей будет мигание другого диода. Простенько и со смыслом.

Собираем схему
Нам надо соединить модуль USB-USART конвертера с выводами USART микроконтроллера. Для этого берем перемычку из двух проводков и накидывам на штырьки крест накрест. То есть Rx контроллера соединяем с Tx конвертера, а Tx конвертера с Rx контроллера.

Кроме того, через USART мы теперь сможем достучаться до загрузчика (Pinboard идет с уже прошитым загрузчиком) и прошить наш контроллер не используя программатор.

Также накинем джамперы, соединяющие LED1 и LED2. Тем самым мы подключим светодиоды LED1 и LED2 к выводам PD4 и PD5 соотверственно.

Получится, в итоге вот такая схема:

Подключение остальных выводов, питания, сброса не рассматриваю, оно стандартное

Сразу оговорюсь, что я не буду углубляться конкретно в описание самого языка Си. Для этого существует просто колоссальное количество материала, начиная от классики «Язык программирования Си» от K&R и заканчивая разными методичками.

Одна такая метода нашлась у меня в загашнике, я когда то именно по ней изучал этот язык. Там все кратко, понятно и по делу. Я ее постепенно верстаю и перестаскиваю на свой сайт.

Посмотреть оглавление.

Там правда еще не все главы перенесены, но, думаю, это ненадолго.

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

Добавляем библиотеки.
Первым делом мы добавляем нужные библиотеки и заголовки с определениями. Ведь Си это универсальный язык и ему надо обьяснить что мы работаем именно с AVR, так что вписывай в исходник строку:

#include<\p>

Этот файл находится в папке WinAVR и в нем содержится описание всех регистров и портов контроллера.

Причем там все хитро, с привязкой к конкретному контроллеру, который передается компилятором через make файл в параметре MCU и на основании этой переменной в твой проект подключается заголовочный файл с описанием адресов всех портов и регистров именно на этот контроллер.

Во как! Без него тоже можно, но тогда ты не сможешь использовать символические имена регистров вроде SREG или UDR и придется помнить адрес каждого вроде «0xC1», а это голову сломать.

Читайте также:  Raspberry pi foundation анонсировали новый мини-пк raspberry pi 3 model a+

Сама же команда #include позволяет добавить в твой проект содержимое любого текстового файла, например, файл с описанием функций или кусок другого кода. А чтобы директива могла этот файл найти мы и указывали пути к нашему проекту (директория WinAVR там уже по дефолту прописана).

Главная функция.
Программа на языке Си вся состоит из функций. Они могут быть вложенными и вызываться друг из друга в любом порядке и разными способами. Каждая функция имеет три обязательных параметра:

  • Возвращаемое значение, например, sin(x) возвращает значение синуса икс. Как в математике, короче.
  • Передаваемые параметры, тот самый икс.
  • Тело функции.

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

Любая программа на Си должна содержать функцию main как точку входа в главную прогрмму, иначе это нифига не Си :). По наличию main в чужом исходнике из миллиона файлов можно понять, что это и есть головная часть программы откуда начинается все. Вот и зададим:

1
2
3
4
5
int main(void)
{
 
return 0;
}

int main(void) { return 0; }

Все, первая простейшая программа написана, не беда что она ничего не делает, мы же только начали.

Разберем что же мы сделали.
int это тип данных которая функция main возвращает. Узнать подробней о типах данных

Конечно, в микроконтроллере main ничего вернуть в принципе не может и по идее должна быть void main(void), но GCC изначально заточен на PC и там программа может вернуть значение операционной системе по завершении. Поэтому GCC на void main(void) ругается Warning’ом.

Это не ошибка, работать будет, но я не люблю варнинги.

void это тип данных которые мы передаем в функцию, в данном случае main также не может ничего принять извне, поэтом void — пустышка. Заглушка, применяется тогда когда не надо ничего передавать или возвращать.

Вот такие вот { } фигурные скобочки это программный блок, в данном случае тело функции main, там будет распологаться код.

return — это возвращаемое значение, которое функция main отдаст при завершении, поскольку у нас int, то есть число то вернуть мы должны число. Хотя это все равно не имеет смысла, т.к. на микроконтроллере из main нам выходить разве что в никуда. Я возвращаю нуль. Ибо нефиг. А компилятор обычно умный и на этот случай код не генерит.

Хотя, если извратиться, то из main на МК выйти можно — например вывалиться в секцию бутлоадера и исполнить ее, но тут уже потребуется низкоуровневое ковыряние прошивки, чтобы подправить адреса перехода. Ниже ты сам увидишь и поймешь как это сделать. Зачем? Вот это уже другой вопрос, в 99.

999% случаев это нафиг не надо 🙂

Сделали, поехали дальше. Добавим переменную, она нам не особо нужна и без нужны вводить переменные не стоит, но мы же учимся.

Если переменные добавляются внутри тела функции — то они локальные и существуют только в этой функции. Когда из функции выходишь эти переменные удаляются, а память ОЗУ отдается под более важные нужды.

Подробней о локальных и глобальных переменных, а также времени жизни оных.

1
2
3
4
5
6
int main(void)
{
unsigned char i;  
return 0;
}

int main(void) { unsigned char i; return 0; }

unsigned значит беззнаковый. Дело в том, что в двоичном представлении у нас старший бит отводится под знак, а значит в один байт (char) влазит число +127/-128, но если знак отбросить то влезет уже от 0 до 255. Обычно знак не нужен. Так что unsigned.
i — это всего лишь имя переменной. Не более того.

Теперь надо проинициализировать порты и UART. Конечно, можно взять и подключить библиотеку и вызвать какой нибудь UartInit(9600); но тогда ты не узнаешь что же произошло на самом деле.

Делаем так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(void)
{
unsigned char i;
 
#define XTAL 8000000L
#define baudrate 9600L
#define bauddivider (XTAL/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)
 
UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);
UCSRA = 0;
UCSRB = 1

Источник: http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-1.html

Что нужно для программирования микроконтроллеров? ⋆ diodov.net

Теперь, когда мы уже ознакомлены с некоторыми возможностями и функциями микроконтроллеров, естественно, возникает логичный вопрос: что нужно для программирования микроконтроллеров? Какие необходимы программы и устройства, где их взять?

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

Структура и порядок написания программы

Первым делом, прежде чем приступить к написанию любой программы, а точнее кода программы, следует четко представлять, какие функции будет выполнять микроконтроллер. Поэтому сначала нужно определить конечную цель программы.

Когда она определена и полностью понятна, тогда составляется алгоритм работы программы. Алгоритм – это последовательность выполнения команд.

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

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

Мы будем писать программы на Си, который относится к языку высокого уровня. Программы на Си пишутся гораздо быстрее по сравнению с аналогичными на Ассемблере. К тому же все сложные программы пишутся преимущественно на Си.

Здесь мы не будем сравнивать преимущества и недостатки написания программ на Ассемблере и Си. Со временем, приобретя некоторый опыт в программировании МК, вы сами для себя сделаете полезные выводы.

Сам код программы можно писать в любом стандартном текстовом редакторе, например в Блокноте. Однако на практике пользуются более удобными редакторами, о которых будет сказано далее.

Компиляция программы

Написанный нами код на Си еще вовсе не понятен микроконтроллеру, поскольку МК понимает команды только в двоичной (или шестнадцатеричной) системе, которая представляет собой набор нулей и единиц. Поэтому Си-шный код нужно преобразовать в нули и единицы. Для этого применяется специальная программа, называемая компилятор, а сам процесс преобразования кода называется компиляция.

Далее откомпилированный готовый код нужно поместить в микроконтроллер, а точнее записать его в память микроконтроллера или, проще говоря, прошить микроконтроллер.

Для прошивки МК применяется устройство, называемое программатор. В зависимости от типа программатора вход его подключается к COM или USB порту, а выход к определенным выводам микроконтроллера.

Существует широкий выбор программаторов и отладочных плат, однако нас вполне устроит самый простой программатор USBASP, который в Китае стоит не более 3 $.

После того, как микроконтроллер прошит, выполняется отладка и тестирование программы на реальном устройстве или, как еще говорят, на «железе».

Теперь давайте подытожим этапы программирования микроконтроллеров.

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

Следует заметить, что отладку и тестирование программы также выполняют до прошивки МК.

Необходимый набор программ

Существует множество полезных и удобных программ для программирования МК. Они бывают как платные, так и бесплатные. Среди них можно выделить три основных:

1) Atmel Studio

2) CodeVisionAVR

3) WinAVR

Все эти программы относятся к IDEIntegrated Development Environment – интегрированная среда разработки. В них можно писать код, компилировать и отлаживать его.

Следует обратить внимание на Code Vision AVR. Эта IDE позволяет упростить и ускорить написание кода. Однако программа платная.

На начальном этапе программирования все программы лучше прописывать вручную, без каких-либо упрощений.

Это поможет быстро приобрести необходимые навыки, а в дальнейшем хорошо понимать и редактировать под свои нужды коды, написанные кем-то другим. Поэтому я рекомендую использовать программу Atmel Studio.

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

Прошивка и отладка программы

Прошивать микроконтроллеры мы будем с помощью дополнительной программы AVRDUDE.

Если микроконтроллера в наличии нет, то его работу можно эмитировать с помощью программы Proteus. Она значительно упрощает процесс отладки программы даже при наличии МК, чтобы его часто не перепрошивать, ведь любой МК имеет конечное число перезаписей, хотя это число и достаточно большое.

При прошивке и отладке МК его удобно располагать на макетной плате, но это вовсе не обязательно. Поэтому для большего удобства пригодится и макетная плата. Существует большой выбор макетных плат, однако я вам рекомендую брать ту, которая имеет по возможности большее число отверстий. Когда мы начнем подключать семисегментные индикаторы, вы оцените преимущества «больших» макетных плат.

Еще один важный элемент, который нам пригодится – это техническая документация на МК, называемая datasheet. В общем, нужно скачать datasheet на микроконтроллер ATmega8.

Итак, полный набор для программирования МК состоит из таких элементов:

1) Atmel Studio

2) Datasheet на ATmega8

3) Proteus

4) AVRDUDE

5) Программатор USB ASP (+ драйвер на него)

6) Макетная плата

7) Микроконтроллер ATmega8

Если микроконтроллера нет в наличии, не стоит откладывать изучение микроконтроллеров на потом, достаточно скачать и установить:

1) Atmel Studio

2) Datasheet на ATmega8

3) Proteus

Скачать AVRDUDE

Скачать datasheet ATmega8

Скачать Atmel Studio

Источник: https://diodov.net/chto-nuzhno-dlya-programmirovaniya-mikrokontrollerov/

Как стать программистом микроконтроллеров

У начинающих постоянно возникает один и тот же вопрос – с чего и в какой последовательности начать обучение. По любому предмету. В том числе и по микроконтроллерам.

Поэтому я решил написать эту статью, а для лучшего восприятия ещё и записал видео, где изложил свое видение того, что и как надо изучать, если целью является становление профессиональным программистом микроконтроллеров (ну или пусть даже не профессиональным, но высококлассным).

Это лишь обзор основных моментов, а не полное руководство к действию Назначение этой статьи – дать новичкам представление о том, что им нужно будет изучить, чтобы достичь своей цели. Итак, поехали…

Основы электротехники и электроники

Это первое, что должен знать человек, который хочет стать программистом микроконтроллеров. При чём здесь электроника, а тем более электротехника? Где инженер-электроник, и где программист микроконтроллеров?

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

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

Выбор микроконтроллера

Вообще микроконтроллер выбирается исходя из задач. Но на этапе обучения вам надо определиться с семейством микроконтроллеров, которые вы планируете изучать. Например, микроконтроллеры PIC или AVR.

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

Читайте также:  Ардуино и pir сенсоры: обнаружение движений и жестов

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

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

И поэтому я советую выбирать для обучения распространённое семейство микроконтроллеров, чтобы потом не пришлось переучиваться. А самыми распространёнными (ну во всяком случае среди любителей) являются микроконтроллеры PIC и AVR.

Документация на микроконтроллер

На начальном этапе обучения документацию на конкретный микроконтроллер можно не изучать. Однако при профессиональной разработке это будет необходимо. Так как чтобы выжать из микроконтроллера все его возможности, надо эти возможности знать на 100%. А узнать их (и при этом быть уверенным, что это соответствует реальности) можно только из официальной документации на конкретный прибор.

Здесь новичков ждёт неприятный сюрприз – практически вся оригинальная документация на английском языке. Поэтому, если вы только начинаете, то можете не расстраиваться из-за этой маленькой неприятности. Но на всякий случай английский лучше начать потихоньку изучать.

Среда разработки

Каждый профессионал должен в совершенстве владеть профессиональным инструментом.

Если солдат плохо владеет ножом или автоматом, то его просто убьют в первом же бою.

Законы выживания программистов не столь суровы. Однако и здесь умение владеть инструментом играет решающую роль.

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

Возьмите за правило – каждый день читать один раздел (или хотя бы один абзац) из справочной документации на среду разработки.

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

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

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

Но знать язык тоже надо в совершенстве. И, несмотря на кажущуюся сложность, изучать программирование микроконтроллеров лучше именно на ассемблере, а не на языках высокого уровня (об этом я ещё поговорю в следующий раз). Впрочем, это лишь моё субъективное мнение…

Заключение

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

Ну а если вы уже созрели для серьёзного изучения микроконтроллеров, то в который уже раз советую начать вот с этого курса.

Микроконтроллеры для ЧАЙНИКОВБесплатная рассылка о микроконтроллерах. Рассылка содержит как бесплатную информацию для начинающих, так и ссылки на платные продукты (книги, видеокурсы и др.) для тех, кто захочет вникнуть в тему более глубоко. Подробнее…

Источник: http://av-assembler.ru/mc/how-to-become-programmer-of-microcontrollers.php

Самопрограммирование микроконтроллеров AVR

В этой главе будет рассмотрена такая интересная особенность AVR, как самопрограммирование (имеется у многих моделей ATtiny и во всех моделях ATmega).

Суть ее заключается в возможности изменять содержимое FLASH-памяти непосредственно из пользовательской программы. Микроконтроллеры Atmel были одними из первых в мире, в которых появилось это новшество.

В разделе приведен пример загрузчика, использующего аппаратный интерфейс USART, и управляющей программы высокого уровня на языке Delphi.

Область применения

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

Это, во-первых, способность изменять собственные алгоритмы работы и, во-вторых, возможность вести отладку приложения, не прибегая к дополнительным аппаратным средствам. Но на практике ресурсов 8-разрядного микроконтроллера совершенно недостаточно для построения “самообучающихся” интеллектуальных систем.

А что касается отладки, то сама структура FLASH-памяти здесь сводит на нет все достоинства самопрограммирования (возможность размещать коды программ в быстрой памяти SRAM у AVR отсутствует). Кроме того, переписывать на ходу секцию рабочего кода, что раньше делалось только с помощью программаторов, – довольно рискованное дело. Любая неточность здесь сразу приведет к сбою.

И даже наличие самого аппаратного узла, отвечающего за смену “прошивки”, потенциально снижает надежность устройства. Если прикладная программа может изменять FLASH-память, то это может случиться и непроизвольно в результате какой-либо ошибки.

Однако, со временем оказалось, что все не так уж и плохо. Самопрограммирование позволяет успешно использовать FLASH-память, как альтернативу EEPROM. Рабочий ресурс FLASH, производимой по современной технологии, составляет ≈10000 циклов стирания/записи.

Это показатель хоть и на порядок меньше, чем у EEPROM, но все равно очень высокий.

Благодаря этому во FLASH-памяти можно хранить таблицы, списки, поправочные коэффициенты, а также любую другую информацию, требующую периодического не слишком частого обновления.

Но, наверное, самым главным достоинством самопрограммирования, является возможность создания практически любого интерфейса, для обновления программного обеспечения. Наибольшее практическое значение имеют компьютерные COM и USB. Последний из них в упрощенном виде может быть реализован программным способом.

Процессом программирования со стороны AVR должна при этом управлять специальная программа-загрузчик boot-loader.

Многие современные микроконтроллеры (а также новые модели AVR) поставляются с изначально “зашитым” на заводе загрузчиком, что дает возможность использовать очень простые программаторы, лишь немного потеряв в скорости программирования.

Перейти к следующей части: Особенности процесса самопрограммирования

Источник: http://cxem.net/mc/book61.php

Принцип работы с микроконтроллерами Atmel (Avr)

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

atmega8 в DIP – корпусе

И это очень важно понять для начала изучения микроконтроллеров.

Список периферийных устройств контроллера очень большой.

Неполный перечень:

  • универсальные цифровые порты – имеют настраиваемый режим работы как на ввод, так и вывод;
  • другие интерфейсы ввода-вывода, такие как UART, USB, IEEE 1394, Ethernet;
  • аналого-цифровые и цифро-аналоговые преобразователи;
  • компараторы;
  • широтно-импульсные модуляторы;
  • таймеры;
  • массивы встроенной флеш-памяти;
  • встроенный тактовый генератор и/wp-admin/post.php?post=119&action=edit сторожевой таймер.

Есть и более экзотические устройства – радиочатотные передатчики, драйверы различных устройств и т.д.

В заметках рассмотрим принцип работы с микроконтроллерами Atmel (Avr)

Для начала достаточно разобраться с универсальными цифровыми портами.

Каждый контроллер от Atmel имеет порты, с названиями PORTA, PORTB, …. в зависимости от типа микроконтроллера. Порты не обязательно начинаются с PORTA – например, в DIP Atmega8 его нет. В зависимости от типа контроллера, порты имеют разную разрядность (8, 16, 32 и т.д. бит).

Розрядность порта может фигурировать в названии контроллера. Например, тот же Atmega8, Atmega16, Atmega32. А может и не фигурировать (Attiny2313 как вариант – но он тоже 8-битный).

Надеюсь, интуитивно понятно, что разрядность порта определяет, сколько бит информации одновременно передается – а, значит, сколько ножек имеет порт.

Рассмотрим работу с микроконтроллером на языке C.

Для начала надо настроить порт на ввод или на вывод. Это можно сделать с помощью регистра DDRx, где х – порт (A, B, C и т.д.) 1 – порт настроен на выход, 0 – на ввод.

Нумерация ножек порта:

Например, настроем первый бит (1 ножку) порта А на вывод:

DDRA = 0b00000001;

0b в начале означает, что число представленое в двоичной сичтеме исчисления. Вы можете представлять числа в любой удобной для вас форме. Но принято использовать 2 формы – двоичную (бинарную) и шестнадцатиричную. В  двоичной системе проще понимать (0 – низкий логический уровень на ножке, 1 – высокий), в шестнадцатиричной более компактная запись. Что использовать – решать вам.

Разумеется, такая запись не слишком удобная (но самая понятная и быстрая), как правило, для таких и подобных действий используют побитовые операции, но их подробно рассмотрим (в применении к микроконтроллерам) в одной из следущих заметок.

Теперь можем передать значение на порт (на ту же 1 ножку):

PORTA = 0b00000001;

Ну и…. Фактически все для ознакомления! Этих элементарных знаний плюс немного фантазии плюс немного базового опыта в программировании достаточно для того, чтобы, например, создать какую-то светодиодную мигалку (например, как здесь: Подарок девушке своими руками (на attiny2313)).

Например, под gcc-avr простейша программа имеет следующий вид:

//Подключение библиотек ввода/вывода #include

void main() {

//Переводим первый бит порта А в режим вывода DDRA = 0b00000001;

//Подаем высокий логический уровень на первую ножку порта А PORTA = 0b00000001; }

И так мы можем зажечь/спалить светодиодик =)

Источник: https://folkprog.net/nachalo-raboty-s-mikrokontrollerami-atmel-avr/

AVR для начинающих

Корпорация ATMEL хорошо известна как на мировом рынке, так и на российских рынках электронных компонентов. Микроконтроллеры AVR, пожалуй, одно из самых интересных направлений, развиваемых корпорацией ATMEL.

1. Для начала освоения микроконтроллеров AVR, необходимо познакомиться с его архитектурой, периферией и системой команд. Незаменимым помощником в этом будет книга “Микроконтроллеры AVR Tiny и Mega фирмы ATMEL” А.В. Евстифеев. В книге есть всё необходимое, включая примеры программ.
2. Определиться с языком программирования СИ или Ассемблер.

Если “работаете” на перспективу , то лучше изучить СИ! Наилучшим вариантом является знание обоих языков (любой СИшный компилятор имеет возможность добавления кода программы на ассемблере), пользуясь ими в зависимости от поставленной задачи. Си для начинающих.
3. Выбрать компилятор.

Компилятор необходим для преобразования исходного текста программы в машинный код. Для начинающих на СИ рекомендуется Code Vision AVR C Compiler – довольно простой в изучении, имеющий CodeWizardAVR, позволяющий автоматически сгенерировать часть кода периферии микроконтроллера для последующего его изучения и использования в программе.

Скачать примеры и краткое описание данного компилятора. Для начинающих на ASM – AVR Studio.
Начать работу с компилятором WINAVR.
Начать работу с компилятором IAR.
4. Отладить программу. Самым популярным пакетом для программирования AVR (Ассемблер) и отладки является AVR Studio, в котором можно наблюдать результаты работы кода.

Пример работы с пакетом. Не менее популярным является программный отладочный комплекс PROTEUS, позволяющий, в отличие от AVR Studio, проэмулировать “весь” разрабатываемый проект. Но, как и любой другой эмулятор данного класса, PROTEUS не является критерием работоспособности реальной схемы, т.к.

эмулирует логическое (0 или 1), а не физическое (уровень напряжения и тока) состояние. Скачать описание PROTEUS(RUS). 5. Программирование AVR.

Чтобы запрограммировать AVR, необходима соответствующая программа (в основном присутствует во всех популярных компиляторах/отладчиках) и программатор, желательно внутрисхемный – ISP (In System Programmer), позволяющий программировать МК в устройстве. Ниже приведены самые распространённые программы и программаторы/отладчики для МК AVR.

Программы: USBASP_AVRDUDE_PROG, PonyProg, ICprog, AVR8 Burn-O-Ma, UniProf.

Внутрисхемные программаторы AVR: универсальный USB программатор AVR, AVR910_usb_programmer(prottoss), USBASP, STK200, STK500 и т.п.
Внутрисхемные программаторы/отладчики AVR: AVR JTAG USB, AVR miniICE и т.п.
Большое количество программаторов и отладчиков представлено на официальном сайте ATMEL.

Рекомендуемая литература и статьи:

Форум Введение в микропроцессорную технику.

Как правильно писать программу на МК.

См. так же:

AVR для начинающих

AVRDUDE_PROG

универсальный программатор avr-usb

внутрисхемный отладчик AVR JTAG USB

Источник: https://yourdevice.net/mikrokontrollery/avr-dlya-nachinayushchikh

Ссылка на основную публикацию
Adblock
detector