Bonjour!
Ça fait quelques années que je traîne ici de façon intermittente, alors histoire
de participer un peu, voici un tutoriel pour programmation embarquée en C. Je viens
de télécharger un environnement de développement qui n'est pas vraiment nouveau en
soi, mais qui vient d'être porté sur MacOS. Comme c'est le même que sur PC, on peut
penser qu'il n'y aura aucune différence si vous voulez reproduire ces expériences
sur PC. Les programmes utilisés ici existent déjà sur le net. À tout hasard, je
précise qu'il n'y a aucun problème de copyright puisque c'est moi qui les ai écrits,
je ne fais ici que les traduire et les adapter à la carte utilisée, tout en vérifiant
qu'ils fonctionnent sur MacOS.
Et puis je vais essayer de faire en sorte que même quelqu'un qui n'a que de vagues
notions de C puisse comprendre. Ce sera donc aussi un genre de tutoriel C. Je sais
bien qu'en essayant de tout faire en même temps, il y a un risque de ne rien faire
de bon, mais en tout cas ce sera reproductible par copier-coller.
La carte que j'ai choisie, c'est une des cartes "launchpad" de TI, avec un MSP430F5529.
À noter que cette carte est moins chère qu'une Arduino (11,80 Euros chez Digikey), et a
beaucoup plus de mémoire que la UNO. 10 k vs 2k, si je me souviens bien. La flash fait
128k, ce qui est suffisant pour bien s'amuser. L'environnement gratuit permet de
compiler jusqu'à 16k d'exécutable. Tous les programmes que je me propose de faire
tiendront dans ces 16k.
Voilà, j'ai installé Code Composer, alors je la branche. Hop! NB: Pour télécharger
conde composer, il faut s'inscrire et donner un minimum de renseignements, mais t'as
rien sans rien.
Je démarre Code Composer. Il me demande où est mon code. Si vous n'avez jamais
utilisé Code Composer, vous pouvez créer un nouveau répertoire pour votre code.
Le mien, c'est ~/Develop/CodeWerk430
Maintenant, nous allons créer un nouveau projet. Aller dans le menu file->new->project.
À ce moment là, faire attention d'aller dans le menu Code Composer Studio et choisir
CCS project et non General->Project.
Ensuite, il va falloir choisir le processeur. Comme c'est un 5529, entrez "5529" dans
le filtre, et il ne restera qu'un seul chip. Mettez un nom au projet. J'ai choisi
C-01BlinkLed (programme en C, no 1 et titre). Et choisissez "Empty project (with main.c)"
dans "templates and examples". Finish. Voilà, nous sommes en piste.
On peut immédiatement changer int main(void) en void main(void). Une valeur de retour
n'a aucun sens si le programme n'est pas lancé par un autre programme (i.e. dans un OS).
On peut aussi immédiatement renommer le programme "main.c" en "C01BlinkLed.c". Sinon,
le "workspace" devient vite un foutoir absolu avec tous les programmes qui s'appellent
main.c.
Voila! Il reste uniquement un morceau de code qui ne fait rien. Nous allons ajouter
le code pour faire clignoter une LED. La carte LaunchPad 5529 a une LED rouge connectée
au port 1, pin 0.
Pour utiliser un GPIO en sortie, il faut mettre à 1 le registre de configuration
correspondant. Ce registre est PxDIR (Dir = direction, 0 = entrée, 1 = sortie).
Ensuite, pour allumer ou éteindre la LED, il faut mettre la valeur du port à 1 ou 0.
Exemples:
P1OUT |= 0x01; // Allumer la LED
P1OUT &= ~0x01; // Éteindre la LED
P1OUT ^= 0x01; // Changer l'état de la LED
Du point de vue fréquence de clignotement, le processeur a par défaut (i.e. quand on
ne configure rien) une fréquence approximative de 1 MHz. Par ailleurs, il existe une
fonction __delay_cycles qui permet de mettre un délai à 1 cycle d'horloge près, ce
qui est impossible avec une boucle. Donc si vous mettez un délai de 1 million de cycles,
le processeur attendra 1 seconde.
Le programme est le suivant:
Voilà, votre premier programme sur MSP430 fonctionne.Code:#include <msp430.h> #define RED_LED_DIR P1DIR #define RED_LED_OUT P1OUT #define RED_LED 0x01 #define DELAY_VAL 1000000 void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer RED_LED_DIR |= RED_LED; while(1) { RED_LED_OUT |= RED_LED; __delay_cycles(DELAY_VAL); RED_LED_OUT &= ~RED_LED; __delay_cycles(DELAY_VAL); } }
Il utilise 234 bytes de flash. Il est assez difficile de juger de l'efficacité sur un
programme aussi petit, alors nous allons faire un peu mieux dans le prochain.
Pascal
-----