
Chi ha provato a utilizzare un ambiente di sviluppo per microprocessori, sa che quest'operazione spesso comporta qualche difficoltà, soprattutto per chi è alle prime armi. Certo, Arduino ha portato una ventata di freschezza e di novità in questo settore, tuttavia esistono sul mercato delle soluzioni alternative, come ad esempio la piattaforma mbed, basata su un microcontrollore ARM di NXP.
Introduzione
Realizzare un progetto basato su un microprocessore di ultima generazione è senza ombra di dubbio un'esperienza appagante, ma può anche essere un'esperienza per certi versi frustrante quando le difficoltà che inevitabilmente si incontrano sembrano divenire insormontabili. Maggiore è la potenza del microcontrollore, maggiore è la complessità dello strumento di sviluppo. E' una regola generale, che spesso comporta una fase iniziale di "apprendistato", di studio e di approfondimento della documentazione, prima di poter essere effettivamente operativi (impostare correttamente i percorsi sul disco utilizzati dallo strumento, modificare opportunamente i file per il linker, scrivere/modificare i makefile, studiare/verificare le varie opzioni del compilatore, ecc. ecc.). Contrapposta a questa filosofia di "prototipazione lenta", è nata e si è sviluppata in varie forme la filosofia della "prototipazione veloce", il cui obiettivo è appunto quello di arrivare il più velocemente possibile a un'applicazione completa e funzionante. In questo articolo esamineremo una piattaforma completa di sviluppo basata sulla MCU LPC con core ARM di NXP. Il modulo hardware, mostrato nell'immagine di apertura dell'articolo, ha dimensioni molto compatte e contiene un microcontrollore della famiglia LPC basato sul core ARM e una porta USB. Sono inoltre presenti diversi segnali di I/O e interfacce di comunicazione (a seconda del modello): Ethernet, USB, CAN, UART, SPI, I2C, input analogici, e uscite PWM.
Come funziona questo strumento? E' molto semplice, basta collegare il modulo hardware a un PC tramite un cavo USB e disporre di una connessione Internet.
Perchè serve la connessione a Internet? Semplice, il tool di sviluppo è on-line, ed è accessibile tramite un comune browser per il web. Il PC riconoscerà il modulo come un'unità di memoria USB (come se si trattasse di una comune "chiavetta" USB) e assocerà ad esso un file HTML. Aprendo questo file all'interno del browser, sarà poi possibile accedere allo strumento di sviluppo on-line, scrivere il codice, compilarlo, e scaricarlo sul modulo hardware sempre tramite il collegamento USB. Un piccolo reset dell'apparato (basta premere il tasto blu visibile nelle immagini) e via, l'applicazione andrà subito in esecuzione!
L'hardware
Entrambe le schede di sviluppo (NXP LPC11U24 visibile a sinistra, e NXP LPC1768 a destra) hanno un connettore di tipo DIP a 40-pin con passo da 0,1 pollici, adatto a eseguire una prototipazione con breadboard, stripboard, e basette millefori senza dover ricorrere ad alcuna saldatura. L'interfaccia USB di cui sono dotate le schede ha le stesse funzionalità di una normale memoria flash USB: è sufficiente trascinare sull'unità (la board di sviluppo) il file binario dell'applicazione per eseguire il trasferimento fisico del programma. Questa funzionalità è supportata sui sistemi operativi Windows, MAC OS X, e Linux, è pertanto "cross-platform" e, soprattutto, non richiede l'installazione di alcun driver. Il codice binario può essere generato utilizzando il compilatore on-line mbed, oppure, alternativamente, utilizzando un comune sistema di sviluppo come Keil uVision, Code Red, oppure GCC. E' anche disponibile il supporto per una porta seriale virtuale basata sulla stessa interfaccia USB, consentendo la comunicazione con un PC o con altre applicazioni che utilizzano il link seriale.
L'mbed NXP LPC11U24 (la board con la colorazione ocra, basata sul core Cortex-M0) è più adatta alle applicazioni a basso costo e a basso assorbimento (alimentazione a pile), in cui si utilizzi l'USB in modalità device. L'mbed NXP LPC1768 (la board con la colorazione blu, basata sul core Cortex-M3) è invece adatta alle applicazioni in cui sono richieste elevate prestazioni, l'utilizzo di un'interfaccia Ethernet, e/o USB in modalità host. L'immagine seguente mostra il pinout della board NXP LPC11U24, le cui caratterisitiche possono essere così sintetizzate:
- MCU NXP LPC11U24
- core a bassa potenza ARM Cortex-M0
- frequenza operativa pari a 48MHz, 8KB di memoria RAM, 32KB di memoria FLASH
- interfacce USB Device, 2xSPI, I2C, UART, 6xADC, GPIO
- fattore di forma adatto alla prototipazione
- package 54x26mm, connettore DIP a 40-pin, passo 0,1"
- alimentazione 5V dalla porta USB, oppure alimentazione esterna 4,5-9V, oppure alimentazione 2,4-3,3V con batterie
- programmatore integrato di FLASH con funzionalità "drag 'n' drop"
- ambiente di sviluppo disponibile on-line sul sito web mbed.org
- compilatore on-line molto performante
- SDK di alto livello per C/C++
- numerose librerie e progetti pronti per l'uso
Quest'altra immagine mostra invece il pinout della board mbed NXP LPC1768, le cui principali caratterisitiche sono:
- MCU NXP LPC1768
- core ad elevate prestazioni ARM Cortex-M3
- frequenza operativa pari a 96MHz, 32KB di memoria RAM, 512KB di memoria FLASH
- interfacce Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM,6xADC, GPIO
- fattore di forma adatto alla prototipazione
- package 54x26mm, connettore DIP a 40-pin, passo 0,1"
- alimentazione a 5V dalla porta USB, oppure alimentazione esterna 4,5-9V
- programmatore integrato di FLASH con funzionalità "drag 'n' drop"
- ambiente di sviluppo disponibile on-line sul sito web mbed.org
- compilatore on-line molto performante
- SDK di alto livello per C/C++
- numerose librerie e progetti pronti per l'uso
Nota importante: gli schematici e i datasheet di entrambe le board sono disponibili per la consultazione o il download sul sito mbed (link in fondo all'articolo).
L'SDK
Il Software Development Toolkit comprende un insieme di librerie e API già pronte per l'uso, in modo tale da velocizzare la fase di scrittura del codice dell'applicazione. L'SDK è completamente integrata con il compilatore (in modo del tutto analogo a quanto avviene per Arduino) ed è compatibile con la linea di sviluppo GCC. Quest'immagine mostra un utilizzo di alcune API della libreria SPI (si noti la semplicità e l'intuitività del codice):
Questo video, invece, mostra come in pochissimi passi sia possibile realizzare una piccola applicazione utilizzando il sistema di sviluppo on-line, compilarla, e metterla in esecuzione su una board mbed:
La piattaforma mbed può inoltre contare su un'ampia community di appassionati di elettronica, sempre pronti a fornire assistenza e ad accrescere continuamente la già ricca dote di librerie e di esempi applicativi. L'immagine seguente mostra l'architettura del sistema mbed, partendo dal livello più basso (l'hardware) sino ad arrivare al codice applicativo scritto dall'utente finale (si noti l'apporto considerevole fornito dalla Community, un fattore comune al mondo Arduino).


Da quando è uscita questa piattaforma mBed, mi è subito piaciuta.
L’idea base sembra quella di Arduino, ma solo apparentemente, perche offre molta piu potenza (ARM Cortex) e la caratteristica della compilazione online, superando cosi tutte le barriere cross-platform 🙂
Al momento ho “per le mani” due schede di prototipazione rapida LPCxpresso che montano sempre un ARM Cortex.
Appena posso le inserisco in Review4U
Ottimo, utile per fare applicazioni di rete o per dispositivi usb che non necessitano di display grafici evoluti (quindi per la maggior parte dei sistemi embedded medio piccoli).
Mi sa che lo valuterò per un progetto obbistico che ho in mente.
L’unica cosa che mi lascia un po’ perplesso è il sistema di compilazione on-line.
Non mi va molto a genio inviare i miei sorgenti non so a chi e dove per essere compilati. Ciò ne blocca l’utilizzo almeno per l’uso professionale (i sorgenti devono rimanere segreti…). ovviamente nel caso di progetti open surce non c’è questo problema.
Poi mi chiedevo, se un bel giorno il sito è off line e a me serve una compilazione urgente?
Oppure se devo compilare in un posto dove non ho connessione internet?
Mi sa che questo compilatore on line avrà anche dei vantaggi, ma pone dei vincoli all’utilizzo.
Oppure ho capito male io ed è tutt’altro discorso?
Dopo aver visto quanto costa (circa 50$) ritiro l’aggettivo “ottimo” del precedente commento.
Con metà del prezzo ci si può comprare un “raspberry pi” che ha in più la grafica in HD e ci sta pure Linux.
Mi sa che per il mio prossimo progetto userò allora il raspberry (se riuscirò ad ordinarlo) anche se la grafica non mi serve, ma almeno è più economico, cosa che, coi tempi che corrono, non è male.
Non sono molto favorevole a questo “gioco al ribasso” nell’elettronica.
mBed a mio avviso costa il giusto (meno di 40 euro), sia per l’elettronica a bordo che per il supporto e l’assistenza di una casa come NXP e poi per tutti i tool e le applicazioni disponibili.
RaspberryPI è un altra cosa, dietro c’è una fondazione con lo scopo di digitalizzare i ragazzi dei Paesi non industrializzati. E’ un po diverso…
Tempo fa abbiamo sottotitolato questo video che vale piu di molte parole:
http://it.emcelettronica.com/storia-delle-cose-subs-ita
Molto interessante questa piattaforma, sono indeciso tra acquistare Arduino o mbed per realizzare qualche progetto a livello hobbistico, in base alle vostre esperienze cosa mi consigliereste?
La scelta dipende dal particolare tipo di applicazione e dalle periferiche che intendi utilizzare. Arduino ha il vantaggio di avere un’enorme disponibilità di software e periferiche hardware già pronte per l’uso (librerie, shield, ecc.) e può contare su una community di utilizzatori molto ampia (forum, siti web specialistici, ecc.). Le performance sono comunque quelle che sono, e per certi tipi di applicazioni può essere più adatta una piattaforma come l’mbed. Nella versione con Ethernet quest’ultima può contare su un processore Cortex-M3 molto performante e può gestire anche l’USB in modo host. Anche il prezzo è competitivo, tenendo conto che, nel caso Arduino, per realizzare applicazioni tipo web server devi acquistare lo shield Ethernet, il cui costo va sommato a quello della board base Arduino.
Sono d’accordo con Emanuele, RaspberryPI è un progetto interessante ma ha delle finalità diverse da quelle di un prodotto com l’mbed (ciò non toglie, tuttavia, che possa essere utilizzato come piattaforma di sviluppo e di apprendimento). Tra l’altro, ho visto sul sito Farnell che, almeno per ora, il RaspberryPI non è disponibile.
infatti ero orientato sull’mbed più che altro perchè una volta acquistata la scheda i costi aggiuntivi per l’hardware sono molto ridotti a differenza di Arduino, forse c’è ancora una documentazione molto estesa per l’mbed però penso che sia questione di tempo perchè sicuramente si ritaglierà il suo spazio sia per il costo ridotto che per la potenza che ha. Cercherò qualche development board per l’mbed in modo da poter subito provare le potenzialità dell’mbed.Grazie per la tua opinione!