Arduino — Изучение языков программирования в микропроцессорной техники


Содержание

Язык программирования Ардуино C++

Язык программирования Arduino является разновидностью языка C++. Смотрите на нашем сайте справочник с описанием основных функций языка Arduino с примерами.

Подробно Arduino язык программирования для начинающих представлен в таблице далее. Микроконтроллер Arduino программируется на специальном языке программирования, основанном на C/C ++. Язык программирования Arduino является разновидностью C++, другими словами, не существует отдельного языка программирования для Arduino. Скачать книгу PDF можно в конце страницы.

В Arduino IDE все написанные скетчи компилируются в программу на языке C/C++ с минимальными изменениями. Компилятор Arduino IDE значительно упрощает написание программ для этой платформы и создание устройств на Ардуино становится намного доступней людям, не имеющих больших познаний в языке C/C++. Дадим далее небольшую справку с описанием основных функций языка Arduino с примерами.

Подробный справочник языка Ардуино

Язык можно разделить на четыре раздела: операторы, данные, функции и библиотеки.

Операторы

Язык Arduino Пример Описание
setup() void setup ()
<
pinMode (3, INPUT );
>
Функция используется для инициализации переменных, определения режимов работы выводов на плате и т.д. Функция запускается только один раз, после каждой подачи питания на микроконтроллер.
loop() void loop ()
<
digitalWrite (3, HIGH );
delay(1000);
digitalWrite (3, LOW );
delay(1000);
>
Функция loop крутится в цикле, позволяя программе совершать вычисления и реагировать на них. Функции setup() и loop() должны присутствовать в каждом скетче, даже если эти операторы в программе не используются.

Управляющие операторы

if
if (x > 100) digitalWrite (3, HIGH );
if (x digitalWrite (3, LOW );
Оператор if используется в сочетании с операторами сравнения (==, !=, ) и проверяет, достигнута ли истинность условия. Например, если значение переменной x больше 100, то включается светодиод на выходе 13, если меньше — светодиодвыключается.
if..else
if (x > 100) digitalWrite (3, HIGH );
else digitalWrite (3, LOW );
Оператор else позволяет cделать проверку отличную от указанной в if, чтобы осуществлять несколько взаимо исключающих проверок. Если ни одна из проверок не получила результат ИСТИНА, то выполняется блок операторов в else.
switch…case
switch (x)
<
case 1: digitalWrite (3, HIGH );
case 2: digitalWrite (3, LOW );
case 3: break ;
default : digitalWrite (4, HIGH );
>
Подобно if, оператор switch управляет программой, позволяя задавать действия, которые будут выполняться при разных условиях. Break является командой выхода из оператора, default выполняется, если не выбрана ни одна альтернатива.
for void setup ()
<
pinMode (3, OUTPUT );
>
void loop ()
<
for ( int i=0; i analogWrite (3, i);
delay(10);
>
>
Конструкция for используется для повторения операторов, заключенных в фигурные скобки. Например, плавное затемнение светодиода. Заголовок цикла for состоит из трех частей: for (initialization; condition; increment) — initialization выполняется один раз, далее проверяется условие condition, если условие верно, то выполняется приращение increment. Цикл повторяется пока не станет ложным условие condition.
while void loop ()
<
while (x Serial.println (x);
delay (200);
>
>
Оператор while используется, как цикл, который будет выполняться, пока условие в круглых скобках является истиной. В примере оператор цикла while будет повторять код в скобках бесконечно до тех пор, пока x будет меньше 10.
do…while void loop ()
<
do
<
x = x + 1;
delay (100);
Serial.println (x);
>
while (x delay (900);
>
Оператор цикла do…while работает так же, как и цикл while. Однако, при истинности выражения в круглых скобках происходит продолжение работы цикла, а не выход из цикла. В приведенном примере, при x больше 10 операция сложения будет продолжаться, но с паузой 1000 мс.
break
continue
switch (x)
<
case 1: digitalWrite (3, HIGH );
case 2: digitalWrite (3, LOW );
case 3: break ;
case 4: continue ;
default : digitalWrite (4, HIGH );
>
Break используется для принудительного выхода из циклов switch, do, for и while, не дожидаясь завершения цикла.
Оператор continue пропускает оставшиеся операторы в текущем шаге цикла.

Синтаксис

;
(точка с запятой)

digitalWrite (3, HIGH );
Точка с запятой используется для обозначения конца оператора. Забытая в конце строки точка с запятой приводит к ошибке при компиляции.
<>
(фигурные скобки)
void setup ()
<
pinMode (3, INPUT );
>
Открывающая скобка “<” должна сопровождаться закрывающей скобкой “>”. Непарные скобки могут приводить к скрытым и непонятным ошибкам при компиляции скетча.
//
(комментарий)
x = 5; // комментарий Комментарии используются для напоминания, как работает программа. Они игнорируются компилятором и не экспортируются в процессор, не занимая место в памяти микроконтроллера.
#define #define ledPin 3 Директива #define позволяет дать имя константе. Директива служит исключительно для удобства и улучшения читаемости программы.
#include // библиотека для серво
#include Servo .h>
Директива #include используется для включения сторонних библиотек в скетч. Обратите внимание, что директивы #include и #define, не требуют точки запятой.

Типы данных

boolean boolean val = false ; Переменная boolean может принимать значение — true или false. Каждая переменная типа boolean занимает один байт в памяти микроконтроллера.
char // оба значения эквивалентны
char val = ‘A’;
char val = ’65’;
Тип данных char хранит символьное значение и занимает в памяти 1 байт. Символы пишутся в одинарных кавычках, например: ‘A’, но в памяти символы хранятся в виде чисел.
byte byte val = 255; byte — без знаковый тип данных для хранения чисел в диапазоне от 0 до 255. Переменная занимает в памяти 1 байт.
int int val = 32767; Тип данных для хранения целых чисел. Переменная типа int хранит 16-битные значения в диапазоне от -32768 до 32767.
unsigned int unsigned int val = 65535; Переменная типа unsigned int также может хранить двухбайтовые значения. Но вместо отрицательных чисел хранит только положительные значения в большом диапазоне от 0 до 65535.
float float val = 25.1547; Переменная типа float служит для хранения чисел с десятичным разделителем. Числа с плавающей точкой позволяют более точно описать аналоговые величины, чем целые числа. Точность дробных чисел составляет 6-7 знаков — это общее количество цифр, а не количество цифр после запятой.

Программирование Arduino намного проще и понятнее, чем язык C++.

Например.

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

При использовании C/C++ нам бы пришлось долго разбираться с документацией на микроконтроллер и написать в скетче нечто подобное:

UBRR0H = ((F_CPU / 16 + 9600 / 2) / 9600 — 1) >> 8;
UBRR0L = ((F_CPU / 16 + 9600 / 2) / 9600 — 1);
sbi(UCSR0B, RXEN0);
sbi(UCSR0B, TXEN0);
sbi(UCSR0B, RXCIE0);

Самоучитель разработчика устройств на микроконтроллерах AVR

Автор Белов А.В.
Издательство Наука и Техника
Год 2008
Формат DJVU

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

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

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

Одновременно идет изучение языков программирования. Все программные примеры даны на Ассемблере и СИ.

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

Arduino — Изучение языков программирования в микропроцессорной техники

Название: Arduino: от азов программирования до создания практических устройств
Автор: Белов А.В.
Издательство: СПб.: Наука и Техника
Год издания: 2020
Страниц: 480
ISBN: 978-5-94387-884-8
Формат: DjVu
Качество: отличное
Для сайта: litmy.ru
Размер: 30 Мб
Язык: русский

Читатель пройдет путь от основ цифровой логики, булевой алгебры до программирования микроконтроллеров и создания на них практических устройств. В книге подробно рассматриваются принципы работы микропроцессорной системы, архитектура построения микроконтроллеров семейства AVR, составляющего основу модулей Arduino. Именно на них выполнены все устройства, на базе которых идет обучение. Модуль Arduino оказался настолько удачной разработкой, что сегодня признан идеальной основой для изучения микроконтроллерной техники.
Основной частью книги являются практический курс по схемотехнике и программированию, состоящий из 15 практических уроков. Для каждого урока автор специально разработал реальное устройство на основе модуля Arduino. Переходя последовательно от простого к сложному, читатель научится писать программы, а также освоит искусство схемотехники.
Одновременно на тех же примерах идет изучение языка программирования Arduino. Все функции, операторы и другие элементы этого языка подробно описываются перед тем, как о них пойдет речь при описании конкретной программы.
Неоценимую помощь в изучении оказывает виртуальный диск, содержащий инструментальные программы, дополнительные библиотеки для Arduino, видео презентации и полный набор Arduino-скетчей из книги в электронном виде и многое другое.
Книга создана специально для начинающих конструкторов микроконтроллерной техники, студентов и всех, кто хочет досконально изучить секреты и премудрости микроэлектроники.

Часть I. ВОТ ОНА КАКАЯ — ТЕХНИКА ЦИФРОВАЯ

Глава 1. Без микропроцессоров мир был бы скучным

Как микропроцессор завоевал весь мир
Микропроцессор вырос до микроконтроллера
Процессор — сердце микропроцессорной системы
Что помнит память
Порты ввода и порты вывода
Алгоритм управления процессора
Все на свете можно описать цифрами
Что же такое микропроцессор
Постоянные запоминающие устройства
Оперативная память или оперативное запоминающее устройство
ПЗУ с электрическим стиранием информации или флэш-память
В чем же различия между микропроцессорами и микроконтроллерами

Глава 2. Учимся считать по-другому

Знакомая с детства десятичная система исчисления
Восьмиричная система исчисления
Шестнадцатеричная система исчисления
Двоичная система исчисления
Способы обозначения чисел в разных системах исчисления
Арифметическая операция сложения
Арифметическая операция умножения

Глава 3. Электронные цифры для компьютера

Представление чисел на ПК
Двухуровневый сигнал
Явление триггерного эффекта

Глава 4. Логические элементы: простые и составные

Знакомство с логическими элементами
Простой логический элемент «И»
Простой логический элемент «ИЛИ»
Простой логический элемент «НЕ», или инвертор
Таблица истинности
Составные логические элементы
Составные логические элементы «И-НЕ» и «ИЛИ-НЕ»
Составной логический элемент «ИСКЛЮЧАЮЩЕЕ ИЛИ»
Составной логический элемент сумматор

Глава 5. Простейшие триггеры

Что такое триггер
Триггер Шмитта: четкое срабатывание
RS-триггер: схема и условное обозначение
RS-триггер: варианты подачи сигналов
RS-триггер: переключение триггера
RS-триггер: переход триггера из одного устойчивого состояния в другое
Борьба с дребезгом контактов

Глава 6. Триггеры для хранения информации

D-триггер: устройство и схемное обозначение
D-триггер: логика работы
Параллельный регистр
Параллельный регистр с расширенными возможностями
JK-триггер: устройство и работа

Глава 7. Счетчики импульсов и делители частоты

Работа делителя частоты
Счетчики прямого счета
Счетчики с обратным отсчетом
Делители с переменным коэффициентом деления
Таймеры: формируем различные интервалы времени

Глава 8. Дешифраторы цифровых сигналов

Устройство и принцип действия дешифратора
Селектор памяти ячеек ОЗУ
Каскадирование дешифраторов
Дешифратор для работы с двоично-десятичными числами

Глава 9. Мультиплексоры: собираем сигнал с нескольких входов

Как собирается сигнал с нескольких источников
Разнообразие мультиплексоров
Цифровые и аналоговые мультиплексоры

Часть II. ШАГАЕМ ОТ ЦИФРОВОЙ ТЕХНИКИ К МИКРОКОНТРОЛЛЕРУ

Глава 10. Типовая схема микропроцессорной системы

Структурная схема типичной микропроцессорной системы
ОЗУ и ПЗУ: в чем сходства и отличия
Динамическая память
Развитие постоянных запоминающих устройств
Порты ввода-вывода
Процессор и цифровые шины
Шина данных
Шина адреса
Шина управления
Принцип действия микропроцессорной системы

Глава 11. Алгоритм работы микропроцессорной системы

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

Глава 12. Специальные режимы работы микропроцессорной системы

Механизм прерываний
Прямой доступ к памяти

Часть III. ЗНАКОМТЕСЬ: МИКРОКОНТРОЛЛЕРЫ AVR, ОСНОВА ПЛАТ ARDUINO

Глава 13. Возможности и особенности построения микроконтроллеров AVR

Микроконтроллеры — кто они?
Особенности новой серии микроконтроллеров
Семейство микроконтроллеров AVR
Таблица параметров микроконтроллеров
Состав серии AVR
Особенности серии AVR
Внутренняя память
Способы программирования Flash- и EERROM-памяти
Порты ввода-вывода
Периферийные устройства
Дополнительные устройства

Глава 14. Регистры: храним предварительные результаты вычислений

Регистры общего назначения (РОН)
Регистры ввода-вывода
Общие сведения

Глава 15. Память микроконтроллера

Память программ
Оперативная память микроконтроллеров AVR
Область памяти, совмещенная с набором регистров общего назначения (РОН)
Область памяти, совмещенная с регистрами ввода-вывода (РВВ)
Область внутреннего ОЗУ
Область внешнего ОЗУ
Энергонезависимая память данных (EEPROM)

Глава 16. Дополнительные регистры и стековая память

Счетчик команд
Указатель стека
Организация стековой памяти

Глава 17. Подсистема ввода-вывода

Назначение, состав, имена
Назначение и наименование специальных регистров
Принцип действия
Конфигурирование порта ввода-вывода

Глава 18. Система прерываний

Назначение системы прерываний
Управление системой прерываний
Алгоритм работы системы прерываний
Таблица векторов прерываний для микроконтроллера ATmega328P

Глава 19. Таймеры-счетчики

Классификация встроенных таймеров
Сторожевой таймер
Таймеры общего назначения
Режимы работы таймеров
Режим Normal
Режим «Захват» (Capture)
Режим «Сброс при совпадении» (СТС)
Режим «Быстродействующий ШИМ» (Fast PWM)
Режим «ШИМ с точной фазой» (Phase Correct PWM)
Асинхронный режим
Предделители таймеров/счетчиков

Глава 20. Встроенные периферийные устройства

Аналоговый компаратор
Аналого-цифровой преобразователь
Последовательный канал (UART/USART)
Последовательный периферийный интерфейс (SPI)
Последовательный двухпроводный интерфейс (TWI)

Глава 21. Программируемые переключатели режимов и ячейки защиты информации

Конфигурационные ячейки
Ячейки защиты и идентификации

Часть IV. МОДУЛЬ ARDUINO — КОНСТРУКТОР ДЛЯ ДОМОХОЗЯЕК

Глава 22. Модуль Arduino — первое знакомство

Почему стал популярным модуль Arduino?
Как будем осваивать язык Arduino

Глава 23. Модуль ARDUINO: осваиваем теоретически

Кто и зачем создал модуль Arduino?
Как же удалось достичь такой популярности?
Первые варианты Arduino
Знакомимся с модулем Arduino UNO
Полезные упрощения в модуле
Группа аналоговых входов
Команда аналогового вывода
Контакты питания «Power»
Поддерживаемые языки программирования

Глава 24. Среда разработки IDE

Для чего нужно специальное приложение «Среда разработки Arduino IDE»?
Команды и функции языка Arduino
Внутренние библиотеки
Скачиваем программный пакет с сайта разработчика
Варианты установочных пакетов для Windows
Запуск программы
Основное окно среды разработки
Панель инструментов
Выбор номера СОМ порта в настройках программы
Выбор типа используемой платы Arduino
Скетч: открытие, сохранение, загрузка
Организация обмена информацией между программой на Arduino и компьютером

Часть V. ПОЛЕЗНЫЕ УСТРОЙСТВА НА ARDUINO — СВОИМИ РУКАМИ

Глава 25. Простейшая программа «Hello, world!»

Постановка задачи
Схема
Алгоритм
Первый вариант программы
Второй вариант программы

Глава 26. Переключаемый светодиод

Постановка задачи
Схема
Алгоритм
Первый вариант программы
Второй вариант программы
Третий вариант программы

Глава 27. Боремся с дребезгом контактов

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

Глава 28. Мигающий светодиод

Глава 29. Бегущие огни

Постановка задачи
Схема
Алгоритм
Первый вариант программы
Второй вариант — используем один универсальный цикл

Глава 30. Альтернативные способы формирования задержки

Постановка задачи
Схема
Алгоритм
Первый вариант программы
Второй вариант программы

Глава 31. Работа с прерываниями по таймеру

Постановка задачи
Схема
Используем внешнюю библиотеку прерываний по таймеру
Алгоритм
Программа
Совместное использование таймера 0

Глава 32. Формирование звука

Глава 33. Ввод аналоговой информации

Глава 34. Вывод аналоговой информации

Широтно-импульсная модуляция
Простейший способ аналогового вывода
Схема
Алгоритм
Программа
Более сложный пример аналоговой индикации
Схема
Алгоритм
Программа

Глава 35. Передача данных из Ардуино на компьютер

Глава 36. Передача данных с компьютера на Arduino

Глава 37. Музыкальная шкатулка

Глава 38. Электронный замок с необычной логикой работы

Глава 39. Кодовый замок с музыкальным звонком

Часть VI. РАСШИРЯЕМ ФУНКЦИОНАЛЬНОСТЬ ПЛАТ ARDUINO

Глава 40. Платы arduino: особенности и возможности

Плата Arduino Due
Плата Arduino Leonardo
Плата Arduino YUN
Плата Arduino Micro
Плата Arduino UNO
Плата Arduino Ethernet
Плата Arduino Duemilanove
Плата Arduino Diecimila
Плата Arduino Nano
Плата Arduino Mega
Плата Arduino Mega 2560
Плата Arduino ADK
Плата Arduino LilyPad
Плата Arduino Fio
Плата Arduino Mini
Плата Arduino Pro
Плата Arduino Pro Mini
Плата USB SerialLight адаптер

Глава 41. Arduino shields или платы расширения

Плата расширения Arduino WiFi
Плата расширения Xbee Shield
Плата расширения Arduino Motor
Плата расширения Ethernet Shield

Часть VII. ПОЛЕЗНАЯ ИНФОРМАЦИЯ ПО СОВРЕМЕННЫМ МИКРОКОНТРОЛЛЕРАМ

Приложение 1. Основные операторы языка Arduino

Главные функции
Управляющие операторы
Операторы цифрового ввода/вывода
Операторы аналогового ввода/вывода
Операторы времени
Расширенный ввод/вывод
Работа с последовательным портом

Приложение 2. Типы данных в Arduino IDE

Приложение 3. Сводная таблица команд Ассемблера микроконтроллеров AVR

Группа команд логических операций
Группа команд арифметических операций
Группа команд операций с разрядами
Группа команд сравнения
Группа команд операций сдвига
Группа команд пересылки данных
Группа команд управления системой
Группа команд передачи управления (безусловная передача управления)
Группа команд передачи управления (пропуск команды по условию)
Группа команд передачи управления (передача управления по условию)
Подводя итоги, или о виртуальном диске
Список литературы
Список ссылок на ресурсы сети Интернет, используемые в книге

Программирование микроконтроллеров для начинающих – 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 является конечный код, который может быть подгружен в МК.

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

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

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

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.

Ссылки

Руководство по 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 кабель.
  • В IDE выберите тип Arduino, который вы используете, через меню Tools (Инструменты) → Boards (Платы).
  • Теперь проверьте свой код, нажав на значок «галки» вверху окна 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 построена на микроконтроллере Atmega328P.

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

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

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

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

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

    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 Leonardo.

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

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

    Arduino Pro Mini

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

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

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

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

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

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

    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 в меню сервис в подменю программатор.

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

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

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

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

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

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

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

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

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

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

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

    Переходим от 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

    Уроки 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 из Калифорнийского университета

    Мой первый урок по языку программирования XOD IDE.

    Представляю первый мой урок по визуальному языку XOD IDE для микроконтроллеров. Язык разрабатывается российской компанией Амперка.

    Сайт языка программирования — https://xod.io/

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

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

    Как раз из нодов я написал библиотеки для аналогового датчика температуры LM35 https://xod.io/libs/vitaliysh/lm35-thermometer/lm35-thermome. и датчика освещенности i2c

    В следующих уроках я планирую рассказать как писать эти ноды для новичков.

    Не пинайте сильно. Это первый опыт. Сейчас подъезжает новый микрофон и звук будет лучше.

    Дубликаты не найдены

    У меня какая-то аллергия на HiASM\Blueprint подобное программирование, но для привлечения школоты к этой теме — хорошая штука! Ставлю плюс!)

    Зависит от сферы применения. Мне, как электронщику, удобно соединять элементы DSP — ассоциация с коммуникацией железных приборов.

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

    а я чет наоборот блоками бы поучился

    Как только блоков будет хотя бы пара десятков — взвоешь

    следующий шаг это простой СИ, не ардуиновский, на атмеле например, а потом только ассемблер =).

    Но, промышленные мк таки чаще блоками программируются

    Микроконтроллеров не совсем верно, точнее будет Ардуино. Причем еще большой вопрос, какие из Ардуино-плат поддерживаются.
    Тут по-русски чутка есть:
    https://xod.io/ru/docs/tutorial/

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

    Список большой. Я же пробовал на клонах arduino uno и leonardo. Но не нашел в нем недавно купленную Iskra Nano Pro. Оказывается для Iskra Nano Pro надо добавить в файл your_workspace/__packages__/extra.txt строчку https://raw.githubusercontent.com/amperka/iskra-boards/maste. И все заработало.

    Самое интересное это чтобы esp8266 взлетела.

    Она есть в виде модуля связи или как целевая борда?

    Тут можно посмотреть библиотеки под нее https://xod.io/libs/ и в самом XOD она есть в списке плат для загрузки.

    Спасибо, бро, пишет что есть!

    хм, видос не смотрел, но за инфу о такой ide плюс. подобное заинтересовало в unreal engine, мобыть за этим будущее? )

    DSP Robotics Flowstone удачно совмещает наглядность блочно-модульного программирования с гибкостью Руби и мощью Ассемблера. Мой текущий проект изнутри выглядит так (второй уровень вложения)

    Вот моя нода аналогового термометра LM35. Всего один блок и датчик работает. Снизу нода датчика находится отладочный нод для показа в реальном времени данных с датчика. Добавляем нод экрана, соединяем связью с нодом датчика и все. На LCD экране в первой строчке мы видим показания температуры.

    Дерзайте дальше, посмотрим, что из этого выльется!

    Спасибо. Микрофон сильно подвел и я не спец в видео и стримах.

    Ну раз не спец, то, может, статья со скриншотами? Откровенно говоря — ничего не видно из показываемого, вы ездите мышкой по экрану, что-то быстро открываете-закрываете, предлагаете посмотреть код на экране. Меня всегда удивляло, вы серьезно? Что там можно разглядеть?

    Сразу видно, что план своего выступления вы не составляли и перед съемкой не тренировались Много лишних слов, а информативность видео практически нулевая. Нельзя такое называть уроком. Мы должны с интересом смотреть, как вы собираете схему на макетной плате? Это же издевательство. Нельзя заранее это сделать было? А для новой схемы нажать на паузу. Вы рассказываете, что куда подключать, а проиллюстрировать это нарисованной схемой не вышло?

    Но, может, текстовый вариант урока лучше? С ним можно ознакомиться или это видео и есть — весь урок?

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

    Сообщества › Электронные Поделки › Блог › Программирование микроконтроллеров с нуля

    Здесь люди опытные, дайте пожалуйста дельный совет нам жаждущим познать этот таинственный язык.
    Пока читаю книжку «программирование микроконтроллеров Белов» и в перерывах сижу на данном блоге. Есть задумки кое какие, но нет опыта, НО ЕСТЬ ЖЕЛАНИЕ, ОГРОМНОЕ ЖЕЛАНИЕ!

    Смотрите также

    Метки: как научиться программировать микроконтроллеры?

    Комментарии 133

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

    Вам ехать или шашечки?

    Ну тогда в чем вопрос? Зачем ждать института, диплома и всего прочего? Пусть осваивает профессию и начинает работать) А захочет потом и диплом получит

    и что прям реально чтобы 16 летний ребенок освоил с помощью этой школы профессию и зарабатывал?

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

    Ну а сама эта школа хорошая?

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

    В общем на вашем месте я бы сдерживал порывы юности))

    Ну тогда в чем вопрос? Зачем ждать института, диплома и всего прочего? Пусть осваивает профессию и начинает работать) А захочет потом и диплом получит

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

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

    ты правильно говоришь, без диплома с ним никто всерьез общаться не станет!

    Как я изучал: 1) почитал блог easyelectronics.com 2) начал программировать на асме в графическом редакторе algoritm builder 3) потом перешёл на си так же в графическом редакторе flowcode avr можно создавать полноценные проекты концентрируясь на алгоритме программы а не на исправлении ошибок в коде 4) ВСЕ проекты сначала трестируешь в программе Proteus
    Я все ))) спасибо за внимание!

    Сколько людей столько мнений…
    Внесу пять копеек.
    Нападки на arduino — зря. Больше похоже на желание самоутвердиться (дескать я пишу на асме, а остальные — школота). Прекрасная платформа для старта. Просто когда начинаешь делать что-то серьезнее — понимаешь, что их библиотеки далеко не оптимальны (80 тактов на простейший digitalwrite — это конечно перебор, но начать проще все же с ним, а не с прямым обращением к портам), и постепенно от них уходишь в сторону чистого кода — ассемблер, си… Порой можно в одной программе и совместить… и асм и что то более высокоуровневое… Главное правда не думать, что на все случаи жизни есть готовый скетч — а читать документацию по самому AVR, периферии и прочему прочему прочему… тем более половина библиотек дуиновских по сути обертка пары функций. И да, алгоритмы надо знать и уметь описывать. А то никаких ресурсов железа не хватит.

    С точки зрения удобства прототипирования — вот тут arduino даст фору многим. Ибо удобно. Да, да. Именно удобно. Платы наподобие pro mini к тому же — неплохое решение чтоб не утюжить текстолит для простейшей поделки. Не так ли? По сути — распаянный МК с тактовым генератором — и ничего лишнего. А всякие nano избавляют от проблем с программаторами — не надо ничего покупать, настройка — минимальная… Честно скажу, именно необходимость иметь отдельный программатор остановила меня от изучения 51й серии еще в конце 90х, да и до сих пор не очень то с ней дружу.

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

    Простенькие мигалки-свистелки на платформе arduino делаются быстро, получается сразу виден результат — а это неслабый стимул для начинающего — ведь куда приятнее получить хоть какой-то результат быстро, а не через несколько дней. Главное — суметь эту платформу перерасти. А хейтерам платформы — зря вы так. Эта вещь — для того, чтобы упростить первые шаги в освоении микроконтроллеров. Так сказать — на затравку. И тут ей равных нет…

    Надеюсь ход мысли понятен…

    Попробую как новичек новичку:
    1. Я начал с видеоуроков по CodeVsion AVR мне кажется с нуля си проще и логичнее. Нашел уроки кокого то дядьки на ютубе расказывает колхозно медленно но доступно даже если в корне не знаешь языка.
    Вот ссылочка m.youtube.com/playlist?li…P2ZJQNIFv0zo_tnPV8q84JlzJ
    2. Читать пытался печатную литературу… Очень нудно и требует базовых знаний языков програмироания очень много «воды». Читаю даташиты (инструкции мк) сморю схожие готовые проекты, консультируюсь в данной группе.
    3. Проекты сначала проверяю в программе Proteus 7/8. Затем рекомендую собрать простенькую «отладочную плату». (Плата на которой имеется Микроконтроллер к которому подведено питание, а от мк выведены порты) МК не рекомендую жестко запаиать, а сделать через монтажную планку. Это позволит собрат проект быстрым навеным монтажем проверить его работоспособность, и если все устраивает собирай в корпусе.

    Если что пиши в ВК vk.com/vityan92

    Спасибо, буду на связи :)

    А можно заключу всё ниже изложенное? :)

    А здорово мы человеку помогли!
    Теперь у него точно есть определённый взгляд на данную тему!
    И в принципе можно уже браться за дело, со всем осознанием такового :)

    PS это всего лишь шутка!

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

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

    Hack van de dam

    Я бы мог начать статью словами «Почему Arduino – отстой» или «Почему 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.

    Ссылки

    Перевод: Vadim по заказу РадиоЛоцман

    Среды разработки микроконтроллеров – для новичков в радиоделе

    Несколько слов о среде разработки AVR-контроллеров AVRStudio Её можно бесплатно скачать с сайта разработчика микроконтроллеров Atmel Помимо ассемблера среда разработки поддерживает кодирование на языке Си с помощью бесплатного компилятора GCC Кстати современная версия компилятора поддерживает и С++ Это, скорее, важно для программистов, привыкших работать с этой версией языка Си

    Как и все современные среды разработки, AVRStudio имеет отладчик и работает с рядом программаторов Так что, если вы остановили свой выбор на микроконтроллере AVR, если решили купить программатор, то есть смысл выбрать тот, что работает со средой программирования AVRStudio

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

    одном свойстве этого модуля А сейчас осталось упомянуть, что сегодня доступна 5 версия AVRStudio

    Рис 164 Среда программирования AVRStudio 40

    Для PIC-контроллеров можно использовать среду разработки от производителя Microchip MPLAB Сейчас появилась версия MPLAB X IDE, но и предыдущие версии обеспечивают всем необходимым для написания кода на ассемблере или Си, отладки и загрузки в микросхему, используя один из программаторов, с которым работает MPLAB

    Рис 165 Среда программирования MPLAB

    Предыдущие версии MPLAB (и AVRStudio) вполне успешно работали в Linux, хотя в Linux есть и свои среды разработки микроконтроллеров, работающие с бесплатными компиляторами языков высокого уровня

    Многие начинающие работать с микроконтроллерами считают, что язык программирования, например Си, выучить сложнее, чем ассемблер Всё наоборот И ещё одна ошибка начинающих – они считают, что язык Basic, это совсем для «маленьких» Отнюдь

    Рис 166 Среда разработки программ для PIC-контроллеров на языке Basic

    Любой язык программирования предназначен к написанию кода программы Самый трудный уровень программирования – машинные коды Более лёгкий способ – использование ассемблера Но легче освоить языки высокого уровня И все языки высокого уровня давно отошли от своих первоначальных видов, перестав быть языками для начинающих или языками для опытных программистов Сегодня выбор языка программирования, как и выбор микроконтроллера, обусловлен поставленной задачей и предыдущим опытом работы

    Почему я часто советую использовать графический язык программирования

    Любая программа вначале описывается Удобно это делать в графическом виде Как это давно используется в электрических схемах: графическое описание соединения всех компонентов устройства Вот пример среды разработки, использующей графический язык программирования Эта среда разработки называется Flowcode Чем она ещё удобна, так это возможностью одни и те же программы применить как к микроконтроллерам AVR, так и к PIC-контроллерам Достаточно готовую программу, написанную для одного вида контроллера, импортировать в программу для другого вида

    И, поскольку трансляция в файл загрузки происходит в несколько этапов, вы получаете код, написанный на языке Си, и код на ассемблере То есть, изучая эти языки, вы имеете возможность вначале создать простую программу, проверить её работу на макетной плате, а затем обратиться к коду на другом языке, который использовать в другой среде разработки Правка, как правило, из- за разных компиляторов, требуется незначительная (если потребуется) Так Flowcode может работать с компилятором HI-TECH, с которым работает и программа MPLAB

    Рис 167 Среда разработки Flowcode

    Единственный, но очень важный недостаток этой среды разработки – её нужно покупать Однако, делая первые шаги, вполне можно использовать демо-версию Есть и бесплатный аналог этой среды разработки, но для Linux Называется программа KTechlab Помимо работы с контроллерами она позволяет ознакомиться с работой многих электронных компонентов Пока предпочтительней использовать не последнюю, а предыдущую (на сегодня) версию Или проделать с ней то, о чём я рассказывал в своей книге «Неоконченный рассказ о программе KTechlab»

    Рис 168 Среда разработки KTechlab

    И пример программы в этой среде разработки:

    Рис 169 Пример программы в среде KTechlab

    Среда разработки KTechlab позволяет отладить и проверить работу простых устройств, не выходя из программы Как и программа Flowcode Более сложные решения, дополненные другими элементами, удобно проверять в программе ISIS (Proteus), которую мы неоднократно использовали выше

    Рис 1610 Проверка и отладка микроконтроллера в программе ISIS

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

    Будучи развитием цифровой техники, микроконтроллеры в последнее время становятся популярны и в среде тех, кто привержен аналоговой технике Встроенные в микроконтроллеры модули АЦП и ЦАП, позволяют на базе микроконтроллера сделать, например, прекрасный ревербератор Который… Все вы знаете, что большая часть компакт-дисков с музыкой – это оцифровка виниловых грампластинок То есть, несут стерео запись Если вы любитель музыки, способный держать в руках паяльник, то можете поэкспериментировать с этими записями, используя разностный сигнал стереоканалов, пропущенный через ревербератор Получается очень интересная звуковая картина даже у знакомых произведений

    Микроконтроллеры очень удобно применять в разных устройствах автоматики Будет ли это цифровой замок или устройство для аквариума

    Конечно, намереваясь что-то разработать и собрать своё, следует руководствоваться здравым смыслом Приведу такой пример Для пополнения лаборатории мы задумали собрать генератор Для этого достаточно использовать одну микросхему серии 155 стоимостью 50-60 рублей Если вам нужен генератор одной частоты, то остальные детали обойдутся ещё рублей в 50 Но, если вы хотите получить несколько частот на выходе генератора, вам понадобится переключатель Что обойдётся вам ещё рублей в 200 Я заглянул сейчас на сайт агентства «Десси»: вы можете заказать по почте микроконтроллер PIC16F628A, который обойдётся в 100 рублей

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

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

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

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

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


    Если вы решили заняться электроникой, то вам обязательно понадобится осциллограф Ранее я несколько раз упоминал модуль Arduino, рассказывая о микроконтроллерах Причина в том, что модуль совместно с программой XOscillo (если верить автору программы) позволяет получить осциллограф, работающий до частоты в 7 кГц

    Рис 171 Работа программы XOscillo с модулем Arduino

    Большие возможности и выше наблюдаемую частоту вы получите, потратив около 2000 рублей:

    Рис 172 USB осциллограф-приставка

    Я уже упоминал модель осциллографа-приставки к компьютеру PCS100A Этот одноканальный осциллограф позволит вам наблюдать сигналы до 12 МГц Стоит он около 5000 рублей Единственный недостаток – необходимость иметь на компьютере LPT-порт

    Некогда, довольно давно, я потратил более своей месячной зарплаты на покупку осциллографа С1-94 Мною двигала не столько необходимость, на работе был осциллограф посерьёзнее, сколько любопытство и пристрастие к разного рода приборам Прошло много лет, но я ни разу не пожалел о содеянном Осциллограф работает и сейчас, хотя сейчас я пользуюсь им редко Недавно я повторил этот шаг, обзаведясь похожим прибором:

    Рис 173 Осциллограф-приставка PCSGU250

    Приобрёл я его в интернет-магазине «Чип и Дип», обошёлся он мне примерно в 15000 рублей, но я надеюсь, что и в этот раз не пожалею о покупке Именно этот прибор я использую в дальнейшем рассказе

    Для проведения экспериментов нам понадобится макетная плата, на которую я советую добавить панельку под микросхему DIP18 Её можно использовать для установки микросхем и других компонентов, нужных для проведения опытов

    Я использую обычный паяльник: 25 Вт, 220 В Если вы будете экспериментировать с полевыми транзисторами или микросхемами, содержащими такие транзисторы, то можете рискнуть, не принимая никаких дополнительных мер, либо прочитать про эти дополнительные меры и воспользоваться рекомендациями

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

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

    Рис 174 Жало паяльника после долгой работы

    Пора взять в руки напильники и привести медное жало паяльника в порядок

    Я не исключаю, что современные паяльники не требуют такой обработки Но иногда от паяльника требуется добавить капельку припоя размером с булавочную головку Для этого нужно, чтобы припой слегка «тянулся», когда его берёшь паяльником, а это у меня получается только с паяльником, у которого медное жало

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

    Рис 175 Исправленное жало паяльника

    Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

    Digitrode

    цифровая электроника вычислительная техника встраиваемые системы

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

    Современные тенденции программирования микроконтроллеров

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

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

    Языки программирования C и ассемблер

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

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

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

    MicroPython

    Python – это многофункциональный интерпретируемый язык, известный своей простотой, понятностью и универсальностью. Эти функции также делают язык слишком большим для микроконтроллеров. Однако с помощью кампании на Kickstarter в 2013 году физик Дэмиен Джордж смог адаптировать Python в уменьшенную версию MicroPython, которая подходит для использования на микроконтроллере.

    Код MicroPython является открытым исходным кодом под лицензией MIT. Язык работает на голом железе микропроцессора, используя небольшое подмножество функций стандартной библиотеки Python. Он может работать, используя только 256 КБ flash-памяти и 16 КБ ОЗУ, но при этом он хорошо совместим с обычным Python.

    Первоначально разработанный для работы на системах на базе ARM, включая BBC micro:bit, Adafruit Circuit Playground Express и MicroPython PyBoard, он также стал доступен для других процессоров, включая ESP8266 и ESP32.

    MicroPython дает преимущества при прототипировании сложных проектов. Например, на ESP8266 создание проектов Интернета вещей можно выполнить несколькими простыми вызовами функций, чтобы подключить проект на MicroPython к локальной точке Wi-Fi и начать потоковую передачу информации MQTT.

    Blockly

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

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

    После создания совокупности блоков пользователи могут экспортировать свой код Blockly в несколько языков, включая javascript, Python, PHP, Lua и Dart. Одним из преимуществ системы Blockly является то, что ошибки практически невозможны, поскольку блоки требуют определенных соединений и не позволяют соединяться несовместимым блокам.

    Хотя этот метод программирования доступен на многих платформах, включая Micro Bit и Adafruit Circuit Playground Express, он не предназначен для использования в качестве конечного коммерческого продукта. Однако это очень полезно на этапах создания прототипа, особенно если требуется подтверждение концепции, а изучение особенностей устройства может занять слишком много времени (например, регистры, биты конфигурации и конфигурация IDE).

    Arduino C++

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

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

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

    Преимущество использования Arduino C++ состоит в том, что он подходит для коммерческих сред, работает быстрее, чем более крупные языки, такие как Python, и обладает высокой переносимостью. Компиляция кода на ядре ARM первоначально для Uno автоматически выполняется библиотекой с использованием универсальных функций.

    BASIC

    BASIC – это язык, который впервые появился в 60-х годах и достиг своего расцвета с появлением персональных компьютеров в 80-х годах. BASIC (аббревиатура для универсального символического кода инструкции для начинающих или Beginner’s All-Purpose Symbolic Instruction Code) по-прежнему используется до сих пор из-за своей простоты и интерпретируемой природы, которая позволяет разработчику сосредоточиться больше на оборудовании, а не на программном обеспечении.

    При использовании на микроконтроллере BASIC интерпретируется, что приводит к снижению производительности. Тем не менее, язык имеет преимущество в том, что он очень переносим. Любой код, написанный на бейсике, будет работать на любом устройстве с интерпретатором бейсика.

    Два примера использования BASIC на микроконтроллерах – это BASIC Stamp (производства Parallax) и PICAXE, которые производятся компанией PICAXE и используют микроконтроллеры PIC Microchip. BASIC является хорошим языком для создания прототипов и даже разработки аппаратного обеспечения, но его следует избегать в коммерческих продуктах из-за его низкой скорости и высокого энергопотребления.

    Выводы

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

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

    ОБОРУДОВАНИЕ
    ТЕХНОЛОГИИ
    РАЗРАБОТКИ

    Блог технической поддержки моих разработок

    Урок 4. Основы программирования Ардуино на языке C.

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

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

    Структура программы Ардуино.

    Структура программы Ардуино достаточно проста и в минимальном варианте состоит из двух частей setup() и loop().

    // код выполняется один раз при запуске программы

    // основной код, выполняется в цикле

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

    После завершения setup() управление переходит к функции loop(). Она в бесконечном цикле выполняет команды, записанные в ее теле (между фигурными скобками). Собственно эти команды и совершают все алгоритмические действия контроллера.

    Первоначальные правила синтаксиса языка C.

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

    < >фигурные скобки определяют блок функции или выражений. Например, в функциях setup() и loop().

    /* … */ блок комментария, обязательно закрыть.

    /* это блок комментария */

    // однострочный комментарий, закрывать не надо, действует до конца строки.

    // это одна строка комментария

    Переменные и типы данных.

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

    Тип данных Разрядность, бит Диапазон чисел
    boolean 8 true, false
    char 8 -128 … 127
    unsigned char 8 0 … 255
    byte 8 0 … 255
    int 16 -32768 … 32767
    unsigned int 16 0 … 65535
    word 16 0 … 65535
    long 32 -2147483648 … 2147483647
    unsigned long 32 0 … 4294967295
    short 16 -32768 … 32767
    float 32 -3.4028235+38 … 3.4028235+38
    double 32 -3.4028235+38 … 3.4028235+38

    Типы данных выбираются исходя из требуемой точности вычислений, форматов данных и т.п. Не стоит, например, для счетчика, считающего до 100, выбирать тип long. Работать будет, но операция займет больше памяти данных и программ, потребует больше времени.

    Объявление переменных.

    Указывается тип данных, а затем имя переменной.

    int x; // объявление переменной с именем x типа int
    float widthBox; // объявление переменной с именем widthBox типа float

    Все переменные должны быть объявлены до того как будут использоваться.

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

    • Переменные, объявленные в начале программы, до функции void setup(), считаются глобальными и доступны в любом месте программы.
    • Локальные переменные объявляются внутри функций или таких блоков, как цикл for, и могут использоваться только в объявленных блоках. Возможны несколько переменных с одним именем, но разными областями видимости.

    int mode; // переменная доступна всем функциям

    void setup() <
    // пустой блок, начальные установки не требуются
    >

    long count; // переменная count доступна только в функции loop()

    При объявлении переменной можно задать ее начальное значение (проинициализировать).

    int x = 0; // объявляется переменная x с начальным значением 0
    char d = ‘a’; // объявляется переменная d с начальным значением равным коду символа ”a”

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

    int x; // переменная int
    char y; // переменная char
    int z; // переменная int

    z = x + (int) y; // переменная y явно преобразована в int

    Арифметические операции.

    = присваиваниее
    + сложение
    вычитание
    * произведение
    / деление
    % остаток от деления

    Операции отношения.

    == равно
    != не равно
    больше
    = больше или равно

    Логические операции.

    && логическое И
    || логическое ИЛИ
    ! логическое НЕ

    Операции над указателями.

    * косвенная адресация
    & получение адреса переменной

    Битовые операции.

    & И
    | ИЛИ
    ^ ИСКЛЮЧАЮЩЕЕ ИЛИ
    ИНВЕРСИЯ
    > СДВИГ ВПРАВО

    Операции смешанного присваивания.

    ++ + 1 к переменной
    — 1 к переменной
    += сложение
    -= вычитание
    *= умножение
    /= деление
    %= остаток от деления
    &= битовое И
    |= битовое ИЛИ

    Выбор вариантов, управление программой.

    Оператор IF проверяет условие в скобках и выполняет последующее выражение или блок в фигурных скобках, если условие истинно.

    if (x == 5) // если x=5, то выполняется z=0
    z=0;

    if (x > 5) // если x > 5, то выполняется блок z=0, y=8;

    IF … ELSE позволяет сделать выбор между двух вариантов.

    if (x > 5) // если x > 5, то выполняется блок z=0, y=8;
    <
    z=0;
    y=8;
    >
    else // в противном случае выполняется этот блок
    <
    z=0;
    y=0;
    >

    ELSE IF – позволяет сделать множественный выбор

    if (x > 5) // если x > 5, то выполняется блок z=0, y=8;
    <
    z=0;
    y=8;
    >

    else if (x > 20) // если x > 20, выполняется этот блок
    <
    >

    else // в противном случае выполняется этот блок
    <
    z=0;
    y=0;
    >

    SWITCH CASE — множественный выбор. Позволяет сравнить переменную (в примере это x) с несколькими константами (в примере 5 и 10) и выполнить блок, в котором переменная равна константе.

    case 5 :
    // код выполняется если x = 5
    break;

    case 10 :
    // код выполняется если x = 10
    break;

    default :
    // код выполняется если не совпало ни одно предыдущее значение
    break;
    >

    Цикл FOR. Конструкция позволяет организовывать циклы с заданным количеством итераций. Синтаксис выглядит так:

    for ( действие до начала цикла;
    условие продолжения цикла;
    действие в конце каждой итерации ) <

    Пример цикла из 100 итераций.

    Цикл WHILE. Оператор позволяет организовывать циклы с конструкцией:

    while ( выражение )
    <
    // код тела цикла
    >

    Цикл выполняется до тех пор, пока выражение в скобках истинно. Пример цикла на 10 итераций.

    x = 0;
    while ( x
    <
    // код тела цикла
    x++;
    >

    DO WHILE – цикл с условием на выходе.

    do
    <
    // код тела цикла
    > while ( выражение );

    Цикл выполняется пока выражение истинно.
    BREAK – оператор выхода из цикла. Используется для того, чтобы прервать выполнение циклов for, while, do while.

    x = 0;
    while ( x
    <
    if ( z > 20 ) break; // если z > 20, то выйти из цикла
    // код тела цикла
    x++;
    >

    GOTO – оператор безусловного перехода.

    goto metka1; // переход на metka1
    ………………
    metka1:

    CONTINUE — пропуск операторов до конца тела цикла.

    x = 0;
    while ( x
    <
    // код тела цикла
    if ( z > 20 ) continue; // если z > 20, то вернуться на начало тела цикла
    // код тела цикла
    x++;
    >

    Массивы.

    Массив это область памяти, где последовательно хранятся несколько переменных.

    Объявляется массив так.

    int ages[10]; // массив из 10 переменных типа int

    float weight[100]; // массив из 100 переменных типа float

    При объявлении массивы можно инициализировать:

    Обращаются к переменным массивов так:

    x = ages[5]; // x присваивается значение из 5 элемента массива.
    ages[9] = 32; // 9 элементу массива задается значение 32

    Нумерация элементов массивов всегда с нуля.

    Функции.

    Функции позволяют выполнять одни и те же действия с разными данными. У функции есть:

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

    Описывается пользовательская функция вне функций setup() и loop().

    void setup() <
    // код выполняется один раз при запуске программы
    >

    void loop() <
    // основной код, выполняется в цикле
    >

    // объявление пользовательской функции с именем functionName
    type functionName( type argument1, type argument1, … , type argument)
    <
    // тело функции
    return();
    >

    Пример функции, вычисляющей сумму квадратов двух аргументов.

    int sumQwadr (int x, int y)
    <
    return( x* x + y*y);
    >

    Вызов функции происходит так:

    d= 2; b= 3;
    z= sumQwadr(d, b); // в z будет сумма квадратов переменных d и b

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

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

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

    Рекомендации по оформлению программ на языке C.

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

    Имена в языке C.

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

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

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

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

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

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

    Цукерберг рекомендует:  Unity - Нужна помощь в unity3d
  • Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих