<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Microcontrôleur &#8211; Electronique et Informatique</title>
	<atom:link href="https://amaury-laurent.fr/category/tutoriaux/microcontroleur-tutoriaux/feed/" rel="self" type="application/rss+xml" />
	<link>https://amaury-laurent.fr</link>
	<description>Site web d&#039;Amaury LAURENT</description>
	<lastBuildDate>Wed, 16 Jun 2021 16:27:28 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.2</generator>

<image>
	<url>https://amaury-laurent.fr/wp-content/uploads/2015/09/favicon.png</url>
	<title>Microcontrôleur &#8211; Electronique et Informatique</title>
	<link>https://amaury-laurent.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</title>
		<link>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/</link>
					<comments>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/#comments</comments>
		
		<dc:creator><![CDATA[adrienBS]]></dc:creator>
		<pubDate>Wed, 06 Mar 2019 14:36:49 +0000</pubDate>
				<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[Capteurs]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Tutoriaux]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LattePanda]]></category>
		<category><![CDATA[Lidar]]></category>
		<category><![CDATA[LINX]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1012</guid>

					<description><![CDATA[<p>Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/">Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 mètres sur 360° et de contrôler l’ensemble à partir d’une IHM (Interface Homme Machine) tactile.</p>
<p><em>Avant de commercer cet article, je tiens à remercier Amaury qui m&rsquo;a permis de publier cet article sur son site. 🙂</em></p>
<div style="width: 640px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-1012-1" width="640" height="360" preload="metadata" controls="controls"><source type="video/mp4" src="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4?_=1" /><a href="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4">https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4</a></video></div>
<p>Je découvre actuellement l’électronique et la programmation entre  LabVIEW et Arduino et je tiens à partager certains résultats avec vous. Certaines notions abordées ne seront pas forcément poussées ou assez détaillées pour des lectures ou lectrices plus expérimenté(e)s.</p>
<h1><a name="_Toc2727674"></a>Théorie de mesure de distance Lidar</h1>
<p>Lidar est l’acronyme anglais de <em>light detection and ranging </em>qui est une technique qui permet de mesurer des distances allant de quelques centimètres à la distance Terre-Lune. Le lidar Garmin utilisé ici, génère un train d’onde électromagnétique cohérente (un faisceau laser InfraRouge) de longueur d’onde λ de 905 nm. Les trains d’onde sont envoyés à une fréquence comprise entre 10 à 20 kHz (à ne pas confondre avec la fréquence propre de l’onde du laser IR) d’après les datasheet. Les trains d’ondes se réfléchissent sur la cible visée par le capteur. Une partie de la lumière du laser revient sur le capteur. Une photodiode placée dans le Lidar et sensible dans la plage de longueur d’onde des IR reçoit l’onde réfléchie. L’écart de temps entre le départ d’un train d’onde et son retour est mesuré par le capteur. Cet écart de temps est proportionnel à la distance parcourue par l’onde. Cette technologie de mesure est communément appelée <em>Time of Flight</em>.</p>
<h1><a name="_Toc2727675"></a>Le matériel utilisé pour la réalisation</h1>
<table style="height: 778px" width="621">
<tbody>
<tr style="height: 24px">
<td style="width: 224px;text-align: center;height: 24px"><strong>Matériel</strong></td>
<td style="width: 172px;text-align: center;height: 24px"><strong>Prix (neufs)</strong></td>
<td style="width: 203px;text-align: center;height: 24px"><strong>Site achat</strong></td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Carte LattePanda 4 GB/64 GB DFR0419 (sans écran et capteur tactile)</td>
<td style="width: 172px;height: 72px;text-align: center">~ 187 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Ecran 7’ + capteur tactile + Ventilateur et refroidisseur métalliques</td>
<td style="width: 172px;height: 72px;text-align: center">~ 80 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">LabVIEW pour l&rsquo;enseignement 2014 (version d’essai gratuite 7 jours)</td>
<td style="width: 172px;height: 72px;text-align: center">A partir de 196 €</td>
<td style="width: 203px;height: 72px;text-align: center">NI</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">LIDAR GARMIN lite V3</td>
<td style="width: 172px;height: 48px;text-align: center">143 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon (Expédié et vendu par <a href="https://www.amazon.fr/gp/help/seller/at-a-glance.html/ref=dp_merchant_link?ie=UTF8&amp;seller=A2PIW95AGLR8G3" target="_blank" rel="noopener">RobotShop inc</a>.)</td>
</tr>
<tr style="height: 120px">
<td style="width: 224px;height: 120px;text-align: center">Driver de moteur Pas à Pas Bipolaire</p>
<p>(A4988 1182)</td>
<td style="width: 172px;height: 120px;text-align: center">7€</td>
<td style="width: 203px;height: 120px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Moteur pas à Pas Bipolaire (14HM11-0404S)</td>
<td style="width: 172px;height: 48px;text-align: center">18 €</td>
<td style="width: 203px;height: 48px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Laser Rouge de niveau recyclé</td>
<td style="width: 172px;height: 24px;text-align: center">0 €</td>
<td style="width: 203px;height: 24px;text-align: center">Sans objet</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">2 Piles de 9 Volts + 2 connecteurs</td>
<td style="width: 172px;height: 48px;text-align: center">~ 10 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Une breadboard (400 points minimum)</td>
<td style="width: 172px;height: 48px;text-align: center">3 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Batterie Li 20000mAh</td>
<td style="width: 172px;height: 24px;text-align: center">30 €</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Condensateur 100µF 16V</td>
<td style="width: 172px;height: 24px;text-align: center">Qlq centimes</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">2 Condensateurs 0.1µF</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Résistance de 1KΩ</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">1 Résistance de 500Ω de 1W (ou 4 de 2KΩ mis en parallèles)</td>
<td style="width: 172px;height: 48px;text-align: center">Idem</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Régulateur de tension LM7815</td>
<td style="width: 172px;height: 24px;text-align: center">1,5€</td>
<td style="width: 203px;height: 24px;text-align: center">RS Components</td>
</tr>
<tr style="height: 10px">
<td style="width: 224px;height: 10px;text-align: center">Des fils</td>
<td style="width: 172px;height: 10px;text-align: center">recyclés</td>
<td style="width: 203px;height: 10px;text-align: center"></td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center"><strong>Coût total</strong></td>
<td style="width: 172px;height: 24px;text-align: center"><strong>667 €</strong></td>
<td style="width: 203px;height: 24px;text-align: center"></td>
</tr>
</tbody>
</table>
<p>Nota : un clavier et une souris seront très certainement nécessaires pour naviguer sur LattePanda.</p>
<h1><a name="_Toc2727676"></a>Le Montage global</h1>
<p>Le schéma suivant a été réalisé sur le logiciel libre Fritzing. N’ayant pas trouvé de modèle de LattePanda dans la librairie Fritzing, il a donc été représenté par sa carte Arduino qu’il intègre. Un schéma du LattePanda est donné après.</p>
<p><img decoding="async" fetchpriority="high" class="alignnone wp-image-1016 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png" alt="" width="962" height="908" /></p>
<p style="text-align: center">Figure 1 Schéma Global de la mesure Lidar (à l’aide du logiciel gratuit Fritzing)</p>
<p>L’intégration des différents éléments a été faite à l’aide d’un vieux jeu mécanos.</p>
<h2><a name="_Toc2727677"></a>LattePanda</h2>
<p>Le modèle de  LattePanda utilisé est le 4 GB/64 GB sous Windows 10. Ce modèle suffit pour faire tourner un LabVIEW 2014 (<a href="https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm" target="_blank" rel="noopener">https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm</a> ). LattePanda sera très utile car il intègre une carte Arduino Leonardo et ses E/S associées. A l’aide des entrées et sorties numériques (0-5V), il sera possible de piloter le moteur pas à pas, le laser et d’acquérir le signal du Lidar. Le LattePanda est enfaîte un petit ordinateur d’instrumentation très compacte et assez puissant. Le projet n’utilise ici qu’une petite partie de sa capacité. Pour plus de détails sur LattePanda, le lecteur pourra se référer à l&rsquo;article : <a href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda – Première mise en route</a></p>
<p>Le schéma ci-dessous reprend les principales E/S :</p>
<p><img decoding="async" class="alignnone size-full wp-image-1017 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg" alt="" width="649" height="637" /></p>
<p style="text-align: center">Figure 2 E/S LattePanda 4GB/64GB (https://www.lattepanda.com)</p>
<h2><a name="_Toc2727678"></a>Le moteur Pas à Pas</h2>
<p>Le moteur Pas à Pas bipolaire est contrôlé par un Driver Pololu (A4988). Le schéma ci-après (d’après le site Pololu qui commercialise le Driver) permet de connecter le moteur et le Driver. La puce du Driver est alimentée en 5 V par la carte Arduino du LattePanda. Ce driver a été choisi car il est facilement pilotable à partir des E/S digitales du Arduino, qui seront contrôlées par le logiciel ; lequel qui sera abordé après.</p>
<p><img decoding="async" class="alignnone size-full wp-image-1018 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png" alt="" width="605" height="377" /></p>
<p style="text-align: center">Figure 3 Schéma de fonctionnement du Drive couplé au moteur Pas à Pas (bipolaire)</p>
<p>Pour connecter correctement le moteur pas à pas au driver on pourra suivre le tableau suivant :</p>
<table>
<tbody>
<tr>
<td width="136"><strong>Fils côté moteur</strong></td>
<td width="140"><strong>Pin entrée Driver</strong></td>
</tr>
<tr>
<td width="136">A (noir)</td>
<td width="140">1A</td>
</tr>
<tr>
<td width="136">C (vert)</td>
<td width="140">1B</td>
</tr>
<tr>
<td width="136">B (rouge)</td>
<td width="140">2A</td>
</tr>
<tr>
<td width="136">D (bleu)</td>
<td width="140">2B</td>
</tr>
</tbody>
</table>
<p><img decoding="async" class="alignnone size-full wp-image-1019 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Moteur.png" alt="" width="209" height="212" /></p>
<p style="text-align: center">Figure 4 Schéma du moteur Pas à Pas (14HM11-0404S) d&rsquo;après datasheet Go Tronic</p>
<p>Il est conseillé de relier la masse de l’alimentation du moteur à la masse du circuit afin d’éviter de le moteur ne grésille. Un petit régulateur LM7815 (15 V) permet de limiter la tension en entrée. Pour ma part j’ai utilisé deux piles de 9 V. En sortie du régulateur il vaut mieux ne pas oublier de limiter le courant à l’aide d’une résistance de charge. Le moteur consomme 400 mA par phase. Pour limiter le courant j’ai choisi de mettre en parallèle 4 résistances de 2 kΩ de 1/4 W qui forment une résistance 500 Ω supportant 1 W. Avec ce montage, le moteur ne chauffe et a assez de puissance pour réaliser ses pas. Un potentiomètre présent sur le driver permet de réguler la tension. Le réglage du courant limite est disponible dans la vidéo disponible en suivant de <a href="https://www.youtube.com/watch?v=89BHS9hfSUk" target="_blank" rel="noopener">lien</a> (https://www.youtube.com/watch?v=89BHS9hfSUk). Pololu préconise de régler le courant limite à l’aide du réglage du VREF et non en entrée comme cela a été fait ici.</p>
<ul>
<li>Une fois le montage du moteur réalisé, un test du moteur peut être réalise. Pour cela, la Pin STEP du driver peut être connecté au 5V délivré par l’Arduino. Le moteur est censé faire un pas. Sinon, revérifier le schéma de montage.</li>
</ul>
<p>Les entrées MS1, MS2 et MS3 permettent de réduire le Pas, c’est-à-dire de gagner en précision angulaire. Le tableau ci-dessous affiche les niveaux à utiliser sur les pins en fonctions de la résolution du pas.</p>
<p><img decoding="async" class="alignnone size-full wp-image-1021 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png" alt="" width="369" height="193" /></p>
<p style="text-align: center">Figure 5 Tableau de résolution des pas d&rsquo;après le site Pololu</p>
<p>Dans le cas présent, un pas complet est de 0,9°, un demi-pas en vaudra la moitié et ainsi de suite. Dans le présent projet, il n’est pas possible de descendre en dessous du demi-pas.</p>
<p><strong>Nota important:</strong> il est fortement<strong> déconseillé de déconnecter le moteur du driver quand le moteur est en fonctionnement</strong> car le Driver peut-être endommagé. Il faudra couper l’alimentation du moteur pour effectuer des changements de postions (si besoin) sur les 4 fils du moteur pas à pas.</p>
<h2><a name="_Toc2727679"></a>Le Lidar</h2>
<p>Pour fonctionner le Lidar doit être alimenté en 5 V. L’alimentation 5 V de l’Arduino du LattePanda convient parfaitement. L’acquisition de la mesure de distance est lue en largeur d’impulsion (PWM) sur le fil jaune. Les datasheet préconisent l’utilisation d’une résistance de 1KΩ qui est reliée entre le fil de sortie de la mesure et la masse comme ci-dessous :</p>
<p><img decoding="async" class="size-full wp-image-1020 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png" alt="" width="604" height="457" /></p>
<p style="text-align: center">Figure 6 Schéma de câblage du lidar en acquisition de mesure en PWM (d&rsquo;après datasheet Gramin)</p>
<p>Concernant les aspects métrologiques du capteur, la portée maximale du Lidar est de 40 mètres. Sa résolution est de 1 cm.</p>
<p>L&rsquo;incertitude de mesure du Lidar Lite V3,  entre 0 et 5m est de ± 2.5cm et ± 10 cm au delà.</p>
<p>En sortie de mesure en largeur d&rsquo;impulsion, la sensibilité est de 10 µs/cm. Cette valeur est à retenir pour comprendre la partie acquisition du signal du logiciel.</p>
<h2><a name="_Toc2727680"></a>Le Laser de visée</h2>
<p>Le laser est utile ici afin d&rsquo;avoir un repère visuel sur l&rsquo;orientation du Lidar. Le laser est du même type qu’utilisé pour les pointeurs laser de présentation (diode laser). Dans le cas présent, un laser d’alignement de 1 mW (λ = 650 nm) de couleur rouge a été utilisé. Il est alimenté en 5V par une entrée digitale de carte Arduino activable à partir du logiciel.</p>
<p><strong><span style="color: #ff0000">Attention aux yeux !</span></strong> Le laser concentre l&rsquo;énergie sur une surface très petite et a pour conséquence d&rsquo;être nocif pour l’œil.</p>
<p>L&rsquo;utilisateur est responsable de sa sécurité mais également celle des personnes autour !</p>
<h1><a name="_Toc2727681"></a>Le logiciel/programme</h1>
<p>Pour piloter les instruments (Lidar, moteur, laser) le logiciel LabVIEW 2014 est utilisé. Le but n’est pas de faire la présentation ni la promotion de ce logiciel mais de tenter d’expliquer comment utiliser certaines briques LINX. Si LabVIEW n’est pas utilisé, il sera quand même possible de piloter les instruments via un programme développé sur l’IDE Arduino. La suite de l’article pourra paraître obscure pour les personnes non initiées à LabVIEW; je m’en excuse par avance. Cependant, un petit effort a été fait pour que le code soit compris des personnes non initiées à LabVIEW.</p>
<p>Des briques (ou VI) de code LabVIEW ont été développées afin de faciliter grandement la compatibilité entre des cartes Arduino et LabVIEW. Pour utiliser les briques de codes LINX, la bibliothèque LINX côté LabVIEW doit avoir été installée préalablement dans VI Pack Manager (logiciel qui permet de charger des ToolKit ou librairies de programme).</p>
<h2><a name="_Toc2727682"></a>Chargement des librairies</h2>
<p>Avant de compiler le code, il faut charger les bibliothèques. Pour charger les bibliothèques, aller sur l’onglet <em>Tool\MakerHub\LINX\Generate Firmware Librairies :</em></p>
<p><img decoding="async" class="size-full wp-image-1022 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png" alt="" width="612" height="399" /></p>
<p>Et mettre en cible : <strong>C:\Program Files\Arduino\Libraries</strong></p>
<p><img decoding="async" class="wp-image-1023 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png" alt="" width="579" height="486" /></p>
<p>Les librairies sont donc maintenant chargées et opérationnelles.</p>
<h2><a name="_Toc2727683"></a>Configuration du type de carte</h2>
<p>Avant de compiler le code, il faudra configurer le type de carte (Mega, Leonardo) et le type de liaison. Dans ce projet avec LattePanda, la carte Arduino Leonardo est utilisée sur le port COM 4. Dans LabVIEW cliquez dans l&rsquo;onglet <em>Tool </em>puis <em>\MakerHub\LINX\LINX Firmware Wizard… </em>il faut configurer les champs à l’aide des informations mentionnées plus haut.</p>
<h2><a name="_Toc2727683"></a>TEST simple avec une LED</h2>
<p>Pour vérifier que la carte fonctionne correctement, l’exemple du pilotage d’une LED pourra être réalisé (onglet <em>HELP/Find Example…</em>). L&rsquo;exemple est prêt à être utilisé et ne nécessite que la mise en place d&rsquo;une LED en série avec une résistance de 220 Ω reliées au LattePanda.</p>
<p><img decoding="async" class="size-full wp-image-1024 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png" alt="" width="605" height="421" /><img decoding="async" class="size-full wp-image-1025 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png" alt="" width="766" height="616" /></p>
<p>Mettre le port COM 4 (normalement) et configurer la pin du Arduino sur laquelle est reliée l&rsquo;anode de la LED (la patte la plus longue) et ne pas oublier la résistance de 220 Ω en série 😉 . Puis relier la résistance à la masse et lancer le programme (flèche blanche).</p>
<p>Si la LED clignote quand le bouton est pressé, c’est gagné. Passer aux étapes suivantes. Sinon, il faut trouver la raison de cette malchance.</p>
<p>Ne pas hésiter à reconfigurer la carte car il arrive (trop) souvent que cela saute au bout de 3 à 4 compilations. Par exemple, il vaut mieux arrêter proprement la boucle avec un bouton « stop » placé dans la boucle While plutôt que de stopper le programme avec le bouton rouge de LabVIEW.</p>
<h1>L&rsquo;IHM (côté « Face Avant » de LabVIEW)</h1>
<p>L&rsquo;IHM qui permet à l&rsquo;utilisateur de contrôler les instruments pourra ressembler fortement à celle présentée ci-dessous.</p>
<p>Les configurations des Pins et du port sont situées à gauche.</p>
<p>Le bouton « Motor ON » permet d&rsquo;activer le driver sur la Pin ENABLE (Driver).</p>
<p>Le bouton « Left » permet d&rsquo;activer la Pin STEP (Driver)  et faire faire un pas au moteur.</p>
<p>Le bouton « Right »agit comme le bouton « Left » mais active la pin DIR (Driver) à l&rsquo;état haut et permet de changer de sens de rotation.</p>
<p>Un bouton « Laser » permet d&rsquo;activer le laser de visée.</p>
<p>Un bouton STOP permet d&rsquo;arrêter l’exécution proprement et d&rsquo;arrêter le moteur (ENABLE) et le Laser.</p>
<p>Trois types d’indicateurs sont présents : numérique (format chaîne de caractère), une barre de remplissage, et un graphe déroulant.</p>
<p>Un contrôleur barre graphe permet de passer au pilotage Pas par Pas (un clique sur LEFT ou RGTH = 0,9°) ou active la vitesse constante (comme sur la vidéo du début de l&rsquo;article).</p>
<p><img decoding="async" class=" wp-image-1036 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png" alt="" width="700" height="376" /></p>
<p>Pour le lecteur non initié à LabVIEW, la « face avant » est la partie visible finale du programme disponible pour l&rsquo;utilisateur.</p>
<p>Le code est développé dans une seconde fenêtre appelée « Diagramme ». Et c&rsquo;est la partie de développement du Diagramme que nous allons maintenant aborder.</p>
<p><em>Nota : un Crtl+E permet de permuter rapidement rentre la face avant et le diagramme.</em></p>
<h2><a name="_Toc2727684"></a>La structure (côté diagramme)</h2>
<p>La structure générale du programme est la suivante :</p>
<p><img decoding="async" class="size-full wp-image-1026 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png" alt="" width="605" height="230" /></p>
<p style="text-align: center">Figure 7 Structure générale du programme dans un boucle While</p>
<p>Le code source ne sera pas disponible dans cet article mais les principales briques seront détaillées pour arriver facilement au résultat. 🙂</p>
<h2><a name="_Toc2727685"></a>Lecture de la valeur de la distance du Lidar</h2>
<p>Le Lidar Garmin Lite V3 admet deux sorties de données pour la lecture des mesures : I2C ou PWM. La lecture en modulation de largeur d’impulsion est apparue comme le plus simple du point de vue du soft. Un VI LINX permet de réaliser cette mesure rapidement contre plusieurs VI pour la communication en I2C.</p>
<p>Dans la boucle While cadencée à 50 ms, la mesure du Lidar est effectuée à l’aide du VI « <strong>Lecture de la largueur d’impulsion</strong> » :</p>
<p><img decoding="async" class="size-full wp-image-1027 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png" alt="" width="385" height="150" /></p>
<p>L’entrée <strong>DO Channel</strong> est connectée et la valeur de la Pin 0 de la carte Arduino est rentrée (cf Figure 8 ci-dessous).</p>
<p>Un tableau général de configuration des Pins d’E/S pourra être créé en amont de la boucle While comme ceci :</p>
<p><img decoding="async" class="size-full wp-image-1028" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png" alt="" width="733" height="645" /></p>
<p>La valeur en sortie du VI n’est pas en cm mais en largeur d’une impulsion (µs), qui est proportionnelle à la distance mesurée en cm par le lidar. Afin de lire et d’afficher une valeur en cm, il faut diviser les valeurs en sortie du VI par une constante valant 10 pour obtenir une mesure de longueur (en cm). Cette constante est la sensibilité (en µs/cm) du capteur abordé précédemment que l&rsquo;on peut retrouver dans la documentation du Lidar Lite V3 (page 4, §Mode Pin Control).</p>
<p>Une moyenne glissante pourra être développée afin d’obtenir une mesure plus stable et plus juste à l’aide des registres à décalage (flèches oranges sur les bords de la boucle While). L’inconvénient de cette technique est qu’il faudra attendre n fois le nombre de points moyennés, pour obtenir le résultat. Si l’on choisit de moyenner sur 10 points et que le temps du cadencement est de 500 ms, alors le résultat sera juste au bout de 5 secondes. Ne pas oublier d’initialiser les registres à décalage à zéro. Différents types d’indicateurs pourront être placés en face avant comme ci-dessous :</p>
<p><img decoding="async" class="alignnone size-full wp-image-1029 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png" alt="" width="1069" height="627" /></p>
<p style="text-align: center">Figure 9 Moyenne glissante (côté diagramme/code) et exemples d&rsquo;indicateurs en face avant</p>
<p>Comme le Lidar affiche une incertitude de ± 2.5 cm et une résolution de 1 cm, il a été choisi de n’afficher que des valeurs entières arrondies au centimètre.</p>
<h2><a name="_Toc2727686"></a>VI de contrôle du Driver et du moteur</h2>
<p>Un VI « écrire sur des E/S digitales » permet d’activer les sorties de l’Arduino du LattePanda afin de piloter le Driver.</p>
<p>La fonction suivante a été construite comme ci-après :</p>
<p><img decoding="async" class="size-full wp-image-1030 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-E-S-digitales.png" alt="" width="186" height="156" /></p>
<p>Cette fonctionnalité permet de prendre, en entrée, un tableau de booléens (ordres des boutons pressés en face avant) et d’activer les E/S correspondantes.</p>
<ul>
<li><strong>La première entrée</strong> (en partant du haut) de la fonction « <strong>Construire un tableau</strong>» est reliée au bouton « MOTOR ON » et agit sur la Pin « ENABLE » du Driver. Ce bouton permet vraisemblablement d’activer l’alimentation du driver et du moteur.</li>
<li><strong>La seconde entrée </strong>permet de gérer la direction du moteur. Le fil (vert) est relié au bouton « RIGHT » de mon interface afin d’active la Pin « DIR » du driver. Le moteur tourne ainsi dans le sens horaire.</li>
<li><strong>La troisième entrée</strong> active la pin « STEP » du driver et permet d’effectuer un Pas de 0,9° (avec les entrées du driver MS1=MS2=MS3=0=GND). Le moteur effectue un pas par changement de niveau de l’état bas à l’état haut. Cette entrée est active si le bouton « LEFT » OU le bouton « RIGHT » est activé. Nous verrons ensuite comment faire tourner le moteur à vitesse constante.</li>
<li><strong>La quatrième entrée</strong> active le laser. Un laser de visée peut fonctionner qu’avec une tension de 5V et ne consomme que quelques milliampères. Il est souhaitable pour la sécurité des personnes, que le bouton « STOP » qui arrête le programme, puisse stopper l’émission du laser à la fin de la manip en même temps. Pour cela on pourra mettre une boucle conditions comme ci-dessous :</li>
</ul>
<p><img decoding="async" class="size-full wp-image-1031 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png" alt="" width="746" height="166" /></p>
<p>Il pourra être fait de même avec l’arrêt du moteur (« MOTOR ON ») à la fin de l’exécution du programme.</p>
<ul>
<li><strong>Les cinquième, sixième et septième</strong> entrées activent les Pins MS1, MS2 et MS3 du driver et permettent de gagner en précision d’angle (jusqu’au demi pas ici).</li>
</ul>
<p>Afin de faire fonctionner le moteur à vitesse constante, la fonctionnalité suivante a été développée :</p>
<p><img decoding="async" class="size-full wp-image-1032 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-signal-carre.png" alt="" width="294" height="155" /></p>
<p>Lorsqu’un booléen (bouton) active la structure « Cas », le VI « écrire un signal carré » est activé avec une fréquence nulle et d&rsquo;une durée nulle sur la pin STEP. Cette fonctionnalité m&rsquo;a permis de faire fonctionner le moteur à vitesse constante. Dans ce cas, la vitesse est fonction du temps de cadencement de la boucle (réglée à 50 ms). A l’heure où est écrit cet article, il existe surement de meilleures solutions, notamment avec le VI « PWM Set Duty Cycle »:</p>
<p><img decoding="async" class="size-full wp-image-1033 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-PWM.png" alt="" width="126" height="74" /></p>
<p>Mais cela n’a pas fonctionné comme il était souhaité lors du test.</p>
<p>A la suite de ces nombreux réglages et bidouillages, le programme doit pouvoir se lancer (flèche blanche non brisée). Si cela n&rsquo;est pas le cas, résoudre les erreurs unes à unes.</p>
<p>Il fortement probable que rien ne fonctionne du premier coup, ou qu’à moitié, il est alors conseillé, dans un premier temps, de vérifier les branchements (alimentation) des organes dysfonctionnant.</p>
<p>L&rsquo;utilisateur pourra jouer avec les différents types d&rsquo;actions mécaniques pour contrôler le moteur (clique droit sur un bouton) :</p>
<p><img decoding="async" class=" wp-image-1040 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png" alt="" width="326" height="354" /></p>
<p>&nbsp;</p>
<h1><a name="_Toc2727687"></a>Résultats en images :</h1>
<p><img decoding="async" class="size-full wp-image-1015 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg" alt="" width="4608" height="3456" /></p>
<p>Figure 10 Interface de la mesure de distance (Windows n&rsquo;est pas à l&rsquo;heure ^_^ )</p>
<p>J’espère que ce projet a pu continuer d’éveiller votre curiosité et a pu vous aider dans vos futurs développements !</p>
<h1><a name="_Toc2727688"></a>Sources :</h1>
<ul>
<li>Site Pololu (<a href="https://www.pololu.com/product/1182" target="_blank" rel="noopener">https://www.pololu.com/product/1182</a> )</li>
<li>Site GO Tronic</li>
<li><a href="https://www.lattepanda.com" target="_blank" rel="noopener">https://www.lattepanda.com</a></li>
<li>Ressources LINX : <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478" target="_blank" rel="noopener">http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478</a></li>
<li>Forum LINX : <a href="https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start" target="_blank" rel="noopener">https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start</a></li>
<li>Datasheet Lidar Garmin lite V3 : <a href="https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf" target="_blank" rel="noopener">https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf</a></li>
<li><em>LabVIEW &#8211; 4e édition &#8211; Programmation et applications &#8211; Introduction à LabVIEW NXG, </em>Collection : Technique et ingénierie, Dunod, Parution : août 2018,Francis Cottet, Luc Desruelle, Michel Pinard</li>
</ul>
<ul>
<li><em>The Art of electronic</em>, Third edition, Paul Horowitz et Winfield Hill</li>
</ul>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/">Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4" length="98513038" type="video/mp4" />

			</item>
		<item>
		<title>LINX 3.0 &#8211; Déploiement d&#8217;une application LabVIEW sur Raspberry Pi</title>
		<link>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/</link>
					<comments>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Mon, 05 Dec 2016 17:02:00 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Digilent]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Linux RT]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspbian]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=639</guid>

					<description><![CDATA[<p>LabVIEW permet de développer rapidement un petit programme: on dessine le diagramme, on exécute et voilà. Cependant, LabVIEW permet de faire bien plus. Une application embarquée va être amenée à fonctionner de manière autonome, dans un lieux potentiellement inaccessible. Il est alors indispensable que l&#8217;application soit téléchargée dans la cible et démarre automatiquement. Déployer son [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/">LINX 3.0 &#8211; Déploiement d&rsquo;une application LabVIEW sur Raspberry Pi</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://amaury-laurent.fr/index.php/2016/12/03/linx-3-0-programmer-raspberry-pi-labview/">LabVIEW permet de développer rapidement un petit programme</a>: on dessine le diagramme, on exécute et voilà.</p>
<p>Cependant, LabVIEW permet de faire bien plus. Une application embarquée va être amenée à fonctionner de manière autonome, dans un lieux potentiellement inaccessible. Il est alors indispensable que l&rsquo;application soit téléchargée dans la cible et démarre automatiquement.</p>
<h1>Déployer son application en mode autonome</h1>
<p>Une fois le programme mis au point, il est possible de le déployer à demeure dans la cible. Un petit peu comme on flasherait une programme dans un microcontrôleur. Pour ce faire, il faut créer une spécification de construction de type <strong>Real Time Application</strong> (bien que cette dernière n&rsquo;ai pas le déterminisme d&rsquo;une vrai application RT, du fait des limitations du Raspberry Pi).</p>
<figure id="attachment_627" aria-describedby="caption-attachment-627" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/rtexe.png"><img decoding="async" class="wp-image-627 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:118/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/rtexe.png" alt="rtexe" width="300" height="118" /></a><figcaption id="caption-attachment-627" class="wp-caption-text">Ajouter une spécification de construction</figcaption></figure>
<p>Un assistant de configuration s&rsquo;ouvre. La première page vous permet de nommer votre application et de choisir dans quel dossier elle sera construite.</p>
<figure id="attachment_628" aria-describedby="caption-attachment-628" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/info.png"><img decoding="async" class="wp-image-628 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/info.png" alt="info" width="300" height="201" /></a><figcaption id="caption-attachment-628" class="wp-caption-text">Les informations générales de votre application</figcaption></figure>
<p>La section la plus importante est la suivante: Source Files. Elle permet entre autre de choisir le VI de démarrage. Il s&rsquo;agit du premier VI lancé par le Run-Time au démarrage de l’application. Autrement dit, il s&rsquo;agit du Main de l&rsquo;application.</p>
<figure id="attachment_629" aria-describedby="caption-attachment-629" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/source_file.png"><img decoding="async" class="wp-image-629 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/source_file.png" alt="source_file" width="300" height="201" /></a><figcaption id="caption-attachment-629" class="wp-caption-text">Définir le VI principal de l&rsquo;application et les ressources nécessaires</figcaption></figure>
<p>Une autre page intéressant est celle concernant les options avancées. On y trouve notamment la possibilité de compiler l&rsquo;application en mode Debug, qui permet de connecter LabVIEW à l&rsquo;application compilée pour la debugguer <em>in situ.</em></p>
<figure id="attachment_630" aria-describedby="caption-attachment-630" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/advanced.png"><img decoding="async" class="wp-image-630 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:201/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/advanced.png" alt="advanced" width="300" height="201" /></a><figcaption id="caption-attachment-630" class="wp-caption-text">Quelques options avancées de l&rsquo;application</figcaption></figure>
<p>Une fois la spécification de construction terminée, ne cliquez pas directement sur Build, mais plutôt sur <strong>OK</strong>. Enregistrez ensuite l&rsquo;intégralité du projet. En effet, la configuration de la spécification de construction est sauvée dans le fichier .lvproj lui-même. La spécification apparait alors dans le projet. Il est possible de la compiler <em>via</em> le menu du clic droit en choisissant <strong>Build</strong>.</p>
<figure id="attachment_631" aria-describedby="caption-attachment-631" style="width: 280px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build.png"><img decoding="async" class="wp-image-631 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:280/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build.png" alt="build" width="280" height="300" /></a><figcaption id="caption-attachment-631" class="wp-caption-text">Lancer la compilation</figcaption></figure>
<p>Une fenêtre faisant apparaitre la progression de la compilation s&rsquo;ouvre:</p>
<figure id="attachment_632" aria-describedby="caption-attachment-632" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_in_progress.png"><img decoding="async" class="wp-image-632 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:163/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_in_progress.png" alt="build_in_progress" width="300" height="163" /></a><figcaption id="caption-attachment-632" class="wp-caption-text">La compilation de l&rsquo;application peut prendre un certain temps</figcaption></figure>
<p>Quand la compilation est terminée, cliquer sur Done.</p>
<figure id="attachment_633" aria-describedby="caption-attachment-633" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_termine.png"><img decoding="async" class="wp-image-633 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:166/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/build_termine.png" alt="build_termine" width="300" height="166" /></a><figcaption id="caption-attachment-633" class="wp-caption-text">Une fois terminé, l&rsquo;application est prête à être déployée</figcaption></figure>
<p>A ce stade, l&rsquo;application n&rsquo;est pas encore dans le Raspberry Pi. LabVIEW a juste généré le fichier binaire exécutable. Pour télécharger l&rsquo;application dans la cible et faire en sorte qu&rsquo;elle démarre automatiquement à la mise sous tension, il fait repasser par le menu du clic droit et choisir <strong>Run as startup</strong>.</p>
<p>LabVIEW télécharge alors le binaire dans le Raspberry Pi et configure ce dernier pour le lancer au démarrage. Un popup apparait alors pour vous proposer de redémarrer la cible. Acceptez et votre application devrait se lancer an quelques dizaines de secondes.</p>
<h1>Conclusion</h1>
<p>Une application compilée sera plus économe en ressources systèmes. Elle peut démarrer automatiquement, sans le recours à LabVIEW pour lancer le code. Cependant, il n&rsquo;y a plus d&rsquo;interface graphique, donc certaines fonctions sont inopérantes: les popups, les message d&rsquo;erreurs, &#8230; Il faut donc trouver d&rsquo;autres solutions pour communiquer, mais cela sera l&rsquo;objet d&rsquo;un autre article.</p>
<p>Bon dév à tous !</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/">LINX 3.0 &#8211; Déploiement d&rsquo;une application LabVIEW sur Raspberry Pi</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/linx-3-0-deploiement-dune-application-labview/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</title>
		<link>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/</link>
					<comments>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 03 Dec 2016 19:45:28 +0000</pubDate>
				<category><![CDATA[Informatique]]></category>
		<category><![CDATA[Microcontrôleur]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Digilent]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[Linux RT]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Raspbian]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=606</guid>

					<description><![CDATA[<p>Depuis peu, un toolkit permet à LabVIEW, l&#8217;environnement de développement graphique, de programmer certaines cibles informatiques ARMv7. On y trouve actuellement les Raspberry Pi 2 et 3 ainsi que les BeagleBone. Ce toolkit permet donc de développer une application avec LabVIEW, de la compiler et de la télécharger dans la cible pour lui permettre de [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/">LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Depuis peu, un toolkit permet à LabVIEW, l&rsquo;environnement de développement graphique, de programmer certaines cibles informatiques ARMv7. On y trouve actuellement les Raspberry Pi 2 et 3 ainsi que les BeagleBone.</p>
<p>Ce toolkit permet donc de développer une application avec LabVIEW, de la compiler et de la télécharger dans la cible pour lui permettre de fonctionner de manière autonome!</p>
<figure id="attachment_635" aria-describedby="caption-attachment-635" style="width: 300px" class="wp-caption aligncenter"><a href="http://store.digilentinc.com/labview-physical-computing-kit-for-raspberry-pi-2/" target="_blank" rel="noopener noreferrer"><img decoding="async" class="wp-image-635 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:300/q:mauto/rt:fill/g:ce/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/Raspberry_Pi_2_Physical_Computing_Kit_box_600__96022.1459951516.1280.1280.png" alt="LabVIEW Physical Computing kit for Raspberry Pi 2" width="300" height="300" /></a><figcaption id="caption-attachment-635" class="wp-caption-text">LabVIEW Physical Computing kit for Raspberry Pi 2</figcaption></figure>
<h1>Le Contexte</h1>
<p>National Instruments, la société qui développe et maintient l&rsquo;environnement LabVIEW, a récemment choisi une distribution Linux RT (<a href="https://fr.wikipedia.org/wiki/Syst%C3%A8me_temps_r%C3%A9el" target="_blank" rel="noopener noreferrer">Real Time</a>) pour animer ses systèmes embarqués (<a href="http://www.ni.com/data-acquisition/compactdaq/f/" target="_blank" rel="noopener noreferrer">cDAQ</a>, <a href="http://www.ni.com/compactrio/f/" target="_blank" rel="noopener noreferrer">cRIO</a>, <a href="http://www.ni.com/pxi/f/" target="_blank" rel="noopener noreferrer">PXI</a>&#8230;). Elle supporte actuellement les plateformes <a href="https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html" target="_blank" rel="noopener noreferrer">Zynq de Xillinx </a>(ARMv7) et Intel Atom (x86). Or il se trouve que les Raspberry Pi 2 et 3 ainsi que la BeagleBone ont un jeu d&rsquo;instruction ARMv7&#8230; Partant de ce postula, un portage du noyau d&rsquo;exécution LabVIEW (Run-Time Engine) sur ces plateforme n&rsquo;était qu&rsquo;une question de temps.</p>
<p>C&rsquo;est maintenant chose faite ! Une chose manque cependant à l&rsquo;appel: le support du serveur graphique.</p>
<p>En effet, depuis l&rsquo;arrivée des <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/212970" target="_blank" rel="noopener noreferrer">cRIO 903x</a>, NI propose l&rsquo;utilisation d&rsquo;un serveur XFCE pour ajouter une interface graphique aux applications embarquées. Ceci n&rsquo;est à ce jour pas encore supporté par LINX.</p>
<p>ATTENTION: Le Raspberry Pi <strong>N&rsquo;EST PAS A CE JOUR UNE CIBLE LabVIEW TEMPS RÉEL</strong>!</p>
<h1>LINX: Le toolkit LabVIEW</h1>
<p><a href="http://store.digilentinc.com/" target="_blank" rel="noopener noreferrer">Digilent</a>, une société acquise par National Instruments, a développé <a href="https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start" target="_blank" rel="noopener noreferrer">LINX</a>, une solutions permettant le fonctionnement d&rsquo;application LabVIEW sur certaines cibles telles que les Arduino ou Raspberry Pi.</p>
<p>Depuis la version 3.0 de LINX, la cible (Raspberry Pi ou Beagle Board) devient autonome!</p>
<p>L&rsquo;idée de Digilent est brillante de simplicité: installer le Run-Time LabVIEW RT dans un environnement <a href="https://fr.wikipedia.org/wiki/Chroot" target="_blank" rel="noopener noreferrer">chroot </a>à l&rsquo;intérieur de l&rsquo;OS d&rsquo;origine. Sur le Raspberry Pi, Digilent recommande l&rsquo;utilisation de <strong>Raspbian Jessy</strong>.</p>
<p>Configuré pour booter en mode console sans environnement graphique, l&rsquo;application développée avec LINX 3.0 démarre en quelques dizaines de secondes à partir de la mise sous tension; les performances sont donc au rendez-vous!</p>
<figure id="attachment_609" aria-describedby="caption-attachment-609" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/autonome.png"><img decoding="async" class="size-medium wp-image-609" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:128/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/autonome.png" alt="En mode autonome, le code source est compilé et téléchargé sur la cible." width="300" height="128" /></a><figcaption id="caption-attachment-609" class="wp-caption-text">En mode autonome, le code source est compilé et téléchargé sur la cible.</figcaption></figure>
<p>Les premières versions fonctionnaient en mode supervisé:  un daemon installé sur la cible recevait des commandes d&rsquo;un PC qui exécutait le VI LabVIEW. Une perte de communication entre les deux et le programme se plantait.</p>
<figure id="attachment_608" aria-describedby="caption-attachment-608" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/supervise.png"><img decoding="async" class="wp-image-608 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:128/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/supervise.png" alt="Mode supervisé: le PC se connecte par liaison série ou TCP" width="300" height="128" /></a><figcaption id="caption-attachment-608" class="wp-caption-text">Mode supervisé: le PC se connecte par liaison série ou TCP</figcaption></figure>
<h2>Mise en place de l&rsquo;environnement</h2>
<p>Le première chose à faire est d&rsquo;installer <strong>LabVIEW 2014 SP1 32bits</strong>. Une licence <a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/213095" target="_blank" rel="noopener noreferrer">Home Bundle </a>est disponible aux alentour de 50€ à destination des makers et autres amateurs. Digilent propose également des packs <a href="http://store.digilentinc.com/labview-physical-computing-kit-for-raspberry-pi-2/" target="_blank" rel="noopener noreferrer">LabVIEW Physical Computing </a>à moins de 100€ incluant la licence et la cible. Je vous recommande particulièrement d&rsquo;installer la version anglaise de LabVIEW, l&rsquo;essentiel des communautés d&rsquo;utilisateurs faisant usage du jargon anglophone. Prévoir quelques Go d&rsquo;espace disque, LabVIEW est relativement volumineux (mon installation fait plus de 4Go sans compter les modules additionnels), ainsi qu&rsquo;une connexion Internet pour l&rsquo;activation.</p>
<p>Une fois LabVIEW correctement installé et activé, il faut lui ajouter LINX 3.0. Pour cela, rien de plus facile: VIPM est là pour ça!</p>
<p>Mais qu&rsquo;est donc? VIPM (VI Package Manager) est un outils développé par <a href="http://jki.net/" target="_blank" rel="noopener noreferrer">JKI </a>pour donner accès à une bibliothèque de toolkits et plugins pour LabVIEW. Certains sont gratuits, voir Open Source (tels que l&rsquo;<a href="http://sine.ni.com/nips/cds/view/p/lang/fr/nid/209027" target="_blank" rel="noopener noreferrer">OpenG </a>ou encore LINX), d&rsquo;autres sont soumis à licence. Du coup, pour installer LINX, il suffit de lancer VIPM, chercher LINX dans la liste des modules et cliquer sur Installer&#8230;</p>
<figure id="attachment_611" aria-describedby="caption-attachment-611" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/VIPM.png"><img decoding="async" class="size-medium wp-image-611" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:174/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/VIPM.png" alt="VI Package Manager" width="300" height="174" /></a><figcaption id="caption-attachment-611" class="wp-caption-text">VI Package Manager</figcaption></figure>
<p>Pour vérifier la bonne installation de LINX, lancer LabVIEW et ouvrir le menu Outils. Vérifier la présence d&rsquo;un sous menu MakerHub:</p>
<figure id="attachment_613" aria-describedby="caption-attachment-613" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/LabVIEW_Tools.png"><img decoding="async" class="size-medium wp-image-613" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:281/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/LabVIEW_Tools.png" alt="Le menu Outils de LabVIEW" width="300" height="281" /></a><figcaption id="caption-attachment-613" class="wp-caption-text">Le menu Outils de LabVIEW</figcaption></figure>
<h2>Installation de la cible</h2>
<p>Je vais détailler ici l&rsquo;installation de LINX 3.0 sur Raspberry Pi 2 ou 3, n&rsquo;ayant pas de BeagleBone sous le coude&#8230; Pour ces dernières, je vous propose de regarder <a href="https://www.labviewmakerhub.com/doku.php?id=learn:tutorials:libraries:linx:start" target="_blank" rel="noopener noreferrer">les tutoriaux vidéos de Digilent</a>.</p>
<p>Commençons par installer <a href="https://downloads.raspberrypi.org/raspbian_lite_latest" target="_blank" rel="noopener noreferrer">Raspbian Jessy Lite </a>sur la carte SD du Raspberry. Un petit coup de <a href="https://www.raspberrypi.org/documentation/installation/installing-images/linux.md" target="_blank" rel="noopener noreferrer">dd</a> sous Linux ou de <a href="https://www.raspberrypi.org/documentation/installation/installing-images/windows.md" target="_blank" rel="noopener noreferrer">Win32DiskImager</a> sous Windows et le tour est joué. Pour configurer le Raspberry, un petit <em>sudo raspi-config</em>. Il est utile d&rsquo;activer l&rsquo;UART, le SPI et L&rsquo;I2C ainsi que d&rsquo;étendre la partition système à toute la carte SD. Pour continuer, il va également falloir configurer le réseau: Ethernet pour le Pi 2, possiblement le WiFi pour le Pi 3. Notez bien l&rsquo;adresse IP du Raspberry, nous en aurons besoin.</p>
<p>Retour sous LabVIEW. Aller dans le menu Outils &gt; MakerHub &gt; LINX &gt; LINX Target Configuration&#8230;</p>
<figure id="attachment_614" aria-describedby="caption-attachment-614" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/target_config.png"><img decoding="async" class="size-medium wp-image-614" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:187/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/target_config.png" alt="Connecter LINX sur la cible" width="300" height="187" /></a><figcaption id="caption-attachment-614" class="wp-caption-text">Connecter LINX sur la cible</figcaption></figure>
<p>Renseigner les champs comme suit:</p>
<p><strong>Hostname or IP :</strong> xxx.xxx.xxx.xxx (l&rsquo;adresse IP du Raspberry Pi sur le LAN)</p>
<p><strong>Username:</strong> pi</p>
<p><strong>Password:</strong> raspberry</p>
<p>Et cliquer sur <strong>Connect</strong> puis sur l&rsquo;onglet <strong>Install Software</strong>.<strong><br />
</strong></p>
<figure id="attachment_616" aria-describedby="caption-attachment-616" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/install_soft.png"><img decoding="async" class="size-medium wp-image-616" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:186/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/install_soft.png" alt="Installer le Run-Time sur la cible" width="300" height="186" /></a><figcaption id="caption-attachment-616" class="wp-caption-text">Installer le Run-Time sur la cible</figcaption></figure>
<p>Un simple appuie sur le bouton Install et le tour est joué. L&rsquo;utilitaire d&rsquo;installation se connecte sur les dépôts d&rsquo;installation de NI pour récupérer le Run-Time et l&rsquo;installer dans l&rsquo;environnement chroot.</p>
<h1>Programmer la cible avec LabVIEW</h1>
<p>Pour attaquer une cible embarquée avec LabVIEW, il faut commencer par créer un projet. Pour l&rsquo;exemple, je vais créer un projet vide, mais rien n&#8217;empêche de partir d&rsquo;un modèle de projet. Pour ajouter le Raspberry au projet, faire un clic droit sur la racine du projet (et non sur <em>My Computer</em>, comme souvent commis par erreur&#8230;) et ajouter une nouvelle cible:</p>
<figure id="attachment_620" aria-describedby="caption-attachment-620" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png"><img decoding="async" class="wp-image-620 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:126/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target.png" alt="new_target" width="300" height="126" /></a><figcaption id="caption-attachment-620" class="wp-caption-text">Ajouter une cible au projet</figcaption></figure>
<figure id="attachment_621" aria-describedby="caption-attachment-621" style="width: 269px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png"><img decoding="async" class="wp-image-621 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:269/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/new_target-1.png" alt="new_target" width="269" height="300" /></a><figcaption id="caption-attachment-621" class="wp-caption-text">Spécifier l&rsquo;adresse IP de la cible et son type</figcaption></figure>
<p>Spécifier l&rsquo;adresse IP de la cible et choisir son type: LINX &gt; Raspberry Pi / BeagleBone. Une nouvelle cible est ajoutée au projet. Tout les VI placés dans cette cible s&rsquo;exécuteront sur celle-ci et non sur l&rsquo;ordinateur.</p>
<figure id="attachment_622" aria-describedby="caption-attachment-622" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/projet.png"><img decoding="async" class="size-medium wp-image-622" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:161/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/projet.png" alt="Le projet LabVIEW." width="300" height="161" /></a><figcaption id="caption-attachment-622" class="wp-caption-text">Le projet LabVIEW</figcaption></figure>
<p>Quand on édite un VI, on peut savoir sur quelle cible il s&rsquo;exécute lorsque l&rsquo;on clique sur la flèche d&rsquo;exécution. Il suffit pour cela de regarder en bas à gauche de la fenêtre (face avant ou diagramme): un  champ texte précise le nom de la cible et permet de modifier ponctuellement celle-ci.</p>
<p>Par exemple, on développe un algorithme de calcul sur le Raspberry et l&rsquo;on aimerait le tester rapidement: rien de plus simple! Un clic droit sur le champ texte et on choisi <em>My Computer</em>. LabVIEW va alors exécuter le code sur le PC plutôt que sur le Raspberry. Les conditions d&rsquo;exécution sont différentes, mais on économise la phase de compilation et de déploiement qui peut prendre un peu de temps.</p>
<figure id="attachment_624" aria-describedby="caption-attachment-624" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/front.png"><img decoding="async" class="size-medium wp-image-624" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:183/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/front.png" alt="Il est possible de voir la cible d'exécution en bas à gauche" width="300" height="183" /></a><figcaption id="caption-attachment-624" class="wp-caption-text">Il est possible de voir la cible d&rsquo;exécution en bas à gauche</figcaption></figure>
<figure id="attachment_623" aria-describedby="caption-attachment-623" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme.png"><img decoding="async" class="size-medium wp-image-623" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:176/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/diagramme.png" alt="On peu la changer par un clic droit, tant depuis la face avant que depuis le diagramme" width="300" height="176" /></a><figcaption id="caption-attachment-623" class="wp-caption-text">On peu la changer par un clic droit, tant depuis la face avant que depuis le diagramme</figcaption></figure>
<p>Les fonctions spécifiques au module LINX sont accessibles par la palette MakerHub. On y retrouve toute l&rsquo;API: accès aux E/S tout ou rien, aux modules UART/SPI/I2C ainsi que tout un tas de drivers pour capteurs et afficheurs. On y trouve également une Toolbox qui propose des fonctions de support utiles.</p>
<figure id="attachment_625" aria-describedby="caption-attachment-625" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/palette.png"><img decoding="async" class="size-medium wp-image-625" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:257/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/palette.png" alt="La palette LINX 3.0" width="300" height="257" /></a><figcaption id="caption-attachment-625" class="wp-caption-text">La palette LINX 3.0</figcaption></figure>
<p>L&rsquo;accès à l&rsquo;API LINX s&rsquo;effectue de la manière suivante:</p>
<ol>
<li>Ouverture d&rsquo;une référence en mode Local I/O</li>
<li>Initialisation des différents sous modules (typiquement le SPI)</li>
<li>Accès aux E/S, fonctionnement nominal de l&rsquo;application</li>
<li>Fermeture des sous modules</li>
<li>Fermeture de la référence principale</li>
</ol>
<p>Voici un exemple de communication sur bus SPI.</p>
<figure id="attachment_642" aria-describedby="caption-attachment-642" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/spi.png"><img decoding="async" class="size-medium wp-image-642" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:140/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/spi.png" alt="Exemple d'une communication SPI" width="300" height="140" /></a><figcaption id="caption-attachment-642" class="wp-caption-text">Exemple d&rsquo;une communication SPI</figcaption></figure>
<p>&nbsp;</p>
<ul>
<li>Le premier VI ouvre une référence vers l&rsquo;API LINX. Elle est nécessaire à l&rsquo;accès aux ressources de la cible.</li>
<li>Le deuxième VI initialise le module SPI 0</li>
<li>Le troisième VI configure le module SPI: vitesse de communication, ordre des bits, mode de fonctionnement de l&rsquo;horloge&#8230;</li>
<li>Le quatrième VI écrit et lit des trames sur le bus</li>
<li>Le cinquième VI ferme et détruit la référence à l&rsquo;API LINX.</li>
</ul>
<p>Il n&rsquo;est pas nécessaire de fermer l&rsquo;accès au module SPI.</p>
<h1>Lancement du programme</h1>
<p>Pour exécuter le programme, il y a deux méthode:</p>
<ul>
<li>En source</li>
<li>En exécutable</li>
</ul>
<p>La première solution est à privilégier pour la phase de développement. Il suffit simplement de cliquer sur la flèche d&rsquo;exécution. LabVIEW compile le programme, le télécharge sur la cible et connecte la face avant restée sur le PC sur le Run-Time de la cible. Ainsi, on peut interagir avec le programme, utiliser les outils de debug usuels (sondes, loupiote, points d’arrêts&#8230;).</p>
<p>Cette solution est très pratique, mais gourmande en ressources sur la cible. En effet, une communication réseau permanente est établie entre la cible et le PC. en outre, le programme ne peut être lancé qu&rsquo;à partir de LabVIEW. Cela signifie qu&rsquo;il faut rouvrir les sources du programme, compiler, télécharger et exécuter celui-ci à partir de LabVIEW à chaque mise sous tension de la cible.</p>
<h1>Conclusion</h1>
<p>LINX 3.0 représente une petite révolution dans le monde National Instruments. Il devient en effet possible pour tout un chacun de développer une application embarquée avec LabVIEW pour un budget accessible. En effet, la licence Home Bundle est à 50€ et les Raspberry Pi oscillent entre 30 et 40€. Tout le monde a désormais accès à l&rsquo;ergonomie du langage G et à la puissance de l&rsquo;environnement LabVIEW.</p>
<p>A bientôt pour de plus amples informations sur le <a href="https://amaury-laurent.fr/index.php/2016/12/05/linx-3-0-deploiement-dune-application-labview/">déploiement d&rsquo;une application LabVIEW sur le Raspberry Pi</a>.</p>
<p>Lancez-vous !</p>
<h1>[EDIT du 03/12/2017] &#8211; Problème lié au déploiement de LINX sur le Raspberry Pi</h1>
<p>Lors de l&rsquo;installation du LINX sur un Raspberry Pi, il se peut que l&rsquo;une des étapes ne se déroule pas complètement, probablement à cause de certains droits d&rsquo;accès qui auraient changés dans la dernière version de Raspbian (Stretch au moment où j’écris ces lignes).</p>
<p>Le symptôme est le suivant: au déploiement d&rsquo;un programme faisant appel à la bibliothèque LINX, un message d&rsquo;erreur survient:</p>
<p>« <strong>LMH-LINX.lvlib:Local IO.lvlib:Load Device Channels.vi loaded with errors on the target and was closed.</strong> »</p>
<figure id="attachment_870" aria-describedby="caption-attachment-870" style="width: 300px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/ErrorDeploy.png"><img decoding="async" class="size-medium wp-image-870" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:216/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/12/ErrorDeploy.png" alt="" width="300" height="216" /></a><figcaption id="caption-attachment-870" class="wp-caption-text">Erreur au lancement d&rsquo;une application</figcaption></figure>
<p>La cause probable est la suivante :</p>
<p>LINX installe une bibliothèque sur le Raspberry Pi : <code class="EnlighterJSRAW" data-enlighter-language="shell">/usr/lib/liblinxdevice_rpi2.so</code></p>
<p>Cependant, pour assurer la compatibilité avec les BeagleBone Black, une deuxième bibliothèque est installée : <code class="EnlighterJSRAW" data-enlighter-language="shell">/usr/lib/liblinxdevice_bbb.so</code></p>
<p>Le choix de la bonne bibliothèque est fait grâce à la création d&rsquo;un lien symbolique: <code class="EnlighterJSRAW" data-enlighter-language="shell">liblinxdevice.so -&gt; ./liblinxdevice_rpi2.so</code>. La coutume est courante sous Linux, mais dans notre cas précis le lien peut ne pas exister.</p>
<p>Pour s&rsquo;assurer de la bonne installation de la bibliothèque, commencez par ouvrir un terminal SSH (soit dit en passant, <a href="https://korben.info/installer-shell-bash-linux-windows-10.html" target="_blank" rel="noopener">Windows 10 est nativement doté d&rsquo;un shell Linux</a>&#8230;).</p>
<p>Ouvrir ensuite un accès à l&rsquo;environnement chroot d&rsquo;exécution LabVIEW: <code class="EnlighterJSRAW" data-enlighter-language="shell">$ sudo schroot --run-session -c lv</code></p>
<p>Naviguer dans le dossier /usr/lib : <code class="EnlighterJSRAW" data-enlighter-language="shell"># cd /usr/lib</code></p>
<p>Lister le contenu du dossier : <code class="EnlighterJSRAW" data-enlighter-language="shell"># ls -l | grep linx</code></p>
<p>S&rsquo;il n&rsquo;y a que deux fichiers (le bbb et le rpi2), le problème de déploient du code viens de là.</p>
<p>Pour corriger le problème, il suffit de recréer le lien symbolique : <code class="EnlighterJSRAW" data-enlighter-language="shell"># ln -s ./liblinxdevice_rpi2.so ./liblinxdevice.so</code></p>
<p>J&rsquo;ai trouvé cette solution en parcourant le forum LabVIEW MakerHub (<a href="https://www.labviewmakerhub.com/forums/viewtopic.php?f=12&amp;t=3018&amp;p=11683&amp;hilit=install#p11683" target="_blank" rel="noopener">page d&rsquo;origine</a>). Nous la devons à <a href="https://www.labviewmakerhub.com/forums/memberlist.php?mode=viewprofile&amp;u=4255" target="_blank" rel="noopener">Kryptman</a>. Je me suis contenté de la tester et de la traduire en Français. Merci à lui.</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/">LINX 3.0 &#8211; Ou comment programmer un Raspberry Pi avec LabVIEW</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/linx-3-0-programmer-raspberry-pi-labview/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>LattePanda &#8211; Première mise en route</title>
		<link>https://amaury-laurent.fr/lattapanda-premiere-mise-route/</link>
					<comments>https://amaury-laurent.fr/lattapanda-premiere-mise-route/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Tue, 23 Aug 2016 20:01:53 +0000</pubDate>
				<category><![CDATA[Microcontrôleur]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=534</guid>

					<description><![CDATA[<p>Présentation Dans la mouvance des single-board computers tels que Raspberry Pi et autres Beagle Boards, le LattePanda va essayer de se tailler une place. Commençons par planter le décor Un single-board computer &#8211; ordinateur mono-carte en français &#8211; est une carte électronique de petite taille (similaire à un disque dur 2.5&#8242; pouces) qui embarque l&#8217;intégralité [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda &#8211; Première mise en route</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Présentation</h1>
<p>Dans la mouvance des <em>single-board computers</em> tels que <a href="https://fr.wikipedia.org/wiki/Raspberry_Pi" target="_blank" rel="noopener">Raspberry Pi </a>et autres <a href="https://fr.wikipedia.org/wiki/BeagleBoard" target="_blank" rel="noopener">Beagle Boards</a>, le LattePanda va essayer de se tailler une place.</p>
<figure id="attachment_547" aria-describedby="caption-attachment-547" style="width: 300px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/RaspberryPi.jpg" target="_blank" rel="noopener"><img decoding="async" class="wp-image-547 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/RaspberryPi-300x200.jpg" alt="La révision 1 du RaspberryPi: le pionnier du segment de marché des sbComputers!" width="300" height="200" /></a><figcaption id="caption-attachment-547" class="wp-caption-text">La révision 1 du Raspberry Pi: le pionnier du segment de marché des sbComputers!</figcaption></figure>
<h2>Commençons par planter le décor</h2>
<p>Un <em>single-board computer</em> &#8211; ordinateur mono-carte en français &#8211; est une carte électronique de petite taille (similaire à un disque dur 2.5&prime; pouces) qui embarque l&rsquo;intégralité des composants traditionnels d&rsquo;un ordinateur:</p>
<ul>
<li>Processeur (<em>CPU</em>)</li>
<li>Processeur graphique (<em>GPU</em>)</li>
<li>Mémoire vive (<em>RAM</em>)</li>
<li>Stockage de masse</li>
<li>Connectique et interfaces (USB, Ethernet, WiFi, Bluetooth, &#8230;)</li>
<li>Alimentation</li>
</ul>
<p>Cette prouesse d&rsquo;intégration et de miniaturisation a été rendue possible par l&rsquo;arrivée sur le marchés de nouveaux composants: les SoC (<em>System on Chip</em>). Un SoC est ni plus ni moins qu&rsquo;un gros composant électronique multifonction: il intègre la plupart des fonctionnalités énumérées ci-dessus dans le même morceaux de silicium. Vous les trouverez un peu partout<del></del>: ils animent la quasi totalité des téléphones portables.</p>
<figure id="attachment_566" aria-describedby="caption-attachment-566" style="width: 300px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/nvda_tegra_chip_scheme.jpg" target="_blank" rel="noopener"><img decoding="async" class="size-medium wp-image-566" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/nvda_tegra_chip_scheme-300x293.jpg" alt="On le retrouve dans tout un tas d'appareils mobiles: http://www.nvidia.fr/object/tegra-phones-tablets-fr.html" width="300" height="293" /></a><figcaption id="caption-attachment-566" class="wp-caption-text">Un exemple d&rsquo;architecture SoC avec le nVidia Tegra</figcaption></figure>
<p>Les concepteurs des différentes cartes <em>sbComputer (single-board computer)</em> n&rsquo;ont alors « plus qu&rsquo;à » conditionner le SoC avec les circuits d&rsquo;alimentation, d&rsquo;horloge, d&rsquo;interface, &#8230; en respectant la fiche technique du fabricant.</p>
<h2>Entrons dans le détail</h2>
<p><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/800px-Atom_logo_neu_01.jpg" target="_blank" rel="noopener"><img decoding="async" class="aligncenter size-medium wp-image-571" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/800px-Atom_logo_neu_01-300x225.jpg" alt="800px-Atom_logo_neu_01" width="300" height="225" /></a></p>
<p>Les premières cartes disponibles sur le marché, et encore de nombreuses aujourd&rsquo;hui, étaient issues du monde libre: Les schémas sont <a href="https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf" target="_blank" rel="noopener">disponibles gratuitement</a>, le système d&rsquo;exploitation est basé sur Linux, le processeur est un <a href="https://fr.wikipedia.org/wiki/Architecture_ARM" target="_blank" rel="noopener">ARM</a>. Ces paramètres se retrouvent sur la majorités des cartes existantes, du petit <a href="https://www.raspberrypi.org/" target="_blank" rel="noopener">Raspberry Pi </a>au volumineux <a href="https://www.olimex.com/Products/OLinuXino/A20/A20-OLinuXino-MICRO-4GB/open-source-hardware" target="_blank" rel="noopener">Olinuxino A20 </a>en passant par des versions plus spécifiques comme la <a href="http://redpitaya.com/" target="_blank" rel="noopener">Red Pitaya </a>ou des systèmes professionnels comme les <a href="http://www.ni.com/compactrio/f/" target="_blank" rel="noopener">cRIO</a>/<a href="http://www.ni.com/singleboard/f/" target="_blank" rel="noopener">sbRIO </a>de <a href="http://www.ni.com/fr-fr.html" target="_blank" rel="noopener">National Instruments </a>dédiés pour la mesure et le pilotage en milieu industriel. Ces derniers ne sont pas Open Sources mais découlent directement des travaux menés par le <a href="https://www.yoctoproject.org/" target="_blank" rel="noopener">projet Yocto</a>. Même l&rsquo;<a href="https://www.arduino.cc/" target="_blank" rel="noopener">Arduino </a>s&rsquo;y met avec sa version <a href="https://www.arduino.cc/en/Main/ArduinoBoardYun#" target="_blank" rel="noopener">Yún.</a></p>
<figure id="attachment_565" aria-describedby="caption-attachment-565" style="width: 300px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/red-pitaya-view.png" target="_blank" rel="noopener"><img decoding="async" class="wp-image-565 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/red-pitaya-view-300x209.png" alt="La RedPitaya: un sbComputer orienté acquisition/traitement du signal" width="300" height="209" /></a><figcaption id="caption-attachment-565" class="wp-caption-text">La RedPitaya: un sbComputer orienté acquisition/traitement du signal</figcaption></figure>
<p>Le concept est très intéressant et le facteur de forme de ces systèmes les rendent très attrayant pour les bidouilleurs. Cependant, leur limitations sont assez nombreuses: l&rsquo;architecture ARM n&rsquo;est pas très performante et restreint assez fortement le panel de logiciels disponibles, les distributions Linux peuvent s&rsquo;avérer assez obscures à utiliser, les GPIOs (entrée/sorties à usage général) disponibles sur les cartes sont souvent directement issues de l&rsquo;ARM ce qui rend le système assez chatouilleux aux perturbations extérieurs.</p>
<h1>Le LattePanda: 4 cores, 4 Go de RAM et un Windows 10 !</h1>
<p>Là où le LattePanda fait très fort, c&rsquo;est sur l&rsquo;architecture: processeur <a href="http://ark.intel.com/fr/products/87383/Intel-Atom-x5-Z8300-Processor-2M-Cache-up-to-1_84-GHz" target="_blank" rel="noopener">Intel Atom quatre cores</a>, une version 64 bits disponible avec 4Go de RAM et 64Go de stockage de masse et un arduino léonardo en prime ! Une version 32 bits est également disponible (2Go de RAM et 32Go de stockage de masse).</p>
<p>Intel Atom x5 <span class="st">Z8300</span> = Processeur x86 + GPU Intel HD, autant dire que la plateforme est efficace.</p>
<figure id="attachment_567" aria-describedby="caption-attachment-567" style="width: 300px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/atom_03.png" target="_blank" rel="noopener"><img decoding="async" class="size-medium wp-image-567" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/atom_03-300x225.png" alt="La plateforme Intel Atom X5" width="300" height="225" /></a><figcaption id="caption-attachment-567" class="wp-caption-text">La plateforme Intel Atom X5</figcaption></figure>
<p>Pour la connectique, on a le droit à:</p>
<ul>
<li>1 port USB 3.0</li>
<li>2 ports USB 2.0</li>
<li>1 port HDMI</li>
<li>1 Ethernet Gigabit</li>
<li>1 slot micro SD</li>
<li>2 connecteurs pour l&rsquo;écran tactile</li>
<li>6 connecteurs 3 point offrant chacun une broche de l&rsquo;arduino et une alimentation 5Vdc</li>
<li>1 connecteur HE10 pour l&rsquo;arduino</li>
<li>1 connecteur pour le SPI de l&rsquo;arduino</li>
<li>1 connecteur pour 3 I2C et un UART de l&rsquo;Intel Atom</li>
</ul>
<figure id="attachment_552" aria-describedby="caption-attachment-552" style="width: 292px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/PINOut-diagram.png" target="_blank" rel="noopener"><img decoding="async" class="wp-image-552 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/PINOut-diagram-292x300.png" alt="Borniers du LattePanda" width="292" height="300" /></a><figcaption id="caption-attachment-552" class="wp-caption-text">Brochage du LattePanda</figcaption></figure>
<h1>Mise en route</h1>
<p>Pour démarrer un LattePanda, il faut commencer par l&rsquo;alimenter. Il lui faut du 5Vdc sous au moins 2A.</p>
<p>ATTENTION: Le LattePanda est particulièrement sensible au niveau de l&rsquo;alimentation: une tension instable, un courant trop faible ou même simplement un câble de mauvaise qualité pourront facilement le faire planter en cours de route&#8230; Pour ma part, j&rsquo;ai opté pour un pack de <a href="http://www.decathlon.fr/chargeur-onpower-700-travel-id_8290128.html" target="_blank" rel="noopener">batteries Li-Ion 9Ah vendu par Décathlon</a>. Il me donne environ 4H d&rsquo;autonomie et assure une tension d&rsquo;alimentation suffisamment propre pour le LattePanda. Son facteur de forme est également très intéressant.</p>
<p>A la mise sous tension, une LED rouge s&rsquo;allume indiquant l&rsquo;initialisation de la carte. Il faut attendre son extinction pour enfin pouvoir démarrer la bête par un appuie long sur le bouton « POWER ».</p>
<figure id="attachment_543" aria-describedby="caption-attachment-543" style="width: 300px" class="wp-caption aligncenter"><a href="http://vps200917.ovh.net/wp-content/uploads/2016/08/DSC_0016.jpg" target="_blank" rel="noopener"><img decoding="async" class="wp-image-543 size-medium" src="http://vps200917.ovh.net/wp-content/uploads/2016/08/DSC_0016-300x200.jpg" alt="La batterie est un pack d'accu nomade acheté chez Décathlon au rayon randonnée. ses 9Ah devraient me donner quatre heures d'autonomie." width="300" height="200" /></a><figcaption id="caption-attachment-543" class="wp-caption-text">La batterie est un pack d&rsquo;accu nomade acheté chez Décathlon au rayon randonnée. ses 9Ah devraient me donner quatre heures d&rsquo;autonomie.</figcaption></figure>
<p>Windows 10 démarre tranquillement (surtout la première fois)&#8230; ou pas! Pour ma part, sur deux cartes, une s&rsquo;est lamentablement plantée au premier boot. Pour les cas d&rsquo;urgence, voir la section restauration du système de la <a href="http://www.lattepanda.com/docs/" target="_blank" rel="noopener">doc en ligne</a>. On y trouve un tas d&rsquo;informations pertinentes et les images de restauration du système (une en 32 bits et une en 64 bits).</p>
<p>Je vous épargne le laïus sur le premier démarrage de Windows, la procédure est classique et le net fourmille de tutos adaptés (par exemple: <a href="https://www.justegeek.fr/premier-demarrage-sous-windows-10/" target="_blank" rel="noopener">https://www.justegeek.fr/premier-demarrage-sous-windows-10/</a>).</p>
<h1>L&#8217;emballage</h1>
<p>Il est possible d&rsquo;acheter un boitier avec votre LattePanda. A l&rsquo;heure actuelle, deux boitiers officiels existent. Il s&rsquo;agit de deux déclinaisons du même boitier, l&rsquo;une en contreplaqué, l&rsquo;autre en acrylique. Ayant eu des déboires avec l&rsquo;acrylique sur un Raspberry Pi, je me suis orienté sur le contre-plaqué (le meilleur conducteur thermique du monde 😀 !!!).</p>
<p>Amateurs de casses-têtes, bienvenue ! L&rsquo;assemblage du boitier tiens plus du jeu de construction qu&rsquo;autre chose. Et la notice est digne d&rsquo;un meuble Ikéa&#8230; Le résultat est robuste et fonctionnel.</p>
<p>[metaslider id=555]</p>
<p>Tout y est: le déport des boutons, le déport des LED avec des guides optiques, les fentes d&rsquo;accès aux connecteurs, l&rsquo;aération, &#8230; Le seule reproche à faire concerne l&rsquo;intégration de l&rsquo;écran tactile; il n&rsquo;y en a aucune! Et les nappes de connexion de la dalle LCD sont TRÈS fragiles. Une solution est à l&rsquo;étude&#8230;</p>
<h1>Comparatif</h1>
<p>Cet article ne serait pas complet sans le sempiternel comparatif entre les différents produits du marché. Je simplement en choir quelques-unes et mettre en regard leurs points forts.</p>
<p><a class="fancybox-inline no-ajaxy " href="#UniqueID-1">Agrandir le tableau</a></p>
<div class="fancybox-hidden">
<div id="UniqueID-1"></div>
</div>

<p>&nbsp;</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda &#8211; Première mise en route</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/lattapanda-premiere-mise-route/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Tutoriel de programmation de l&#8217;interface HID</title>
		<link>https://amaury-laurent.fr/tutoriel-de-programmation-de-linterface-hid/</link>
					<comments>https://amaury-laurent.fr/tutoriel-de-programmation-de-linterface-hid/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 03 Oct 2015 08:06:16 +0000</pubDate>
				<category><![CDATA[Microcontrôleur]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=102</guid>

					<description><![CDATA[<p>Créez votre premier projet avec MikroC et communiquez rapidement avec votre interface Commencez par créer un nouveau projet pour PIC18F4550, en fixant la fréquence de l&#8217;horloge du PIC (pas la fréquence de résonance du quartz, mais la fréquence en sortie de PLL fournie par le tableau ci-après). Ensuite, il faut configurer le comportement du PIC [&#8230;]</p>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/tutoriel-de-programmation-de-linterface-hid/">Tutoriel de programmation de l&rsquo;interface HID</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Créez votre premier projet avec MikroC et communiquez rapidement avec votre interface</h1>
<p>Commencez par créer un nouveau projet pour PIC18F4550, en fixant la fréquence de l&rsquo;horloge du PIC (pas la fréquence de résonance du quartz, mais la fréquence en sortie de PLL fournie par le tableau ci-après).</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/projet1.jpg"><img decoding="async" class="aligncenter wp-image-107 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:214/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/projet1.jpg" alt="projet1" width="300" height="214" /></a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/projet2.jpg"><img decoding="async" class="aligncenter wp-image-108 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:213/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/projet2.jpg" alt="projet2" width="300" height="213" /></a></p>
<p>Ensuite, il faut configurer le comportement du PIC en remplissant ses fusibles. Les fusibles sont différents registres du PIC qui fixent le type d&rsquo;oscillateur, la vitesse de l&rsquo;horloge interne, l&rsquo;état du watchdog&#8230;<br />
Pour ce faire, MikroC fournit une interface graphique qui simplifie la configuration du PIC (Project -&gt; Edit Project). Pour que l&rsquo;interface HID fonctionne correctement, il faut respecter quelques règles:</p>
<ul>
<li>Activer le régulateur de tension USB</li>
<li>Assurer une fréquence d’horloge de 4MHz en sortie de la PLL</li>
<li>Utiliser la sortie de la PLL comme horloge USB</li>
<li>Activer le Master Clear (MCLR) =&gt; permet d&rsquo;effectuer un RESET de la carte avec le bouton poussoir</li>
</ul>
<p>Voici un extrait de ma configuration pour une horloge externe à 20MHz (quartz):</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/configHorloge.jpg"><img decoding="async" class="aligncenter wp-image-103 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:147/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/configHorloge.jpg" alt="configHorloge" width="300" height="147" /></a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/configPIC.jpg"><img decoding="async" class="aligncenter wp-image-104 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:255/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/configPIC.jpg" alt="configPIC" width="300" height="255" /></a></p>
<p>Pour la configuration du circuit d&rsquo;horloge, il est important de respecter le tableau suivant (extrait du Datasheet du PIC18f4550, Section 2-3-2):</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/tableauHorloge1.jpg"><img decoding="async" class="aligncenter wp-image-109 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:250/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/tableauHorloge1.jpg" alt="tableauHorloge1" width="300" height="250" /></a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/tableauHorloge2.jpg"><img decoding="async" class="aligncenter wp-image-110 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:270/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/tableauHorloge2.jpg" alt="tableauHorloge2" width="270" height="300" /></a></p>
<p>Ensuite, il faut configurer les ports d&rsquo;entrées/sorties du PIC: les lignes D- et D+ (RC4 et RC5) doivent être placées en entrées pour utiliser l&rsquo;USB.</p>
<p>Enfin, MikroC fournit un ensemble de librairies facilitant la mise en place du protocole HID. Voici les étapes clés de la programmation de l&rsquo;interface:</p>
<ol>
<li>
<ol>
<li>Générer le Descripteur de l&rsquo;interface:
<ol>
<li>Lancer l&rsquo;utilitaire HID Terminal de MikroC (Tools -&gt; HID Terminal)</li>
<li>Onglet Descriptor</li>
<li>Compléter les informations propres à votre interface</li>
<li>Enregistrer le descripteur pour MikroC dans le dossier de votre projet</li>
</ol>
</li>
</ol>
</li>
</ol>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/HIDTerm.jpg"><img decoding="async" class="aligncenter wp-image-106 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:290/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/HIDTerm.jpg" alt="HIDTerm" width="290" height="300" /></a></p>
<ol>
<li>Importer le descripteur dans votre projet: #import « USBdsc.c »</li>
<li>Initialiser le module HID: HID-Enable(&amp;ReadBuf, &amp;WriteBuf);</li>
<li>Pour lire des informations: while (HID_Read() == 0); ou par interruption</li>
<li>Pour écrire des informations: HID_Write();</li>
</ol>
<p>Pour plus de détail, <a href="http://www.mikroe.com/esupport/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=158" target="_blank" rel="noopener">voir l&rsquo;aide de MikroC, rubrique USB:</a></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/exempleHID.jpg"><img decoding="async" class="aligncenter wp-image-105 size-medium" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:243/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2015/10/exempleHID.jpg" alt="exempleHID" width="300" height="243" /></a></p>
<p>Pour envoyer votre programme sur l&rsquo;interface; il vous faut utiliser un programmateur de PIC. J&rsquo;utilise un PicKit3. Pour utiliser un programmateur Microchip, il faut installer <a href="http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;nodeId=1406&amp;dDocName=en019469&amp;part=SW007002" target="_blank" rel="noopener">MPlab</a> (ou <a href="http://www.microchip.com/en_us/family/mplabx/index.html" target="_blank" rel="noopener">MPlabX</a> qui est multiplateforme). Ensuite il faut importer le fichier .hex qui a été généré par MikroC et programmer le PIC avec. La procédure diffère entre MPlab et MPlabX. Avec MPlab, il suffit de faire File -&gt; import, puis de programmer; avec MPlabX, il faut créer un nouveau projet et y importer le fichier .hex en enfin programmer le PIC.</p>
<p>Pour tester la communication HID, vous pouvez utiliser le HID Terminal fournit par MikroC ou bien écrire votre propre programme.<br />
Personnellement, j&rsquo;utilise LabVIEW, un environnement de programmation graphique développé par National Instrument, qui offre une grande compatibilité avec la plupart des protocoles de communications.</p>
<p>Voici un exemple simple de communication HID permettant de piloter la luminosité des deux LED de l&rsquo;interface:</p>
<div class="source">
<pre class="EnlighterJSRAW" data-enlighter-language="c">#include "USBdsc.c"
#define TAILLE_BUF 64
 
/*------------- Pilotage des LEDs en luminosité -------------*/
/*                                                           */
/* Programme écrit pour MikroC 2009,                         */
/* incompatible avec la version 2011                         */
/*                                                           */
/* Auteur: LAURENT Amaury                                    */
/* Date: 30/11/2011                                          */
/*                                                           */
/*-----------------------------------------------------------*/
 
unsigned short userRD_buffer[TAILLE_BUF];
unsigned short userWR_buffer[TAILLE_BUF];
char * pt;
char ReadBuf[TAILLE_BUF] WriteBuf[TAILLE_BUF];
int i;
 
signed int consigne1=0, consigne2=0;
unsigned char cpt=0;
 
void Vider_Buffer(char * Buffer)
{
     for (i=0;i&lt;TAILLE_BUF;i++) Buffer[i]=0;
}
 
void interrupt()
{
    if (PIR2.USBIF == 1)
    {
    asm CALL _Hid_InterruptProc
    asm nop
    
    if(HID_Read()!=0)
        {
            pt=strstr(ReadBuf,"LED1: ");
            if (pt!=0)
            {
                consigne1=*(pt+6);
            }
 
            pt=strstr(ReadBuf,"LED2: ");
            if (pt!=0)
            {
                consigne2=*(pt+6);
            }            
 
            Vider_Buffer(ReadBuf);
            Vider_Buffer(WriteBuf);
        }
   }
}
 
void InitPIC (void)
{
    ADCON1=0x0F;
    CMCON=7;
    
    //------------- LED1 ------------
    TRISD.f0=0;
    PORTD.f0=0;
 
    //------------- LED2 ------------
    TRISD.f1=0;
    PORTD.f1=0;
 
    //------------- USB -------------
    TRISC.f4=1;  //D-
    TRISC.f5=1;  //D+
    HID_Enable(&amp;ReadBuf,&amp;WriteBuf);
}
 
void main()
{
 
    InitPIC();
 
    while (1)
    {
        //-------------------------------
        //------------- PWM -------------
        //-------------------------------
        
        //----------- LED 1 -------------
        portd.f0=(consigne1&gt;cpt);
 
        //----------- LED 2 -------------
        portd.f1=(consigne2&gt;cpt);
 
        cpt++;
    }
}

</pre>
<p>&nbsp;</p>
</div>
<p>Cet article <a rel="nofollow" href="https://amaury-laurent.fr/tutoriel-de-programmation-de-linterface-hid/">Tutoriel de programmation de l&rsquo;interface HID</a> est apparu en premier sur <a rel="nofollow" href="https://amaury-laurent.fr">Electronique et Informatique</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/tutoriel-de-programmation-de-linterface-hid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
