mbed

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

    NXP LPC11U24    NXP LPC1768
   
mbed NXP LPC11U24
 
mbed NXP LPC1768
 Ядро    
 Архитектура  ARM Cortex M0          ARM Cortex M3
 Частота  48МГц  96МГц
 FLASH  32Кб  512Кб
 RAM  8Кб  32Кб
 Энергопотребление  1-16мА  60-120мА
 Периферия    
 Ethernet  нет  да
 USB host  нет  да
 USB device  да  да
 SPI  2  2
 I2C  1  2
 CAN  нет  2
 Аналоговые входы  6  6
 ШИМ  8  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, тоже лишним в хозяйстве не бывает. 


   Содержимое коробки mbed LPC1768   mbed LPC1768   mbed LPC1768


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

Распиновка

mbed LPC1768 распиновка (pinouts)   mbed LPC11U24 распиновка


mbed IDE

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

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

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

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

Компилятор mbed. Импорт библиотек.
Все библиотеки хранятся в 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 Arduino Uno
 0 .. 255 char byte
 -128 .. 127 signed char char
 0 .. 65535 unsigned short word
 -2,147,483,648 .. 2,147,483,647 int long

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

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

Ресурсы

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

Comments