· 

Новое поколение микроконтроллеров и программных средств, в чем отличие?

А.Григорьев

Изначально статья опубликована на Новаторе

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

 


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

 


Чтобы на практике увидеть, как эта задача реализуется с использованием разных микроконтроллеров и сред программирования, возьмем следующее: платы Arduino Uno, Iskra JS, BBS Micro:bit, Robotdyn SAMD21 M0 (Arduino M0 совместимую), а также модуль светодиодной сборки. 

Светодиоды


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

 


Arduino Uno

 


При интерактивном управлении платой Arduino Uno из среды mBlock for PC всё реализуется достаточно просто и привычными методами. Почти в любом Scratch проекте нам приходится организовывать несколько циклов для решения разных задач. Воспользуемся этой возможностью и сейчас. Светодиод, подключенный к пину 11, вспыхивает на 0.3 секунды и делает паузу в 1.2 секунды, а подключенный к пину 12, вспыхивает на 0.7 секунды и делает паузу в 2 секунды.

Рис. 2


А в этом примере светодиод на пине 12 сигналит буквой «А» азбуки Морзе, всё выглядит тоже не особо сложно.

Рис. 3

 

 

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

 

Попробуем написать программу для автономной работы на плате Arduino. Мы можем использовать лишь один главный программный цикл! И вынуждены прибегнуть к парадигме автоматного программирования.
ru.wikipedia.org/wiki/Автоматное_программирование

Рис. 4


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

 


Iskra JS

 


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

 

Мигаем двумя светодиодами, программная среда Espruino Web IDE.

Рис. 5


Второй светодиод сигналит буквой «А».

Рис. 6


Совсем «интуитивным» такое программирование назвать нельзя, к сожалению. Да и очевидно, что использование планировщика сопряжено с множеством «подводных камней». Но прогресс налицо, у нас уже "почти" два главных программных цикла!

 


BBC Micro:bit

 


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

 


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

 


Мигаем двумя светодиодами, программная среда Microsoft MakeCode.

Рис. 7


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

 


Второй светодиод сигналит буквой «А».

 


 

Рис. 8

 

 

Robotdyn SAMD21 M0

 


Описанным ниже способом можно управлять не только платой Robotdyn SAMD21 M0, но и самыми разными другими 32-разрядными микроконтроллерами: Arduino Due, Arduino Zero, ESP8266, ESP32, тем же BBC Micro:bit, Calliope, Adafruit Circuit Playground Express и т.д. Необходимым условием является лишь возможность загрузки на плату специальной прошивки, виртуальной машины MicroBlocks.
http://microblocks.fun/

 


Мигаем двумя светодиодами

 


 

Рис. 9


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

 


Второй светодиод сигналит буквой «А».

 


Рис. 10

 


О возможностях новых сред программирования, в особенности MicroBlocks, можно писать долго. Мы являемся свидетелями радикального прорыва в области информационных технологий. Маленькая микросхема с вычислительными способностями, сопоставимыми с IBM PC AT, плюс визуальные средства разработки, доступные ребенку! Есть над чем задуматься...
www.lab169.ru/2017/10/06/умные-вещи-новый-виток-развития-технологий/

 


В заключение не могу в очередной раз не процитировать Сеймура Пейперта. 

 


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

 


Эти слова были написаны в 1980 (!!!) году. В 2002 году появилась визуальная среда Scratch, реализующая параллельную обработку на персональных компьютерах того времени. А в наши дни "мультиобработка" стала доступной и на микроконтроллерах.

 

 

 

P.S.

 

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

 

В первом случае мы при старте программы создаем в планировщике периодически выполняемое задание, и каждый раз при старте этого задания включается светодиод и создается новое задание планировщика для отсроченного выключения светодиода. Соответствующая программа для управления двумя светодиодами в текстовом виде выглядит вот так.

Рис. 11


Во втором случае все эти "мудрёности" не нужны, в текстовом виде программа в среде MakeCode выглядит вот так.

Рис. 12