FAQ - Knowledge Center - Texas Instruments Innovation Gateway ESIEE Paris

Documentations-- Périphériques SPI-- Alimentations des Launchpads MSP432P401R-- BOOST-DRV8711 Contrôle moteur pas à pas -- Capteur de lumière I2C -- UART Comptage

Documentations

Où trouver les correspondances PIN <=> n° PIN dans ENERGIA (correspondance avec Arduino) ?
Dans les fichiers : De façon générale, sous windows, tout ce qui est téléchargé par le gestionnaire de cartes est stocké dans le dossier c:\Utilisateurs\nom d'utilisateur\AppData\Local\Energia15

Pour trouver le répertoire AppData de votre machine, ouvrir un navigateur de fichier et saisir %APPDATA% dans la barre du haut. Cela vous amène dans AppData\Roaming, il faut alors revenir d'un sous répertoire en arrière pour aller ensuite dans Local\Energia15 (ou encore taper directement %APPDATA%\..\Local\Energia15 ) En revanche, toutes les bibliothèques de cartes qui ne sont pas spécifiques à une architecture donnée (un Launchpad donné)sont installées dans le même répertoire qu'Energia : chemin où se trouve Energia\energia-1.6.10E18\libraries\ Ce sont des bibliothèques qui reposent sur des bibliothèques standards Energia (et Arduino), comme WIRE, Serial etc.

Utilisation d'un périphérique SPI sur MSP432P401R Rouge

Plusieurs périphériques communiquent avec le microcontrôleur par un bus SPI : l'écran LCD Kentec du Educational BoosterPack MK II par exemple.
Si vous chargez l'un des exemples fournis avec Energia sur une carte Launchpad MSP432P401R RED, ça risque de ne rien afficher...

En effet, les Launchpad MSP432 rouges utilisent une version plus récente de ces processeurs que dans celles des Launchpad MSP432 qui étaient noirs : malheureusement, entre les deux un bit de configuration n'est pas placé au même endroit dans le registre SPI ( voir page 7 de cet errata) . En conséquence le code fourni avec Energia18 n'est plus compatible avec les derniers MSP432P401R (R pour Red).
Résoudre ce problème est cependant très simple : il suffit de modifier une ligne de la bibliothèque SPI, comme indiqué sur le github Energia : github Energia
Concrètement, il suffit d'aller dans le fichier où sont téléchargées les bibliothèques :
Pour chaque autre périphérique SPI, il suffit de faire la même chose dans la bibliothèque qui fait les appels SPI.

Alimentation des cartes Launchpad MSP432P401R

Contrairement aux cartes Arduino, cette carte n'a pas de régulateur permettant de l'alimenter avec une tension externe de plus de 5V. Le processeur est alimenté en 3.3v à travers un régulateur (TPS73533DRB) qui transforme le 5v de l'USB en 3.3v. Pour l'alimenter avec des piles, batteries ou autre, en fonction de la tension il faut : Notez que les régulateurs 78xx (7805, 7812 etc) requirent en générale une différence d'au moins 3v entre l'entrée et la sortie (i.e. pour un 7805 il faut donc au minimum 8v en entrée). Si cela est trop pour vous, sachez qu'il existe des régulateurs "Low Drop" qui fonctionnent avec seulement quelques millivolts de différence. Par exemple le LM2937-05 est compatible broche à broche avec le 7805. Attention cependant de choisir un modèle qui supporte l'intensité nécessaire (le 2937 est ok!)

Notez enfin que d'après le datasheet du MSP432P401R, il peut être alimenté entre 1.6V et 3.7V.

BOOST-DRV8711

Ce circuit permet de piloter des moteurs pas à pas à partir de 2 broches...une fois configuré. Mais attention, ce circuit se configure à l'aide d'un bus I2C, il ne fonctionnera pas directement si il ne reçoit pas au moins une instruction "Motor Enable" par I2C. Je vous recommande d'utiliser la librairie dédiée dispo sur github : https://github.com/256shadesofgrey/energia-drv8711/tree/master/DRV8711 ou bien de faire un simple envoie I2C en utilisant la bibliothèque wire.

Capteur de lumière OPT3001 du BOOSTXL-SENSORS

Doc. de présentation et doc. détaillée.
Pour dialoguer avec ce capteur, il faut utiliser le bus I2C (la bibliothèque "Wire" sous Arduino/Energia). Un exemple complet fonctionnel d'utilisation de ce capteur est disponible dans les exemples de la carte fille "BoosterPack Educational MKII" qui comporte entre autres capteurs celui-ci.
Mais attention, sur la carte Educational BoosterPack MK II, l'OPT3001 est associé à une adresse I2C différente de la carte BOOSTXL-SENSORS, il est donc nécessaire de changer son adresse dans la librairie qui l'utilise. Il faut donc changer l'adresse (codée malheureusement en "dur", la bibliothèque aurait pu recevoir cette adresse en argument) dans \energia-1.6.10E18\libraries\OPT3001\OPT3001.cpp
et modifier l'adresse : #define slaveAdr 0x44 par 0x47

UART - Serial - COM PORT

La liaison série, appelée UART (ou RS232), est un des moyen de communication des plus simple entre 2 appareils : il permet d'envoyer des octets avec seulement 1 fil (et la masse bien sûr). Pour une liaison complète il faut donc 2 fils et la masse. L'un des fils sert pour envoyer des données, on l'appel TX (pour Transmit). Le second, RX (pour Receive) permet de recevoir les données.

Par défaut sur votre Launchpad, 2 broches du MSP432P401R sont connecté à l'interface USB. 2 broches sont donc configurées en TX et RX. L'envoie et la réception des données se font en utilisant un des périphériques "série" interne (UART) du MSP432 qui en comporte plusieurs. Ainsi avec la ligne "Serial.begin(9600);" vous initialisez un de ces périphérique ainsi que les broches connectées à l'USB en mode TX et RX. Puis vous envoyer des octets sur la broche TX avec "Serial.write(65);" par exemple (envoie un octet dont la valeur est 65 sur TX)

Remarque : pour être précis ce sont les broches P1.2_BCLUART_RXD (broche 6) et P1.3_BCLUART_TXD (broche 7) d'après les schémas. La page n°11 du datasheet (SLAS826G) nous informe que cette broche peut être configurée en broche RX du UCA0RXD et la broche 7 en broche TX du UCA0RXD. C'est ce que fait Serial.begin. UCA0 étant le petit nom de l'interface eUSCI quand elle est configurée en mode "UART" n°0 (p903 du reference manual SLAU356H, et oui ces broches peuvent servir pour d'autres type de communication en fonction de la configuration de cette interface eUSCI.

Pour communiquer avec certains périphériques (GPS, LIDAR, capteur US, boussole etc) il se peut que vous ayez besoin de communications séries (serial communications). Il y a 2 solutions.

Première solution, la plus simple, vous débranchez les cavaliers qui connectent RXD et TXD à l'USB pour connecter votre périphérique à la place de l'USB. Dans ce cas "Serial.write(65);" aura toujours pour effet d'envoyer l'octet 65 sur TX mais comme il n'est plus connecté à l'USB le PC ne l'affichera pas. C'est le périphérique connecté à TX qui recevra cet octet.

Seconde solution : vous l'avez compris, ce n'est pas pratique d'avoir à retirer les cavaliers et surtout vous ne pouvez plus afficher sur votre PC. Le MSP432P401R vous propose une alternative : utiliser un 2nd périphérique interne configuré en interface série. Tout a été préparé pour vous par les créateurs d'Energia. Pour cela il suffit d'écrire "Serial1.begin(9600);" Le "1" a son importance puisque cela va engendrer la configuration des broches P3.2 en RX et P3.3 en TX. Vous pouvez alors connecter ces broches à votre périphérique (attention TX du Launchpad sur RX du périphérique, et TX du périphérique sur RX Launchpad). Bien penser aussi à choisir la vitesse (9600, 115200 etc) en fonction des spécifications données pour votre périphérique.

Autre solution : il existe une bibliothèque "SoftwareSerial" qui permet de faire de la communication série sur les broches de son choix. Sachez que cela va mobiliser beaucoup plus votre processeur, et que vous ne pourrez pas atteindre de grandes vitesse. Il est toujours préférable d'utiliser les périphériques série internes du processeurs quand il en a.

Compter des événements

Il arrive souvent d'avoir à compter des impulsions rapides. La première idée qui vient est en général d'incrémenter un compteur en fonction de l'état d'une broche que l'on scrute dans une boucle infinie. Cette solution pose plusieurs problèmes : on ne compte pas une impulsion (transition) mais un état. On risque donc de compter plusieurs fois la même impulsion si on n'ajoute pas un peu de code pour s'assurer de l'état précédent de la broche. D'autre part si plusieurs impulsions ont lieu pendant une itération de la boucle infinie on va alors manquer des impulsions...Enfin, troisième inconvénient : c'est dommage d'occuper un processeur pour compter alors qu'il a sans doute mieux à faire (ou pourrait être en veille pour consommer le moins possible de batterie).

Première solution : utiliser des interruptions. Les interruptions sont une fonctionnalité matérielle du processeurs qui permet de suspendre temporairement l'exécution d'un programme pour exécuter un autre programme (i.e. le programme d'interruption). En effet, on peut configurer certaine broche pour qu'un changement d'état, une transition génère un signal d'interruption interne au processeur qui aura pour effet d'exécuter notre programme d'interruption. Voir AttachInterrupt pour Energia / Arduino.

Seconde solution : faire compter les impulsions par un périphérique interne du processeur (Timer, DMA...). Voir par exemple ce post.


Dernière mise à jour : Thierry Grandpierre , Juin 2018