Программирование микроконтроллеров для начинающих — arduino+

Arduino: Программирование без программирования — DRIVE2

На сегодняшний день Ардуино является одним из самых простых способов освоить микроконтроллеры: благодаря простому интерфейсу, простоте (можно сказать даже примитивности) «языка Ардуино» программирование микроконтроллеров становится доступно даже школьникам.

Однако всегда находятся энтузиасты старающиеся улучшить даже то, что и так кажется простым. В данном случае речь идет о «визуальном программировании», т.е. графических средах позволяющих не писать программы, а рисовать их.

Итак встречаем: Scratch, ArduBloсk и FLProg — три попытки сделать так, чтобы программирование стало доступно даже дошкольникам 🙂

Scratch
Страница проекта — s4a.cat/В 2003 году группа исследователей под руководством Митчела Резника из MIT Media Lab решила сделать общедоступный язык программирования. В результате через 4 года появился Scratch — «среда для обучения школьников программированию».

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

Это объектно-ориентированная среда, в основе которой лежит принцип конструктора LEGO и в которой программы собираются из разноцветных блоков-кирпичиков команд точно так же, как собираются из разноцветных кирпичиков конструкторы Лего.

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

Основа среды – блоки команд, разделенные на несколько групп: движение, внешность, звук, перо, контроль, сенсоры, операторы, переменные. Встроенная «рисовалка» позволяет нарисовать нужный объект, а блоки команд (их нужно перетаскивать мышью) – задать программу действий, в том числе с применением условных операторов и циклов.

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

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

В 2008 году появился проект Scratch для Arduino (в оригинале: Scratch For Arduino или сокращённо — S4A) — это модификация Scratch, которая предоставляет возможность простого визуального программирования контроллера Arduino, а так же содержит новые блоки для управления датчиками и исполнительными механизмами, подключаемыми к Arduino.

S4A представляет собой скетч прошивки s4a.cat/downloads/S4AFirmware15.ino, которая загружается в Ардуино, делает его исполнительным устройством, программа выполняется на компьютере, Ардуино её физически выполняет, передавая сигналы на выходы платы. Ардуино в этом случае через Serial-соединение получает от Скретча команды какие порты в какой уровень установить и передает на ПК измеренные уровни с входов.

Более подробно можно узнать либо на странице проекта, либо посмотрев видео от Амперки — www.youtube.com/playlist?…OzZQGDFdoRfldtqbmNU6a-PIp

ArduBloсk
Страница проекта -blog.ardublock.com/Имен разработчиков и их локализации мне найти не удалось, но данный проект активно продвигается разработчиком плат sparkfun, поэтому ИМХО это их проект.

Ardublock это графический язык программирования для Arduino, предназначенный для непрограммистов и простой в использовании. В отличии от Скретча ArduBloсk встраивается в среду Arduino IDE и генерит программый скетч, загружаемый в МК.

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

Среди руссоязычного сообщества проект известен благодаря учителю-энтузиасту из Лабинска Александру Сергеевичу Аликину — geektimes.ru/post/258834/

FLProg
Страница проекта — flprog.ru/
Проект развивается силами одного человека — Сергея Глушенко. Основная идея заключается в том, чтобы адаптировать применяющиеся в области программирования промышленных контроллеров языки FBD и LAD к Ардуино.

FBD (Function Block Diagram) — графический язык программирования стандарта МЭК 61131-3. Программа образуется из списка цепей, выполняемых последовательно сверху вниз. При программировании используются наборы библиотечных блоков.

Блок (элемент) — это подпрограмма, функция или функциональный блок (И, ИЛИ, НЕ, триггеры, таймеры, счётчики, блоки обработки аналогового сигнала, математические операции и др.). Каждая отдельная цепь представляет собой выражение, составленное графически из отдельных элементов. К выходу блока подключается следующий блок, образуя цепь.

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

Ladder Diagram (LD, LAD, РКС) — язык релейной (лестничной) логики. Синтаксис языка удобен для замены логических схем, выполненных на релейной технике. Ориентирован на инженеров по автоматизации, работающих на промышленных предприятиях.

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

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

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

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

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

Источник: https://www.drive2.ru/b/2729013/

Почему не стоит использовать Arduino для обучения программированию

Журнал РАДИОЛОЦМАН, май 2018

Hack van de dam

Я бы мог начать статью словами «Почему Arduino – отстой» или «Почему Arduino – барахло», что привлекло бы огромный трафик к странице в Интернете. Но я не сделал этого, потому что это просто неправда.

Arduino – не «барахло», и сам по себе не один из представителей этого семейства ничем не плох. Просто это не самый лучший инструмент для обучения людей программированию, что зачастую вводит их в заблуждение.

Позвольте мне объяснить вам, почему.

«Arduino – это открытая платформа для прототипирования электроники, основанная на гибком, простом в использовании оборудовании и программном обеспечении. Она предназначена для новичков, профессионалов и все тех, кто заинтересован в создании интерактивных объектов или сред», – именно так представлена Arduino своими разработчиками [1].

И они правы. Для создания интерактивных объектов или сред проект Arduino подходит идеально.

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

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

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

Использование Arduino для изучения программирования подобно использованию Макдональдс для изучения кулинарии; вы получаете еду очень быстро, но не получаете навыков самостоятельного приготовления пищи.

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

Пять причин, почему (не в порядке важности)

1. Отсутствие проектного пространства, разбиения кода и приличной интегрированной среды разработки

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

Может быть, нужно преклонить колени, чтобы уговорить их сделать цветовое выделение переменных, но для начала хотя бы дайте возможность просмотра их определений. Посмотрите, как это выглядит в Code::Blocks [2] на Рисунке 1.

Другой момент состоит в том, что весь код необходимо писать в одном «эскизе» (скетче). Если нужно написать серьезную программу с функциями, которые будут использоваться позже, то хорошая практика (или даже похвальная) заключается в создании модульных фрагментов кода.

Запись всего в один длинный файл идет в разрез с этой целью и стимулирует написание неструктурированного кода, называемого «макароны», с запутанным порядком выполнения и определениями переменных везде и нигде.

Рисунок 1. Опция поиска определений переменных и ихреализация в среде Code::Blocks.

Общие соображения, касающиеся того, почему так важны заголовочные файлы, очень хорошо изложены на сайте [3].

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

Чтобы получить четкое представление о том, как это делается правильно, загляните, пожалуйста, в подробное руководство по заголовочным файлам в Си, выпущенном MIT [4] (на английском языке):

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

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

Это важно, поскольку в соблюдении Правила Одного Определения компиляторам и компоновщикам нужна помощь».

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

Но Arduino IDE не обеспечивает простых способов создания других Си- и h-файлов, а также не позволяет искать определения в своих собственных файлах кода.

(Кто сможет сказать, что на самом деле делает функция «digitalWrite»)? Изучая программирование на Си, пожалуйста, научитесь правильно использовать заголовочные файлы.

2. Плохие уровни абстракций, плохие именования

«Язык программирования» Arduino использует множество предопределенных функций для использования периферийных устройств Arduino. Имена многих из этих функций вводят в заблуждение или используют плохие абстракции, просто не описывая того, что они делают. Хорошая аппаратная абстракция экономит время разработчика, плохая абстракция усложняет и запутывает. Вот несколько примеров:

  1. analogWrite(int): Функция «записывает аналоговое значение (ШИМ) в порт микроконтроллера». Вы скажете: «Что? ШИМ стал аналоговым?». Он настолько же аналоговый, насколько аналоговая информация на компакт-диске. Сигнал широтно-импульсной модуляции НЕ аналоговый; частота ШИМ Arduino равна «приблизительно» 490 Гц, и нет никаких указаний касающихся того, какой должна быть комбинация RC, чтобы сделать аналоговый сигнал. Это вводит в заблуждение. Сказанного достаточно для управления светодиодом, но это не «аналоговый сигнал», который можно было бы использовать в качестве уставки для аналоговой системы управления.
  2. И конечно, если уж вы предоставили возможность генерировать сигнал ШИМ, то хотя бы позвольте установить его частоту.
     
  3. pinMode():
    Я должен признать, что ошибка уже исправлена, но некоторое время назад были доступы только значения «INPUT» и «OUTPUT». Если бы потребовалось получить вход с подтягивающим резистором, пришлось бы еще выполнить функцию digitalWrite() для порта, который только что был сделан входом. Те, кто знают архитектуру AVR, понимают, что тем самым производится запись в регистры DDRx и PORTx, но для новичков включение подтягивающего резистора записью в порт, который только что был сделан входом, выглядит очень странной. Сейчас все исправлено, но для этого потребовалось слишком много времени; функция pinMode() уже использовалась, и нуждалась только в этой дополнительной опции. Здесь не только не было абстрагирования от «железа», но эта функция создавала код, который не мог нормально переноситься на другие микроконтроллеры. (Вероятно, поэтому функция была исправлена в момент появления платы Arduino Due).
     
  4. Переменные:
    Зачем использовать все типы char, int, long и т.д.? Использование stdint (uint8_t, uint16_t, int32, …) даст более правильное понимание и более переносимый код. Тип int – это 16-битная величина для компилятора AVR-GCC, тогда как для компилятора GNU ARM – 32-битная…
     
  5. Отсутствие абстракций и свойств системы:
    progmem. Очень многие используют для отладки сроковые последовательности, которые сохраняются в ОЗУ. Фиксированные строки могут храниться во Flash-памяти и считываться из нее; эти функции присутствуют в пакете avr-libc. Поэтому я думаю, что 90% людей, сказавших «память Arduino переполнилась», были бы рады добавлению какого-нибудь ключевого слова.
Читайте также:  Ардуино шаговый двигатель: управляем с помощью микроконтроллера

3. Ужасная документация

Документация по функциям в Arduino ничего не сообщает о том, какие в них используются периферийные модули (не говоря уж о более глубоком уровне), скрывая это от обычных пользователей. Раньше я использовал openFrameworks.

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

Можно ли обращаться к таймеру из функции servo()? Будет ли отправка строки в последовательный порт блокировать выполнение программы? Будет ли функция analogWrite() влиять на другие функции времени? В руководстве по Arduino вы об этом не прочитаете.

В справочнике по Arduino также описывается её «язык программирования». В базовой структуре используются некоторые функции Си и Си++, описанные, опять же, непонятно. «Arduino» – не тот язык, который вы не постеснялись бы указать в своем резюме.

Чтобы считаться программистом, надо уметь программировать на Си! Сходства и различия этих функций неясны, что приводит к путанице при переходе на другие микроконтроллеры или в среды разработки ANSI-C.

Где используются классы? Где используются структуры? Я понимаю, что Arduino не хочет отпугивать новых пользователей, но как же они станут «продвинутыми» пользователями?

4. Отсутствие доступа к периферии и напрасная трата ресурсов

Я знаю, что, смешав скетч с «реальным» Си и используя регистры Atmel, вы можете получить доступ к периферии Arduino и микроконтроллера.

Но, если уж вы продвинулись так далеко, пожалуйста, доставьте себе удовольствие и напишите собственный код, где вы будете знать, какая периферия используется и каким образом. Начиная программировать микроконтроллеры, я был поражен скоростью их работы (PIC, 8 МГц).

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

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

У меня на работе многие пытаются писать на Arduino циклы управления. Используя функцию micros(), они отмечают время начала функции loop(), выполняют свои задачи, а затем снова опрашивают функцию micros() для ожидания завершения времени цикла.

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

Реализация функции Ticker, хотя и не лишена недостатков, но, по крайней мере, использует синхронизацию на основе прерываний, оставляя основной цикл для «медленных» задач.

5. Отсутствие «реальной» отладки

Когда в Arduino использовался ATmega328, у разработчика не было порта отладки. Теперь появилась серия плат Due, и отладочные порты имеют микроконтроллеры Microchip (Atmel) от серии tiny (DebugWire) до серии XMEGA (PDI и JTAG), однако пользователям Arduino этот мощный набор инструментов по-прежнему недоступен.

Думаю, что при использовании правильно настроенного отладчика время разработки приложений у меня снижается процентов на 30. Поэтому ARM интересен хотя бы тем, что может использовать реализацию OpenOCD, предоставляющую разработчику широкие возможности отладки и программирования.

Несколько точек останова дают очень быструю индикацию выполняемого кода и возникающих ошибок. Меня приводят в восторг все новые наборы разработки ARM с интегрированным аппаратным отладчиком.

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

Какова же альтернатива?

Я думаю, что приведенных аргументов вполне достаточно для недовольства.

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

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

  • Scratch [5]. Это веселый и легкий инструмент для детей и подростков, желающих освоить программирование, который даже поддерживает возможность разбиения кода. Конечно же, он не предназначен для встраиваемых систем, но для детей это хороший способ понять, что такое программа. 
  • Mbed [6]. Онлайн компилятор с открытым кодом, поддерживающий множество модулей и плат на микроконтроллерах различных производителей, включая NXP, Analog Devices, STMicroelectronics, Nordic Semiconductor, Ublox, который отлично подходит для новичков, так как не требует установки инструментальных средств. С компилятором предлагается огромный архив примеров, которые можно легко импортировать в свой проект. Да, речь именно о проектах. Вам дается возможность полного контроля над исходным кодом и его структурой, включая онлайн управление версиями. Предоставляемый mbed код – это Си++, использующий классы и перегрузку операторов, что лично меня, воспитанного на ANSI-C, первоначально немного сбивало с толку, однако документация, которую вы тоже найдете в своем проекте, прозрачна и доступна. Использование периферии нельзя назвать простым, но можно косвенно использовать таймеры для генерирования прерываний по времени, и, опять же, все это хорошо документировано. Вам не нравятся онлайн сервисы? Хорошо, можно работать оффлайн. Единственный, на мой взгляд, недостаток mbed – отсутствие возможности отладки с использованием точек останова и наблюдения. 
  • Компилятор AVR-GCC/WinAVR [7] с микроконтроллерами серии Xmega. Пакет программ AVR-GCC (с библиотеками avr-libc) имеет солидную репутацию и очень хорошую базу пользователей [8]. Причина, по которой я рекомендую серию Xmega, – это «фантастическая» документация. Правда, из-за того, что для каждого периферийного устройства есть отдельное указание по использованию, Atmel Studio имеет очень «раздутые» размеры, но зато предоставляет реальный набор мощных инструментов для разметки кода, отладки (точки останова) и симуляции (просмотр и изменение битов регистров периферии). При использовании отладчика Dragon (переоцененного) можно работать с устройствами, имеющими память программ до 32 Кбайт. Конечно, начинать с такого набора без каких-либо знаний в области программирования будет тяжело, но всегда можно найти информацию в Интернете или попросить помощи у знающего друга. При чтении указаний по применению у меня возникает ощущение, что можно создать систему, которая после настройки все будет делать самостоятельно: DMA будут отправлять полученные значения АЦП в память, система событий будет запускать таймеры для запуска ЦАП, и тому подобное. Поработать придется довольно много, но вы сделаете действительно встраиваемую систему. Это как самостоятельно приготовить суши вместо того, чтобы идти в Макдональдс… 
  • Использовать отладочные платы Launchpad/STM32/… [9]. Другие ARM платы. И да, и нет… Конечно, ARM – это будущее, но начинать с этого, думаю, довольно сложно. Кроме того, при использовании бесплатных инструментальных наборов вам придется потратить уйму времени на их настройку. Правда, это полезно; оценочная плата с интегрированным отладчиком (8 евро за плату серии STM32F0 Discovery [10] – не сравнить с продуктами Atmel/Microchip), и еще что-то, и в своем резюме вы сможете указать, что работали с ARM. Однако документация в основном посредственная и пугающе объемная. Кроме того, набор опций в компиляторах и средах разработки настолько велик, что порой трудно разобраться, почему программа не компилируется.

Заключение

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

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

Для этого изучайте настоящую кулинарию; начинайте с нуля – с кипящей воды, затем кладите туда scratch, готовьте картофель с mBed и делйте суши с Atmel, чтобы в конечном итоге выйти на фристайл с отладочными платами ARM.

Читайте также:  Raspberry pi или скромное очарование простоты

Ссылки

Источник: https://www.rlocman.ru/review/article.html?di=500219

Руководство по Arduino для начинающих

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

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

Платы Arduino используют либо микроконтроллер Atmel AVR, либо микроконтроллер Atmel ARM, и в некоторых версия имеет интерфейс USB. Они также имеют шесть или более выводов аналоговых входов и четырнадцать или более выводов цифровых входов/выходов (I/O), которые используются для подключения к микроконтроллеру датчиков, приводов и других периферийных схем.

Цена на платы Arduino в зависимости от набора функций составляет от шести до сорока долларов.

Типы плат Arduino

Существует множество различных типов плат Arduino, как показано в списке ниже, каждая из которых обладает собственным набором функций. Они отличаются по скорости обработки, памяти, портам ввода/вывода и подключению, но основная составляющая их функционала остается неизменной.

На разнообразие плат Arduino и их технические описания можно посмотреть в подразделе «Arduino» раздела «Купить» данного сайта.

Программное обеспечение (IDE)

Программное обеспечение, используемое для программирования Arduino, представляет собой интегрированную среду разработки Arduino IDE. IDE представляет собой Java приложение, которое работает на множестве различных платформ, включая системы PC, Mac и Linux.

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

Программы для Arduino называются «скетчами», и они написаны на языке, очень похожем на C или C++.

USB кабель

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

USB кабель для Arduino

Программирование

Программирование Arduino легко: сначала вы используете редактор кода IDE для написания программы, а затем компилируете и загружаете её одним кликом.

Программа для Arduino включает в себя две основные функции:

Вы можете использовать функцию setup() для инициализации настроек платы. Эта функция выполняется только один раз, при включении платы.

Функцияloop() выполняется после завершения функции setup(), и в отличие от функции setup() она работает постоянно.

Функции программ

Ниже приведен список наиболее часто используемых функции при программировании Arduino:

  • pinMode – устанавливает вывод в режим входа или выхода;
  • analogRead – считывает аналоговое напряжение на аналоговом входном выводе;
  • analogWrite – записывает аналоговое напряжение в аналоговый выходной вывод;
  • digitalRead – считывает значение цифрового входного вывода;
  • digitalWrite – задает значение цифрового выходного вывода в высокий или низкий уровень;
  • Serial.print – пишет данные в последовательный порт в виде удобочитаемого текста ASCII.

Библиотеки Arduino

Библиотеки Arduino представляют собой коллекции функций, которые позволят вам управлять устройствами. Вот некоторые из наиболее широко используемых библиотек:

  • EEPROM – чтение и запись в «постоянно» хранилище;
  • Ethernet – для подключения к интернету, используя плату Arduino Ethernet Shield;
  • Firmata – для связи с приложениями на компьютере, используя стандартный последовательный протокол;
  • GSM – для подключения к сети GSM/GRPS с помощью платы GSM;
  • LiquidCrystal – для управления жидкокристаллическими дисплеями (LCD);
  • SD – для чтения и записи SD карт;
  • Servo – для управления сервоприводами;
  • SPI – для связи с устройствами, используя шину SPI;
  • SoftwareSerial – для последовательной связи через любые цифровые выводы;
  • Stepper – для управления шаговыми двигателями;
  • TFT – для отрисовки текста, изображений и фигур Arduino TFT экранах;
  • WiFi – для подключения к интернету, используя плату Arduino WiFi shield;
  • Wire – двухпроводный интерфейс (TWI/I2C) для передачи и приема данных через сеть устройств или датчиков.

Этапы настройки Arduino

  1. Во-первых, установите IDE. Вы можете скачать IDE с сайта Arduino.
  2. Установите программное обеспечение на свой компьютер.
  3. Теперь запустите .exe файл Arduino IDE. IDE выглядит так:
  4. Напишите в редакторе кода свою программу и загрузите её в Arduino. Чтобы сделать это, необходимо подключить Arduino к компьютеру, используя USB кабель.

  5. В IDE выберите тип Arduino, который вы используете, через меню Tools (Инструменты) → Boards (Платы).
  6. Теперь проверьте свой код, нажав на значок «галки» вверху окна IDE, затем нажмите на соседний значок «стрелка вправо», чтобы скомпилировать и загрузить код в Arduino.

Внимание: возможно, вам понадобится установить драйвера, если ваша система не обнаружит Arduino.

Платы расширения Arduino

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

  • GSM Shield;
  • Ethernet Shield;
  • WiFi Shield;
  • Motor Shield;
  • Proto Shield;
  • Joystick Shield;
  • Bluetooth Shield;
  • Xbee shield.

Комплектующие и принадлежности

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

  • Макетная плата
  • USB кабель
  • Батарея 9В
  • светодиоды
  • кнопки
  • конденсаторы
  • регуляторы напряжения
  • датчики (IR, температуры и т.д.)
  • Перемычки
  • Резисторы
  • Потенциометр
  • Двигатели (двигатели постоянного тока, сервоприводы, BLDC)
  • LCD
  • Матричная клавиатура 4×4
  • Платы расширения Arduino

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

Оригинал статьи:

  • Editorial Team. Beginner’s Guide to the Arduino

Arduino Mega 2560

Отладочная плата Arduino Mega 2560 построена на микроконтроллере ATmega2560.

Она имеет 54 цифровых входных/выходных выводов (15 из которых могут использоваться в качестве ШИМ выходов), 16 аналоговых входов, 4 порта UART (аппаратных последовательных порта), кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером;…

Arduino Uno

Отладочная плата Arduino Uno построена на микроконтроллере Atmega328P.

Она имеет 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером; для того, чтобы начать работу с ней, просто подключите…

Arduino Leonardo

Отладочная плата Arduino Leonardo построена на микроконтроллере ATmega32u4.

Она имеет 20 цифровых входных/выходных выводов (7 из которых могут использоваться в качестве ШИМ выходов и 16 в качестве аналоговых входов), кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером; для того, чтобы начать работу…

Arduino Due

Плата Arduino Due построена на базе процессора Atmel SAM3X8E ARM Cortex-M3. Это первая плата Arduino на базе 32-битного ARM микроконтроллера.

Она имеет 54 цифровых входных/выходных вывода (из которых 12 могут использоваться в качестве ШИМ выходов), 12 аналоговых входов, 4 UART (аппаратных последовательных порта), опорную частоту 84 МГц, USB соединение с возможностью OTG, 2 ЦАП (цифро-аналоговых преобразователя),…

Arduino Yun

Arduino Yun – отладочная плата на базе микроконтроллера ATmega32u4 и Atheros AR9331. Процессор Atheros поддерживает дистрибутив Linux, основанный на базе OpenWrt и называемый OpenWrt-Yun. Плата имеет встроенную поддержку Ethernet и WiFi, порт USB-A, слот для карты micro-SD, 20 цифровых входных/выходных выводов (из которых 7 могут использоваться в качестве ШИМ выходов, а 12 – в качестве…

Arduino Pro Micro

Китайский клон Arduino Micro со встроенным USB. Определяется как Arduino Leonardo.

Arduino Esplora

Arduino Esplora – это отладочная микроконтроллерная плата, построенная на основе Arduino Leonardo.

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

Она разработана для людей, которые хотят взять и начать работать с Arduino без предварительного изучения электроники. Arduino…

Arduino Pro Mini

Отладочная плата Arduino Pro Mini построена на микроконтроллере ATmega328.

Она имеет 14 цифровых входных/выходных выводов (6 из которых могут использоваться в качестве ШИМ выходов), 6 аналоговых входов, кварцевый резонатор, кнопку перезагрузки и отверстия для монтажа выводных разъемов. Шестипиновый разъем может быть подключен к FTDI кабелю для подачи питания от USB и для установки связи с платой. Arduino…

LilyPad Arduino

Отладочная плата LilyPad Arduino построена на микроконтроллере ATmega168V (версия микроконтроллера ATmega168 с низкой потребляемой мощностью) или на микроконтроллере ATmega328V.

Arduino Nano

Arduino Nano – это небольшая, полнофункциональная отладочная плата, адаптированная для работы с макетными платами, построенная на базе микроконтроллера ATmega328 (Arduino Nano 3.

x) или Atmega168 (Arduino Nano 2.x). Она обладает той же функциональностью, что и Arduino Duemilanove, но имеет меньшие размеры.

Она отличается только отсутствием разъема питания и работой через mini-USB. Arduino Nano…

Источник: https://radioprog.ru/post/108

Arduino в качестве Программатора

В качестве программатора можно использовать плату arduino со специально загруженным скетчем.



Подключение микроконтроллеров к плате Arduino

Напомним расположение выводов SCK,MISO,MOSI на ардуинке: У плат серии Mega выводы SCK,MISO,MOSI находятся на других портах: 50 -MISO, 51 -MOSI , 52 -SCK , 53 — reset у программируемого м/к .

Подключаем питание на соотвествующие выводы программируемого микроконтроллера GND и VCC к Arduina , а так же соотвественно выводы SCK,MISO,MOSI.Вывод м/к Reset необходимо подключить к 10 выводу(53 у Mega) По такой схеме подключаются все м/к Atmega для программирования или просто прошивки загрузчика.

Подготавливаем arduino

Вы уже подключили микроконтроллер к плате arduino, можем заняться прошивкой, но для этого выбираем скетч из примеров под названием ArduinoISP:

Прошивка микроконтроллеров через плату arduino

Теперь наш Arduino стал программатором. Выбираем программатор arduino as ISP в меню сервис в подменю программатор.

Выбираем в меню свой микроконтроллер:

Если Вы просто хотите загрузить в микроконтроллер загрузчик,то необходимо через меню сервис выбрать записать загрузчик,этим самым вы установите необходимые фьюзы.

Читайте также:  Ардуино tft lcd дисплеи: руководство пользователя

Для чего нужен загрузчик? Установка загрузчика дает возможность напрямую, через последовательный порт прошивать микроконтроллер (только для имеющие аппаратный последовательный порт). Например так прошиваются пустые ATMEGA328P,которые потом можно использовать вместо штатной микросхемы на Arduino UNO и устанавливать далее на самодельные платы.

Пример заливки скетча на Attiny85:

Не пугайтесь — при прошивке возможно могут появится некоторые ошибки,но они никак не влияют на сам процесс программирования:

Далее, если мы прошиваем сам скетч (например у нас не стандартный микроконтроллер), то выбираем в меню файл загрузить с помощью программатора:

Ппрошивать необходимо именно через данный пункт меню,а не через стандартную кнопку «загрузить».

Для проверки работоспособности прошьем скетч Blink из примеров, укажем номер вывода тот, на котором будет подключен светодиод. Если указать порт номер 2 и оставить подключенный проводок SCK,то увидим мигание светодиода на плате arduino на 13 ноге (это не актуально для плат arduino Mega — там выводы  SCK,MISO,MOSI находятся на других портах)

___
http://homes-smart.ru/index.php/oborudovanie/arduino/programmiruem-m-k-atmega-cherez-arduino

Источник: http://avr-prog.blogspot.com/2014/01/arduino.html

Python для микроконтроллеров. Учимся программировать одноплатные компьютеры на языке высокого уровня — «Хакер»

Содержание статьи

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

Источник: https://xakep.ru/2018/01/25/python-for-microcontrollers/

Переходим от Arduino к программированию ATtiny13 на C

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

Поэтому, если чувствуется, что Arduino становится тесноват — можно не только перейти на 32-битные контроллеры (например, STM32), но и попробовать более низкоуровневое программирование контроллеров.

Уходя ближе «к железу» — программировать придётся на более близком к железу уровне — и если это не ассемблер, то уж язык программирования Си — точно.

Пример подобного программирования уже приводился в статье .

У такого стандартного программирования микроконтроллеров есть существенное преимущество перед использованием Arduino-вских скетчей. Однако, за низкоуровневый полный контроль и возможность использовать все ресурсы микроконтроллера, приходится расплачиваться долгим и внимательным изучением документации (datasheet-а) на микроконтроллер. Т.е.

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

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

Для примера, возьмём меленький, простой и дешёвый контроллер ATtiny13.

8-битный AVR микроконтроллер с 1 КБ программируемой Flash памяти — RISC архитектура — 120 команд, (большинство выполняется за один такт) — 32 8-битных регистра общего применения — 1 КБ программируемой Flash памяти программы — 64 байта EEPROM памяти данных, (до 100 000 циклов записи/стирания) — 64 байта SRAM памяти (статическое ОЗУ) — Один 8-разрядный таймер/счётчик с отдельным предделителем и два ШИМ канала — 4-канальный 10-битный АЦП со встроенным ИОН — Программируемый сторожевой таймер (watchdog) со встроенным генератором — Встроенный аналоговый компаратор — Внутрисистемное программирование через SPI порт — Внешние и внутренние источники прерывания Корпусное исполнение: — 8-выводные PDIP и SOIC корпуса: 6 программируемых линий ввода-вывода Диапазон напряжения питания, частота: 1.8 – 5.5В (для ATtiny13V) — до 10МГц 2.7 – 5.5В (для ATtiny13) — до 20МГц

Выводы микроконтроллера ATtiny13:

Как видим, микросхема микроконтроллера — маленькая — всего 8 ножек. Чтобы заставить её работать — нужно просто воткнуть её в макетную плату, подтянуть RESET (первый пин — на схеме обозначается — PB5) к шине питания через 10-килоомный резистор и подать питание — например, 5V снятые с пинов питания контроллера Arduino / CraftDuino.
В статье , уже подробно расписано как нужно подключить микроконтроллер ATtiny13 к контроллеру Arduino или CraftDuino, чтобы его можно было программировать через выводы микросхемы FT232RL используя режим bit-bang (режим управления отдельными выводам микросхемы). Поэтому сразу переходим к софтовой части. Раз решили программировать «по-взрослому», то и среда разработки нужна «взрослая».

Идём на сайт -a, и скачиваем свежую версию .

Atmel Studio — (наследница AVR Studio) — это бесплатная среда разработки для микроконтроллеров Atmel.

Сама IDE должна быть знакома, т.к. используется оболочка от Microsoft Visual Studio, однако следует обратить внимание, что в качестве компилятора используется GCC. После установки, на рабочем столе появится ярлык с симпатичной красной божьей коровкой. Запускаем IDE и привычным образом, быстренько создаём проект.

File -> New -> Project…

Выбираем С/С++ и GCC C Executable Project, пишем имя проекта, например, blink 🙂

Затем, среда предложит выбрать тип используемого микроконтроллера — выбираем ATtiny13.

Всё — шаблонный файл уже создан и можно начинать программировать:

Предлагаемый шаблон программы — напоминает что-то :

#include int main(void) { while(1) { //TODO:: Please write your application code } }
Описание работы портов микроконтроллера и используемых для насткройки и работы регистров, очень подробно приводится в документации на микроконтроллер — . Как увидим далее, конфигурирование и работа с портами сводится к установке соответствующих битов в нужных регистрах микроконтроллера. Если вы уже имели дело с установкой/проверкой/очисткой битов (работа с битовыми масками), то вам будет проще разобраться в происходящем. Но, на всякий случай, напомню: чтобы установить бит N — нужно выполнить побитовое ИЛИ с числом, где этот бит установлен (чтобы получить такое число — мы побитово сдвигаем влево единицу на заданное число позиций). Соответственно, чтобы сбросить бит N — нужно выполнить побитовое И с числом в котором установлены все биты кроме заданного (чтобы получить такое «интвертированное число» — мы сначала получаем число в котором бит установлен, а потом применяем к нему операцию побитового НЕ). value |= 1

Источник: http://robocraft.ru/blog/arduino/3423.html

Уроки Arduino для новичков 1.1.3 Прямое программирование микроконтроллера ICSP

На этот раз мы поговорим о том, как программировать Arduino, не обычным способом, не через привычное USB подключение, а через прямое прошивание процессора.

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

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

Микроконтроллер обычно содержит в себе код загрузчика, записанный в флеш-память. Он позволяет записывать пользовательскую программу в  флеш и EEPROM-память. Именно поэтому у вас есть возможность загружать скетчи.

 Вы загружаете свой код, который должен скопироваться или запрограммироваться в флеш-память или в постоянную память EEPROM, но обычно в flash, и дальше должно начаться выполнение программы внутри atmega 328, который и предназначен для этого.

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

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

Загрузчик управляет USB-коммуникацией, и позволяет программировать. Загрузчик конечно не может перепрограммировать себя.

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

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

Для этой цели используют интерфейс , который называется ICSP. Это интерфейс к плате, к специальным контактам на плате, через которые можно заливать загрузчик. Теперь вы можете запрограммировать что-угодно, но это всего лиш такой себе более прямой маршрут. Маршрут в обход USB.

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

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

По существу прошивка производится напрямую. Поэтому если вы взглянете на плату, то увидите два ICSP-порта потому, как там два процессора.

Там стоит ATmega328 тот, который главный. А так же там стоит ATmega16U2, который используется для USB-коммуникаций. И в него тоже загружена прошивка.  У него есть выполняемая программа. И, если вы хотите запрограммировать один из них, вам нужно использовать их ICSP-порты, а значит их собственные ICSP-контакты.

Вот вы видете на картинке одну группу ICSP-контактов справа ATmega16U2. И другую группу ICSP-контактов микроконтроллера ATmega328. И что вам прийдется сделать, если вы захотите перепрограммировать эти контроллеры, так это использовать специальный программатор, который вам прийдется купить отдельно.

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

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

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

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

Автор профессор Ian Harris из Калифорнийского университета

Перевод Гресько Евгений

Источник: http://geekmatic.in.ua/arduino_lesson_113

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