PulseGenerator : Developpement cote PIC
Introduction
Afin de développer la partie IHM du projet, le choix d'un microcontrôleur (MCU) 32 bits, c'est vite imposé, pas tant pour la puissance de calcul, mais plutôt pour les possibilités d'évolution du système. En effet, un des buts du projet étant basé sur la veille technologique, et même si dans un premier temps les fonctions avancées ne seront pas abordées, nous pourront en fonction des attentes, motivations et implications de chacun, faire évoluer notre IHM par un apprentissage progressif des interfaces du MCU.
Documents réalisés dans le cadre de ce projet
- MPLAB X/Créer un Projet
- Aide mémoire & Raccourcis clavier MPLAB® X
- Configuration du système d'horloge PIC32
- Mise en oeuvre du module UART
- Tutoriel MCHP File System Library
- IHM LCD 4x20
Cartes PIC32 :
Les cartes de développement en cours d'essais pour l'implémentation du firmware sont:
- PIC32-PINGUINO-OTG, voir les ressources de la carte. Attention le PIC32MX440F256H sur cette carte ne dispose pas des mêmes capacités que les autres.
- UBW32 MX795
- chipKIT™ Max32™
- chipKIT™ Pro MX7 (CEREBOT™ MX7cK), voir les ressources de la carte, ainsi que l'affectation des broches pour le projet
Fichier:Nuvola apps krfb.png Communication avec le PC
La communication avec le PC se fait à l'aide du protocole descriptif SCPI, formé par des chaînes de caractères ASCII.
La liaison avec le PC passe par la puce FTDI et tout se passe sous la forme d'une connexion série, configuration à 9600 N 8 1.
Protocole SCPI
Les commandes disponibles depuis un terminal série sont:
- "*IDN?\r\n" ..... : demande de lecture du firmware
- "SPIx1 xxx\r\n" : écriture d'un octet (0 < "xxx" < 255) sur la liaison SPI
- "SPIx6 xxx\r\n" : écriture de 6 octets (0 < "xxx" < 255) sur la liaison SPI
- "ERROR?\r\n" : demande de retour de l'état du status du Firmware
- "ERROR CLR\r\n" : demande d'effacement du status "REPORT_AN_ERROR" du Firmware
"*IDN?" TODO --> instruction qui demande à la carte PIC de renvoyer sa chaîne d'identification, Retour typique: la réponse du PIC au PC est alors "RdE,Pulse Generator,PG01,V.01.00" La chaîne d'identification contient des champs séparés par des virgules: . champ 1: nom du fabricant → ici "RdE" . champ 2: numéro du modèle → ici "Pulse Generator" . champ 3: numéro de série → ici "PG01" . champ 4: version → ici "V.01.00"
Fichier:Crystal Clear app ark.png Firmware USB Host
Celui-ci a été choisi parmi les démos de la libraire MLA de Microchip pour ça fonctionnalité, et c'est greffé dessus les autres fonctions dont nous avions besoin pour cette partie du développement.
USB Device CDC vs UART
Validation du choix du type de firmware à implémenter, voir la gestion du projet.
La mise en oeuvre de l'USB Device CDC comme firmware du microcontrôleur semble marquer des points en terme de performance, mais il y a une chose que nous n'avons pas encore aborder pour ce projet, c'est le souhait d'avoir un firmware USB de type Host afin de pouvoir lire et écrire sur une clef USB.
Comme nous ne pouvons pas implémenter simultanément le mode Host et le mode Device, nous choisirons le premier pour conserver cette option dans notre proto, ce qui implique que l'interface avec le PC se fera par l'intermédiaire de la puce FTDI.
Tout est une question de compromis et comme la communication entre l'interface PC et le Pulse Generator ne servira que pour la configuration et le monitoring de ce dernier, la vitesse de transmission n'est ici pas critique. Nous aurons donc deux USB, l'un "Device" via la puce FTDI pour échanger avec le PC et l'autre "Host" pour le stockage sur clef amovible permettant à plusieurs utilisateurs d'utiliser l'instrument avec une configuration simplifiée et personnalisée.
Pour aller plus loin: "Donner un sens au standard USB"
Fichier de configuration XML
Afin de pouvoir transportez le fichier de configuration de l'instrument "PulseGenerator" pouvant être généré par exemple par une application PC, voir un simple traitement de texte, soit un fichier stocké sur une clef USB et pouvant être interprété par le firmware du microcontrôleur, nous avons du choisir entre plusieurs formats de fichier.
Le choix du format XML pour le fichier de config c'est justifié par :
- XML est libre de droits, indépendant des plates-formes et correctement pris en charge par les différentes parties (Application PC / Support / Firmware MCU)
- XML est une méthode pour structurer des données
Il existe de nombreuses solutions permettant le développement de fichiers XML. Vous pouvez par exemple utiliser "Editix", dont il existe une version gratuite limitée en fonctionnalités mais néanmoins déjà très complète, voir Editix Lite.
Exemple de fichier de configuration
<?xml version="1.0" encoding="UTF-8"?>
ou
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<!-- Fichier de configuration du Pulse Generator -->
<pulsegenerator>
<channels>
<author>A. Biganzoli</author>
<datetime>23/05/2014 09:30</datetime>
<channel number="1">
<name>Output 1</name>
<trigger>
<mode>single</mode>
<source>external</source>
<level>rising</level>
</trigger>
<delay unit="us">10</delay>
<pulse unit="us">100</pulse>
</channel>
</channels>
</pulsegenerator>
Celui-ci devra être sauvegardé avec le nom suivant PG{aaaammqq}T{hhmi}.xml, ex: PG20140523T0930.xml (réf: représentation numérique de la date et de l'heure
Fichier:Nuvola apps kate.png TODO: définir l'ensemble des balises (exemple de possibilité Triggering)
Fichier:Nuvola apps kate.png TODO: faire un fichier (interne) de définition DTD
Fichier:Crystal Clear app kcmpci.png Communication SPI avec le CPLD
La communication avec le CPLD se fait à l'aide d'une liaison SPI 8 bits, dont le PIC est le maître.
Les signaux SPI sont câblés de la façon suivante, Module SPI1 du PIC32 sur le connecteur Pmod JD :
Signaux SPI | PIC32 Signal Name | Connecteur Pmod |
---|---|---|
SS | SS1/IC2/RD9 | JD-01 |
MOSI | SDO1/OC1/INT0/RD0 | JD-02 |
MISO | T5CK/SDI1/RC4 | JD-03 |
SCLK | SCK1/IC3/PMCS2/PMA15/RD10 | JD-04 |
Explorer le projet PIC avec MPLAB® X IDE
Ouverture du projet :
Une fois l'environnement MPLAB® X ouvert, cliquez sur l'icône "Open Project" |
Visualiser les tâches a faire ou en cours :
Pour afficher les tâches, allez dans le menu Window > Tasks [Ctrl+6] Voir "Tasks Tab" et "Tasks List" sur le Wiki de Microchip |
Visualiser et parcourir les fonctions du projet :
MPLAB® X vous permet de naviguer à travers les fonctions de manière graphique, pour cela vous devez par exemple faire un clic droit sur le nom d'une fonction, ici le "main", et choisir dans le menu contextuel "Show Call Graph" |