samedi 15 février 2014

Carte SD, MSP430 Launchpad et Energia

Comme le titre l'indique, nous allons nous amuser à lire et écrire sur une carte SD en utilisant le MSP430 Launchpad de Texas Instruments.  Pour ce faire, je vais encore une fois utiliser les petits lecteurs de carte commercialisés par LC Studio, puisqu'ils sont facile à trouver et ne coûtent presque rien...  Et pas question de se compliquer la vie avec Code Composer Studio:  nous utiliserons Energia afin de programmer le Launchpad à la manière Arduino.

Le Launchpad comporte un avantage sur l'Arduino: puisqu'il fonctionne à 3,3 V, aucune conversion de niveau logique ne sera requise:  votre lecteur de carte SD sera donc branché directement au Launchpad, de la façon suivante:

Carte SD  ------ Launchpad
GND         ------    GND
+3.3          ------    Vcc
+5             ------    Pas branché
CS            ------     P2.0
MOSI       ------     P1.7
SCK         ------    P1.5
MISO       ------    P1.6


Attention:  ces branchements sont valables pour un Launchpad muni du MSP430G2553; d'autres microcontrôleurs supportés par le Launchpad ont leurs pins MOSI et MISO inversées (consultez cette référence pour connaître avec certitude la position des pins de votre configuration).

Côté logiciel, toutefois, le Launchpad est nettement désavantagé par rapport à l'Arduino.  Le problème, c'est qu'il comporte beaucoup moins de mémoire RAM.  Par conséquent, la seule bibliothèque qu'on peut raisonnablement utiliser pour gérer une carte SD est la "Petit FatFS" (oui, je sais, ce nom est épouvantable). Spécialement conçue pour les microcontrôleurs à mémoire restreinte, cette bibliothèque n'offre pas toutes les fonctions auxquelles ont pourrait généralement s'attendre.  Ainsi, elle est incapable de créer un fichier sur la carte SD:  on peut uniquement lire un fichier, ou écrire à l'intérieur d'un fichier déjà existant.  Et ce fichier doit avoir été créé à une taille qui convient à nos besoins, car la bibliothèque "Petit FatFS" n'est pas en mesure de le redimensionner!

Si ces contraintes ne vous rebutent pas, vous pouvez donc télécharger et installer la bibliothèque "Petit FatFS" (vous la placez dans Energia/hardware/msp430/libraries).

Le sketch ci-dessous est évidemment très inspiré des exemples qui accompagnent la bibliothèque.   Si vous désirez l'essayer, vous devez d'abord télécharger ce fichier texte et le copier sur votre carte SD.  Ce fichier contient le texte "Nombre de visites du Launchpad dans ce fichier: 1 ".

Le sketch est prévu pour fonctionner pendant que le serial monitor d'Energia est actif.  Puisque tout est dans la partie "Setup", le code ne s'exécute qu'une seule fois et vous devrez appuyer sur le bouton "reset" si vous désirez qu'il s'exécute à nouveau.

1)  Le sketch fait d'abord la liste des fichiers et répertoires qui se trouvent sur la carte SD, et affiche cette liste dans le moniteur série.
2) Si le fichier "test.txt" existe, on l'ouvre, on lit son contenu afin de l'afficher dans le moniteur série, puis on le referme.
3)  On ouvre à nouveau le fichier afin d'incrémenter le nombre qui s'y trouve:  le texte va donc devenir "Nombre de visites du Launchpad dans ce fichier: 2 ".  On referme le fichier.
4)  On ouvre une nouvelle fois le fichier pour lire son contenu et l'afficher dans le moniteur série, pour vérifier que les modifications ont été enregistrées avec succès.

jeudi 6 février 2014

Fabrication d'un Arduino conçu pour utilisation sur breadboard

J'adore mon Arduino Uno.  Mais il faut bien admettre que, lorsqu'on veut l'utiliser pour piloter un circuit construit sur une platine d'essai (breadboard), ses connecteurs femelles ne sont pas toujours ce qu'il y a de plus pratique.

Il y a quelques mois, j'avais construit mon propre Arduino en plaçant un Atmega 328 directement sur un breadboard.  Cet Arduino minimaliste comportait toutefois certains inconvénients qui expliquent pourquoi je ne l'ai jamais utilisé ensuite:

  • À moins de laisser le montage en permanence sur un breadboard réservé à cette fin, il faut compter quelques minutes pour brancher le quartz, les condensateurs, les résistances et l'adapteur FTDI aux endroits appropriés.  À moins de le faire très souvent, on doit consulter la documentation pour savoir quoi brancher, et à quel endroit.
  • Une fois l'Arduino monté sur le breadboard, il faut encore consulter la documentation pour établir une relation entre les pins de l'Atmega et celles de l'Arduino:  par exemple, l'entrée/sortie numéro 5 de l'Arduino correspond à la pin numéro 11 de l'Atmega.
  • Le circuit intégré n'a pas vraiment été conçu pour être inséré et retiré à répétition dans un breadboard; à la longue, une pin va inévitablement lâcher.


D'où l'intérêt de construire sur une carte perforée un Arduino très fortement inspiré du Boarduino d'Adafruit Industries:
  • Grâce à des connecteurs mâles situés sous la carte, cet Arduino est spécialement conçu pour être inséré dans un breadboard:  une fois inséré, chaque pin de l'Arduino est connectée à une rangée du breadboard. La carte est suffisamment étroite pour que 3 connections demeurent disponibles dans chaque rangée du breadboard.
  • Une rangée de 6 connecteurs mâles est prévue pour l'insertion du FTDI basic breakout:  on y insère le breakout sans être obligé de se demander où brancher individuellement chacune des 6 connexions.
  • Le bouton reset, le quartz, les condensateurs et les résistances nécessaires au fonctionnement de l'Arduino sont déjà soudés sur la carte, bien entendu.   Après insertion de l'adaptateur FTDI, l'Arduino est prêt à l'emploi.
  • Une étiquette collée directement sur le circuit intégré indique le "numéro Arduino" des pins.
On fait comment?

Je vous réfère cet article précédent concernant la façon d'installer le bootloader dans l'Atmega 328.  Si j'étais vous, je m'assurerais que le circuit fonctionne convenablement sur un breadboard avant de tout souder sur la carte.

On s'assure donc d'avoir sous la main:  un Atmega 328 muni de son bootloader, un socket à 28 pins dans lequel on insérera l'Atmega, des headers mâles, un quartz  de 16 MHz, une résistance de 10K, un condensateur de 0,47 µF et deux condensateurs de 22 pF.

Ensuite, j'ai découpé une bande d'une largeur de 6 trous dans un perfboard:  on peut ainsi insérer des headers mâles de part et d'autre du socket (et on ne garde pas plus large que ces 6 trous, sinon on perd de l'espace utilisable sur le breadboard...).  La longueur est de 24 trous, ce qui me semble à peu près le minimum raisonnable pour y insérer tous les composants requis.  

Pour le circuit, je me suis basé sur les schémas du Duemilanove, en supprimant tout ce qui sert à la connexion avec l'ordinateur (c'est l'adaptateur FTDI qui s'en chargera) et la régulation de tension (cet Arduino peut être alimenté par USB grâce à l'adaptateur FTDI, sinon il faudra lui fournir une tension régulée de 5 V précisément; de plus, il n'est pourvu d'aucune sortie 3,3 V).


Yves Pelletier (Twitter:  @ElectroAmateur)