Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Cartes à micro-contrôleurs > Le mbed de NXP > Présentation rapide

Présentation rapide

samedi 18 août 2012, par Eric P.

Comme évoqué dans le descriptif de la rubrique de cette article, le terme mbed ne désigne pas un processeur, mais un module d’expérimentation développé par NXP autour de ses processeurs LPC1768 et LPC11U24 (en attendant peut-être que d’autres modèles s’ajoutent à la gamme au fur et à mesure de la disponibilités de nouveaux MCUs dans cette famille).

Pour faire un parallèle audacieux, on peut considérer que le mbed est aux processeurs mentionnés ce que l’Arduino est aux AVR. Ce parallèle vaut également pour l’éco-système associé, car il existe un repository officiel des contributions faites par les utilisateurs à la bibliothèque initiale de modules permettant une mise en oeuvre ultra simple des devices intégrés ou de périphériques externes (cf la présentation du SDK).

Que peut-on en dire ?

Nous n’allons pas faire ici une redite ou un copier-coller des informations disponibles sur le site NXP, car celui-ci étant particulièrement fourni et bien fait, il est toujours préférable de prendre l’information à sa source plutôt qu’auprès de l’homme qui a vu l’homme qui a vu l’ours [1]. Par conséquent, la source première d’information est ici. N’hésitez pas de plus à consulter l’intégralité du site mbed.org, car il y a là des tonnes d’informations très utiles.

Ceci étant, quelques faits techniques pour planter le décor concernant le mbed LPC1768 par exemple :

processeur ARM Cortex M3 cadencé à 96MHz
flash 512K
RAM 32K
consommation 60 à 20mA
périphériques intégrés Ethernet,
USB host,
USB device,
UART (x3),
SPI (x2),
I2C (x2),
CAN (x1),
ADC (x6),
PWMout (x6),
AnalogOut (x1)

Concernant les périphériques, il faut garder à l’esprit que les I/O sont à fonctions multiples, et que les quantités données dans la liste des périphériques sont à moduler par les fonctionnalités utilisées. Ainsi par exemple les I2Cs et 2 des UARTs utilisent les même pins.

Les plus attentifs auront noté qu’aucune IO n’est listée dans le tableau. Ce n’est pas un oubli, mais c’est tout simplement... qu’il n’y en a pas. Enfin plus exactement, qu’il n’y a pas de pin qui soit associée à une fonction de type Din ou Dout, pour la simple raison que TOUTES les pins associées aux devices énumérés dans le tableau peuvent être aussi utilisées comme GPIO, soit au total 30 GPIO.

Le plus simple pour fixer les idées est de reproduire ci-après la carte décrivant le pinout du module :

Affectation des entrées/sorties du module mbed LPC1768

Dernier point : le module intègre sa régulation et on peut donc l’alimenter soit par le bus USB, soit par une tension entre 4.5V et 14V via son entrée Vin. Par ailleurs, on peut également bénéficier de la sortie 3.3V du régulateur intégré (sortie Vout) pour autant qu’on respecte un courant maximum (dont je ne me souviens plus de la valeur, mais que vous retrouverez sans problème dans la documentation en ligne).

Les outils de développement

Très simple : aucun outil à installer.

En tout cas par défaut. En effet un IDE en ligne très convenable est disponible. Il est abondamment décrit ici. Pour y accéder, c’est très simple :
 connecter le mbed sur un port USB de votre machine. Il apparait alors comme un mass storage (disque USB)
 ouvrez la page html (fichier MBED.HTM) qui s’y trouve
 vous allez être connecté sur l’écran de login (ou de création si c’est votre première visite) à votre compte

Ecran de login à l’espace personnel

Une fois identifié vous êtes sur la page d’accueil du site mbed, augmenté des accès vers votre espace privé (le bandeau sur fond jaune en haut à droite)

Accueil de l’espace personnel

L’IDE est accessible en cliquant sur "Code", et on se retrouve devant ceci :

IDE en ligne

Si, si, c’est bien dans votre browser :)

Idéal pour faire ses premières armes sans se prendre la tête et quelle que soit votre plate-forme (Linux, MacOS X ou Windows) [2]. L’ensemble de vos projets (votre workspace) est hébergé sur les serveurs NXP et est accessible depuis n’importe où et n’importe quelle machine. Et oui, nous sommes bien dans le cloud.

Bon, vous allez peut-être me dire maintenant :
 et si je n’ai pas de connexion Internet
 et si elle rame
 et si le serveur est planté
 et si je ne jure que par Vi pour écrire mes programmes

Pas de problème : il existe une possibilité d’installer une chaîne de développement offline sur votre machine, vous rendant ainsi votre totale autonomie [3]. Tout cela sera présenté dans un autre article, mais des éléments sont déjà fournis dans celui qui décrit une expérimentation avec le dSPIN, au paragraphe sur le mBed.

Hello world

Pour changer (!), faisons clignoter une des LEDs du module. Le code est le suivant :

#include "mbed.h"

DigitalOut myled(LED1);

int main() {
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

On voit là l’illustration de la simplicité de mise en oeuvre des devices intégrés offerte par la lib intégré au SDK. Ici c’est simple pour une LED (en fait une I/O), mais c’est du même tonneau pour les UART, l’I2C,...

N’oublions pas que nous sommes en C++, ce qui offre un niveau d’abstraction de haut niveau.

Par conséquent des dispositifs plus complexes comme un écran LCD, ou (au hasard) un contrôleur de moteur pas à pas, seront manipulés avec la même facilité.

Conclusion

Voilà pour cette entrée en matière qui j’espère vous aura donné envie de tester ce petit module fort pratique et performant.


[1Et puis cela va bien avec ma feignantise chronique ;)

[2ne voyez aucune relation entre l’ordre de l’énumération et mes préférences personnelles ;)

[3mais au prix d’une petite concession

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.