Archives par mot-clé : Texas Instruments

Analyseur de spectre 1Ghz à 149$ chez TI Deals (Digi-Key)

Analyseur de Spectre SA430 Texas InstrumentsPromotion intéressante sur la boutique TI Deals de Digi Key. Ils y proposent un analyseur de spectre RF à brancher sur un PC via un port USB. Ce n’est pas à proprement parler ce que l’on attend d’un analyseur de spectre car la couverture n’est pas totale (mais comprend la bande des 70cm) et on passe par une numérisation du signal.

C’est en fait un boîtier qui repose sur un circuit avec micro-contrôleur CC430 très spécialisé de chez Texas Instruments qui dispose de capacité de réception dans les bandes UHF. Le prix et les caractéristiques peuvent le rendre toutefois très intéressant pour certains besoins, à vous de juger suivant les informations détaillées du site de TI (http://www NULL.ti NULL.com/tool/msp-sa430-sub1ghz?DCMP=sa430&HQS=sa430).

Nouveau micro-contrôleurs plus puissants dans la gamme MSP430G2xxx de chez TI

MSP430G2955 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/04/MSP430G2955 NULL.png)Texas Instruments a annoncé il y a quelques jours le lancement de nouveaux micro-contrôleurs dans sa ligne Value dont fait partie le fameux MSP430G2553 de nos LaunchPad. Ce dernier était auparavant le haut de gamme avec 16Ko de Flash et 512o de SRAM.

Le nouveau MSP430G2955 offrira 56Ko de Flash et 4Ko de SRAM, ce qui est un véritable bond en avant, ainsi que 32 canaux ADC (au lieu de 4) et 3 Timers (au lieu de 2). Les autres caractéristiques (horloge du microprocesseur, périphériques…) restent globalement les mêmes.

Le boîtier du MSP430G2955 est au format CMS mais avec des broches espacées. Par contre le MSP430G2744 avec 32Ko de Flash et 1Ko de SRAM devrait être disponible en DIP 40 broches, ce qui le rend tout à fait adapté à nos besoins d’électronique amateur ou de petites séries. D’autres modèles intermédiaires viendront enrichir la gamme. Le détail est disponible sur 43oh.com (http://www NULL.43oh NULL.com/2013/03/ti-announces-bigger-and-better-value-line-msp430-controllers/). Le support dans l’IDE Energia (http://energia NULL.nu/) devrait se faire rapidement car les développeurs y travaillent déjà.

LaunchPad C2000 : expérimenter avec un DDS

Aujourd’hui c’est dimanche, et l’électricité a été coupée de 10h à 18h. Je n’ai donc pas eu trop le temps de rechercher des informations craquantes avant la fin d’année.

LaunchPad MSP430 et C2000 - Image Francesco Agosti (http://xv4y NULL.radioclub NULL.asia/2012/12/30/launchpad-c2000-experimenter-avec-un-dps/img_3175/)
LaunchPad MSP430 et C2000 côte à côte

Je vais en profiter pour réparer un oubli en vous parlant du LaunchPad C2000 Piccolo de Texas Instruments (http://www NULL.ti NULL.com/ww/en/launchpad/c2000_head NULL.html), dont vous connaissez déjà les autres membre de la famille avec le MSP430 et le Stellaris.

Le principe est le même, une carte de développement intégrant toute la connectivité USB et l’aide au déboguage avec un micro-contrôleur et plein de connecteurs pour les entrées-sorties. Le prix est toujours très attractif avec cette fois-ci 17$ port compris, et l’environnement de développement Code Composer Studio (CCS) est gratuit pour utliser avec cette carte. Le micro-contrôleur est un peu particulier puisqu’il s’agit d’un TMS320F28027 à 60 MHz avec 64Ko de Flash, 12Ko de RAM, un convertisseur analogique numérique 12 bits échantillonnant à 4,6 Mbps (ça dépote!) sur 12 canaux et tout un tas d’entrées-sorties et de périphériques usuels dans les micro-contrôleurs (I2C, SPI…).

Certains auront reconnu le suffixe TMS320 dans le nom du micro-contrôleur. Eh oui, il s’agit bien de la célèbre famille de DSP de Texas Instruments dont le premier modèle TMS32010 était une innovation à l’époque. La sous-branche actuelle C2000 a été utilisée dans la téléphonie mobile 2G et continue à l’être adossée à des processeurs ARM v7 par exemple dans les processeurs OMAP de la marque. Une des particularités de l’architecture C2000 c’est que bien que dédiée au traitement en temps-réel et en particulier au traitement de signaux, elle reste proche d’une architecture Harvard traditionnelle et peut-être utilisée pour des applications plus courantes.

Le LaunchPad C2000 est donc la plateforme idéale pour ceux qui veulent se frotter à la programmation temps-réel ou au traitement du signal (l’ADC embarqué est très performant). Personnellement je suis déjà bien occupé sur d’autres projets et je n’ai pas envie d’acheter une boîte même à 17$ juste pour qu’elle prenne la poussière. Par contre je pense que certains parmi vous pourraient tenter l’expérience.

Prototype balise WSPR à DDS

Prototype kit Balise WSPR DDS XV4Y (http://xv4y NULL.radioclub NULL.asia/2012/12/21/prototype-balise-wspr-a-dds/100_3339/)Je suis plutôt satisfait de ma semaine! En grappillant quelques heures entre mes occupations professionnelles j’ai réussi à finaliser la mise au point de ma balise WSPR avec un DDS AD9850 (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=33). Le prototype fonctionne parfaitement et les séquences sont reçues à 100% sur mon ordinateur de contrôle. Les tests sur l’air se sont révélés décevant mais avec moins de 10mW sur 20 mètres, les conditions hivernales et aucune station proche il ne fallait pas non plus rêver. Je vais essayer de bricoler un petit PA d’appoint pour valider les tests.

Un des points sur lequel je bloquais était la quantité de mémoire très restreinte du MSP430G2553. Avec 512 octets on est vite à cours de place pour les variables, d’autant plus que la génération de la séquence de symboles WSPR en consomme plus de 350 à elle seule! Devoir contrôler calculer la séquence WSPR, contrôler le DDS, et l’écran graphique posait pas mal de stress sur le micro-contrôleur. J’ai du réécrire une partie du code et économiser les variables. Les méthodes de programmation moderne nous apprennent à favoriser la lisibilité et la réutilisabilité du code en découpant en fonction ou en créant des classes d’objets. C’est bien beau mais même si les compilateurs modernes optimisent tout cela très bien, cela consomme quand même beaucoup de mémoire. Pas grave sur un micro-ordinateur, mais vite contraignant sur un micro-contrôleur. Les purs et durs programment toujours en assembleur, pour ma part même après 20 ans en ayant débuté à 11 ans sur le microprocesseur 6803 de mon Alice 90 (http://alice NULL.system-cfg NULL.com/) monté à partir de pièces en vrac par F1GUM, la mayonnaise n’a jamais pris…

100_3341

Si maintenant le code fonctionne parfaitement et que le hardware rempli son rôle, il me reste maintenant à voir comment tout agencer pour en faire un kit facile à reproduire et à monter, et à écrire la documentation! Dernier point technique à valider, l’ajout de 4 boutons pour pouvoir le transformer facilement en VFO ou générateur de signal.

A l’étroit avec un Arduino ou un LaunchPad ?

Texas Instruments fait encore une fois très fort! Si vous vous sentez restreints dans vos ambitions par les performances et les capacités mémoires limitées des ATMega328 ou MSP430G2553 des Arduino (http://arduino NULL.cc/en/Main/Hardware) ou LaunchPad, courrez acheter un Stellaris LaunchPad.

StellarPad (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/med_ek-lm4f120xl_stellarislaunchpad_tool NULL.jpg)Non seulement le Stellaris LaunchPad LM4F120 (http://www NULL.ti NULL.com/tool/ek-lm4f120xl#buy) embarque un processeur beaucoup plus puissant que tout ceux dont j’ai parlé jusqu’à présent, mais offert au prix de 5 USD par TI il est à peine plus cher que le LaunchPad et surtout 4 fois moins cher que n’importe lequel des Arduino!!! Ce nouveau petit jouet embarque un processeur 32 bits Stellaris LM4F120H5QR (http://www NULL.ti NULL.com/product/lm4f120h5qr) construit sur l’architecture Cortex M4F d’ARM, la version “électronique embarquée” des processeur tournant aujourd’hui des les iPad, iPhone. Tournant à 80MHz et possédant 256Ko de flash et 32Ko de SRAM, il est le chaînon manquant entre la catégorie “Arduino” et la catégorie “Rabsperry Pi”, plus proche des ChipKIT dont je vous parlais récemment (http://xv4y NULL.radioclub NULL.asia/2012/09/20/programmer-un-micro-controleur-pic-comme-un-arduino/). Le nombre des entrées-sorties, périphérique et canaux de communications est aussi à l’avenant, de quoi penser à de gros projets…

Cerise sur le gâteau, Robert Wessels vient de m’informer qu’il travaille sur l’incorporation du StellarPad (plus court que Stellaris LaunchPad) à Energia et qu’il sera donc très prochainement possible de programmer ce micro-contrôleur exactement comme un LaunchPad MSP430 ou un Arduino. Si après tout cela vous n’avez pas encore commandé celui-ci chez Texas Instruments, je ne sais pas ce qu’il me reste à faire!

Bibliothèque RTC pour le MSP430

[GTranslate]

Le micro-contrôleur MSP430G2553 de Texas Instruments livrés avec le LaunchPad dispose de tout le nécessaire pour en faire une horloge temps-réel (RTC). Il suffit de lui connecter un quartz 32KHz et de le programmer convenablement.

TI donne les librairies en assembleur utilisable avec leur environnement de développement. Pour Energia, une nouvelle librairie était nécessaire, je me suis donc attelé à sa conception.

Rien de révolutionnaire, mais ça peut servir à d’autres. C’est sur cette librairie qu’est basée ma balise autonome WSPR que je compte proposer en semi-kit d’ici peu (certainement à mon retour de vacances début juillet). D’origine la dérive en fréquence est de l’ordre du Hertz pour 24 heures (20ppm) ce qui suffit pour une nuit de transmission WSPR, mais peut-être ajustée avec un condensateur variable pour corriger la fréquence du quartz.

Le fichier d’en-têtes (sRTCsec.h) :

/*
 sRTC.h - Library for adding simple RTC capabilities using MSP430 hardware
 By Yannick DEVOS (XV4Y) - 2012

///////////////////////////////// How to use the lib

 * Create an instance of the object

 RealTimeClock myClock;

 * In order to have this RTC library working you should add this code to the end of your main program :

 interrupt(TIMER1_A0_VECTOR) Tic_Tac(void) {
	myClock.Inc_sec();		      // Update secondes
 };

 * Enjoy the clock reading the RTC_sec, RTC_min, RTC_hr variables

 */

// ensure this library description is only included once
#ifndef RTCsec_h
#define RTCsec_h

// library interface description
class RealTimeClockSec
{
	// user-accessible "public" interface
public:
	RealTimeClockSec(void);
	void Set_Time(char hr, char mins, char secs);
    char RTC_sec; // This how you read the time, by reading the vars
    char RTC_min;
    char RTC_hr;
	void Inc_sec(void); // This methode should be invoked by an Interrupt call (see top of the file comment)
	// A few private methods
private:
	void Inc_min(void);
	void Inc_hr(void);
};

#endif

Le code par lui-même (sRTCsec.cpp) :

/*
 sRTC.h - Library for adding simple RTC capabilities using MSP430 hardware
 By Yannick DEVOS (XV4Y) - 2012
 */

// include this library's description file
#include <sRTCsec.h>
#include <legacymsp430.h>

// Constructor /////////////////////////////////////////////////////////////////

RealTimeClockSec::RealTimeClockSec(void)
{
	RTC_sec = 0;
	RTC_min = 0;
	RTC_hr = 0;

	WDTCTL = WDTPW | WDTHOLD; // Kill watch-dog

	BCSCTL1 = DIVA_3;        // Clock = ACLK / 8
	BCSCTL3 |= (LFXT1S_0 | XCAP_3);        // Internal 12.5pF cap for 32KHz crystal

	TA1CCTL0 = CCIE;             //  CCR0 interupt activated
	TA1CCR0 = 4096-1;               // 4096 ticks of 32KHz XTal = 1 second => CCR0 counts N+1
	TA1CTL = TASSEL_1 | ID_3 | MC_1;  // Clock for TIMER 1 = ACLK, By 8 division, up front

};

// Methods /////////////////////////////////////////////////////////////////

void RealTimeClockSec::Inc_sec(void) {
	RTC_sec = RTC_sec + 1;		      // Update seconds
	if (RTC_sec == 60) {
		RTC_sec=0;
		Inc_min();
	};
};

void RealTimeClockSec::Inc_min(void) {
	RTC_min = RTC_min + 1;		      // Update minutes
	if (RTC_min == 60) {
		RTC_min=0;
		Inc_hr();
	};
};

void RealTimeClockSec::Inc_hr(void) {
	RTC_hr = RTC_hr + 1;		      // Update hours
	if (RTC_hr == 24) {
		RTC_hr=0;
	};
};

void RealTimeClockSec::Set_Time(char hrs=0, char mins=0, char secs=0) {
	if ((hrs>=0 && hrs <24) && (mins>=0 && mins<60) && (secs>=0 && secs<60)) {
		RTC_hr = hrs;	// Set time to values given in parameters
		RTC_min = mins;
		RTC_sec = secs;
	};
};

Avec un exemple (testé sous Energia 005a) c’est plus facile à comprendre :

#include &lt;sRTCsec.h&gt;
#include &lt;legacymsp430.h&gt;
#include &lt;TimerSerial.h&gt;

TimerSerial mySerial;
RealTimeClockSec myRTC;

  int ledState = LOW;

void setup() {
  pinMode(2, OUTPUT);

  // This is to close the serial output so you are able to upload a new sketch to the LaunchPad
  pinMode(5, INPUT_PULLUP),
  attachInterrupt(5,fin,LOW);

  mySerial.begin();

};

// The LED1 will blink each exact second and the time will be printed to the serial port
void loop() {
  if ((myRTC.RTC_sec % 2)==0 && ledState== HIGH) {
  ledState = LOW;
  mySerial.print(myRTC.RTC_min, DEC);
  mySerial.print(":");
  mySerial.println(myRTC.RTC_sec, DEC);
  digitalWrite(2, ledState);
  };

  if ((myRTC.RTC_sec % 2)==1 && ledState== LOW) {
  ledState = HIGH;
  mySerial.print(myRTC.RTC_min, DEC);
  mySerial.print(":");
  mySerial.println(myRTC.RTC_sec, DEC);
  digitalWrite(2, ledState);
  };
};

void fin() {
  mySerial.end();
};

interrupt(TIMER1_A0_VECTOR) Tic_Tac(void) {
	myRTC.Inc_sec();		      // Update secondes
};

Balise autonome WSPR avec MSP430

[GTranslate]

Ces derniers jours je me suis amusé un peu à programmer le LaunchPad de TI avec Energia. Le but étant de voir si du code Arduino (AVR ATMega) était facilement portable sur le MSP430.

Capture port série Balise WSPR MSP430 XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/Capture-Balise-WSPR-MSP430 NULL.jpg)La réponse est oui, si le code est propre (pas toujours facile) et s’il n’utilise pas des librairies non encore portée sur Energia (ce qui va diminuer avec le temps). En pratique je suis parti d’un morceau de code de F4GKA/VA2GKA (http://www NULL.itsrainingelephants NULL.com/2012/04/29/wspr-30m-ready/#comments) et d’un autre de DH3JO (http://wsprnet NULL.org/drupal/node/1342) pour faire une balise WSPR autonome. Le code est fonctionnel mais n’a pas encore été testé sur l’air. Cerise sur le gâteau, il est “rétroportable” sur Arduino car il suffit de changer les numéros de broches.

J’ai encore un peu de travail autour de cela, mais pour les curieux voici les résultats de quelques heures de réflexion ce matin. Il me faut maintenant connecter cela sur la balise QRSS du kit de G0UPL / G0XAR et voir comment cela se comporte en particulier du point de vue dérive de la synchronisation dans le temps. Contrairement à mon Arduino Nano le LaunchPad n’est pas équipé d’origine d’un quartz mais j’ai ce qu’il faut sous la main.

Au passage la modification du kit balise QRSS peut se faire comme l’a fait IW1QLH avec une échelle R-2R (http://www NULL.iw1qlh NULL.net/index NULL.php/projects-hardware-mainmenu-66/99-qrp/115-qrss-beacon).

Le fichier pour Energia/Arduino est disponible au téléchargement (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/WSPR_autonome_XV4Y NULL.txt). Attention, il faudra renommer le fichier en .ino au lieu du .txt (WordPress n’aime pas les .ino)

/* WSPR Static Generator for MSP430G2553
* Code for Energia 005a</code>

* By Yannick DEVOS - XV4Y - May 2012
* Free for HAM Radio usage

* Based on VA2GKA Guenael Jouchet code for sending
* Based on DH3JO Martin Nawrath for WSPR sequence encoding

*
* Internal clock of MSP430 could be not stable enough, try a Crystal
* Start the circuit on the second 0 of an odd minute

* Ouput on 2 bits PinA and PinB
* Mirror on LED1 and LED2 du LaunchPad for testing
* Output to Serial for testing
* Using an R-2R ladder it makes the G0UPL/G0XAR beacon frequency shift
*/

#include// Comment on Arduino, replace mySerial by Serial everywhere

#define wsprPinA 7
#define wsprPinB 6
#define LEDPinA 14
#define LEDPinB 2
#define StartBtn 5

const char SyncVec[162] = {
1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,
1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,
0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,
0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0
};

const char call[] = "XV4Y ";
const char locator[] = "OK20";
const byte power = 20;

int i;
char symbol;

int ii,bb;

byte c[11]; // encoded message

byte sym[170]; // symbol table 162
byte symt[170]; // symbol table temp
unsigned long n1; // encoded callsign
unsigned long m1; // encodes locator

TimerSerial mySerial; // Comment on Arduino

//******************************************************************
// Defining pins mode
// Encoding the WSPR sequence

void setup() {
mySerial.begin(); // Comment on Arduino
pinMode(wsprPinA, OUTPUT); // Change for Arduino/AVR
pinMode(wsprPinB, OUTPUT); // Change for Arduino/AVR
pinMode(LEDPinA, OUTPUT); // Change for Arduino/AVR
pinMode(LEDPinB, OUTPUT); // Change for Arduino/AVR
pinMode(StartBtn, INPUT_PULLUP); // INPUT for Arduino and put pin to HIGH
// digitalWrite(StartBtn, HIGH); // Don't use this on LaunchPad/MSP430

mySerial.print("\n\n\n*** MSP430 WPSR beacon \n");

encode_call();
mySerial.print("call: ");
mySerial.print(call);
mySerial.print(" ");
mySerial.print(n1,HEX);
mySerial.println(" ");

encode_locator();
mySerial.print("locator: ");
mySerial.print(locator);
mySerial.print(" ");
mySerial.print(m1 &lt;&lt; 2,HEX);
mySerial.println(" ");
for (bb=0;bb mySerial.print(c[bb],HEX);
mySerial.print(",");
}
mySerial.println("");
encode_conv();

mySerial.println("");

for (bb=0;bbmySerial.print(symt[bb],DEC);
mySerial.print(".");
if ( (bb+1) %32 == 0) mySerial.println("");
}
mySerial.println("");

interleave_sync();

mySerial.println("Channel symbols :");
for (bb=0;bb mySerial.print(sym[bb],DEC);
mySerial.print(".");
if ( (bb+1) %32 == 0) mySerial.println("");
}
mySerial.println("");

};

//******************************************************************
// Here starts the actual sequence sending

void loop() {
digitalWrite( wsprPinB, LOW );
digitalWrite( LEDPinB, LOW );

digitalWrite( wsprPinA, LOW );
digitalWrite( LEDPinA, LOW );
mySerial.println("*** Sequence sending delayed.");
mySerial.println("*** Press S2 to start now.");
i = 0;
while (i &lt; 9408) {
delay(1);
if (digitalRead(StartBtn)==LOW) {
i = 20000;
} else {
i++;
};

}

for (i = 0; i &lt; 170; i++) { symbol = sym[i]; mySerial.print(symbol%10, DEC); mySerial.print(" "); digitalWrite( wsprPinB, (symbol &gt;&gt; 1) );
digitalWrite( LEDPinB, (symbol &gt;&gt; 1) );

digitalWrite( wsprPinA, (symbol &amp; 1) );
digitalWrite( LEDPinA, (symbol &amp; 1) );
delay(682.667);
};
mySerial.println("\n *** End of sequence");
};

/* Functions declaration
* This code by DH3JO
* KHM 2009 / Martin Nawrath
* Kunsthochschule fuer Medien Koeln
* Academy of Media Arts Cologne
*/

//******************************************************************
void encode() {
encode_call();
encode_locator();
encode_conv();
interleave_sync();
};
//******************************************************************
// normalize characters 0..9 A..Z Space in order 0..36
char chr_normf(char bc ) {
char cc=36;
if (bc &gt;= '0' &amp;&amp; bc = 'A' &amp;&amp; bc &gt; 20;
t1=n1;
c[1]= t1 &gt;&gt; 12;
t1=n1;
c[2]= t1 &gt;&gt; 4;
t1=n1;
c[3]= t1 &lt;&lt; 4; } //****************************************************************** void encode_locator(){ unsigned long t1; // coding of locator m1=179-10*(chr_normf(locator[0])-10)-chr_normf(locator[2]); m1=m1*180+10*(chr_normf(locator[1])-10)+chr_normf(locator[3]); m1=m1*128+power+64; // merge coded locator and power into message array c[] t1=m1; c[3]= c[3] + ( 0x0f &amp; t1 &gt;&gt; 18);
t1=m1;
c[4]= t1 &gt;&gt; 10;
t1=m1;
c[5]= t1 &gt;&gt; 2;
t1=m1;
c[6]= t1 &lt;&lt; 6;

}
//******************************************************************
// convolutional encoding of message array c[] into a 162 bit stream
void encode_conv(){
int bc=0;
int cnt=0;
int cc;
unsigned long sh1=0;

cc=c[0];

for (int i=0; i &lt; 81;i++) {
if (i % 8 == 0 ) {
cc=c[bc];
bc++;
}
if (cc &amp; 0x80) sh1=sh1 | 1;

symt[cnt++]=parity(sh1 &amp; 0xF2D05351);
symt[cnt++]=parity(sh1 &amp; 0xE4613C47);

cc=cc &lt;&lt; 1;
sh1=sh1 &lt;&lt; 1;
}

}

//******************************************************************
byte parity(unsigned long li)
{
byte po = 0;
while(li != 0)
{
po++;
li&amp;= (li-1);
}
return (po &amp; 1);
}

//******************************************************************
// interleave reorder the 162 data bits and and merge table with the sync vector
void interleave_sync(){
int ii,ij,b2,bis,ip;
ip=0;

for (ii=0;iibis=1;
ij=0;
for (b2=0;b2 &lt; 8 ;b2++) { if (ii &amp; bis) ij= ij | (0x80 &gt;&gt; b2);
bis=bis &lt;&lt; 1;
}
if (ij &lt; 162 ) {
sym[ij]= SyncVec[ij] +2*symt[ip];
ip++;
}
}
}

Premiers pas avec le LaunchPad de TI

Texas Instruments LaunchPad Value kit MSP430 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/100_3157 NULL.jpg)J’ai reçu mes deux kits LaunchPad il y a quelques jours. Oui, deux, car une première commande qui s’était conclue par une erreur du serveur web a quand même abouti. A 4,30$ le bout je n’ai pas annulé la commande… Au passage, livraison en temps record par Fedex avec 4 jours ouvrés, la douane ne semble même pas avoir ouvert le paquet.

La présentation est beaucoup plus valorisante que celle de l’Arduino Nano qui m’était tombé entre les mains il y a un an. Belle boîte, câble USB, petits autocollants, connecteurs… rien ne manque. Bonne nouvelle aussi, les micro-contrôleurs livrés sont équipés de respectivement 16ko (MSP430G2553) et 8ko (MSP430G2452), beaucoup mieux que les 1 et 2ko indiqués sur le site web lors de la commande. Détail pratique : la platine du Launchpad est équipée de petits patins en mousse permettant de la poser sur un bureau sans problèmes.

IDE Energia pour LaunchPad sous OS X (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/05/Energia_Launchpad NULL.jpg)J’ai commencé à jouer un peu avec ce circuit en utilisant l’IDE Energia. Ce dernier étant un fork d’Arduino, la prise en main est rapide. Le fait de se retrouver avec un langage similaire (inspiré de Wiring/Processing) aide aussi beaucoup. Par contre le manque de documentation ou du moins l’absence d’homogénéité de celle-ci est pénalisante. Contrairement à la plateforme Arduino pas de définition matériel précise et le brochage n’est pas évident à connaître car il change suivant la version du processeur. Les terminologies utilisées me paraissent un peu obscures mais c’est peut-être une histoire de temps pour trouver les docs.

En tous cas, le fait de pouvoir programmer facilement le micro-contrôleur et ensuite implanter le CI autonome dans un circuit ouvre de nouvelles possibilités.

Petit ajout : La version d’Energia que j’utilise est la 005a, mais celle sur laquelle travaille les développeur est la 006. Pas mal de travail entre les deux, en particulier sur le nommage des broches. L‘exemple disponible en ligne pour utiliser la sonde thermomètre ne fonctionne pas tel que car la broche P1.3 qui lit le contact PUSH2 semble en état instable. Elle permet en tous cas de voir que les broches sont accessibles tout simplement par le numéro sur le boîtier, mais il faut alors se plonger dans les datasheet… D’autres exemples sont en ligne mais sont prévus pour la 006, et je n’ai pas trop envie de me mettre à compiler moi-même le logiciel.

Les micro-contrôleurs MSP430 de Texas Instruments

Microcontrôleur MSP430 de chez TI (http://www NULL.ti NULL.com/lsds/ti/microcontroller/16-bit_msp430/overview NULL.page)Je vous ai déjà pas mal parlé d’Arduino et de la famille des micro-contrôleurs AVR de chez Atmel. D’autres solutions existent comme les célèbres PIC de MicroChip dont est dérivée la plateforme PICAXE. En me penchant sur le travail de Steve KD1JV, j’ai vu qu’il avait fait le choix d’utiliser des produits de la série MSP430 de chez TI (http://msp430 NULL.com/). Ceux-ci ayant une consommation extrêmement basse (0,1 µA en veille profonde), le choix est plus qu’indiqué pour les transceiver ultra-portable QRP de Steve.

Gamme Value MSP430G2xx

Je ne vais pas me lancer dans une comparaison détaillée des deux architectures. Elles sont à la fois très différentes en terme de choix techniques, et très similaires en terme d’application sur le terrain. Le nombre de modèles et de version de circuits est très grand en particulier chez Texas Instruments et une comparaison face à face est difficile entre AVR et MSP430. En pratique, tout dépendra de vos besoins et de vos contraintes.

Texas Instruments LaunchPad (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/04/300px-LaunchPad_wireframe NULL.png)Pour ce qui nous concerne nous, les amateurs et hobbyistes, je considérerai deux points importants : le coût et la simplicité de mise en oeuvre. Du point de vue coût, une grosse société comme TI peut faire très fort car elle propose sa plateforme de développement LaunchPad (http://www NULL.ti NULL.com/tool/msp-exp430g2) a un coût ridiculement bas : 4,30$ port compris! Les micro-contrôleurs aujourd’hui fournis avec le kit sont peut-être limités, mais c’est aussi 5 fois moins cher qu’un Arduino. Pour ce prix vous avez entre les mains :

  • La platine de développement MSP-EXP430G2 (avec port USB)
  • un microcontrôleur M430G2211 (16 MHz,  2ko de Flash, 128o RAM, 10 entrées-sorties GPIO, un timer 16-bit, WDT, BOR, Comparator A+)
  • un microcontrôleur M430G2231 (16 MHz, 2ko de Flash, 128o RAM, 10 entrées-sorties GPIO, un timer 16-bit, WDT, BOR, un port USI (I2C/SPI), 8 canaux ADC 10 bits)
  • un quartz 32,768 KHz à souder soit même sur la platine en cas de besoin d’une horloge précise
  • Deux jeux de connecteurs
  • Un câble USB
  • Des autocollants TI Launchpad

Pour la simplicité d’utilisation, je vais vous avouer que je n’ai pas encore reçu mon kit LaunchPad donc ce que vous donne est de seconde main. L’environnement de développement de Texas Instrument tourne sous Windows uniquement et semble faire l’unanimité autour de son manque d’ergonomie et de sa complexité de mise en oeuvre. Des tiers ont développé des extensions logiciels pour programmer les MSP430 depuis XCode (Mac OS X) ou Ubuntu, mais l’aide de TI semble limitée. Si on regarde du côté des produits officiels de Atmel, ils sont peut-être bons mais pas gratuits. Par contre la communauté d’utilisateurs est importante et de nombreux outils libres de très bonne qualité existent. Il y a bien entendu Arduino, qui pour moi est la véritable porte d’entrée à l’AVR et qui propose un excellent environnement de développement multiplateforme et une communauté très active. Les platines Arduino me semble aussi mieux conçues et plus évolutive, mais cela est subjectif et peut se régler avec un peu de travail. Un fork de l’IDE Arduino pour le MSP430 semble disponible…

En conclusion le match est très serré. Vu le coût d’une plateforme LaunchPad, je vous conseille vivement d’en commander une et de vous faire votre avis par vous-même… Un wiki très détaillé sur LaunchPad (http://processors NULL.wiki NULL.ti NULL.com/index NULL.php?title=MSP430_LaunchPad_(MSP-EXP430G2)) est disponible avec les liens vers les environnements de développement disponibles.