mbed

Линейка платформ mbed на момент написания статьи представлена двумя моделями на базе 32-битных микроконтроллеров NXP LPC11U24 и  NXP LPC1768 c архитектурой ARM Cortex M0 и M3 соответственно. Второй mbed обладает более высокой частотой, увеличенным размером FLASH и RAM памяти, а также дополнительными интерфейсами для периферии. Ниже представлена сравнительная таблица двух этих устройств.

 

 

 Ядро

 Архитектура

 Частота

 FLASH

 RAM

 Энергопотребление

 Периферия

 Ethernet

 USB host

 USB device

 SPI

 I2C

 CAN

 Аналоговые входы

 ШИМ

 Аналоговые выходы

  NXP LPC11U24 

 

  NXP LPC1768

 

 

 ARM Cortex M0        

 48МГц

 32Кб

 8Кб

 1-16мА

 

 нет

 нет

 да

 2

 1

 нет

 6

 8

 нет

 

 ARM Cortex M3

 96МГц

 512Кб

 32Кб

 60-120мА

 

 да

 да

 да

 2

 2

 2

 6

 6

 1

Покупка

Рекомендованная цена mbed составляет $45 для LPC11U24 и $59 для LPC1768. На официальном сайте mbed имеется внушительный список дистрибьюторов, включая таких известных как sparkfun, robotshop, seeed и pololu. Конечная цена немного варьируется в рамках плюс-минус $2, что непринципиально. Другой вопрос - это доставка. Серьезные интернет магазины практически не занимаются бесплатной доставкой, и вам придется выложить еще как минимум $10 за доставку.

Я пробовал также поискать mbed на ebay, но нашел всего одно предложение для старшей модели и два предложения для LPC11U24. Причем цена на первую составила $73 с доставкой, что вообще не выглядит привлекательным вариантом. Вероятно, если бы mbed использовал обычный локальный компилятор, без необходимости авторизации устройства на официальном сервере, китайцы бы непременно выпустили серию дешевых клонов. Но пока, к сожалению, остается ждать пока система наберет популярности и цена на нее упадет вследствие увеличения объемов производства.

В итоге, я заказал свой mbed на сайте pololu. Цена там соответствует рекомендуемой, а в случае LPC11U24 даже ниже на 5 центов! :)

Поставка

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

         

Устройство изготовлено в форм-факторе DIP-40 и имеет габариты 54мм x 26мм. Расстояние между выводами 2.54мм (0.1''), а расстояние между рядами - 2.27 (0.9''). Вес - 12г.

Распиновка

   

mbed IDE

Для программирования mbed используется оригинальный веб-ориентированный компилятор, привязанный к личному аккаунту пользователя. Бытует мнение что компилировать программы для МК с помощью веб-сервиса как минимум не кошерно. Я тоже поначалу сомневался в правильности такого подхода, однако изменил свое мнение как только начал работать с mbed. Компилятор оказался весьма удобным с точки зрения пользовательского интерфейса. По крайней мере, удобнее Arduino IDE. Главное же его преимущество - это отсутствие какой либо зависимости от конкретной машины. Вам не нужно думать о том установлен ли в локальной системе сам IDE и все нужные библиотеки. Достаточно просто подключить mbed по USB шлангу к компьютеру и закачать на него скомпилированный скетч как на обычную флешку. Удобно черт побери. Любой гуманитарий справится с такой примитивной задачей.

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

Библиотеки и контроль версий

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

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

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

В mbed IDE также имеется встроенная поддержка контроля версий. Это конечно не git, но все основные функции подобных систем здесь имеются:

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

В mbed IDE используется всё тот же синтаксис C++, как в Arduino. Однако в семантике кода и структуре программы имеется ряд отличий.

1) Первое что бросается в глаза - это отсутствие разделения на методы setup и loop. В mbed есть только стандартный main.

2) Для выставления на цифровом, аналоговом, либо ШИМ выходе требуемого значения, достаточно использовать оператор присваивания. Например чтобы зажечь штатный светодиод, следует воспользоваться следующей программы:

Hello world!

#include "mbed.h"

DigitalOut myled(LED1);

int main() {

    myled = 1;

}

То же самое касается входов. В следующем примере светодиод начнет мигать.

Blink

#include "mbed.h"

DigitalOut myled(LED1);

int main() {

    while(1) {

        myled = !myled;

        wait(0.2);

    }

3) Как вы уже заметили, вместо delay здесь используется оператор wait, который имеет несколько клонов: wait_ms и wait_us, которые задают миллисекунды и микросекунды ожидания соответственно.

4) Для вывода строки в последовательный порт, файл, или даже на LCD дисплей, используется известный оператор printf (или fprintf для файла), что удобнее "ардуиновского" print.

5) Чтобы инициализировать последовательный порт связанный с USB, следует использовать стандартный конструктор Serial, но со специальными пинами в качестве аргументов. Следующая программы каждую секунду выводит в последовательный порт строку "0.1234".

Последовательный порт

#include "mbed.h"

Serial pc(USBTX, USBRX);

int main() {

    float x = 0.1234;

    while(1) {

        pc.printf("%.4f", x);

        wait(1);

    }

}

6) Поскольку mbed использует 32-битный процессор, типы данных здесь имеют больший размер чем у 8-битного Arduino. Небольшая таблица основных различий представлена ниже:

Также в mbed поддерживается лютый тип long long - -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807

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

Ресурсы

Веб-сайт проекта mbed: http://mbed.org/