jeudi 12 juillet 2012

Energia: pour programmer le Launchpad comme un Arduino!

Ceux qui ont lu mes articles précédents concernant le Launchpad de Texas Instruments ont peut-être remarqué mes sérieuses réserves concernant la difficulté de programmer les microcontrôleurs de la famille MSP430 au moyen de l'environnement de programmation Code Composer Studio:  le logiciel, qui exige 1 Mo de mémoire vive, est loin d'être simple à utiliser.  De plus, la programmation du MSP430 en langage C repose sur une syntaxe beaucoup plus aride que celle d'un Arduino.

Tout ça n'est peut-être qu'un mauvais souvenir, maintenant que Robert Wessels et son équipe ont mis au point "Energia": une version modifiée de l'IDE Arduino permettant de programmer le Launchpad exactement comme on programme l'Arduino!

Comme vous pouvez le constater sur l'image ci-haut, l'interface utilisateur d'Energia est identique à celle d'Arduino:  mêmes boutons dans le haut de la fenêtre pour uploader le sketch dans le microcontrôleur, ou pour accéder au "Serial Monitor", mêmes menus permettant d'ouvrir des exemples, de sélectionner le port série sur lequel est branché le Launchpad:  on se sent vraiment en terrain connu!   Seule différence visible:  là ou Arduino prévilégie la couleur bleue, Energia utilise le rouge (ce qui est logique:  le Launchpad est rouge, l'Arduino est bleu!).

Et le langage?  Le même que pour programmer un Arduino!  Nul besoin d'inclure une nébuleuse ligne de
code pour désactiver le chien de garde, inutile de se creuser la tête pour gérer les registres des entrées/sorties numériques au moyen de nombres hexadécimaux:  on pilote le Lauchpad avec de simples 
digitalRead, digitalWrite, etc.  Le bonheur total!  

De plus, le Launchpad exécute le sketch automatiquement suite au upload du sketch (alors que dans CCS, il faut initier une session de débogage et cliquer sur un bouton qui démarre l'exécution du sketch).

Comme premier test, j'ai choisi de refaire le code que j'ai fait il y a quelques jours dans Code
Composer Studio, pour lire la valeur analogique d'un potentiomètre (résultat ci-dessous). Le comportement du circuit est identique (les LEDs s'allument à mesure qu'on tourne le potentiomètre) mais le code me semble beaucoup plus facile à comprendre (et à rédiger!).




/*********************************************************
 Sketch pour le Launchpad avec Energia.
 5 LEDs (à P1.1, P1.2, P1.3, P1.4, p1.5) s'allument 
 en fonction de l'intensité du signal analogique transmis 
 par un potentiomètre (à P1.0) 
 *********************************************************/

int valeur; // état du potentiomètre

void setup() { 
  // Pins P1.1 à P1.5 sont en output (chacune pilote une LED)  
  pinMode(P1_1, OUTPUT);     
  pinMode(P1_2, OUTPUT);
  pinMode(P1_3, OUTPUT);
  pinMode(P1_4, OUTPUT);
  pinMode(P1_5, OUTPUT);
}

void loop() {

  valeur = analogRead(A0);

  if (valeur < (0.15*1023))
  {
    digitalWrite(P1_1, LOW);
  }
  else
  {
    digitalWrite(P1_1, HIGH);
  }


  if (valeur < (0.30*1023))
  {
    digitalWrite(P1_2, LOW);
  }
  else
  {
    digitalWrite(P1_2, HIGH);
  }

  if (valeur < (0.45*1023))
  {
    digitalWrite(P1_3, LOW);
  }
  else
  {
    digitalWrite(P1_3, HIGH);
  }

  if (valeur < (0.6*1023))
  {
    digitalWrite(P1_4, LOW);
  }
  else
  {
    digitalWrite(P1_4, HIGH);
  }

  if (valeur < (0.75*1023))
  {
    digitalWrite(P1_5, LOW);
  }
  else
  {
    digitalWrite(P1_5, HIGH);
  }
}

On peut remarquer la numérotation des pins du Launchpad, qui est différente de celle de l'Arduino.  Ici, j'ai utilisé les mêmes numéros que sur la carte (P1_1 pour P1.1, etc.).  J'aurais pu aussi utiliser une simple valeur numérique, comme par exemple "digitalWrite(3,LOW)"...mais l'inconvénient de cette méthode, c'est que les pins ne portent plus le même numéro!  P1.0 porte le numéro 2, P1.1 porte le numéro 3, etc.  À moins d'ajouter des autocollants sur le Launchpad pour modifier la numérotation des pins, ça me semble un peu mêlant...

Pour la fonction "analogRead", il faut utiliser une numérotation différente:  "A0" pour la pin 1.0, "A1" pour la pin 1.1, etc.  

Mais attention:  Energia est encore en développement.  Certaines fonctions ne sont pas encore au point.   Les fonction "tone" et "random" n'existent pas encore, et la fonction analogWrite (PWM) donne des résultats  quelque peu déconcertants.  Bien entendu, si votre sketch Arduino utilise une obscure bibliothèque inconnue du commun des mortels, il ne fonctionnera pas sur le Launchpad.

Malgré tout, Energia devient aujourd'hui même mon outil de développement numéro 1 pour le Launchpad!  C'est le moment de sortir le champagne:  il est maintenant possible de programmer de façon simple et amusante un Launchpad à $4.30!

Site officiel d'Energia

Yves Pelletier (Twitter: @ElectroAmateur)

2 commentaires:

  1. peut-il y avoir des problème si on souhaite l'utiliser à nouveau comme un vrai launchpad?

    RépondreSupprimer
    Réponses
    1. Ça demeure un vrai Launchpad, qui pourra sans problème être programmé avec Code Composer Studio, Code Composer Studio Cloud, Energia, etc.

      Supprimer