<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.electroniciens.cnrs.fr/index.php?action=history&amp;feed=atom&amp;title=PulseGenerator_%3A_Developpement_cote_PIC</id>
	<title>PulseGenerator : Developpement cote PIC - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.electroniciens.cnrs.fr/index.php?action=history&amp;feed=atom&amp;title=PulseGenerator_%3A_Developpement_cote_PIC"/>
	<link rel="alternate" type="text/html" href="https://wiki.electroniciens.cnrs.fr/index.php?title=PulseGenerator_:_Developpement_cote_PIC&amp;action=history"/>
	<updated>2026-06-20T05:34:00Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.electroniciens.cnrs.fr/index.php?title=PulseGenerator_:_Developpement_cote_PIC&amp;diff=3663&amp;oldid=prev</id>
		<title>William.benharbone le 15 novembre 2018 à 09:57</title>
		<link rel="alternate" type="text/html" href="https://wiki.electroniciens.cnrs.fr/index.php?title=PulseGenerator_:_Developpement_cote_PIC&amp;diff=3663&amp;oldid=prev"/>
		<updated>2018-11-15T09:57:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div&amp;gt;[[Accueil]] - [[PulseGenerator_:_Presentation|Projet Pulse Generator]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[PulseGenerator_:_Presentation|Présentation]] - [[PulseGenerator_:_Cahier_des_charges|Cahier des charges]] - [[PulseGenerator_:_Gestion_du_projet|Gestion du projet]] - [[PulseGenerator_:_Developpement_cote_PC|Côté PC]] - [[PulseGenerator_:_Developpement_cote_PIC|Côté PIC]] - [[PulseGenerator_:_Developpement_cote_CPLD|Côté CPLD]] - [[PulseGenerator_:_Membres|Membres]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[PulseGenerator_:_Liaison_SPI|Liaison SPI]] - [[Protocole SCPI]] - [[PulseGenerator_:_IHM_face_avant|IHM face avant]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
= Introduction =&lt;br /&gt;
Afin de développer la partie IHM du projet, le choix d&amp;#039;un microcontrôleur (MCU) 32 bits, c&amp;#039;est vite imposé, pas tant pour la puissance de calcul, mais plutôt pour les possibilités d&amp;#039;é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.&lt;br /&gt;
&lt;br /&gt;
= [[Image:Nuvola filesystems folder.png|48px|link=|]] Documents réalisés dans le cadre de ce projet =&lt;br /&gt;
* [[MPLAB X/Créer un Projet]]&lt;br /&gt;
* [https://docs.google.com/document/d/1rKo2CPKfW66dGX0UwZJZlkmaBof9Pi6o0k0_lFLzSZE/edit?usp=sharing Aide mémoire &amp;amp; Raccourcis clavier MPLAB® X]&lt;br /&gt;
*[https://docs.google.com/document/d/17CqRWDO8Loc6muQdrt6wNjuJSYtCLfqOs2TwxZ5bcsc/edit?usp=sharing Configuration du système d&amp;#039;horloge PIC32]&lt;br /&gt;
* [https://docs.google.com/document/d/17t8tud6rIB_tttIRrPLe7R8W-6YxvvCZkin3YJXjGX0/edit?usp=sharing Mise en oeuvre du module UART]&lt;br /&gt;
*[https://docs.google.com/document/d/1AQ_VDYCGPWs-YHCFbS36vB2l25-e9tivQOnNyBD5jag/edit?usp=sharing Tutoriel MCHP File System Library]&lt;br /&gt;
*[https://docs.google.com/document/d/1BThqSrfJWt7BxT6XjegAvMcHYZE-9GPRn8-JypS3SKU/edit?usp=sharing IHM LCD 4x20]&lt;br /&gt;
&lt;br /&gt;
=== [[Image:Nuvola apps ksim.png|34px|link=|]] Cartes PIC32 : ===&lt;br /&gt;
Les cartes de développement en cours d&amp;#039;essais pour l&amp;#039;implémentation du firmware sont:&lt;br /&gt;
* [https://docs.google.com/document/d/10mTqATsOQOE10L8g_o12E9Q5h1wHsGeAfwSvPD0-i-A/edit?usp=sharing PIC32-PINGUINO-OTG], [https://docs.google.com/spreadsheet/ccc?key=0Ak55Twxk_3qtdE1NM3oxeElRVk1qaWo5Y3ZNczg5eVE&amp;amp;usp=sharing voir les ressources de la carte]. Attention le PIC32MX440F256H sur cette carte ne dispose pas des mêmes capacités que les autres.&lt;br /&gt;
* [https://docs.google.com/document/d/1Yj0slz_NahVwMnSBTBhddJHf9vbKDrGc0sbw4CfVVno/edit?usp=sharing UBW32 MX795]&lt;br /&gt;
* [https://docs.google.com/document/d/1R3GuOSApiKXdFNtPSmt4IKGSoLuFl_n6Gp1w568tWzg/edit?usp=sharing chipKIT™ Max32™]&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[https://docs.google.com/document/d/1UaPxm-92oFn1WJd_K2EV6LQQzaeEPnBV1-k5tG7HCEk/edit?usp=sharing chipKIT™ Pro MX7]&amp;#039;&amp;#039;&amp;#039; (CEREBOT™ MX7cK), [https://docs.google.com/spreadsheet/ccc?key=0Ak55Twxk_3qtdGt6TjlDbndkaWh4U2VwdTRDekJmUmc&amp;amp;usp=sharing voir les ressources de la carte], ainsi que l&amp;#039;[https://docs.google.com/spreadsheet/ccc?key=0Ak55Twxk_3qtdFJQd2Z4VFdqWk1TdkJlbFVnWTg0SlE&amp;amp;usp=sharing affectation des broches pour le projet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Image:Nuvola apps krfb.png|48px|link=|]] Communication avec le PC =&lt;br /&gt;
La communication avec le PC se fait à l&amp;#039;aide du [[Protocole SCPI|protocole descriptif SCPI]], formé par des chaînes de caractères ASCII.&lt;br /&gt;
&lt;br /&gt;
La liaison avec le PC passe par la puce FTDI et tout se passe sous la forme d&amp;#039;une connexion série, configuration à 9600 N 8 1.&lt;br /&gt;
&lt;br /&gt;
== [[Image:Monobook icon.svg|48px|link=]] Protocole SCPI ==&lt;br /&gt;
Les commandes disponibles depuis un terminal série sont:&lt;br /&gt;
* &amp;quot;*IDN?\r\n&amp;quot; ..... : demande de lecture du firmware&lt;br /&gt;
* &amp;quot;SPIx1 xxx\r\n&amp;quot;   : écriture d&amp;#039;un octet (0 &amp;lt; &amp;quot;xxx&amp;quot; &amp;lt; 255) sur la liaison SPI&lt;br /&gt;
* &amp;quot;SPIx6 xxx\r\n&amp;quot;   : écriture de 6 octets (0 &amp;lt; &amp;quot;xxx&amp;quot; &amp;lt; 255) sur la liaison SPI&lt;br /&gt;
* &amp;quot;ERROR?\r\n&amp;quot;    : demande de retour de l&amp;#039;état du status du Firmware&lt;br /&gt;
* &amp;quot;ERROR CLR\r\n&amp;quot; : demande d&amp;#039;effacement du status &amp;quot;REPORT_AN_ERROR&amp;quot; du Firmware&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;*IDN?&amp;quot; &amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039; --&amp;gt; instruction qui demande à la carte PIC de renvoyer sa chaîne d&amp;#039;identification,&lt;br /&gt;
    Retour typique: la réponse du PIC au PC est alors &amp;quot;RdE,Pulse Generator,PG01,V.01.00&amp;quot;&lt;br /&gt;
    La chaîne d&amp;#039;identification contient des champs séparés par des virgules:&lt;br /&gt;
    . champ 1: nom du fabricant → ici &amp;quot;RdE&amp;quot;&lt;br /&gt;
    . champ 2: numéro du modèle → ici &amp;quot;Pulse Generator&amp;quot;&lt;br /&gt;
    . champ 3: numéro de série → ici &amp;quot;PG01&amp;quot;&lt;br /&gt;
    . champ 4: version → ici &amp;quot;V.01.00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Image:Crystal Clear app ark.png|54px|link=]] Firmware USB Host =&lt;br /&gt;
Celui-ci a été choisi parmi les démos de la [http://www.microchip.com/pagehandler/en-us/devtools/mla/ libraire MLA de Microchip] pour ça fonctionnalité, et c&amp;#039;est greffé dessus les autres fonctions dont nous avions besoin pour cette partie du développement.&lt;br /&gt;
&lt;br /&gt;
=== USB Device CDC vs UART ===&lt;br /&gt;
Validation du choix du type de firmware à implémenter, [[PulseGenerator_:_Gestion_du_projet#Visio_du_28_f.C3.A9vrier|voir la gestion du projet]].&lt;br /&gt;
&lt;br /&gt;
La mise en oeuvre de l&amp;#039;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&amp;#039;avons pas encore aborder pour ce projet, c&amp;#039;est le souhait d&amp;#039;avoir un firmware USB de type Host afin de pouvoir lire et écrire sur une clef USB.&lt;br /&gt;
&lt;br /&gt;
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&amp;#039;interface avec le PC se fera par l&amp;#039;intermédiaire de la puce FTDI.&lt;br /&gt;
&lt;br /&gt;
Tout est une question de compromis et comme la communication entre l&amp;#039;interface PC et le Pulse Generator ne servira que pour la configuration et le monitoring de ce dernier, la vitesse de transmission n&amp;#039;est ici pas critique. Nous aurons donc deux USB, l&amp;#039;un &amp;quot;Device&amp;quot; via la puce FTDI pour échanger avec le PC et l&amp;#039;autre &amp;quot;Host&amp;quot; pour le stockage sur clef amovible permettant à plusieurs utilisateurs d&amp;#039;utiliser l&amp;#039;instrument avec une configuration simplifiée et personnalisée.&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin: &amp;quot;[http://acquier.developpez.com/cours/USB/ Donner un sens au standard USB]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Fichier de configuration XML ===&lt;br /&gt;
Afin de pouvoir transportez le fichier de configuration de l&amp;#039;instrument &amp;quot;PulseGenerator&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
Le choix du format XML pour le fichier de config c&amp;#039;est justifié par :&lt;br /&gt;
* [http://www.w3.org/standards/xml/ 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)&lt;br /&gt;
* [http://fr.openclassrooms.com/informatique/cours/structurez-vos-donnees-avec-xml XML est une méthode pour structurer des données]&lt;br /&gt;
Il existe de nombreuses solutions permettant le développement de fichiers XML. Vous pouvez par exemple utiliser &amp;quot;Editix&amp;quot;, dont il existe une version gratuite limitée en fonctionnalités mais néanmoins déjà très complète, voir [http://www.freexmleditorsite.com/download.html Editix Lite].&lt;br /&gt;
&lt;br /&gt;
==== Exemple de fichier de configuration ====&lt;br /&gt;
&amp;lt;syntaxhighlight  lang=&amp;quot;xml&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
ou&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;iso-8859-1&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- Fichier de configuration du Pulse Generator --&amp;gt;&lt;br /&gt;
&amp;lt;pulsegenerator&amp;gt;&lt;br /&gt;
    &amp;lt;channels&amp;gt;&lt;br /&gt;
        &amp;lt;author&amp;gt;A. Biganzoli&amp;lt;/author&amp;gt;&lt;br /&gt;
        &amp;lt;datetime&amp;gt;23/05/2014 09:30&amp;lt;/datetime&amp;gt;&lt;br /&gt;
        &amp;lt;channel number=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;name&amp;gt;Output 1&amp;lt;/name&amp;gt;&lt;br /&gt;
            &amp;lt;trigger&amp;gt;&lt;br /&gt;
                &amp;lt;mode&amp;gt;single&amp;lt;/mode&amp;gt;&lt;br /&gt;
                &amp;lt;source&amp;gt;external&amp;lt;/source&amp;gt;&lt;br /&gt;
                &amp;lt;level&amp;gt;rising&amp;lt;/level&amp;gt;&lt;br /&gt;
            &amp;lt;/trigger&amp;gt;&lt;br /&gt;
            &amp;lt;delay unit=&amp;quot;us&amp;quot;&amp;gt;10&amp;lt;/delay&amp;gt;&lt;br /&gt;
            &amp;lt;pulse unit=&amp;quot;us&amp;quot;&amp;gt;100&amp;lt;/pulse&amp;gt;&lt;br /&gt;
        &amp;lt;/channel&amp;gt;&lt;br /&gt;
    &amp;lt;/channels&amp;gt;&lt;br /&gt;
&amp;lt;/pulsegenerator&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Celui-ci devra être sauvegardé avec le nom suivant PG{aaaammqq}T{hhmi}.xml, &amp;#039;&amp;#039;ex&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;PG20140523T0930.xml&amp;#039;&amp;#039;&amp;#039; (réf: [http://fr.wikipedia.org/wiki/ISO_8601 représentation numérique de la date et de l&amp;#039;heure]&lt;br /&gt;
&lt;br /&gt;
[[Image:Nuvola apps kate.png|18px|link=||]] TODO: définir l&amp;#039;ensemble des balises (exemple de possibilité [http://www.tiepie.com/en/classroom/Measurement_basics/Triggering Triggering])&lt;br /&gt;
&lt;br /&gt;
[[Image:Nuvola apps kate.png|18px|link=||]] TODO: faire un [http://fr.openclassrooms.com/informatique/cours/structurez-vos-donnees-avec-xml/introduction-aux-definitions-et-aux-dtd fichier (interne) de définition DTD]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Image:Crystal Clear app kcmpci.png|54px|link=]] Communication SPI avec le CPLD =&lt;br /&gt;
La communication avec le CPLD se fait à l&amp;#039;aide d&amp;#039;une [[PulseGenerator_:_Liaison_SPI|liaison SPI 8 bits]], dont le PIC est le maître.&lt;br /&gt;
&lt;br /&gt;
Les signaux SPI sont câblés de la façon suivante, &amp;#039;&amp;#039;&amp;#039;Module SPI1 du PIC32 sur le connecteur Pmod JD&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot; style=&amp;quot;text-align:center;&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
 |----&lt;br /&gt;
 ! Signaux SPI || PIC32 Signal Name || Connecteur Pmod&lt;br /&gt;
 |----&lt;br /&gt;
 ! SS&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;SS1&amp;#039;&amp;#039;&amp;#039;/IC2/RD9 || JD-01&lt;br /&gt;
 |----&lt;br /&gt;
 ! MOSI&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;SDO1&amp;#039;&amp;#039;&amp;#039;/OC1/INT0/RD0 || JD-02&lt;br /&gt;
 |----&lt;br /&gt;
 ! MISO&lt;br /&gt;
 | T5CK/&amp;#039;&amp;#039;&amp;#039;SDI1&amp;#039;&amp;#039;&amp;#039;/RC4 || JD-03&lt;br /&gt;
 |----&lt;br /&gt;
 ! SCLK&lt;br /&gt;
 | &amp;#039;&amp;#039;&amp;#039;SCK1&amp;#039;&amp;#039;&amp;#039;/IC3/PMCS2/PMA15/RD10 || JD-04&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= [[Image:Nuvola filesystems folder.png|48px|link=|]] Explorer le projet PIC avec MPLAB® X IDE =&lt;br /&gt;
=== Ouverture du projet : ===&lt;br /&gt;
&amp;lt;table align=&amp;#039;center&amp;#039; border=&amp;#039;0&amp;#039; cellpadding=&amp;#039;10&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier:PG_PIC_OpenProject_v01.jpg|center|784px|link=|]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Une fois l&amp;#039;environnement MPLAB® X ouvert, cliquez sur l&amp;#039;icône &amp;quot;Open Project&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Visualiser les tâches a faire ou en cours : ===&lt;br /&gt;
&amp;lt;table align=&amp;#039;center&amp;#039; border=&amp;#039;0&amp;#039; cellpadding=&amp;#039;10&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Pour afficher les tâches, allez dans le menu &amp;#039;&amp;#039;&amp;#039;Window &amp;gt; Tasks&amp;#039;&amp;#039;&amp;#039; [Ctrl+6]&lt;br /&gt;
&lt;br /&gt;
Voir &amp;quot;[http://microchip.wikidot.com/mplabx:tools-options-misc-tasks &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Tasks Tab&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;]&amp;quot; et &amp;quot;[http://microchip.wikidot.com/mplabx:tasks-list &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Tasks List&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;]&amp;quot; sur le Wiki de Microchip&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier:PG_PIC_TasksProject_v01.jpg|center|784px|link=|]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Visualiser et parcourir les fonctions du projet : ===&lt;br /&gt;
&amp;lt;table align=&amp;#039;center&amp;#039; border=&amp;#039;0&amp;#039; cellpadding=&amp;#039;10&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Fichier:PG_PIC_CallGraphProject_v01.jpg|center|784px|link=|]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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&amp;#039;une fonction, ici le &amp;quot;main&amp;quot;, et choisir dans le menu contextuel &amp;quot;[http://microchip.wikidot.com/mplabx:call-graph &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Show Call Graph&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;]&amp;quot;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>William.benharbone</name></author>
	</entry>
</feed>