<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://fablabo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sylvainmahe</id>
	<title>fablabo - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://fablabo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sylvainmahe"/>
	<link rel="alternate" type="text/html" href="https://fablabo.net/index.php/Sp%C3%A9cial:Contributions/Sylvainmahe"/>
	<updated>2026-05-30T12:39:52Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://fablabo.net/index.php?title=Discussion:Atelier_logiciel&amp;diff=35564</id>
		<title>Discussion:Atelier logiciel</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Discussion:Atelier_logiciel&amp;diff=35564"/>
		<updated>2021-11-05T20:04:41Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Nouvelle section de discussion : Arduino # Microchip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arduino # Microchip ==&lt;br /&gt;
&lt;br /&gt;
Juste une ou deux remarque :&lt;br /&gt;
Arduino n&#039;est pas une famille de microcontrôleurs, dans la carte Arduino UNO pour prendre l&#039;exemple le plus simple, c&#039;est un ATmega328P de marque Microchip, et d&#039;architecture AVR (il n&#039;y a pas que les PIC comme exemple de MCU chez Microchip (anciennement Atmel pour les ATmega).&lt;br /&gt;
&lt;br /&gt;
Autre remarque, il n&#039;est pas forcément nécessaire d&#039;utiliser un IDE pour développer. [[Utilisateur:Sylvainmahe|Sylvainmahe]] ([[Discussion utilisateur:Sylvainmahe|discussion]]) 5 novembre 2021 à 21:04 (CET)&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=La_radiocommande&amp;diff=35531</id>
		<title>La radiocommande</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=La_radiocommande&amp;diff=35531"/>
		<updated>2021-11-01T13:17:27Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc08332.jpg&lt;br /&gt;
|description=Projet et concept de radiocommande&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
|inspiration=aéromodélisme&lt;br /&gt;
|ingrédients=aluminium, acier inoxydable, ertalon, okoumé, peuplier,&lt;br /&gt;
|machines=tour à métal, fraiseuse, scie à rubant, fer à braser,&lt;br /&gt;
|source=Radio control.zip&lt;br /&gt;
|url=http://sylvainmahe.site&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La radiocommande&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce projet de &#039;&#039;&#039;radiocommande&#039;&#039;&#039; est la suite logique de mon intérêt et de mes convictions pour un modélisme aérien tel qu&#039;il devrait être pratiqué, c&#039;est-à-dire la conception et la fabrication de systèmes radio-pilotés en partant réellement de zéro.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08314.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08425.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08421.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08323.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08326.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08330.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08297.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc06915.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc06927.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À partir des premières ébauches sur papier, études des possibilités et contraintes techniques, schémas des circuits électroniques, conception des programmes dans la radiocommande et les modèles associés, dessins du boîtier et définition des différentes pièces d&#039;usinage (etc...), jusqu&#039;à la finalisation du projet, il aura fallu plus d&#039;une année de conception, fabrication, et tests de validation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Les caractéristiques de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Automate programmable MODULABLE 32 équipé du microcontrôleur ATmega1284P.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Émetteur/récepteur (transceiver) radio 2.4GHz (composant nRF24L01+).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Antenne Trèfle omnidirectionnelle 3 branches (7dBm).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication multidirectionnelle vers (sol/air air/sol) et entre (air/air) plusieurs modèles.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication vers périphériques relais pour applications longues distances basse puissance.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication par trames de 32 bits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage digital avec mini afficheur à digits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Buzzer de signalement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Système à tolérance de pannes (fail-safe) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Surveillance de l&#039;activité du modèle (watchdog) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 menu principal + 1 menu des paramètres/réglages.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Aucune mémoire de modèles (la mémoire est située dans les modèles).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Possibilité de copier les réglages d&#039;un modèle vers un autre très facilement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- 15 paramètres/réglages par défaut envoyés par le modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage des trims (autour des neutres) des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme (visuelle et sonore) tension de batterie faible du modèle (de 0V à 100V).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme (visuelle et sonore) temporisation/chronomètre (de 0s à 3600s).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de l&#039;inversion des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de courbes des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Jusqu&#039;à 16 paramètres/réglages personnalisés supplémentaires envoyés par le modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- 5 paramètres/réglages par défaut propres à la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Calibration des potentiomètres des manches et auxiliaire (si remplacement/autre).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Verrouillage des menus (plus de réglages possibles, ni d&#039;extinction de la radiocommande).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage de la tension de la batterie de la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage de la tension de la batterie du modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage d&#039;une temporisation/chronomètre (temps d&#039;utilisation du modèle/autre).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage des trims (verrouillage et remise à 0 possible par le bouton de sélection).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage d&#039;une télémétrie personnalisée.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage des paramètres/réglages par défaut et personnalisés.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Menu de mise à jour des paramètres/réglages du modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Menu de sauvegarde des réglages propres à la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Allumage ou extinction de la radiocommande ou du modèle dans n&#039;importe quel ordre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Accumulateur Nickel-hydrure métallique (NiMH) 8S (+9.6V) 600mAh.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Alarme niveau de batterie faible (en dessous de +6V).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Prise de charge de la batterie (XT30).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Prise de programmation du microcontrôleur (mini XLR).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Boîtier fermé en aluminium, acier inoxydable, bois (contreplaqué 5mm), et ertalon.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Dimensions : 214mm x 205mm x 118mm.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08284.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08290.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;L&#039;interface électromécanique entre l&#039;homme et la machine :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- 2 manches analogiques (1 gaz/roulis + 1 tangage/lacet) sur 10 bits chacun (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 4 interrupteurs de trims (3 positions) sur 2 bits chacun (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 interrupteur de coupure moteur/autre (2 positions) sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 3 interrupteurs auxiliaires (3 positions) sur 2 bits chacun (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton rotatif auxiliaire sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton rotatif de sélection/menus sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton poussoir de sélection/menus (2 positions, dont 1 momentanée) sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 interrupteur d&#039;alimentation maintenue on/off (2 positions).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Programmation de l&#039;automate programmable MODULABLE 32 avec MODULE :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le programme en langage C++ fonctionnant avec MODULE est téléchargeable ici :&lt;br /&gt;
[http://sylvainmahe.site/download/cpp/radio_control.zip Télécharger le programme de la radiocommande]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08312.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08313.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Connexions (automate programmable MODULABLE 32 sur les différents systèmes embarqués) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 1 (PB0) sur broche STATE (état) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 2 (PB1) sur broche HOLD (auto-maintien) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 3 (PB2) sur broche SS (slave select) mini afficheur à digits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 4 (PB3) sur broche WAVE (onde) buzzer de signalement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 5 (PB4) sur broche CSN (slave select) composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 6 (PB5) sur broche MOSI (master output slave input) mini afficheur à digits et composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 7 (PB6) sur broche MISO (master input slave output) composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 8 (PB7) sur broche SCK (serial clock) mini afficheur à digits et composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 9 (PD0) sur bouton poussoir de sélection/menus.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 10 (PD1) sur interrupteur de coupure moteur/autre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 11 (PD2) sur interrupteur auxiliaire A (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 12 (PD3) sur interrupteur auxiliaire A (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 13 (PD4) sur interrupteur auxiliaire B (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 14 (PD5) sur interrupteur auxiliaire B (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 15 (PD6) sur interrupteur auxiliaire C (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 16 (PD7) sur interrupteur auxiliaire C (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 17 (PC0) sur interrupteur trim de gaz (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 18 (PC1) sur interrupteur trim de gaz (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 19 (PC2) sur interrupteur trim de tangage (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 20 (PC3) sur interrupteur trim de tangage (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 21 (PC4) sur interrupteur trim de roulis (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 22 (PC5) sur interrupteur trim de roulis (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 23 (PC6) sur interrupteur trim de lacet (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 24 (PC7) sur interrupteur trim de lacet (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 25 (PA7) sur curseur bouton rotatif de sélection/menus.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 26 (PA6) sur curseur manche analogique des gaz.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 27 (PA5) sur curseur manche analogique de tangage.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 28 (PA4) sur curseur manche analogique de roulis.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 29 (PA3) sur curseur manche analogique de lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 30 (PA2) sur curseur bouton rotatif auxiliaire.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 31 (PA1) sur broche VOLT (tension) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Le concept de cette radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Depuis les premiers temps ou je pilote des modèles radiocommandés dans des associations d&#039;aéromodélisme jusqu&#039;à aujourd&#039;hui, je me suis souvent demandé et au vu de l&#039;avancée précédente et actuelle en matière d&#039;électronique embarquée :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Mais pourquoi donc les radiocommandes du commerce ont-elles des mémoires de modèles ?&#039;&#039;&#039; Les mémoires de modèles permettent en effet de retenir les réglages relatifs à un modèle, dans la mémoire de la radiocommande.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À ce propos je ne citerais que l&#039;exemple d&#039;un ami au terrain de modélisme sans le nommer, qui par mégarde se trompe assez régulièrement de mémoire de modèles (il vole avec beaucoup de choses). En conséquence cela lui arrive souvent d&#039;écraser ses réglages, ou d&#039;écraser son modèle tout simplement au sens physique du terme !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En fait, cette &amp;quot;lacune&amp;quot; des mémoires de modèles dans les radiocommandes modernes trouve historiquement ses racines dans la conception même des premiers radio-émetteurs/récepteurs. En effet, &#039;&#039;&#039;les premières radiocommandes se contentaient uniquement d&#039;être émetteur d&#039;information&#039;&#039;&#039;, et le modèle étant lui simplement un récepteur. Dans cette situation (unidirectionnelle), il est facile de comprendre que le modèle reste toujours muet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Plus tard, les concepteurs et divers industriels se sont décidés (au vue de la demande qui augmentait) à ajouter une communication du modèle vers la radiocommande, sur un circuit électronique bien distinct et avec une antenne radio supplémentaire sur le modèle et la radiocommande. C&#039;est un retour air/sol qui a été appelé &#039;&#039;&#039;télémétrie&#039;&#039;&#039; (en rapport avec la télémétrie à l&#039;époque des débuts de la conquête spatiale jusqu&#039;à nos jours).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;L&#039;avancée en matière de miniaturisation des composants permet aujourd&#039;hui d&#039;avoir &#039;&#039;&#039;dans une même puce un émetteur et un récepteur&#039;&#039;&#039;, qui se sert de la même antenne radio pour communiquer, ces systèmes sont appelés &#039;&#039;&#039;transceivers&#039;&#039;&#039; (émetteurs/récepteurs).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le concept que je développe ici permet de vous expliquer l&#039;idée même de ma radiocommande, &#039;&#039;&#039;celle-ci n&#039;a en effet aucune mémoire de modèles&#039;&#039;&#039;, ayant souhaité aller au bout de ma logique, &#039;&#039;&#039;c&#039;est le modèle qui contient la mémoire !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette idée simple permet beaucoup de choses, notamment le fait que &#039;&#039;&#039;c&#039;est le modèle qui envoi des paramètres et réglages personnalisés à la radiocommande&#039;&#039;&#039;, qui à l&#039;origine dispose d&#039;un menu des paramètres et réglages vide. La radiocommande se voit alors garnie de paramètres personnalisés relatifs au modèle qui est actuellement en communication avec elle. Ces paramètres peuvent être de n&#039;importe quel type et agir sur n&#039;importe quelle fonction du modèle. Ce retour radio air/sol permet également à la radiocommande de disposer de &#039;&#039;&#039;l&#039;affichage de la tension de la batterie du modèle en temps réel&#039;&#039;&#039;, et d&#039;une &#039;&#039;&#039;télémétrie personnalisée&#039;&#039;&#039; en fonction du modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une fois cette notion comprise, tout est alors possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour régler votre modèle, ma radiocommande dispose alors de &#039;&#039;&#039;15 paramètres par défaut&#039;&#039;&#039; qui en général sont assez communs aux modèles réduits (trims, alarmes, inversion des voies, courbes de gaz, etc...), et d&#039;un maximum de &#039;&#039;&#039;16 paramètres personnalisés par le modèle&#039;&#039;&#039; (dont le type de paramètre n&#039;est pas défini par défaut).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci est largement suffisant parce que par définition même, ces paramètres sont spécifiques au modèle considéré. Terminé les réglages et menus à n&#039;en plus finir (souvent la plupart du temps inutilisés) dans les radiocommandes du commerce !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans ce que je propose ici, vous disposez des &#039;&#039;&#039;réglages uniquement nécessaires au modèle mis en œuvre&#039;&#039;&#039;, ce qui facilite grandement son utilisation sur le terrain de modélisme !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Système multidirectionnel (multiceiver) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le système de radiocommande 2.4GHz que je propose ici permet la &#039;&#039;&#039;communication multidirectionnelle entre la radiocommande et un ou plusieurs modèles&#039;&#039;&#039;, autorise le &#039;&#039;&#039;dialogue entre les modèles&#039;&#039;&#039; eux-mêmes (réseau d&#039;émetteurs/récepteurs, ou multiceivers), et rend possible l&#039;ajout de plusieurs émetteurs/récepteurs (transceivers) embarqués dans un même véhicule (pour les gros modèles notamment).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout projet est alors possible, sans même évoquer le modélisme piloté dont il est question ici :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Par exemple des applications robotiques mettant en œuvre des réseaux de robots qui communiquent entre-eux, et bien d&#039;autres projets encore. Libre à vous d&#039;imaginer vos propres applications en fonction de vos besoins !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce principe d&#039;émetteur/récepteur intégré donne également la possibilité à l&#039;utilisateur d&#039;effectuer des communications longues distances en basse puissance d&#039;émission (inférieure à 100mW), ceci par &#039;&#039;&#039;transmission de données de la radiocommande vers des périphériques relais&#039;&#039;&#039; qui se chargent non pas de traiter l&#039;information et de l&#039;utiliser, mais plutôt de la relayer vers d&#039;autres périphériques afin d&#039;atteindre la portée radio vers le modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette propriété de pouvoir recevoir et émettre avec de multiples périphériques ainsi que de relayer l&#039;information est effectuée de manière &#039;&#039;&#039;complètement transparente pour l&#039;utilisateur ou le programmeur&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est envisageable d&#039;imaginer un robot d&#039;exploration de décombres hors de portée radio directe avec le poste de pilotage (à cause des bardages métalliques des bâtiments par exemple), mais étant à portée radio de plusieurs relais qui se chargent seulement de transmettre (relayer) les informations aux téléopérateurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Toutes ces propriétés multidirectionnelles (multiceivers) sont à définir non pas dans la radiocommande, mais &#039;&#039;&#039;uniquement à la conception des programmes à bord de vos modèles, robots, et autres systèmes embarqués&#039;&#039;&#039; (libre à chacun de créer une logique en rapport avec le type de système piloté).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que les paragraphes qui suivent font état d&#039;une utilisation avec un seul modèle, car c&#039;est mon application principale (l&#039;aéromodélisme). Néanmoins tout ce qui est expliqué ci-dessous (utilisation des menus, fonctionnalités, etc...) fonctionne avec plusieurs modèles (suivant la logique que vous avez programmé dans leurs microcontrôleurs respectifs bien évidement).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Démarrage de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À l&#039;allumage de la radiocommande, se propose à vous le choix de démarrer celle-ci en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne) ou en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne) en faisant pivoter le bouton rotatif de sélection. Si vous choisissez &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), le circuit radio d&#039;émission/réception est démarré, la radiocommande se met alors à envoyer et recevoir des données, et cherche si un modèle est présent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Si un modèle est présent et répond à la radiocommande&#039;&#039;&#039;, cette dernière récupère alors tous les paramètres nécessaires (trims, paramètres par défaut, paramètres personnalisés, etc...) &#039;&#039;&#039;lors de ce démarrage uniquement&#039;&#039;&#039;, et vous emmène directement au menu principal pour une utilisation normale.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08299.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08300.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Si au contraire, aucun modèle ne se présente à la radiocommande&#039;&#039;&#039;, l&#039;affichage indiquera &amp;quot;BINDING&amp;quot; (liaison), et vous aurez le choix d&#039;attendre ou de quitter (en appuyant sur le bouton de sélection) &#039;&#039;&#039;sans récupérer les paramètres du modèle&#039;&#039;&#039;, ce qui en conséquence vous donnera l&#039;impossibilité de régler ses paramètres, car &#039;&#039;&#039;le menu des paramètres sera vide&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Attention, la radiocommande émet et reçoit des données (le circuit radio d&#039;émission/réception est démarré) &#039;&#039;&#039;même en ayant quitté la tentative de liaison&#039;&#039;&#039; (&amp;quot;BINDING&amp;quot;) avec le modèle, vous pourrez alors tout de même le piloter (sans pouvoir en changer les paramètres).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En résulte que les trims, alarmes, inversions des voies, et courbes (qui doivent normalement êtres récupérés du modèle, et qui sont mixés non pas dans le modèle, mais dans la radiocommande) seront alors à leur &#039;&#039;&#039;valeur par défaut&#039;&#039;&#039; (&amp;quot;OFF&amp;quot; pour les trims/alarmes/courbes, et &amp;quot;NOR&amp;quot; pour l&#039;inversion des voies), il convient alors d&#039;être prudent suivant le modèle piloté, et une telle configuration n&#039;est en soit pas idéale, mais est possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous démarrez la radiocommande en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne), cette dernière reste &#039;&#039;&#039;muette&#039;&#039;&#039; (circuit d&#039;émission/réception éteint).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans ce cas, le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) vous permettra non pas de régler les paramètres du modèle (voir plus bas : &amp;quot;Réglages et enregistrement des paramètres&amp;quot;), mais plutôt de modifier &#039;&#039;&#039;certains réglages propres à la radiocommande&#039;&#039;&#039;, et enregistrés dans celle-ci (comme la calibration des potentiomètres des manches et auxiliaire, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ne pas démarrer le circuit radio d&#039;émission/réception permet également de se familiariser avec l&#039;interface de cette radiocommande, ou bien encore de contrôler la tension de la batterie interne avant de se rendre sur votre terrain de modélisme favoris.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Allumage de la radiocommande et du modèle :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il n&#039;existe aucune contrainte au niveau de l&#039;ordre d&#039;allumage ou de la mise hors tension de la radiocommande ou du modèle, tout deux attendent une réponse de l&#039;autre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Vous pouvez allumer la radiocommande ou le modèle dans n&#039;importe quel ordre&#039;&#039;&#039;, éteindre votre modèle ou la radiocommande quand vous le souhaitez, et rallumer l&#039;une ou l&#039;autre en cours d&#039;utilisation !&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08302.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08428.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque le modèle s&#039;aperçoit que plus aucune radiocommande ne répond, il active alors son &#039;&#039;&#039;système à tolérance de pannes&#039;&#039;&#039; (fail-safe), et envoi en boucle les paramètres dont la radiocommande a besoin jusqu&#039;à temps que celle-ci réponde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si la radiocommande a besoin de paramètres à son allumage, &#039;&#039;&#039;elle ira les chercher si un modèle est sous tension et répond&#039;&#039;&#039;, de même si le modèle a besoin de paramètres et qu&#039;aucune radiocommande n&#039;est allumée, &#039;&#039;&#039;il ira les chercher au moment où elle sera activée en communication&#039;&#039;&#039; (via le menu de démarrage &amp;quot;ON AIR&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Différents menus :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande dispose d&#039;un &#039;&#039;&#039;menu principal&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;- Verrouillage de la radiocommande (&amp;quot;LOCK/-LOCKED-&amp;quot;, voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation de la tension de la batterie de la radiocommande et alarme (&amp;quot;CTRL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation de la tension de la batterie du modèle et alarme (&amp;quot;MODL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation d&#039;une temporisation/chronomètre et alarme (&amp;quot;TIME&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation et modification des trims (&amp;quot;THRO&amp;quot;, &amp;quot;PITC&amp;quot;, &amp;quot;ROLL&amp;quot;, &amp;quot;YAW&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation d&#039;une télémétrie personnalisée (&amp;quot;TLMT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Accès au menu des paramètres (&amp;quot;SETTINGS&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08301.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08423.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À partir du menu principal et par la pression du bouton de sélection sur la section &amp;quot;SETTINGS&amp;quot; (paramètres) en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne), vous entrez dans le menu des paramètres/réglages dans lequel on trouve &#039;&#039;&#039;11 paramètres par défaut&#039;&#039;&#039;, ainsi qu&#039;un maximum de &#039;&#039;&#039;16 paramètres personnalisés&#039;&#039;&#039; agrémentés par le modèle si besoin :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Paramètres par défaut :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme tension de batterie faible du modèle (&amp;quot;BMDL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de la limite d&#039;une temporisation/chronomètre avec alarme (&amp;quot;TMED&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de la manière dont la temporisation/chronomètre se déclenche (&amp;quot;TMTR&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de l&#039;inversion des manches de gaz/roulis et profondeur/lacet (&amp;quot;DRTH&amp;quot;, &amp;quot;DRPI&amp;quot;, &amp;quot;DRRO&amp;quot;, &amp;quot;DRYA&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de courbes des manches de gaz/roulis et profondeur/lacet (&amp;quot;CUTH&amp;quot;, &amp;quot;CUPI&amp;quot;, &amp;quot;CURO&amp;quot;, &amp;quot;CUYA&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Paramètres personnalisés :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Paramètres dont le type n&#039;est pas défini par défaut (nom affiché dans le menu, valeur initiale, valeurs minimales et maximales possibles, etc...).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Autres sections :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal sans enregistrer les paramètres dans le modèle ni conserver les dernières modifications effectuées (&amp;quot;EXIT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal et mise à jour des paramètres dans le modèle (&amp;quot;UPDATE&amp;quot;, si la radiocommande n&#039;est pas verrouillée).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque la radiocommande est démarrée en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne, c&#039;est-à-dire circuit d&#039;émission/réception éteint), à partir du menu principal et par la pression du bouton de sélection sur la section &amp;quot;SETTINGS&amp;quot; (paramètres), vous entrez dans le menu dans lequel vous pouvez modifier &#039;&#039;&#039;certains réglages propres à la radiocommande&#039;&#039;&#039;, paramètres qui sont enregistrés dans sa mémoire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Réglages :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Calibration des potentiomètres des manches et auxiliaire (&amp;quot;CLTH&amp;quot;, &amp;quot;CLPI&amp;quot;, &amp;quot;CLRO&amp;quot;, &amp;quot;CLYA&amp;quot;, &amp;quot;CLAX&amp;quot;, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Autres sections :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal sans enregistrer les paramètres dans la radiocommande ni conserver les dernières modifications effectuées (&amp;quot;EXIT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal et enregistrement des paramètres dans la radiocommande (&amp;quot;SAVE&amp;quot;, si la radiocommande n&#039;est pas verrouillée).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Alarmes :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande est équipée d&#039;une alarme niveau de batterie faible de la radiocommande et du modèle, et d&#039;une alarme qui s&#039;active via une temporisation/chronomètre réglable (lorsque le temps paramétré est dépassé). Ces 3 alarmes sont visibles dans le menu principal, ce sont respectivement les sections &#039;&#039;&#039;&amp;quot;CTRL&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;MODL&amp;quot;&#039;&#039;&#039;, et &#039;&#039;&#039;&amp;quot;TIME&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande est équipée d&#039;une temporisation (chronomètre) dont &#039;&#039;&#039;la durée limite&#039;&#039;&#039; est paramétrable, et &#039;&#039;&#039;la manière dont elle se déclenche&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;br/&amp;gt;- Avec l&#039;interrupteur de coupure moteur/autre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- En dépassant une certaine position (réglable) au manche de gaz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Au pilotage, vous avez donc le choix de déceler la fin de votre session lors du dépassement d&#039;une certaine tension de la batterie du modèle &#039;&#039;&#039;réglable de 0V à 100V&#039;&#039;&#039; (par pas de 0.1V), et/ou du dépassement d&#039;une temporisation/chronomètre &#039;&#039;&#039;réglable de 0s à 3600s&#039;&#039;&#039; (par pas de 1s), soit 1h au total.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le dépassement du temps (réglé préalablement) de la temporisation/chronomètre est indiqué de façon &#039;&#039;&#039;visuelle et sonore&#039;&#039;&#039; (alarme sonore de quelques secondes mais affichage permanent), ce chronomètre est activable et désactivable via le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) et peut être redémarré ou stoppé à tout moment en pressant le bouton de sélection sur la section &amp;quot;TIME&amp;quot; dans le menu principal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le dépassement de la tension limite de la batterie du modèle (réglée par l&#039;utilisateur) provoque également un affichage visuel et sonore (alarme sonore de quelques secondes mais affichage permanent).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette alarme visuelle du &#039;&#039;&#039;niveau de batterie faible du modèle&#039;&#039;&#039;, n&#039;est qu&#039;en à elle désactivable uniquement lorsque le niveau de la batterie dépasse à nouveau (augmente positivement) le seuil minimum que vous avez réglé en paramètre (ceci peut se produire lors du changement de la batterie de votre modèle par exemple).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une alarme de niveau de batterie faible de la radiocommande existe à l&#039;instar de celle du modèle, mais la valeur limite n&#039;est pas réglable et est &#039;&#039;&#039;fixée à +6V&#039;&#039;&#039;, ce qui correspond à la tension minimum d&#039;alimentation de l&#039;automate programmable MODULABLE 32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette alarme de niveau de batterie faible de la radiocommande intervient de manière visuelle et sonore lorsque le &#039;&#039;&#039;seuil de +6V minimum&#039;&#039;&#039; est dépassé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans cette situation, même si la tension de la batterie de la radiocommande (pour une raison x ou y) remonte au dessus de +6V, &#039;&#039;&#039;l&#039;alarme perdurera&#039;&#039;&#039;, seul la partie sonore une fois active pourra être désactivée (par une pression sur le bouton de sélection dans la partie relative à ce paramètre dans le menu principal), l&#039;alarme visuelle restera qu&#039;en à elle présente dans tous les cas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si cette alarme de niveau de batterie faible vient à s&#039;activer (que ce soit celle de la radiocommande ou du modèle), et que votre modèle est en vol, il est alors &#039;&#039;&#039;vivement conseillé de le poser dans les plus brefs délais !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si aucune intervention de l&#039;utilisateur pour désactiver ou réinitialiser l&#039;une (ou l&#039;ensemble) des 3 alarmes n&#039;est effectuée, &#039;&#039;&#039;un bip se fait entendre toutes les 30 secondes&#039;&#039;&#039;, ce qui signifie qu&#039;une alarme visuelle &#039;&#039;&#039;est toujours active&#039;&#039;&#039;. Rendez-vous alors dans le menu principal pour les désactiver (si possible).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Inversions des voies et courbes :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En paramètres par défaut, il vous est également possible de définir &#039;&#039;&#039;le sens des voies de gaz, de tangage, de roulis, et de lacet&#039;&#039;&#039; envoyés au modèle par la radiocommande (de 0 à 1023 en mode normal, ou de 1023 à 0 en mode inversé), et de définir des valeurs de courbes, soit &amp;quot;OFF&amp;quot; pour linéaire, jusqu&#039;à 100 pour fortement non-linéaire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout comme les trims, l&#039;inversion des voies et les courbes sont &#039;&#039;&#039;mixés dans la radiocommande&#039;&#039;&#039;, et envoyés au modèle en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous souhaitez inverser une ou plusieurs voies, rendez-vous dans le menu des paramètres via le menu principal en cliquant sur la section &amp;quot;SETTINGS&amp;quot; (paramètres) tout en étant en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne), cherchez les paramètres &#039;&#039;&#039;&amp;quot;DRTH&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;DRPI&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;DRRO&amp;quot;&#039;&#039;&#039;, ou &#039;&#039;&#039;&amp;quot;DRYA&amp;quot;&#039;&#039;&#039; (qui correspondent respectivement aux gaz, tangage, roulis, et lacet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les paramètres ayant en suffixe &#039;&#039;&#039;&amp;quot;NOR&amp;quot;&#039;&#039;&#039; (normal) indiquent que la voie concernée n&#039;est pas inversée, et ceux mentionnés &#039;&#039;&#039;&amp;quot;REV&amp;quot;&#039;&#039;&#039; (inversé) sont inversées. Pour les modifier, il vous suffit de cliquer dessus avec le bouton de sélection, ou d&#039;utiliser les interrupteurs de trims pour en changer les valeurs. Ensuite, rendez-vous dans la section &#039;&#039;&#039;&amp;quot;UPDATE&amp;quot;&#039;&#039;&#039; (mettre à jour) pour mettre à jour les modifications dans le modèle et les prendre en compte dans la radiocommande (car ces paramètres sont mixés dans la radiocommande, et non pas le modèle).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En plus des trims et de l&#039;inversion des voies, vous disposez de la possibilité de modifier les &#039;&#039;&#039;courbes de gaz, de tangage, de roulis, et de lacet&#039;&#039;&#039;. Celles-ci sont linéaires (&amp;quot;OFF&amp;quot;) par défaut, et leurs actions s&#039;appliquent de part et d&#039;autre du neutre des manches (gaz y compris).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De même que pour le réglage des autres paramètres, dans le menu &amp;quot;SETTINGS&amp;quot; (paramètres), cherchez les mots &#039;&#039;&#039;&amp;quot;CUTH&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;CUPI&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;CURO&amp;quot;&#039;&#039;&#039;, ou &#039;&#039;&#039;&amp;quot;CUYA&amp;quot;&#039;&#039;&#039; (qui correspondent respectivement aux gaz, tangage, roulis, et lacet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si il est indiqué &#039;&#039;&#039;&amp;quot;OFF&amp;quot;&#039;&#039;&#039;, les courbes sont &#039;&#039;&#039;linéaires&#039;&#039;&#039;, si il est indiqué un nombre, les courbes sont &#039;&#039;&#039;non-linéaires&#039;&#039;&#039;. Vous pouvez modifier cela via les interrupteurs de trims, ou plus rapidement à l&#039;aide du bouton rotatif auxiliaire tout en restant appuyé sur le bouton de sélection (comme expliqué ci-dessous : &amp;quot;Réglages et enregistrement des paramètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Plus les valeurs des courbes seront hautes (proches de 100), plus &#039;&#039;&#039;le pilotage sera doux autour du neutre des manches&#039;&#039;&#039; et moins sensible. Le pilotage d&#039;un modèle à forts débattements sera donc plus aisé en augmentant les valeurs des courbes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter qu&#039;une courbe sur l&#039;axe des gaz peut être utile au pilotage des hélicoptères de voltige (dont le neutre, et donc le centre du manche correspond au pas 0 sur le modèle), même si pour ma part je préfère piloter de façon linéaire le gaz/pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Réglages et enregistrement des paramètres :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande dispose de l&#039;affichage des trims dans le menu principal, parce que leurs réglage s&#039;effectue à tout moment via les 4 interrupteurs 3 positions prévus à cet effet (c&#039;est pourquoi dans le menu des paramètres/réglages vous ne trouvez que 11 paramètres par défaut sur les 15 au total, soit les 4 trims en moins). &#039;&#039;&#039;Les trims sont eux aussi enregistrés dans le modèle&#039;&#039;&#039; (et non la radiocommande). Ils peuvent être remis à 0 individuellement par la simple pression du bouton poussoir de sélection, et verrouillés (&amp;quot;OFF&amp;quot;) si besoin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Sur un modèle radiocommandé à propulsion électrique disposant de son propre algorithme de vol, il est souvent rare d&#039;avoir besoin d&#039;un trim sur le manche de gaz, ou même sur les autres axes de vol, d&#039;ou cette possibilité de verrouillage d&#039;un ou plusieurs trims avec la radiocommande que j&#039;ai développé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le menu des paramètres et réglages en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne) est &#039;&#039;&#039;accessible en cliquant sur &amp;quot;SETTINGS&amp;quot;&#039;&#039;&#039; (paramètres) dans le menu principal, et dispose d&#039;une section &amp;quot;EXIT&amp;quot; (sortie) et &amp;quot;UPDATE&amp;quot; (mettre à jour). Lorsque vous avez effectué vos réglages (trims, paramètres par défaut, paramètres personnalisés, etc...), &#039;&#039;&#039;vous devez mettre à jour la mémoire du modèle&#039;&#039;&#039; en cliquant sur &amp;quot;UPDATE&amp;quot; (mettre à jour) afin que le modèle enregistre tous les paramètres dans sa mémoire et mette à jour son algorithme de vol (si il en dispose, vous pouvez très bien piloter un bateau sans algorithme de contrôle de la navigation par exemple, mais disposant tout de même de réglages et de paramètres).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08299.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08303.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez modifié des paramètres (trims, paramètres par défaut, paramètres personnalisés, etc...) et qu&#039;une mise à jour du modèle est nécessaire, &#039;&#039;&#039;la section &amp;quot;UPDATE&amp;quot;&#039;&#039;&#039; (mettre à jour) &#039;&#039;&#039;se changera en &amp;quot;-UPDATE-&amp;quot;&#039;&#039;&#039; (-mettre à jour-), les tirets de part et d&#039;autre du mot faisant office d&#039;indication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si aucun modèle ne répond à la radiocommande lorsque vous souhaitez mettre à jour les paramètres dans celui-ci après avoir cliqué sur &amp;quot;UPDATE&amp;quot; (mettre à jour) dans le menu des paramètres, dans ce cas &#039;&#039;&#039;l&#039;affichage indiquera &amp;quot;BINDING&amp;quot;&#039;&#039;&#039; (liaison), et vous aurez le choix d&#039;attendre ou de quitter (en appuyant sur le bouton de sélection) &#039;&#039;&#039;sans mettre à jour les paramètres dans le modèle&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Quitter la mise à jour n&#039;aura pas le même effet que de sortir du menu avec &amp;quot;EXIT&amp;quot; (sortie), &#039;&#039;&#039;vos paramètres dernièrement modifiés le resteront tant que la radiocommande sera allumée&#039;&#039;&#039;, et vous devrez alors retourner ultérieurement dans le menu pour mettre à jour vos paramètres dans le modèle (si vous le souhaitez).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous ne souhaitez pas enregistrer les paramètres dans le modèle &#039;&#039;&#039;ni conserver les dernières modifications effectuées&#039;&#039;&#039; dans le menu des paramètres (&amp;quot;SETTINGS&amp;quot;), &#039;&#039;&#039;vous pouvez sortir du menu en cliquant sur &amp;quot;EXIT&amp;quot;&#039;&#039;&#039; (sortie).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les réglages des trims sont actifs en permanence, car ils sont &#039;&#039;&#039;mixés avec les manches directement dans la radiocommande&#039;&#039;&#039;, mais ils ne s&#039;enregistrent pas dans celle-ci. Cette possibilité donne l&#039;avantage bien entendu d&#039;avoir des trims distincts par modèle, mais aussi de pouvoir trimer votre modèle sur le terrain sans avoir forcément envie de les enregistrer à l&#039;extinction de la radiocommande comme c&#039;est le cas avec les radiocommandes du commerce (si par exemple vous avez trimé votre modèle alors qu&#039;il y avait du vent, ce qui fausse votre perception des bons réglages).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que ce sont les interrupteurs de trims qui servent à régler les valeurs dans le menu des paramètres et réglages en mode &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), &#039;&#039;&#039;sauf lorsque la radiocommande est verrouillée&#039;&#039;&#039; (voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;), auquel cas les trims agissent toujours comme tel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il existe une méthode rapide pour régler des paramètres aux valeurs minimales et maximales trop larges (par exemple 0 à 3600 par pas de 1 comme c&#039;est le cas pour le chronomètre intégré). Pour ce faire il suffit de &#039;&#039;&#039;rester appuyé sur un trim&#039;&#039;&#039; (ce qui fera défiler les valeurs plus rapidement).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;L&#039;autre méthode de réglage rapide consiste à &#039;&#039;&#039;presser continuellement le bouton de sélection&#039;&#039;&#039;, ce qui vous permettra de régler la plupart des valeurs directement avec &#039;&#039;&#039;le bouton rotatif auxiliaire&#039;&#039;&#039; (pour la majorité des paramètres, et si le potentiomètre de ce bouton rotatif auxiliaire est calibré, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;), ou en ce qui concerne le paramètre de déclenchement de la temporisation/chronomètre, ce sera &#039;&#039;&#039;le manche de gaz&#039;&#039;&#039; (si le potentiomètre de ce manche est lui aussi calibré, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08318.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous décidez de régler la valeur de déclenchement de la temporisation/chronomètre à l&#039;aide du manche de gaz, il convient que &#039;&#039;&#039;l&#039;interrupteur de coupure moteur doit être actif&#039;&#039;&#039;, ou que que le modèle soit mis &#039;&#039;&#039;hors tension !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter qu&#039;il est tout à fait possible de régler les paramètres de votre modèle (sans parler des trims bien entendu) alors que celui-ci est &#039;&#039;&#039;en cours de pilotage&#039;&#039;&#039;, et que la radiocommande &#039;&#039;&#039;n&#039;est pas verrouillée&#039;&#039;&#039; (voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Bien évidement, même qu&#039;il s&#039;agisse d&#039;une voiture, ou d&#039;un bateau (ou de tout autre modèle ne pouvant se crasher quand il n&#039;y a plus d&#039;intervention du pilote), je ne peux que vous conseiller de &#039;&#039;&#039;régler votre modèle que lorsque il est à l&#039;arrêt et en sécurité&#039;&#039;&#039; (et je ne ferais à ce propos pas de commentaires en ce qui concerne un modèle aérien !).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Calibration des potentiomètres :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De part la conception même des manches de la radiocommande, &#039;&#039;&#039;la plupart des potentiomètres de ceux-ci ne tournent pas mécaniquement sur leur plage de résistance complète minimale et maximale&#039;&#039;&#039;, ne produisant pas une plage de valeurs sur 10 bits (converties d&#039;analogique à numérique) de 0 à 1023.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette contrainte technique conduit donc l&#039;utilisateur de cette radiocommande à devoir calibrer les potentiomètres (au moins lors du premier allumage) pour que cette dernière sache les &#039;&#039;&#039;plages de valeurs minimales et maximales des gaz, de l&#039;axe de tangage, de l&#039;axe de roulis, de l&#039;axe de lacet, et du bouton rotatif auxiliaire&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07663.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc07683.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette opération doit être effectuée &#039;&#039;&#039;à la première utilisation de la radiocommande&#039;&#039;&#039;, et lorsque que vous souhaitez &#039;&#039;&#039;remplacer les manches et/ou les potentiomètres&#039;&#039;&#039; de celle-ci (voie des gaz, tangage, roulis, lacet, ou auxiliaire).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour ce faire, vous devez démarrer la radiocommande en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne), puis vous rendre dans le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) dans lequel vous trouverez la calibration des potentiomètres des manches et auxiliaire de la radiocommande.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08300.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08303.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;5 sections respectivement utiles pour calibrer le potentiomètre de &#039;&#039;&#039;gaz&#039;&#039;&#039; (&amp;quot;CLTH&amp;quot;), de &#039;&#039;&#039;tangage&#039;&#039;&#039; (&amp;quot;CLPI&amp;quot;), de &#039;&#039;&#039;roulis&#039;&#039;&#039; (&amp;quot;CLRO&amp;quot;), de &#039;&#039;&#039;lacet&#039;&#039;&#039; (&amp;quot;CLYA&amp;quot;), ou &#039;&#039;&#039;auxiliaire&#039;&#039;&#039; (&amp;quot;CLAX&amp;quot;), permettent de calibrer les potentiomètres concernés par ces voies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour effectuer le calibrage, positionnez vous dans la section voulue (l&#039;une des 5 mentionnées), puis &#039;&#039;&#039;pressez de façon continue le bouton de sélection&#039;&#039;&#039;, et &#039;&#039;&#039;pivotez le manche concerné aux positions minimales et maximales&#039;&#039;&#039;. La valeur par défaut de 0 &#039;&#039;&#039;augmentera alors jusqu&#039;à atteindre un maximum&#039;&#039;&#039;, ce qui signifiera que le potentiomètre est calibré (c&#039;est-à-dire que la radiocommande a trouvée les valeurs minimales et maximales de celui-ci).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si par exemple le potentiomètre de tangage à une plage de résistance telle qu&#039;il retourne en numérique une valeur pouvant varier de &#039;&#039;&#039;104&#039;&#039;&#039; à &#039;&#039;&#039;985&#039;&#039;&#039;, une fois correctement calibré cela signifie que la valeur qui s&#039;affichera à vous dans la section correspondante à cet axe sera de &#039;&#039;&#039;881&#039;&#039;&#039; (car 985 - 104 = 881).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La valeur de calibration qui s&#039;affiche à vous est une &#039;&#039;&#039;soustraction entre la valeur maximale et la valeur minimale&#039;&#039;&#039; (convertie d&#039;analogique à numérique sur 10 bits) que produit le potentiomètre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le menu dispose d&#039;une section &amp;quot;EXIT&amp;quot; (sortie) et &amp;quot;SAVE&amp;quot; (enregistrer). Lorsque vous avez effectué vos réglages, &#039;&#039;&#039;vous devez les sauvegarder dans la radiocommande&#039;&#039;&#039; en cliquant sur &amp;quot;SAVE&amp;quot; (enregistrer) afin que celle-ci prenne en compte ces nouveaux réglages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez modifié des paramètres (calibration des potentiomètres) et qu&#039;un enregistrement dans la radiocommande est nécessaire, &#039;&#039;&#039;la section &amp;quot;SAVE&amp;quot;&#039;&#039;&#039; (enregistrer) &#039;&#039;&#039;se changera en &amp;quot;-SAVE-&amp;quot;&#039;&#039;&#039; (-enregistrer-), les tirets de part et d&#039;autre du mot faisant office d&#039;indication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Le verrouillage de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est possible avec cette radiocommande &#039;&#039;&#039;d&#039;empêcher l&#039;extinction de celle-ci via l&#039;interrupteur d&#039;alimentation on/off&#039;&#039;&#039;, et d&#039;éviter de pouvoir modifier les paramètres dans les menus (sauf les trims qui doivent servir même lorsque la radiocommande est verrouillée). Ceci s&#039;effectue en &#039;&#039;&#039;restant appuyé 1 seconde sur le bouton de sélection&#039;&#039;&#039; sur la section &amp;quot;LOCK&amp;quot; (verrouillage) dans le menu principal. Le mot &amp;quot;LOCK&amp;quot; (verrouillage) se change alors en &amp;quot;-LOCKED-&amp;quot; (-verrouillé-).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que vous ne pouvez pas éteindre la radiocommande tout en vous trouvant dans la section &amp;quot;LOCK/-LOCKED-&amp;quot; du menu principal (c&#039;est une sécurité supplémentaire).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour déverrouiller à nouveau la radiocommande, répétez l&#039;opération (pression de 1 seconde sur le bouton de sélection dans cette partie du menu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce sont les interrupteurs de trims qui servent à régler les valeurs dans le menu des paramètres et réglages en mode &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), &#039;&#039;&#039;sauf lorsque la radiocommande est verrouillée&#039;&#039;&#039;, auquel cas les trims agissent toujours comme tel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les trims &#039;&#039;&#039;ne peuvent pas être réinitialisés&#039;&#039;&#039; à leur valeur par défaut (&amp;quot;OFF&amp;quot;) en pressant le bouton de sélection dans le menu principal dans la section concernée lorsque la radiocommande est verrouillée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque la radiocommande est verrouillée, vous pouvez visualiser et modifier les réglages dans le menu des paramètres, mais vous ne pouvez pas les mettre à jour dans le modèle (en mode &amp;quot;ON AIR&amp;quot;) ou les enregistrer dans la radiocommande (en mode &amp;quot;OFF AIR&amp;quot;), car respectivement les sections &amp;quot;UPDATE&amp;quot; (mettre à jour) et &amp;quot;SAVE&amp;quot; (enregistrer) sont absents du menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La copie des paramètres d&#039;un modèle :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec ma radiocommande il est très simple de copier les paramètres (trims, paramètres par défaut, paramètres personnalisés) d&#039;un modèle vers un autre &#039;&#039;&#039;sans jamais pouvoir se tromper&#039;&#039;&#039;, voici la procédure :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; - Allumez la radiocommande et le modèle à copier.&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;2&#039;&#039;&#039; - Activez la transmission radio dans le menu qui vous est proposé au démarrage de la radiocommande (&amp;quot;ON AIR&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;3&#039;&#039;&#039; - Au signal sonore, les paramètres du modèle viennent d&#039;être copiés dans la radiocommande, vous pouvez éteindre le modèle à copier, et allumer l&#039;autre modèle dans lesquels vous souhaitez écraser les paramètres.&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;4&#039;&#039;&#039; - Rendez-vous dans le menu des paramètres en cliquant sur la section &amp;quot;SETTINGS&amp;quot; (paramètres), puis cliquez sur &amp;quot;UPDATE&amp;quot; (mettre à jour). Vous entendez alors les signaux sonores de la radiocommande et du modèle vous indiquant que les paramètres ont bien été copiés dans ce dernier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez plusieurs modèles devant recevoir les mêmes paramètres, répétez la procédure de l&#039;opération &#039;&#039;&#039;3&#039;&#039;&#039; à &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est très important de comprendre que cette opération de copie n&#039;a de sens que si les paramètres du modèle à copier vers ceux du modèle à écraser sont &#039;&#039;&#039;identiques&#039;&#039;&#039; non pas en termes de valeurs, mais bien &#039;&#039;&#039;en termes de nature et de caractéristiques&#039;&#039;&#039; (valeurs minimales et maximales, emplacements dans le menu des paramètres, etc...), et que les modèles à copier se situent tous dans la même logique (axes de manœuvrabilité, types de pilotage, etc...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans le cas contraire, cela peut être un choix délibéré de votre part de copier les paramètres vers un système complètement différent du modèle à copier, je pense par exemple à la copie vers un automate programmable nu afin de &#039;&#039;&#039;sauvegarder vos paramètres préférés&#039;&#039;&#039; (sans qu&#039;il soit question de modèle à proprement parlé).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La sécurité de la communication :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La communication s&#039;effectue de manière encodée avec une &#039;&#039;&#039;clé 32 bits unique&#039;&#039;&#039; paramétrable dans le programme de la radiocommande et des modèles, ce qui permet de rendre ce système de communication radio très fiable et sécurisé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lors d&#039;une communication, un encodage (CRC) valide est généré puis vérifié, c&#039;est un &#039;&#039;&#039;code de correction d&#039;erreurs&#039;&#039;&#039; (sur 16 bits) très performant qui permet de contrôler la validité des informations reçues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Par sécurité, le modèle est pourvu d&#039;un &#039;&#039;&#039;système à tolérance de pannes&#039;&#039;&#039; (fail-safe) qui permet d&#039;effectuer certaines opérations spécifiques &#039;&#039;&#039;lorsque la radiocommande ne répond plus&#039;&#039;&#039; (mise au neutre des servo-moteurs, coupure de la motorisation, etc...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout ceci est à définir à la conception du programme de vol à bord du modèle (libre à chacun de créer une logique en rapport avec le type de modèle piloté).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La radiocommande dispose également d&#039;une &#039;&#039;&#039;surveillance de l&#039;activité du modèle&#039;&#039;&#039; (watchdog) qui permet de connaître l&#039;état actif ou inactif de celui-ci (par l&#039;affichage de la tension de la batterie du modèle dans la section &amp;quot;MODL&amp;quot; si actif, ou si inactif par l&#039;affichage &amp;quot;OFF&amp;quot; dans cette même section), dans les deux cas un &#039;&#039;&#039;signal sonore&#039;&#039;&#039; (pour actif et inactif) se fait entendre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La vitesse et la précision de la communication :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La communication des informations entre la radiocommande et les modèles s&#039;effectue sur une largeur de &#039;&#039;&#039;32 bits&#039;&#039;&#039; utiles (c&#039;est-à-dire en faisant abstraction de l&#039;encodage, des adresses ou canaux, des codes de correction d&#039;erreurs, de la clé unique, etc...).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08295.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08296.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En définitif, les données utiles à l&#039;utilisateur qui proviennent de l&#039;interface électromécanique entre l&#039;homme et la machine sont englobées dans &#039;&#039;&#039;2 trames de 32 bits&#039;&#039;&#039;, ce qui comprends :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1ère trame de 32 bits :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Gaz sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de roulis sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire C sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Bouton rotatif auxiliaire D sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;2ème trame de 32 bits :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de tangage sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de lacet sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur de coupure moteur/autre sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire A sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire B sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Système à tolérance de pannes (fail-safe) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Ordre de mise à jour sur 2 bits (0 à 2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit un total de seulement &#039;&#039;&#039;64 bits&#039;&#039;&#039; pour transmettre tous les ordres de la radiocommande vers le modèle. Grâce à ce principe, la latence de la communication est très faible, car j&#039;encode les données en binaire toutes ensembles sur 2 x 32 bits à l&#039;émission et je les décode à la réception, ce qui prend le minimum de place possible (évite de perdre des bits dans des variables aux tailles fixes de 8, 16, ou 32 bits).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Également, dans les essais pratiques effectués notamment avec un servo-moteur &#039;&#039;&#039;SH-262MG&#039;&#039;&#039; de marque Savox (presque le plus rapide de la marque), les mouvements du palonnier se trouvent être on ne peut plus fidèles aux manches de la radiocommande. En effet lorsque le manche concerné est positionné en butée puis relâché, ce dernier effectue naturellement des rebonds au niveau du neutre (à cause des rappels par ressorts), ainsi l&#039;observation montre que le palonnier du servo-moteur semble imiter les rebonds avec une exactitude pratique (qu&#039;il est difficile de remettre en cause à l&#039;œil nu), ce qui démontre bien la quantité et la qualité des échanges entre la radiocommande et le modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De même, les potentiomètres des manches sont &#039;&#039;&#039;filtrés en temps réel&#039;&#039;&#039; (sans latence), et encodés sur &#039;&#039;&#039;1024 valeurs&#039;&#039;&#039; (0 à 1023), ceci permet d&#039;assurer une très grande précision des ordres analogiques de pilotage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La charge de la batterie d&#039;alimentation :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La batterie qui alimente cet ensemble radiocommandé comporte &#039;&#039;&#039;8 éléments&#039;&#039;&#039; Nickel-hydrure métallique (NiMH) de &#039;&#039;&#039;+1.2V&#039;&#039;&#039; chacun (soit +9.6V au total) avec une &#039;&#039;&#039;autonomie de 600mAh&#039;&#039;&#039;. Il convient alors d&#039;utiliser un chargeur adapté comme le montre les photos suivantes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08369.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08372.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La charge s&#039;effectue avec un courant constant de 100mAh, ce qui correspond à une charge lente pour ce type de batterie.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08313.jpg&amp;diff=35530</id>
		<title>Fichier:Dsc08313.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08313.jpg&amp;diff=35530"/>
		<updated>2021-11-01T13:13:30Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08313&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08312.jpg&amp;diff=35529</id>
		<title>Fichier:Dsc08312.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08312.jpg&amp;diff=35529"/>
		<updated>2021-11-01T13:13:05Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08312&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=La_radiocommande&amp;diff=35528</id>
		<title>La radiocommande</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=La_radiocommande&amp;diff=35528"/>
		<updated>2021-11-01T13:10:59Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Page créée avec « {{Projet |status=Fonctionnel |status_pub=Publié |image=Dsc08332.jpg |description=Projet et concept de radiocommande |license=CC-by-sa-3.0 - Creative Commons Attribution C... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc08332.jpg&lt;br /&gt;
|description=Projet et concept de radiocommande&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
|inspiration=aéromodélisme&lt;br /&gt;
|ingrédients=aluminium, acier inoxydable, ertalon, okoumé, peuplier,&lt;br /&gt;
|machines=tour à métal, fraiseuse, scie à rubant, fer à braser,&lt;br /&gt;
|source=Radio control.zip&lt;br /&gt;
|url=http://sylvainmahe.site&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La radiocommande&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce projet de &#039;&#039;&#039;radiocommande&#039;&#039;&#039; est la suite logique de mon intérêt et de mes convictions pour un modélisme aérien tel qu&#039;il devrait être pratiqué, c&#039;est-à-dire la conception et la fabrication de systèmes radio-pilotés en partant réellement de zéro.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08314.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08425.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08421.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08323.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08326.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08330.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08297.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc06915.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc06927.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À partir des premières ébauches sur papier, études des possibilités et contraintes techniques, schémas des circuits électroniques, conception des programmes dans la radiocommande et les modèles associés, dessins du boîtier et définition des différentes pièces d&#039;usinage (etc...), jusqu&#039;à la finalisation du projet, il aura fallu plus d&#039;une année de conception, fabrication, et tests de validation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Les caractéristiques de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Automate programmable MODULABLE 32 équipé du microcontrôleur ATmega1284P.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Émetteur/récepteur (transceiver) radio 2.4GHz (composant nRF24L01+).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Antenne Trèfle omnidirectionnelle 3 branches (7dBm).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication multidirectionnelle vers (sol/air air/sol) et entre (air/air) plusieurs modèles.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication vers périphériques relais pour applications longues distances basse puissance.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Communication par trames de 32 bits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage digital avec mini afficheur à digits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Buzzer de signalement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Système à tolérance de pannes (fail-safe) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Surveillance de l&#039;activité du modèle (watchdog) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 menu principal + 1 menu des paramètres/réglages.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Aucune mémoire de modèles (la mémoire est située dans les modèles).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Possibilité de copier les réglages d&#039;un modèle vers un autre très facilement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- 15 paramètres/réglages par défaut envoyés par le modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage des trims (autour des neutres) des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme (visuelle et sonore) tension de batterie faible du modèle (de 0V à 100V).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme (visuelle et sonore) temporisation/chronomètre (de 0s à 3600s).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de l&#039;inversion des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de courbes des manches de gaz/roulis et profondeur/lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Jusqu&#039;à 16 paramètres/réglages personnalisés supplémentaires envoyés par le modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- 5 paramètres/réglages par défaut propres à la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Calibration des potentiomètres des manches et auxiliaire (si remplacement/autre).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Verrouillage des menus (plus de réglages possibles, ni d&#039;extinction de la radiocommande).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage de la tension de la batterie de la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage de la tension de la batterie du modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage d&#039;une temporisation/chronomètre (temps d&#039;utilisation du modèle/autre).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage des trims (verrouillage et remise à 0 possible par le bouton de sélection).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage d&#039;une télémétrie personnalisée.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Affichage des paramètres/réglages par défaut et personnalisés.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Menu de mise à jour des paramètres/réglages du modèle.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Menu de sauvegarde des réglages propres à la radiocommande.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Allumage ou extinction de la radiocommande ou du modèle dans n&#039;importe quel ordre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Accumulateur Nickel-hydrure métallique (NiMH) 8S (+9.6V) 600mAh.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Alarme niveau de batterie faible (en dessous de +6V).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Prise de charge de la batterie (XT30).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Prise de programmation du microcontrôleur (mini XLR).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Boîtier fermé en aluminium, acier inoxydable, bois (contreplaqué 5mm), et ertalon.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Dimensions : 214mm x 205mm x 118mm.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08284.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08290.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;L&#039;interface électromécanique entre l&#039;homme et la machine :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- 2 manches analogiques (1 gaz/roulis + 1 tangage/lacet) sur 10 bits chacun (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 4 interrupteurs de trims (3 positions) sur 2 bits chacun (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 interrupteur de coupure moteur/autre (2 positions) sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 3 interrupteurs auxiliaires (3 positions) sur 2 bits chacun (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton rotatif auxiliaire sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton rotatif de sélection/menus sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 bouton poussoir de sélection/menus (2 positions, dont 1 momentanée) sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- 1 interrupteur d&#039;alimentation maintenue on/off (2 positions).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Programmation de l&#039;automate programmable MODULABLE 32 avec MODULE :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le programme en langage C++ fonctionnant avec MODULE est téléchargeable ici :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;download/cpp/radio_control.zip&amp;quot;&amp;gt;&amp;lt;download&amp;gt;Télécharger le programme de la &#039;&#039;&#039;radiocommande&#039;&#039;&#039;&amp;lt;/download&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&amp;quot;photo/dsc08312.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;thumbnail/dsc08312.jpg&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;photo/dsc08313.jpg&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;thumbnail/dsc08313.jpg&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Connexions (automate programmable MODULABLE 32 sur les différents systèmes embarqués) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 1 (PB0) sur broche STATE (état) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 2 (PB1) sur broche HOLD (auto-maintien) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 3 (PB2) sur broche SS (slave select) mini afficheur à digits.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 4 (PB3) sur broche WAVE (onde) buzzer de signalement.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 5 (PB4) sur broche CSN (slave select) composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 6 (PB5) sur broche MOSI (master output slave input) mini afficheur à digits et composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 7 (PB6) sur broche MISO (master input slave output) composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 8 (PB7) sur broche SCK (serial clock) mini afficheur à digits et composant nRF24L01+.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 9 (PD0) sur bouton poussoir de sélection/menus.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 10 (PD1) sur interrupteur de coupure moteur/autre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 11 (PD2) sur interrupteur auxiliaire A (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 12 (PD3) sur interrupteur auxiliaire A (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 13 (PD4) sur interrupteur auxiliaire B (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 14 (PD5) sur interrupteur auxiliaire B (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 15 (PD6) sur interrupteur auxiliaire C (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 16 (PD7) sur interrupteur auxiliaire C (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 17 (PC0) sur interrupteur trim de gaz (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 18 (PC1) sur interrupteur trim de gaz (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 19 (PC2) sur interrupteur trim de tangage (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 20 (PC3) sur interrupteur trim de tangage (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 21 (PC4) sur interrupteur trim de roulis (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 22 (PC5) sur interrupteur trim de roulis (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 23 (PC6) sur interrupteur trim de lacet (position 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 24 (PC7) sur interrupteur trim de lacet (position 3).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 25 (PA7) sur curseur bouton rotatif de sélection/menus.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 26 (PA6) sur curseur manche analogique des gaz.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 27 (PA5) sur curseur manche analogique de tangage.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 28 (PA4) sur curseur manche analogique de roulis.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 29 (PA3) sur curseur manche analogique de lacet.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 30 (PA2) sur curseur bouton rotatif auxiliaire.&lt;br /&gt;
&amp;lt;br/&amp;gt;- Port GPIO 31 (PA1) sur broche VOLT (tension) interrupteur d&#039;alimentation maintenue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Le concept de cette radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Depuis les premiers temps ou je pilote des modèles radiocommandés dans des associations d&#039;aéromodélisme jusqu&#039;à aujourd&#039;hui, je me suis souvent demandé et au vu de l&#039;avancée précédente et actuelle en matière d&#039;électronique embarquée :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Mais pourquoi donc les radiocommandes du commerce ont-elles des mémoires de modèles ?&#039;&#039;&#039; Les mémoires de modèles permettent en effet de retenir les réglages relatifs à un modèle, dans la mémoire de la radiocommande.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À ce propos je ne citerais que l&#039;exemple d&#039;un ami au terrain de modélisme sans le nommer, qui par mégarde se trompe assez régulièrement de mémoire de modèles (il vole avec beaucoup de choses). En conséquence cela lui arrive souvent d&#039;écraser ses réglages, ou d&#039;écraser son modèle tout simplement au sens physique du terme !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En fait, cette &amp;quot;lacune&amp;quot; des mémoires de modèles dans les radiocommandes modernes trouve historiquement ses racines dans la conception même des premiers radio-émetteurs/récepteurs. En effet, &#039;&#039;&#039;les premières radiocommandes se contentaient uniquement d&#039;être émetteur d&#039;information&#039;&#039;&#039;, et le modèle étant lui simplement un récepteur. Dans cette situation (unidirectionnelle), il est facile de comprendre que le modèle reste toujours muet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Plus tard, les concepteurs et divers industriels se sont décidés (au vue de la demande qui augmentait) à ajouter une communication du modèle vers la radiocommande, sur un circuit électronique bien distinct et avec une antenne radio supplémentaire sur le modèle et la radiocommande. C&#039;est un retour air/sol qui a été appelé &#039;&#039;&#039;télémétrie&#039;&#039;&#039; (en rapport avec la télémétrie à l&#039;époque des débuts de la conquête spatiale jusqu&#039;à nos jours).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;L&#039;avancée en matière de miniaturisation des composants permet aujourd&#039;hui d&#039;avoir &#039;&#039;&#039;dans une même puce un émetteur et un récepteur&#039;&#039;&#039;, qui se sert de la même antenne radio pour communiquer, ces systèmes sont appelés &#039;&#039;&#039;transceivers&#039;&#039;&#039; (émetteurs/récepteurs).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le concept que je développe ici permet de vous expliquer l&#039;idée même de ma radiocommande, &#039;&#039;&#039;celle-ci n&#039;a en effet aucune mémoire de modèles&#039;&#039;&#039;, ayant souhaité aller au bout de ma logique, &#039;&#039;&#039;c&#039;est le modèle qui contient la mémoire !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette idée simple permet beaucoup de choses, notamment le fait que &#039;&#039;&#039;c&#039;est le modèle qui envoi des paramètres et réglages personnalisés à la radiocommande&#039;&#039;&#039;, qui à l&#039;origine dispose d&#039;un menu des paramètres et réglages vide. La radiocommande se voit alors garnie de paramètres personnalisés relatifs au modèle qui est actuellement en communication avec elle. Ces paramètres peuvent être de n&#039;importe quel type et agir sur n&#039;importe quelle fonction du modèle. Ce retour radio air/sol permet également à la radiocommande de disposer de &#039;&#039;&#039;l&#039;affichage de la tension de la batterie du modèle en temps réel&#039;&#039;&#039;, et d&#039;une &#039;&#039;&#039;télémétrie personnalisée&#039;&#039;&#039; en fonction du modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une fois cette notion comprise, tout est alors possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour régler votre modèle, ma radiocommande dispose alors de &#039;&#039;&#039;15 paramètres par défaut&#039;&#039;&#039; qui en général sont assez communs aux modèles réduits (trims, alarmes, inversion des voies, courbes de gaz, etc...), et d&#039;un maximum de &#039;&#039;&#039;16 paramètres personnalisés par le modèle&#039;&#039;&#039; (dont le type de paramètre n&#039;est pas défini par défaut).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci est largement suffisant parce que par définition même, ces paramètres sont spécifiques au modèle considéré. Terminé les réglages et menus à n&#039;en plus finir (souvent la plupart du temps inutilisés) dans les radiocommandes du commerce !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans ce que je propose ici, vous disposez des &#039;&#039;&#039;réglages uniquement nécessaires au modèle mis en œuvre&#039;&#039;&#039;, ce qui facilite grandement son utilisation sur le terrain de modélisme !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Système multidirectionnel (multiceiver) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le système de radiocommande 2.4GHz que je propose ici permet la &#039;&#039;&#039;communication multidirectionnelle entre la radiocommande et un ou plusieurs modèles&#039;&#039;&#039;, autorise le &#039;&#039;&#039;dialogue entre les modèles&#039;&#039;&#039; eux-mêmes (réseau d&#039;émetteurs/récepteurs, ou multiceivers), et rend possible l&#039;ajout de plusieurs émetteurs/récepteurs (transceivers) embarqués dans un même véhicule (pour les gros modèles notamment).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout projet est alors possible, sans même évoquer le modélisme piloté dont il est question ici :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Par exemple des applications robotiques mettant en œuvre des réseaux de robots qui communiquent entre-eux, et bien d&#039;autres projets encore. Libre à vous d&#039;imaginer vos propres applications en fonction de vos besoins !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce principe d&#039;émetteur/récepteur intégré donne également la possibilité à l&#039;utilisateur d&#039;effectuer des communications longues distances en basse puissance d&#039;émission (inférieure à 100mW), ceci par &#039;&#039;&#039;transmission de données de la radiocommande vers des périphériques relais&#039;&#039;&#039; qui se chargent non pas de traiter l&#039;information et de l&#039;utiliser, mais plutôt de la relayer vers d&#039;autres périphériques afin d&#039;atteindre la portée radio vers le modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette propriété de pouvoir recevoir et émettre avec de multiples périphériques ainsi que de relayer l&#039;information est effectuée de manière &#039;&#039;&#039;complètement transparente pour l&#039;utilisateur ou le programmeur&#039;&#039;&#039; (voir dans la section &amp;quot;La documentation du programme MODULE&amp;quot; en page d&#039;accueil, page &amp;quot;Une radiocommande avec Nrf24l01p&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est envisageable d&#039;imaginer un robot d&#039;exploration de décombres hors de portée radio directe avec le poste de pilotage (à cause des bardages métalliques des bâtiments par exemple), mais étant à portée radio de plusieurs relais qui se chargent seulement de transmettre (relayer) les informations aux téléopérateurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Toutes ces propriétés multidirectionnelles (multiceivers) sont à définir non pas dans la radiocommande, mais &#039;&#039;&#039;uniquement à la conception des programmes à bord de vos modèles, robots, et autres systèmes embarqués&#039;&#039;&#039; (libre à chacun de créer une logique en rapport avec le type de système piloté).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que les paragraphes qui suivent font état d&#039;une utilisation avec un seul modèle, car c&#039;est mon application principale (l&#039;aéromodélisme). Néanmoins tout ce qui est expliqué ci-dessous (utilisation des menus, fonctionnalités, etc...) fonctionne avec plusieurs modèles (suivant la logique que vous avez programmé dans leurs microcontrôleurs respectifs bien évidement).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Démarrage de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À l&#039;allumage de la radiocommande, se propose à vous le choix de démarrer celle-ci en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne) ou en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne) en faisant pivoter le bouton rotatif de sélection. Si vous choisissez &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), le circuit radio d&#039;émission/réception est démarré, la radiocommande se met alors à envoyer et recevoir des données, et cherche si un modèle est présent.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Si un modèle est présent et répond à la radiocommande&#039;&#039;&#039;, cette dernière récupère alors tous les paramètres nécessaires (trims, paramètres par défaut, paramètres personnalisés, etc...) &#039;&#039;&#039;lors de ce démarrage uniquement&#039;&#039;&#039;, et vous emmène directement au menu principal pour une utilisation normale.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08299.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08300.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Si au contraire, aucun modèle ne se présente à la radiocommande&#039;&#039;&#039;, l&#039;affichage indiquera &amp;quot;BINDING&amp;quot; (liaison), et vous aurez le choix d&#039;attendre ou de quitter (en appuyant sur le bouton de sélection) &#039;&#039;&#039;sans récupérer les paramètres du modèle&#039;&#039;&#039;, ce qui en conséquence vous donnera l&#039;impossibilité de régler ses paramètres, car &#039;&#039;&#039;le menu des paramètres sera vide&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Attention, la radiocommande émet et reçoit des données (le circuit radio d&#039;émission/réception est démarré) &#039;&#039;&#039;même en ayant quitté la tentative de liaison&#039;&#039;&#039; (&amp;quot;BINDING&amp;quot;) avec le modèle, vous pourrez alors tout de même le piloter (sans pouvoir en changer les paramètres).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En résulte que les trims, alarmes, inversions des voies, et courbes (qui doivent normalement êtres récupérés du modèle, et qui sont mixés non pas dans le modèle, mais dans la radiocommande) seront alors à leur &#039;&#039;&#039;valeur par défaut&#039;&#039;&#039; (&amp;quot;OFF&amp;quot; pour les trims/alarmes/courbes, et &amp;quot;NOR&amp;quot; pour l&#039;inversion des voies), il convient alors d&#039;être prudent suivant le modèle piloté, et une telle configuration n&#039;est en soit pas idéale, mais est possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous démarrez la radiocommande en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne), cette dernière reste &#039;&#039;&#039;muette&#039;&#039;&#039; (circuit d&#039;émission/réception éteint).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans ce cas, le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) vous permettra non pas de régler les paramètres du modèle (voir plus bas : &amp;quot;Réglages et enregistrement des paramètres&amp;quot;), mais plutôt de modifier &#039;&#039;&#039;certains réglages propres à la radiocommande&#039;&#039;&#039;, et enregistrés dans celle-ci (comme la calibration des potentiomètres des manches et auxiliaire, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ne pas démarrer le circuit radio d&#039;émission/réception permet également de se familiariser avec l&#039;interface de cette radiocommande, ou bien encore de contrôler la tension de la batterie interne avant de se rendre sur votre terrain de modélisme favoris.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Allumage de la radiocommande et du modèle :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il n&#039;existe aucune contrainte au niveau de l&#039;ordre d&#039;allumage ou de la mise hors tension de la radiocommande ou du modèle, tout deux attendent une réponse de l&#039;autre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Vous pouvez allumer la radiocommande ou le modèle dans n&#039;importe quel ordre&#039;&#039;&#039;, éteindre votre modèle ou la radiocommande quand vous le souhaitez, et rallumer l&#039;une ou l&#039;autre en cours d&#039;utilisation !&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08302.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08428.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque le modèle s&#039;aperçoit que plus aucune radiocommande ne répond, il active alors son &#039;&#039;&#039;système à tolérance de pannes&#039;&#039;&#039; (fail-safe), et envoi en boucle les paramètres dont la radiocommande a besoin jusqu&#039;à temps que celle-ci réponde.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si la radiocommande a besoin de paramètres à son allumage, &#039;&#039;&#039;elle ira les chercher si un modèle est sous tension et répond&#039;&#039;&#039;, de même si le modèle a besoin de paramètres et qu&#039;aucune radiocommande n&#039;est allumée, &#039;&#039;&#039;il ira les chercher au moment où elle sera activée en communication&#039;&#039;&#039; (via le menu de démarrage &amp;quot;ON AIR&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Différents menus :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande dispose d&#039;un &#039;&#039;&#039;menu principal&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;- Verrouillage de la radiocommande (&amp;quot;LOCK/-LOCKED-&amp;quot;, voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation de la tension de la batterie de la radiocommande et alarme (&amp;quot;CTRL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation de la tension de la batterie du modèle et alarme (&amp;quot;MODL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation d&#039;une temporisation/chronomètre et alarme (&amp;quot;TIME&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation et modification des trims (&amp;quot;THRO&amp;quot;, &amp;quot;PITC&amp;quot;, &amp;quot;ROLL&amp;quot;, &amp;quot;YAW&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Visualisation d&#039;une télémétrie personnalisée (&amp;quot;TLMT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Accès au menu des paramètres (&amp;quot;SETTINGS&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08301.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08423.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À partir du menu principal et par la pression du bouton de sélection sur la section &amp;quot;SETTINGS&amp;quot; (paramètres) en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne), vous entrez dans le menu des paramètres/réglages dans lequel on trouve &#039;&#039;&#039;11 paramètres par défaut&#039;&#039;&#039;, ainsi qu&#039;un maximum de &#039;&#039;&#039;16 paramètres personnalisés&#039;&#039;&#039; agrémentés par le modèle si besoin :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Paramètres par défaut :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage d&#039;une alarme tension de batterie faible du modèle (&amp;quot;BMDL&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de la limite d&#039;une temporisation/chronomètre avec alarme (&amp;quot;TMED&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de la manière dont la temporisation/chronomètre se déclenche (&amp;quot;TMTR&amp;quot;, voir plus bas : &amp;quot;Alarmes&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de l&#039;inversion des manches de gaz/roulis et profondeur/lacet (&amp;quot;DRTH&amp;quot;, &amp;quot;DRPI&amp;quot;, &amp;quot;DRRO&amp;quot;, &amp;quot;DRYA&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Réglage de courbes des manches de gaz/roulis et profondeur/lacet (&amp;quot;CUTH&amp;quot;, &amp;quot;CUPI&amp;quot;, &amp;quot;CURO&amp;quot;, &amp;quot;CUYA&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Paramètres personnalisés :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Paramètres dont le type n&#039;est pas défini par défaut (nom affiché dans le menu, valeur initiale, valeurs minimales et maximales possibles, etc...).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Autres sections :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal sans enregistrer les paramètres dans le modèle ni conserver les dernières modifications effectuées (&amp;quot;EXIT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal et mise à jour des paramètres dans le modèle (&amp;quot;UPDATE&amp;quot;, si la radiocommande n&#039;est pas verrouillée).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque la radiocommande est démarrée en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne, c&#039;est-à-dire circuit d&#039;émission/réception éteint), à partir du menu principal et par la pression du bouton de sélection sur la section &amp;quot;SETTINGS&amp;quot; (paramètres), vous entrez dans le menu dans lequel vous pouvez modifier &#039;&#039;&#039;certains réglages propres à la radiocommande&#039;&#039;&#039;, paramètres qui sont enregistrés dans sa mémoire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Réglages :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Calibration des potentiomètres des manches et auxiliaire (&amp;quot;CLTH&amp;quot;, &amp;quot;CLPI&amp;quot;, &amp;quot;CLRO&amp;quot;, &amp;quot;CLYA&amp;quot;, &amp;quot;CLAX&amp;quot;, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Autres sections :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal sans enregistrer les paramètres dans la radiocommande ni conserver les dernières modifications effectuées (&amp;quot;EXIT&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Retour au menu principal et enregistrement des paramètres dans la radiocommande (&amp;quot;SAVE&amp;quot;, si la radiocommande n&#039;est pas verrouillée).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Alarmes :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande est équipée d&#039;une alarme niveau de batterie faible de la radiocommande et du modèle, et d&#039;une alarme qui s&#039;active via une temporisation/chronomètre réglable (lorsque le temps paramétré est dépassé). Ces 3 alarmes sont visibles dans le menu principal, ce sont respectivement les sections &#039;&#039;&#039;&amp;quot;CTRL&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;MODL&amp;quot;&#039;&#039;&#039;, et &#039;&#039;&#039;&amp;quot;TIME&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande est équipée d&#039;une temporisation (chronomètre) dont &#039;&#039;&#039;la durée limite&#039;&#039;&#039; est paramétrable, et &#039;&#039;&#039;la manière dont elle se déclenche&#039;&#039;&#039; :&lt;br /&gt;
&amp;lt;br/&amp;gt;- Avec l&#039;interrupteur de coupure moteur/autre.&lt;br /&gt;
&amp;lt;br/&amp;gt;- En dépassant une certaine position (réglable) au manche de gaz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Au pilotage, vous avez donc le choix de déceler la fin de votre session lors du dépassement d&#039;une certaine tension de la batterie du modèle &#039;&#039;&#039;réglable de 0V à 100V&#039;&#039;&#039; (par pas de 0.1V), et/ou du dépassement d&#039;une temporisation/chronomètre &#039;&#039;&#039;réglable de 0s à 3600s&#039;&#039;&#039; (par pas de 1s), soit 1h au total.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le dépassement du temps (réglé préalablement) de la temporisation/chronomètre est indiqué de façon &#039;&#039;&#039;visuelle et sonore&#039;&#039;&#039; (alarme sonore de quelques secondes mais affichage permanent), ce chronomètre est activable et désactivable via le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) et peut être redémarré ou stoppé à tout moment en pressant le bouton de sélection sur la section &amp;quot;TIME&amp;quot; dans le menu principal.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le dépassement de la tension limite de la batterie du modèle (réglée par l&#039;utilisateur) provoque également un affichage visuel et sonore (alarme sonore de quelques secondes mais affichage permanent).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette alarme visuelle du &#039;&#039;&#039;niveau de batterie faible du modèle&#039;&#039;&#039;, n&#039;est qu&#039;en à elle désactivable uniquement lorsque le niveau de la batterie dépasse à nouveau (augmente positivement) le seuil minimum que vous avez réglé en paramètre (ceci peut se produire lors du changement de la batterie de votre modèle par exemple).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une alarme de niveau de batterie faible de la radiocommande existe à l&#039;instar de celle du modèle, mais la valeur limite n&#039;est pas réglable et est &#039;&#039;&#039;fixée à +6V&#039;&#039;&#039;, ce qui correspond à la tension minimum d&#039;alimentation de l&#039;automate programmable MODULABLE 32.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette alarme de niveau de batterie faible de la radiocommande intervient de manière visuelle et sonore lorsque le &#039;&#039;&#039;seuil de +6V minimum&#039;&#039;&#039; est dépassé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans cette situation, même si la tension de la batterie de la radiocommande (pour une raison x ou y) remonte au dessus de +6V, &#039;&#039;&#039;l&#039;alarme perdurera&#039;&#039;&#039;, seul la partie sonore une fois active pourra être désactivée (par une pression sur le bouton de sélection dans la partie relative à ce paramètre dans le menu principal), l&#039;alarme visuelle restera qu&#039;en à elle présente dans tous les cas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si cette alarme de niveau de batterie faible vient à s&#039;activer (que ce soit celle de la radiocommande ou du modèle), et que votre modèle est en vol, il est alors &#039;&#039;&#039;vivement conseillé de le poser dans les plus brefs délais !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si aucune intervention de l&#039;utilisateur pour désactiver ou réinitialiser l&#039;une (ou l&#039;ensemble) des 3 alarmes n&#039;est effectuée, &#039;&#039;&#039;un bip se fait entendre toutes les 30 secondes&#039;&#039;&#039;, ce qui signifie qu&#039;une alarme visuelle &#039;&#039;&#039;est toujours active&#039;&#039;&#039;. Rendez-vous alors dans le menu principal pour les désactiver (si possible).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Inversions des voies et courbes :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En paramètres par défaut, il vous est également possible de définir &#039;&#039;&#039;le sens des voies de gaz, de tangage, de roulis, et de lacet&#039;&#039;&#039; envoyés au modèle par la radiocommande (de 0 à 1023 en mode normal, ou de 1023 à 0 en mode inversé), et de définir des valeurs de courbes, soit &amp;quot;OFF&amp;quot; pour linéaire, jusqu&#039;à 100 pour fortement non-linéaire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout comme les trims, l&#039;inversion des voies et les courbes sont &#039;&#039;&#039;mixés dans la radiocommande&#039;&#039;&#039;, et envoyés au modèle en l&#039;état.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous souhaitez inverser une ou plusieurs voies, rendez-vous dans le menu des paramètres via le menu principal en cliquant sur la section &amp;quot;SETTINGS&amp;quot; (paramètres) tout en étant en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne), cherchez les paramètres &#039;&#039;&#039;&amp;quot;DRTH&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;DRPI&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;DRRO&amp;quot;&#039;&#039;&#039;, ou &#039;&#039;&#039;&amp;quot;DRYA&amp;quot;&#039;&#039;&#039; (qui correspondent respectivement aux gaz, tangage, roulis, et lacet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les paramètres ayant en suffixe &#039;&#039;&#039;&amp;quot;NOR&amp;quot;&#039;&#039;&#039; (normal) indiquent que la voie concernée n&#039;est pas inversée, et ceux mentionnés &#039;&#039;&#039;&amp;quot;REV&amp;quot;&#039;&#039;&#039; (inversé) sont inversées. Pour les modifier, il vous suffit de cliquer dessus avec le bouton de sélection, ou d&#039;utiliser les interrupteurs de trims pour en changer les valeurs. Ensuite, rendez-vous dans la section &#039;&#039;&#039;&amp;quot;UPDATE&amp;quot;&#039;&#039;&#039; (mettre à jour) pour mettre à jour les modifications dans le modèle et les prendre en compte dans la radiocommande (car ces paramètres sont mixés dans la radiocommande, et non pas le modèle).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En plus des trims et de l&#039;inversion des voies, vous disposez de la possibilité de modifier les &#039;&#039;&#039;courbes de gaz, de tangage, de roulis, et de lacet&#039;&#039;&#039;. Celles-ci sont linéaires (&amp;quot;OFF&amp;quot;) par défaut, et leurs actions s&#039;appliquent de part et d&#039;autre du neutre des manches (gaz y compris).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De même que pour le réglage des autres paramètres, dans le menu &amp;quot;SETTINGS&amp;quot; (paramètres), cherchez les mots &#039;&#039;&#039;&amp;quot;CUTH&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;CUPI&amp;quot;&#039;&#039;&#039;, &#039;&#039;&#039;&amp;quot;CURO&amp;quot;&#039;&#039;&#039;, ou &#039;&#039;&#039;&amp;quot;CUYA&amp;quot;&#039;&#039;&#039; (qui correspondent respectivement aux gaz, tangage, roulis, et lacet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si il est indiqué &#039;&#039;&#039;&amp;quot;OFF&amp;quot;&#039;&#039;&#039;, les courbes sont &#039;&#039;&#039;linéaires&#039;&#039;&#039;, si il est indiqué un nombre, les courbes sont &#039;&#039;&#039;non-linéaires&#039;&#039;&#039;. Vous pouvez modifier cela via les interrupteurs de trims, ou plus rapidement à l&#039;aide du bouton rotatif auxiliaire tout en restant appuyé sur le bouton de sélection (comme expliqué ci-dessous : &amp;quot;Réglages et enregistrement des paramètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Plus les valeurs des courbes seront hautes (proches de 100), plus &#039;&#039;&#039;le pilotage sera doux autour du neutre des manches&#039;&#039;&#039; et moins sensible. Le pilotage d&#039;un modèle à forts débattements sera donc plus aisé en augmentant les valeurs des courbes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter qu&#039;une courbe sur l&#039;axe des gaz peut être utile au pilotage des hélicoptères de voltige (dont le neutre, et donc le centre du manche correspond au pas 0 sur le modèle), même si pour ma part je préfère piloter de façon linéaire le gaz/pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Réglages et enregistrement des paramètres :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ma radiocommande dispose de l&#039;affichage des trims dans le menu principal, parce que leurs réglage s&#039;effectue à tout moment via les 4 interrupteurs 3 positions prévus à cet effet (c&#039;est pourquoi dans le menu des paramètres/réglages vous ne trouvez que 11 paramètres par défaut sur les 15 au total, soit les 4 trims en moins). &#039;&#039;&#039;Les trims sont eux aussi enregistrés dans le modèle&#039;&#039;&#039; (et non la radiocommande). Ils peuvent être remis à 0 individuellement par la simple pression du bouton poussoir de sélection, et verrouillés (&amp;quot;OFF&amp;quot;) si besoin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Sur un modèle radiocommandé à propulsion électrique disposant de son propre algorithme de vol, il est souvent rare d&#039;avoir besoin d&#039;un trim sur le manche de gaz, ou même sur les autres axes de vol, d&#039;ou cette possibilité de verrouillage d&#039;un ou plusieurs trims avec la radiocommande que j&#039;ai développé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le menu des paramètres et réglages en &#039;&#039;&#039;mode &amp;quot;ON AIR&amp;quot;&#039;&#039;&#039; (à l&#039;antenne) est &#039;&#039;&#039;accessible en cliquant sur &amp;quot;SETTINGS&amp;quot;&#039;&#039;&#039; (paramètres) dans le menu principal, et dispose d&#039;une section &amp;quot;EXIT&amp;quot; (sortie) et &amp;quot;UPDATE&amp;quot; (mettre à jour). Lorsque vous avez effectué vos réglages (trims, paramètres par défaut, paramètres personnalisés, etc...), &#039;&#039;&#039;vous devez mettre à jour la mémoire du modèle&#039;&#039;&#039; en cliquant sur &amp;quot;UPDATE&amp;quot; (mettre à jour) afin que le modèle enregistre tous les paramètres dans sa mémoire et mette à jour son algorithme de vol (si il en dispose, vous pouvez très bien piloter un bateau sans algorithme de contrôle de la navigation par exemple, mais disposant tout de même de réglages et de paramètres).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08299.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08303.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez modifié des paramètres (trims, paramètres par défaut, paramètres personnalisés, etc...) et qu&#039;une mise à jour du modèle est nécessaire, &#039;&#039;&#039;la section &amp;quot;UPDATE&amp;quot;&#039;&#039;&#039; (mettre à jour) &#039;&#039;&#039;se changera en &amp;quot;-UPDATE-&amp;quot;&#039;&#039;&#039; (-mettre à jour-), les tirets de part et d&#039;autre du mot faisant office d&#039;indication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si aucun modèle ne répond à la radiocommande lorsque vous souhaitez mettre à jour les paramètres dans celui-ci après avoir cliqué sur &amp;quot;UPDATE&amp;quot; (mettre à jour) dans le menu des paramètres, dans ce cas &#039;&#039;&#039;l&#039;affichage indiquera &amp;quot;BINDING&amp;quot;&#039;&#039;&#039; (liaison), et vous aurez le choix d&#039;attendre ou de quitter (en appuyant sur le bouton de sélection) &#039;&#039;&#039;sans mettre à jour les paramètres dans le modèle&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Quitter la mise à jour n&#039;aura pas le même effet que de sortir du menu avec &amp;quot;EXIT&amp;quot; (sortie), &#039;&#039;&#039;vos paramètres dernièrement modifiés le resteront tant que la radiocommande sera allumée&#039;&#039;&#039;, et vous devrez alors retourner ultérieurement dans le menu pour mettre à jour vos paramètres dans le modèle (si vous le souhaitez).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous ne souhaitez pas enregistrer les paramètres dans le modèle &#039;&#039;&#039;ni conserver les dernières modifications effectuées&#039;&#039;&#039; dans le menu des paramètres (&amp;quot;SETTINGS&amp;quot;), &#039;&#039;&#039;vous pouvez sortir du menu en cliquant sur &amp;quot;EXIT&amp;quot;&#039;&#039;&#039; (sortie).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les réglages des trims sont actifs en permanence, car ils sont &#039;&#039;&#039;mixés avec les manches directement dans la radiocommande&#039;&#039;&#039;, mais ils ne s&#039;enregistrent pas dans celle-ci. Cette possibilité donne l&#039;avantage bien entendu d&#039;avoir des trims distincts par modèle, mais aussi de pouvoir trimer votre modèle sur le terrain sans avoir forcément envie de les enregistrer à l&#039;extinction de la radiocommande comme c&#039;est le cas avec les radiocommandes du commerce (si par exemple vous avez trimé votre modèle alors qu&#039;il y avait du vent, ce qui fausse votre perception des bons réglages).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que ce sont les interrupteurs de trims qui servent à régler les valeurs dans le menu des paramètres et réglages en mode &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), &#039;&#039;&#039;sauf lorsque la radiocommande est verrouillée&#039;&#039;&#039; (voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;), auquel cas les trims agissent toujours comme tel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il existe une méthode rapide pour régler des paramètres aux valeurs minimales et maximales trop larges (par exemple 0 à 3600 par pas de 1 comme c&#039;est le cas pour le chronomètre intégré). Pour ce faire il suffit de &#039;&#039;&#039;rester appuyé sur un trim&#039;&#039;&#039; (ce qui fera défiler les valeurs plus rapidement).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;L&#039;autre méthode de réglage rapide consiste à &#039;&#039;&#039;presser continuellement le bouton de sélection&#039;&#039;&#039;, ce qui vous permettra de régler la plupart des valeurs directement avec &#039;&#039;&#039;le bouton rotatif auxiliaire&#039;&#039;&#039; (pour la majorité des paramètres, et si le potentiomètre de ce bouton rotatif auxiliaire est calibré, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;), ou en ce qui concerne le paramètre de déclenchement de la temporisation/chronomètre, ce sera &#039;&#039;&#039;le manche de gaz&#039;&#039;&#039; (si le potentiomètre de ce manche est lui aussi calibré, voir plus bas : &amp;quot;Calibration des potentiomètres&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08318.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous décidez de régler la valeur de déclenchement de la temporisation/chronomètre à l&#039;aide du manche de gaz, il convient que &#039;&#039;&#039;l&#039;interrupteur de coupure moteur doit être actif&#039;&#039;&#039;, ou que que le modèle soit mis &#039;&#039;&#039;hors tension !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter qu&#039;il est tout à fait possible de régler les paramètres de votre modèle (sans parler des trims bien entendu) alors que celui-ci est &#039;&#039;&#039;en cours de pilotage&#039;&#039;&#039;, et que la radiocommande &#039;&#039;&#039;n&#039;est pas verrouillée&#039;&#039;&#039; (voir plus bas : &amp;quot;Le verrouillage de la radiocommande&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Bien évidement, même qu&#039;il s&#039;agisse d&#039;une voiture, ou d&#039;un bateau (ou de tout autre modèle ne pouvant se crasher quand il n&#039;y a plus d&#039;intervention du pilote), je ne peux que vous conseiller de &#039;&#039;&#039;régler votre modèle que lorsque il est à l&#039;arrêt et en sécurité&#039;&#039;&#039; (et je ne ferais à ce propos pas de commentaires en ce qui concerne un modèle aérien !).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Calibration des potentiomètres :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De part la conception même des manches de la radiocommande, &#039;&#039;&#039;la plupart des potentiomètres de ceux-ci ne tournent pas mécaniquement sur leur plage de résistance complète minimale et maximale&#039;&#039;&#039;, ne produisant pas une plage de valeurs sur 10 bits (converties d&#039;analogique à numérique) de 0 à 1023.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette contrainte technique conduit donc l&#039;utilisateur de cette radiocommande à devoir calibrer les potentiomètres (au moins lors du premier allumage) pour que cette dernière sache les &#039;&#039;&#039;plages de valeurs minimales et maximales des gaz, de l&#039;axe de tangage, de l&#039;axe de roulis, de l&#039;axe de lacet, et du bouton rotatif auxiliaire&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07663.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc07683.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette opération doit être effectuée &#039;&#039;&#039;à la première utilisation de la radiocommande&#039;&#039;&#039;, et lorsque que vous souhaitez &#039;&#039;&#039;remplacer les manches et/ou les potentiomètres&#039;&#039;&#039; de celle-ci (voie des gaz, tangage, roulis, lacet, ou auxiliaire).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour ce faire, vous devez démarrer la radiocommande en &#039;&#039;&#039;mode &amp;quot;OFF AIR&amp;quot;&#039;&#039;&#039; (hors antenne), puis vous rendre dans le menu des paramètres (&amp;quot;SETTINGS&amp;quot;) dans lequel vous trouverez la calibration des potentiomètres des manches et auxiliaire de la radiocommande.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08300.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08303.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;5 sections respectivement utiles pour calibrer le potentiomètre de &#039;&#039;&#039;gaz&#039;&#039;&#039; (&amp;quot;CLTH&amp;quot;), de &#039;&#039;&#039;tangage&#039;&#039;&#039; (&amp;quot;CLPI&amp;quot;), de &#039;&#039;&#039;roulis&#039;&#039;&#039; (&amp;quot;CLRO&amp;quot;), de &#039;&#039;&#039;lacet&#039;&#039;&#039; (&amp;quot;CLYA&amp;quot;), ou &#039;&#039;&#039;auxiliaire&#039;&#039;&#039; (&amp;quot;CLAX&amp;quot;), permettent de calibrer les potentiomètres concernés par ces voies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour effectuer le calibrage, positionnez vous dans la section voulue (l&#039;une des 5 mentionnées), puis &#039;&#039;&#039;pressez de façon continue le bouton de sélection&#039;&#039;&#039;, et &#039;&#039;&#039;pivotez le manche concerné aux positions minimales et maximales&#039;&#039;&#039;. La valeur par défaut de 0 &#039;&#039;&#039;augmentera alors jusqu&#039;à atteindre un maximum&#039;&#039;&#039;, ce qui signifiera que le potentiomètre est calibré (c&#039;est-à-dire que la radiocommande a trouvée les valeurs minimales et maximales de celui-ci).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si par exemple le potentiomètre de tangage à une plage de résistance telle qu&#039;il retourne en numérique une valeur pouvant varier de &#039;&#039;&#039;104&#039;&#039;&#039; à &#039;&#039;&#039;985&#039;&#039;&#039;, une fois correctement calibré cela signifie que la valeur qui s&#039;affichera à vous dans la section correspondante à cet axe sera de &#039;&#039;&#039;881&#039;&#039;&#039; (car 985 - 104 = 881).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La valeur de calibration qui s&#039;affiche à vous est une &#039;&#039;&#039;soustraction entre la valeur maximale et la valeur minimale&#039;&#039;&#039; (convertie d&#039;analogique à numérique sur 10 bits) que produit le potentiomètre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Le menu dispose d&#039;une section &amp;quot;EXIT&amp;quot; (sortie) et &amp;quot;SAVE&amp;quot; (enregistrer). Lorsque vous avez effectué vos réglages, &#039;&#039;&#039;vous devez les sauvegarder dans la radiocommande&#039;&#039;&#039; en cliquant sur &amp;quot;SAVE&amp;quot; (enregistrer) afin que celle-ci prenne en compte ces nouveaux réglages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez modifié des paramètres (calibration des potentiomètres) et qu&#039;un enregistrement dans la radiocommande est nécessaire, &#039;&#039;&#039;la section &amp;quot;SAVE&amp;quot;&#039;&#039;&#039; (enregistrer) &#039;&#039;&#039;se changera en &amp;quot;-SAVE-&amp;quot;&#039;&#039;&#039; (-enregistrer-), les tirets de part et d&#039;autre du mot faisant office d&#039;indication.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;Le verrouillage de la radiocommande :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est possible avec cette radiocommande &#039;&#039;&#039;d&#039;empêcher l&#039;extinction de celle-ci via l&#039;interrupteur d&#039;alimentation on/off&#039;&#039;&#039;, et d&#039;éviter de pouvoir modifier les paramètres dans les menus (sauf les trims qui doivent servir même lorsque la radiocommande est verrouillée). Ceci s&#039;effectue en &#039;&#039;&#039;restant appuyé 1 seconde sur le bouton de sélection&#039;&#039;&#039; sur la section &amp;quot;LOCK&amp;quot; (verrouillage) dans le menu principal. Le mot &amp;quot;LOCK&amp;quot; (verrouillage) se change alors en &amp;quot;-LOCKED-&amp;quot; (-verrouillé-).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;À noter que vous ne pouvez pas éteindre la radiocommande tout en vous trouvant dans la section &amp;quot;LOCK/-LOCKED-&amp;quot; du menu principal (c&#039;est une sécurité supplémentaire).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Pour déverrouiller à nouveau la radiocommande, répétez l&#039;opération (pression de 1 seconde sur le bouton de sélection dans cette partie du menu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ce sont les interrupteurs de trims qui servent à régler les valeurs dans le menu des paramètres et réglages en mode &amp;quot;ON AIR&amp;quot; (à l&#039;antenne), &#039;&#039;&#039;sauf lorsque la radiocommande est verrouillée&#039;&#039;&#039;, auquel cas les trims agissent toujours comme tel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Les trims &#039;&#039;&#039;ne peuvent pas être réinitialisés&#039;&#039;&#039; à leur valeur par défaut (&amp;quot;OFF&amp;quot;) en pressant le bouton de sélection dans le menu principal dans la section concernée lorsque la radiocommande est verrouillée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque la radiocommande est verrouillée, vous pouvez visualiser et modifier les réglages dans le menu des paramètres, mais vous ne pouvez pas les mettre à jour dans le modèle (en mode &amp;quot;ON AIR&amp;quot;) ou les enregistrer dans la radiocommande (en mode &amp;quot;OFF AIR&amp;quot;), car respectivement les sections &amp;quot;UPDATE&amp;quot; (mettre à jour) et &amp;quot;SAVE&amp;quot; (enregistrer) sont absents du menu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La copie des paramètres d&#039;un modèle :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec ma radiocommande il est très simple de copier les paramètres (trims, paramètres par défaut, paramètres personnalisés) d&#039;un modèle vers un autre &#039;&#039;&#039;sans jamais pouvoir se tromper&#039;&#039;&#039;, voici la procédure :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1&#039;&#039;&#039; - Allumez la radiocommande et le modèle à copier.&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;2&#039;&#039;&#039; - Activez la transmission radio dans le menu qui vous est proposé au démarrage de la radiocommande (&amp;quot;ON AIR&amp;quot;).&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;3&#039;&#039;&#039; - Au signal sonore, les paramètres du modèle viennent d&#039;être copiés dans la radiocommande, vous pouvez éteindre le modèle à copier, et allumer l&#039;autre modèle dans lesquels vous souhaitez écraser les paramètres.&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;4&#039;&#039;&#039; - Rendez-vous dans le menu des paramètres en cliquant sur la section &amp;quot;SETTINGS&amp;quot; (paramètres), puis cliquez sur &amp;quot;UPDATE&amp;quot; (mettre à jour). Vous entendez alors les signaux sonores de la radiocommande et du modèle vous indiquant que les paramètres ont bien été copiés dans ce dernier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous avez plusieurs modèles devant recevoir les mêmes paramètres, répétez la procédure de l&#039;opération &#039;&#039;&#039;3&#039;&#039;&#039; à &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Il est très important de comprendre que cette opération de copie n&#039;a de sens que si les paramètres du modèle à copier vers ceux du modèle à écraser sont &#039;&#039;&#039;identiques&#039;&#039;&#039; non pas en termes de valeurs, mais bien &#039;&#039;&#039;en termes de nature et de caractéristiques&#039;&#039;&#039; (valeurs minimales et maximales, emplacements dans le menu des paramètres, etc...), et que les modèles à copier se situent tous dans la même logique (axes de manœuvrabilité, types de pilotage, etc...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans le cas contraire, cela peut être un choix délibéré de votre part de copier les paramètres vers un système complètement différent du modèle à copier, je pense par exemple à la copie vers un automate programmable nu afin de &#039;&#039;&#039;sauvegarder vos paramètres préférés&#039;&#039;&#039; (sans qu&#039;il soit question de modèle à proprement parlé).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La sécurité de la communication :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La communication s&#039;effectue de manière encodée avec une &#039;&#039;&#039;clé 32 bits unique&#039;&#039;&#039; paramétrable dans le programme de la radiocommande et des modèles (voir dans la section &amp;quot;La documentation du programme MODULE&amp;quot; en page d&#039;accueil, page &amp;quot;Une radiocommande avec Nrf24l01p&amp;quot;), ce qui permet de rendre ce système de communication radio très fiable et sécurisé.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lors d&#039;une communication, un encodage (CRC) valide est généré puis vérifié, c&#039;est un &#039;&#039;&#039;code de correction d&#039;erreurs&#039;&#039;&#039; (sur 16 bits) très performant qui permet de contrôler la validité des informations reçues.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Par sécurité, le modèle est pourvu d&#039;un &#039;&#039;&#039;système à tolérance de pannes&#039;&#039;&#039; (fail-safe) qui permet d&#039;effectuer certaines opérations spécifiques &#039;&#039;&#039;lorsque la radiocommande ne répond plus&#039;&#039;&#039; (mise au neutre des servo-moteurs, coupure de la motorisation, etc...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Tout ceci est à définir à la conception du programme de vol à bord du modèle (libre à chacun de créer une logique en rapport avec le type de modèle piloté).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La radiocommande dispose également d&#039;une &#039;&#039;&#039;surveillance de l&#039;activité du modèle&#039;&#039;&#039; (watchdog) qui permet de connaître l&#039;état actif ou inactif de celui-ci (par l&#039;affichage de la tension de la batterie du modèle dans la section &amp;quot;MODL&amp;quot; si actif, ou si inactif par l&#039;affichage &amp;quot;OFF&amp;quot; dans cette même section), dans les deux cas un &#039;&#039;&#039;signal sonore&#039;&#039;&#039; (pour actif et inactif) se fait entendre.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La vitesse et la précision de la communication :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La communication des informations entre la radiocommande et les modèles s&#039;effectue sur une largeur de &#039;&#039;&#039;32 bits&#039;&#039;&#039; utiles (c&#039;est-à-dire en faisant abstraction de l&#039;encodage, des adresses ou canaux, des codes de correction d&#039;erreurs, de la clé unique, etc...).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08295.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08296.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;En définitif, les données utiles à l&#039;utilisateur qui proviennent de l&#039;interface électromécanique entre l&#039;homme et la machine sont englobées dans &#039;&#039;&#039;2 trames de 32 bits&#039;&#039;&#039;, ce qui comprends :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1ère trame de 32 bits :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Gaz sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de roulis sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire C sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Bouton rotatif auxiliaire D sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;2ème trame de 32 bits :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de tangage sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Axe de lacet sur 10 bits (0 à 1023).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur de coupure moteur/autre sur 1 bit (0 à 1).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire A sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Interrupteur auxiliaire B sur 2 bits (0 à 2).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Système à tolérance de pannes (fail-safe) sur 5 bits (0 à 31).&lt;br /&gt;
&amp;lt;br/&amp;gt;- Ordre de mise à jour sur 2 bits (0 à 2).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit un total de seulement &#039;&#039;&#039;64 bits&#039;&#039;&#039; pour transmettre tous les ordres de la radiocommande vers le modèle. Grâce à ce principe, la latence de la communication est très faible, car j&#039;encode les données en binaire toutes ensembles sur 2 x 32 bits à l&#039;émission et je les décode à la réception, ce qui prend le minimum de place possible (évite de perdre des bits dans des variables aux tailles fixes de 8, 16, ou 32 bits).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Également, dans les essais pratiques effectués notamment avec un servo-moteur &#039;&#039;&#039;SH-262MG&#039;&#039;&#039; de marque Savox (presque le plus rapide de la marque), les mouvements du palonnier se trouvent être on ne peut plus fidèles aux manches de la radiocommande. En effet lorsque le manche concerné est positionné en butée puis relâché, ce dernier effectue naturellement des rebonds au niveau du neutre (à cause des rappels par ressorts), ainsi l&#039;observation montre que le palonnier du servo-moteur semble imiter les rebonds avec une exactitude pratique (qu&#039;il est difficile de remettre en cause à l&#039;œil nu), ce qui démontre bien la quantité et la qualité des échanges entre la radiocommande et le modèle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;De même, les potentiomètres des manches sont &#039;&#039;&#039;filtrés en temps réel&#039;&#039;&#039; (sans latence), et encodés sur &#039;&#039;&#039;1024 valeurs&#039;&#039;&#039; (0 à 1023), ceci permet d&#039;assurer une très grande précision des ordres analogiques de pilotage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;La charge de la batterie d&#039;alimentation :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La batterie qui alimente cet ensemble radiocommandé comporte &#039;&#039;&#039;8 éléments&#039;&#039;&#039; Nickel-hydrure métallique (NiMH) de &#039;&#039;&#039;+1.2V&#039;&#039;&#039; chacun (soit +9.6V au total) avec une &#039;&#039;&#039;autonomie de 600mAh&#039;&#039;&#039;. Il convient alors d&#039;utiliser un chargeur adapté comme le montre les photos suivantes :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08369.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08372.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;La charge s&#039;effectue avec un courant constant de 100mAh, ce qui correspond à une charge lente pour ce type de batterie.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08372.jpg&amp;diff=35527</id>
		<title>Fichier:Dsc08372.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08372.jpg&amp;diff=35527"/>
		<updated>2021-11-01T13:08:22Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08372&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08369.jpg&amp;diff=35526</id>
		<title>Fichier:Dsc08369.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08369.jpg&amp;diff=35526"/>
		<updated>2021-11-01T13:07:56Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08369&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08296.jpg&amp;diff=35525</id>
		<title>Fichier:Dsc08296.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08296.jpg&amp;diff=35525"/>
		<updated>2021-11-01T13:07:25Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08296&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08295.jpg&amp;diff=35524</id>
		<title>Fichier:Dsc08295.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08295.jpg&amp;diff=35524"/>
		<updated>2021-11-01T13:06:50Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08295&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc07683.jpg&amp;diff=35523</id>
		<title>Fichier:Dsc07683.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc07683.jpg&amp;diff=35523"/>
		<updated>2021-11-01T13:04:55Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc07683&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc07663.jpg&amp;diff=35522</id>
		<title>Fichier:Dsc07663.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc07663.jpg&amp;diff=35522"/>
		<updated>2021-11-01T13:04:31Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc07663&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08318.jpg&amp;diff=35521</id>
		<title>Fichier:Dsc08318.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08318.jpg&amp;diff=35521"/>
		<updated>2021-11-01T13:03:55Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08318&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08303.jpg&amp;diff=35520</id>
		<title>Fichier:Dsc08303.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08303.jpg&amp;diff=35520"/>
		<updated>2021-11-01T13:03:19Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08303&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08423.jpg&amp;diff=35519</id>
		<title>Fichier:Dsc08423.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08423.jpg&amp;diff=35519"/>
		<updated>2021-11-01T13:01:12Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08423&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08301.jpg&amp;diff=35518</id>
		<title>Fichier:Dsc08301.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08301.jpg&amp;diff=35518"/>
		<updated>2021-11-01T13:00:47Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08301&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08428.jpg&amp;diff=35517</id>
		<title>Fichier:Dsc08428.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08428.jpg&amp;diff=35517"/>
		<updated>2021-11-01T13:00:14Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08428&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08302.jpg&amp;diff=35516</id>
		<title>Fichier:Dsc08302.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08302.jpg&amp;diff=35516"/>
		<updated>2021-11-01T12:59:43Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08302&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08300.jpg&amp;diff=35515</id>
		<title>Fichier:Dsc08300.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08300.jpg&amp;diff=35515"/>
		<updated>2021-11-01T12:59:04Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08300&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08299.jpg&amp;diff=35514</id>
		<title>Fichier:Dsc08299.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08299.jpg&amp;diff=35514"/>
		<updated>2021-11-01T12:58:42Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08299&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08077.jpg&amp;diff=35513</id>
		<title>Fichier:Dsc08077.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08077.jpg&amp;diff=35513"/>
		<updated>2021-11-01T12:58:00Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08077&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08076.jpg&amp;diff=35512</id>
		<title>Fichier:Dsc08076.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08076.jpg&amp;diff=35512"/>
		<updated>2021-11-01T12:57:26Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08076&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08290.jpg&amp;diff=35511</id>
		<title>Fichier:Dsc08290.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08290.jpg&amp;diff=35511"/>
		<updated>2021-11-01T12:56:41Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08290&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08284.jpg&amp;diff=35510</id>
		<title>Fichier:Dsc08284.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08284.jpg&amp;diff=35510"/>
		<updated>2021-11-01T12:56:17Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08284&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc06927.jpg&amp;diff=35509</id>
		<title>Fichier:Dsc06927.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc06927.jpg&amp;diff=35509"/>
		<updated>2021-11-01T12:55:40Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc06927&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc06915.jpg&amp;diff=35508</id>
		<title>Fichier:Dsc06915.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc06915.jpg&amp;diff=35508"/>
		<updated>2021-11-01T12:55:16Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc06915&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08297.jpg&amp;diff=35507</id>
		<title>Fichier:Dsc08297.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08297.jpg&amp;diff=35507"/>
		<updated>2021-11-01T12:54:45Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08297&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08330.jpg&amp;diff=35506</id>
		<title>Fichier:Dsc08330.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08330.jpg&amp;diff=35506"/>
		<updated>2021-11-01T12:54:17Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08330&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08326.jpg&amp;diff=35505</id>
		<title>Fichier:Dsc08326.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08326.jpg&amp;diff=35505"/>
		<updated>2021-11-01T12:53:47Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08326&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08323.jpg&amp;diff=35504</id>
		<title>Fichier:Dsc08323.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08323.jpg&amp;diff=35504"/>
		<updated>2021-11-01T12:52:21Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08323&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08425.jpg&amp;diff=35503</id>
		<title>Fichier:Dsc08425.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08425.jpg&amp;diff=35503"/>
		<updated>2021-11-01T12:48:45Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dsc08425&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08314.jpg&amp;diff=35502</id>
		<title>Fichier:Dsc08314.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08314.jpg&amp;diff=35502"/>
		<updated>2021-11-01T12:48:08Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dsc08314&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Radio_control.zip&amp;diff=35501</id>
		<title>Fichier:Radio control.zip</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Radio_control.zip&amp;diff=35501"/>
		<updated>2021-11-01T12:43:35Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Le programme en langage C++ fonctionnant avec MODULE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Le programme en langage C++ fonctionnant avec MODULE&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08332.jpg&amp;diff=35500</id>
		<title>Fichier:Dsc08332.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08332.jpg&amp;diff=35500"/>
		<updated>2021-11-01T12:37:45Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : radiocommande&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;radiocommande&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Discussion:Plateforme_C_Sumobot&amp;diff=35499</id>
		<title>Discussion:Plateforme C Sumobot</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Discussion:Plateforme_C_Sumobot&amp;diff=35499"/>
		<updated>2021-11-01T02:32:05Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Nouvelle section de discussion : MPU6050&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== MPU6050 ==&lt;br /&gt;
&lt;br /&gt;
Bonjour, petite note si vous essayez de le brancher en SPI : le MPU6050 communique seulement en I2C, et non en SPI et I2C comme indiqué dans vos documents. [[Utilisateur:Sylvainmahe|Sylvainmahe]] ([[Discussion utilisateur:Sylvainmahe|discussion]]) 1 novembre 2021 à 03:32 (CET)&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=USART_ATmega328P_-_Programmation&amp;diff=35498</id>
		<title>USART ATmega328P - Programmation</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=USART_ATmega328P_-_Programmation&amp;diff=35498"/>
		<updated>2021-11-01T02:21:27Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc08783.jpg&lt;br /&gt;
|description=Exemple simple de communication USART&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=CC-by-sa-3.0&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à toute l&#039;équipe PING.&lt;br /&gt;
&lt;br /&gt;
Je souhaite apporter mon aide concernant la programmation C/C++ pour pouvoir faire communiquer votre ATmega328P (présent sur vos cartes Arduino UNO notamment) avec un ordinateur personnel via une liaison USART.&lt;br /&gt;
&lt;br /&gt;
Exemple complet :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _SREG (*(volatile unsigned char *)(0x5f))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0A (*(volatile unsigned char *)(0xc0))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0B (*(volatile unsigned char *)(0xc1))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0C (*(volatile unsigned char *)(0xc2))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UBRR0LH (*(volatile unsigned int *)(0xc4))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UDR0 (*(volatile unsigned char *)(0xc6))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _USART_RX __vector_ ## 18&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _INTERRUPT_JUMP(vector) extern &amp;quot;C&amp;quot; void vector() __attribute__ ((signal)); void vector()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;void startUsart (const unsigned long FREQUENCY)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0A = 0b00000010;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0B = 0b10011000;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0C = 0b00000110;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UBRR0LH = (16000000.0 / (8.0 * (float)(FREQUENCY))) - 0.5;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_SREG |= 0b10000000;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;unsigned char readUsart()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while ((_UCSR0A &amp;amp; 0b10000000) != 0b10000000)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return _UDR0;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;void writeUsart (const unsigned char DATA)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UDR0 = DATA;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while ((_UCSR0A &amp;amp; 0b00100000) != 0b00100000)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;_INTERRUPT_JUMP (_USART_RX)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;readUsart();//données qui arrivent sur RXD&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;int main()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;startUsart (9600);//démarrage de l&#039;USART à 9600 bauds/s&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while (true)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;writeUsart (123);//le nombre 123 est envoyé sur TXD&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return 0;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;(à compiler avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude par exemple)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Ci-dessus, au début les directives pré-processeur des pointeurs des adresses des registres qui nous intéressent (voir [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]), puis le vecteur d&#039;interruption pour RXD, puis la définition d&#039;une fonction générique d&#039;interruption.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une fonction startUsart permet de démarrer l&#039;USART avec le choix du baudrate (paramètre FREQUENCY), une fonction readUsart permet de dépiler ce qui arrive sur RXD, une fonction writeUsart permet d&#039;envoyer des données sur TXD, et une fonction d&#039;interruption (_INTERRUPT_JUMP) avec le bon vecteur d&#039;interruption (_USART_RX) est exécutée lorsque des trames arrivent sur RXD (plus précisément à la fin d&#039;un bit de stop).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans la fonction principale (main) la fonction startUsart est appelée avec en paramètre 9600, la vitesse de communication souhaitée (en bauds/s). À cette vitesse une communication dure :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (9600 / 10) ≈ 1041 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Mais il est tout à fait possible d&#039;aller plus vite, en effet la limite de l&#039;ATmega328P est 2M bauds/s, vous pouvez donc remplacer 9600 par 2000000, la durée est donc maintenant de :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (2000000 / 10) = 5 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Supposons une liaison RS232 à 115200 bauds/s, la durée est donc maintenant de :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (115200 / 10) ≈ 86 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette communication RS232 passe par le port DE-9 de votre ordinateur personnel, son avantage est sa haute disponibilité. Il est également possible et souvent pratiqué de faire communiquer l&#039;ATmega328P avec votre ordinateur personnel en USB via un composant FTDI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Je me permets de citer wikipedia qui indique vulgairement des longueurs de câbles en fonction du nombre de bit/s (je ne sais pas si ils veulent évoquer le baud plutôt) via une liaison RS232 :&lt;br /&gt;
&amp;lt;br/&amp;gt;2400 bits/s = 60 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;4800 bits/s = 30 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;9600 bits/s = 15 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;19200 bits/s = 7.6 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;38400 bits/s = 3.7 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;56000 bits/s = 2.6  mètres max&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Donc, si dans vos projets avec un tel microcontrôleur de la famille des ATmega, vous constatez une lenteur dans votre boucle de calcul (que ce soit pour des applications robotique ou autre), et que vous utilisez des fonctions Arduino par exemple, il est important de dissocier matériel et logiciel, et de comprendre que la limitation ne vient la plupart du temps pas du matériel, mais bien du logiciel (Arduino) concernant cette liaison USART. Reposez vous la question : comment je programme mon microcontrôleur ? Ai-je la bonne méthotologie ? Les bons outils ? Le bon code source ? Le bon programme sur mon ordinateur personnel pour réceptionner les données émises par le microcontrôleur ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque cette liaison USART est réglée avec une vitesse de 31250 bauds/s, elle peut servir à piloter des instruments de musique standards en MIDI en envoyant simplement 3 octets (status, data, et description), voir photos :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08771.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08777.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08786.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans tous les cas n&#039;hésitez pas si vous avez des interrogations, besoin de plus de précisions, ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=USART_ATmega328P_-_Programmation&amp;diff=35497</id>
		<title>USART ATmega328P - Programmation</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=USART_ATmega328P_-_Programmation&amp;diff=35497"/>
		<updated>2021-10-30T20:51:06Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Page créée avec « {{Tutoriel |status_pub=Publié |image=Dsc08783.jpg |description=Exemple simple de communication USART |compétences requises=Débutant C/C++ |license=CC-by-sa-3.0 |contrib... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc08783.jpg&lt;br /&gt;
|description=Exemple simple de communication USART&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=CC-by-sa-3.0&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à toute l&#039;équipe PING.&lt;br /&gt;
&lt;br /&gt;
Je souhaite apporter mon aide concernant la programmation C/C++ pour pouvoir faire communiquer votre ATmega328P (présent sur vos cartes Arduino UNO notamment) avec un ordinateur personnel via une liaison USART.&lt;br /&gt;
&lt;br /&gt;
Exemple complet :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _SREG (*(volatile unsigned char *)(0x5f))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0A (*(volatile unsigned char *)(0xc0))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0B (*(volatile unsigned char *)(0xc1))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UCSR0C (*(volatile unsigned char *)(0xc2))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UBRR0LH (*(volatile unsigned int *)(0xc4))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _UDR0 (*(volatile unsigned char *)(0xc6))&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _USART_RX __vector_ ## 18&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;#define _INTERRUPT_JUMP(vector) extern &amp;quot;C&amp;quot; void vector() __attribute__ ((signal)); void vector()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;void startUsart (const unsigned long FREQUENCY)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0A = 0b00000010;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0B = 0b10011000;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UCSR0C = 0b00000110;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UBRR0LH = (16000000.0 / (8.0 * (float)(FREQUENCY))) - 0.5;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_SREG |= 0b10000000;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;unsigned char readUsart()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while ((_UCSR0A &amp;amp; 0b10000000) != 0b10000000)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return _UDR0;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;void writeUsart (const unsigned char DATA)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;_UDR0 = DATA;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while ((_UCSR0A &amp;amp; 0b00100000) != 0b00100000)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;_INTERRUPT_JUMP (_USART_RX)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;readUsart();//données qui arrivent sur RXD&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;int main()&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;startUsart (9600);//démarrage de l&#039;USART à 9600 bauds/s&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;while (true)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;writeUsart (123);//le nombre 123 est envoyé sur TXD&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;return 0;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;br/&amp;gt;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;(à compiler avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude par exemple)&lt;br /&gt;
&amp;lt;br/&amp;gt;Ci-dessus, au début les directives pré-processeur des pointeurs des adresses des registres qui nous intéressent (voir [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]), également le vecteur d&#039;interruption pour RXD, puis la définition d&#039;une fonction générique d&#039;interruption.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Une fonction startUsart permet de démarrer l&#039;USART avec le choix du baudrate (paramètre FREQUENCY), une fonction readUsart permet de dépiler ce qui arrive sur RXD, une fonction writeUsart permet d&#039;envoyer des données sur TXD, et une fonction d&#039;interruption (_INTERRUPT_JUMP) avec le bon vecteur d&#039;interruption (_USART_RX) est exécutée lorsque des trames arrivent sur RXD (plus précisément à la fin d&#039;un bit de stop).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans la fonction principale (main) la fonction startUsart est appelée avec en paramètre 9600, la vitesse de communication souhaitée (en bauds/s). À cette vitesse une communication dure :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (9600 / 10) ≈ 1041 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Mais il est tout à fait possible d&#039;aller plus vite, en effet la limite de l&#039;ATmega328P est 2M bauds/s, vous pouvez donc remplacer 9600 par 2000000, la durée est donc maintenant de :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (2000000 / 10) ≈ 5 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Supposons une liaison RS232 à 115200 bauds/s, la durée est donc maintenant de :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000 / (115200 / 10) ≈ 86 µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Cette communication RS232 passe par le port DE-9 de votre ordinateur personnel, son avantage est sa haute disponibilité. Il est également possible et souvent pratiqué de faire communiquer l&#039;ATmega328P avec votre ordinateur personnel en USB via un composant FTDI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Je me permets de citer wikipedia qui indique vulgairement des longueurs de câbles en fonction du nombre de bit/s (je ne sais pas si ils veulent évoquer le baud plutôt) via une liaison RS232 :&lt;br /&gt;
&amp;lt;br/&amp;gt;2400 bits/s = 60 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;4800 bits/s = 30 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;9600 bits/s = 15 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;19200 bits/s = 7.6 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;38400 bits/s = 3.7 mètres max&lt;br /&gt;
&amp;lt;br/&amp;gt;56000 bits/s = 2.6  mètres max&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Donc, si dans vos projets avec un tel microcontrôleur de la famille des ATmega, vous constatez une lenteur dans votre boucle de calcul (que ce soit pour des applications robotique ou autre), et que vous utilisez des fonctions Arduino par exemple, il est important de dissocier matériel et logiciel, et de comprendre que la limitation ne vient la plupart du temps pas du matériel, mais bien du logiciel (Arduino) concernant cette liaison USART. Reposez vous la question : comment je programme mon microcontrôleur ? Ai-je la bonne méthotologie ? Les bons outils ? Le bon code source ? Le bon programme sur mon ordinateur personnel pour réceptionner les données émises par le microcontrôleur ?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Lorsque cette liaison USART est réglée avec une vitesse de 31250 bauds/s, elle peut servir à piloter des instruments de musique standards en MIDI en envoyant simplement 3 octets (status, data, et description), voir photos :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08771.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08777.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08786.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Dans tous les cas n&#039;hésitez pas si vous avez des interrogations, besoin de plus de précisions, ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08786.jpg&amp;diff=35496</id>
		<title>Fichier:Dsc08786.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08786.jpg&amp;diff=35496"/>
		<updated>2021-10-30T20:47:59Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;interface MIDI vers Nord Lead 4&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08777.jpg&amp;diff=35495</id>
		<title>Fichier:Dsc08777.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08777.jpg&amp;diff=35495"/>
		<updated>2021-10-30T20:46:44Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;interface MIDI&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08771.jpg&amp;diff=35494</id>
		<title>Fichier:Dsc08771.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08771.jpg&amp;diff=35494"/>
		<updated>2021-10-30T20:43:22Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;interface MIDI&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08783.jpg&amp;diff=35493</id>
		<title>Fichier:Dsc08783.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08783.jpg&amp;diff=35493"/>
		<updated>2021-10-30T18:48:18Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : ATmega328P vers USART&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ATmega328P vers USART&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=MODULE_:_Un_syst%C3%A8me_embarqu%C3%A9_d%27automates_programmables&amp;diff=35476</id>
		<title>MODULE : Un système embarqué d&#039;automates programmables</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=MODULE_:_Un_syst%C3%A8me_embarqu%C3%A9_d%27automates_programmables&amp;diff=35476"/>
		<updated>2021-10-28T14:39:36Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc08134.jpg&lt;br /&gt;
|description=Partie logicielle/matérielle (licence : http://sylvainmahe.site/license.html)&lt;br /&gt;
|license=autre licence (préciser dans la description)&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
|ingrédients=Électronique,&lt;br /&gt;
|source=Module.zip&lt;br /&gt;
|url=http://sylvainmahe.site&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à toute l&#039;association PING.&lt;br /&gt;
&lt;br /&gt;
Je souhaite partager avec vous mon travail de bricoleur orienté mécatronique, notamment le projet &amp;quot;MODULE&amp;quot; que je réalise en amateur depuis 2014, en effet je pense que vous pouvez en trouver une utilité dans vos projets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Comprendre ce qu&#039;est MODULE :&#039;&#039;&#039;&lt;br /&gt;
MODULE est un système embarqué d&#039;automates programmables, c&#039;est-à-dire une partie logicielle (programmation) et une partie matérielle (électronique) permettant de réaliser des tâches d&#039;automatisation.&lt;br /&gt;
&lt;br /&gt;
Partie logicielle, le programme MODULE est un outil de développement qui se présente sous la forme d&#039;une suite de classes autonomes écrites en langage C++ dédiées à la programmation des microcontrôleurs ATmega48P, ATmega88P, ATmega168P, ATmega328P, ATmega164P, ATmega324P, ATmega644P, et ATmega1284P qui équipent mes automates programmables. Partie matérielle, je vous propose les plans de fabrication de quelques circuits imprimés constituants la base de cartes électroniques complètes partie commande équipées de microcontrôleurs (ce sont les automates programmables associés au programme MODULE), et également d&#039;autres cartes électroniques modulables (que vous pouvez connecter aux automates programmables) aux multiples fonctionnalités. Ci-dessous, l&#039;automate programmable MODULABLE 20 équipé de 20 entrées/sorties, et l&#039;automate programmable MODULABLE 32 équipé de 32 entrées/sorties :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08340.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc07989.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Historique du projet MODULE :&#039;&#039;&#039;&lt;br /&gt;
Le projet MODULE et les circuits électroniques qui y sont associé a débuté il y a quelques années, et aura demandé beaucoup de travail pour aboutir au produit actuel.&lt;br /&gt;
&lt;br /&gt;
Je me suis toujours intéressé à l&#039;électricité, mais l&#039;électronique (avant ce projet) m&#039;apparaissait comme obscure et difficile à appréhender. J&#039;ai donc décidé d&#039;apprendre l&#039;électronique en autodidacte avec la meilleure volonté, parce que c&#039;était un domaine que je ne connaissais (sans même encore parler de maîtriser ou de pratiquer) absolument pas.&lt;br /&gt;
&lt;br /&gt;
Sans aucune formation dans le domaine, j&#039;ai donc progressé en lisant pendant des années les fiches techniques des composants électroniques, des articles sur internet (dans lesquels il convient souvent de trier et de recouper l&#039;information), mais aussi et surtout à force de pratique et d&#039;expériences personnelles (ce qui finalement peut être appelé le bricolage).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc02345.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc02821.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;La philosophie du programme MODULE :&#039;&#039;&#039;&lt;br /&gt;
L&#039;objectif de MODULE est de trouver le point de performance le plus élevé pour chaque composant électronique mis en œuvre. Ceci est réalisé en étudiant très finement les fiches techniques des composants (registres, paramètres, fréquences de fonctionnement, etc...), puis en effectuant des bancs d&#039;essai successifs jusqu&#039;à l&#039;obtention des meilleurs résultats, tout en restant complètement valide eu égard les tolérances constructeur et la portabilité du code écrit en langage C++.&lt;br /&gt;
&lt;br /&gt;
De surcroît, MODULE n&#039;est pas programmé en surcouche d&#039;une autre bibliothèque comme l&#039;est la plupart des autres plates-formes de développement pour microcontrôleurs. Le code source C++ de MODULE, minimaliste de fait, est dédié et optimisé pour chaque microcontrôleur programmé, soit l&#039;ATmega48P, l&#039;ATmega88P, l&#039;ATmega168P, l&#039;ATmega328P, l&#039;ATmega164P, l&#039;ATmega324P, l&#039;ATmega644P, ou l&#039;ATmega1284P afin d&#039;obtenir le meilleur compromis en matière de rapidité et d&#039;espace mémoire.&lt;br /&gt;
&lt;br /&gt;
MODULE est une bonne alternative à d&#039;autres plates-formes de développement pour programmer plus efficacement l&#039;ATmega48P, l&#039;ATmega88P, l&#039;ATmega168P, l&#039;ATmega328P, l&#039;ATmega164P, l&#039;ATmega324P, l&#039;ATmega644P, ou l&#039;ATmega1284P.&lt;br /&gt;
&lt;br /&gt;
Le programme MODULE est une création singulière unique (car non plagiée), dans le seul but de la compréhension, de l&#039;optimisation, et du partage d&#039;une modeste expression créative personnelle libre de droit d&#039;auteur et à sources ouvertes et modifiables.&lt;br /&gt;
&lt;br /&gt;
Tous mes programmes sont écrits avec un simple éditeur de texte (gedit) pourvu uniquement de la coloration syntaxique (nul besoin d&#039;autre chose).&lt;br /&gt;
&lt;br /&gt;
Le programme MODULE fonctionne en totale autonomie et ne requiert pas de ressources annexes externes. En effet, même aucune bibliothèque couramment admise comme indispensable (par la communauté des programmeurs) faisant partie du standard du langage C++ n&#039;a été utilisée pour programmer MODULE, comme par exemple stdlib, stdio, ou encore math, toujours dans un objectif pédagogique de compréhension du fonctionnement intime matériel des circuits intégrés.&lt;br /&gt;
&lt;br /&gt;
Ne pas être lié à d&#039;autres programmes permet à MODULE d&#039;être autonome et indépendant, en outre de ne pas subir les aléas, évolutions, bogues, ou encore obsolescences de fichiers concurrents.&lt;br /&gt;
&lt;br /&gt;
MODULE qui a débuté avec l&#039;ATmega328P (ce fut le point de départ), c&#039;est aussi redonner tout l&#039;intérêt pour ce petit microcontrôleur 8 bits de plus en plus délaissé au profit de microcontrôleurs 32 bits aux fréquences de fonctionnement plus élevées du fait que les bibliothèques concurrentes demandent plus de cycles pour faire les mêmes opérations que le programme MODULE.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;La normalisation de la structure logique et syntaxique du programme MODULE :&#039;&#039;&#039;&lt;br /&gt;
MODULE a été programmé avec rigueur et normalisation du code source (comme tous les programmes que je vous propose en téléchargement ou en exemple). Une ligne de conduite concernant la logique, la structure, la syntaxe, le nommage des variables, des fonctions et des classes, ou même simplement l&#039;aspect visuel (indentation, espaces, etc...), a été respectée afin d&#039;obtenir le code source le plus lisible, fonctionnel et propre possible.&lt;br /&gt;
&lt;br /&gt;
Ceci n&#039;est pas plus une réponse à tout ce que je peux constater dans la communauté des programmeurs actuellement, mais plus une volonté personnelle de bonnes pratiques en termes d&#039;écriture des programmes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Simplicité de programmation avec MODULE :&#039;&#039;&#039;&lt;br /&gt;
En interne, le programme MODULE s&#039;occupe de réaliser les tâches les plus laborieuses, ardues et complexes que requiert la programmation brute d&#039;un microcontrôleur et des circuits intégrés périphériques. Ceci permet au développeur de réaliser des projets élaborés en un minimum de lignes de programmation, sans pour autant pâtir sur les performances ou brider le nombre de possibilités.&lt;br /&gt;
&lt;br /&gt;
MODULE se veut accessible aux débutants, tout en permettant la réalisation d&#039;applications professionnelles.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Que peut-on faire avec MODULE ?&#039;&#039;&#039;&lt;br /&gt;
MODULE est modulaire (ce qui a donné le nom au projet), il n&#039;a en soit pas de limite (logicielle ou matérielle), la seule est notre imagination. Sachez qu&#039;à l&#039;époque de la conquête spatiale, des ingénieurs et techniciens ont envoyés des fusées dans l&#039;espace avec bien moins comme calculateur qu&#039;un ATmega328P !&lt;br /&gt;
&lt;br /&gt;
Avec le programme MODULE vous pouvez faire fonctionner des accéléromètres, gyroscopes, magnétomètres, baromètres, thermomètres, hygromètres, et même des caméras thermiques. Pour des applications robotiques et modélisme vous pouvez générer des signaux PWM et donc entre autres faire fonctionner des servo-moteurs et des contrôleurs de moteurs sans charbons, lire des signaux PWM permettant par exemple de récupérer les différentes voies d&#039;un récepteur R/C, créer une interface entre l&#039;utilisateur et l&#039;automate programmable via des boutons, des potentiomètres, des afficheurs, et des buzzers. Il est possible de temporiser les actions et les événements à effectuer, de réaliser des calculs et diverses courbes et fonctions mathématiques, de générer de l&#039;aléatoire à partir de bruit analogique, de filtrer des valeurs en temps réel, de créer des états multiples avec hystérésis, de gérer la veille du microcontrôleur, de communiquer en MIDI avec des instruments de musique standards du commerce, d&#039;effectuer des communications type réseaux filaires et sans fil 2.4GHz entre plusieurs automates programmables, de sauvegarder des données en mémoire EEPROM une fois le montage coupé de l&#039;alimentation électrique, et bien d&#039;autres choses encore...&lt;br /&gt;
&lt;br /&gt;
Libre à vous de programmer d&#039;autres fonctions dans MODULE si vous le souhaitez !&lt;br /&gt;
&lt;br /&gt;
Photo ci-dessous, un exemple de projet réalisé avec le programme MODULE et l&#039;automate programmable MODULABLE 32, équipé d&#039;un ATmega1284P pour la partie radiocommande, et ATmega644P pour la partie quadri-hélicoptère (cependant ce prototype était initialement équipé d&#039;un ATmega328P) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc08421.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;L&#039;électronique modulable associée au programme MODULE :&#039;&#039;&#039;&lt;br /&gt;
Toute l&#039;électronique (la partie matérielle) que je vous propose en téléchargement (dans les sections &amp;quot;Fabrications et diverses réalisations&amp;quot; et &amp;quot;Téléchargements&amp;quot; en page d&#039;accueil) est réalisée avec les mêmes contraintes et critères de normalisation que la programmation (la partie logicielle), c&#039;est-à-dire avec la plus grande rigueur et dans le soucis de prise en compte de ce qui pourrait être considéré comme des détails.&lt;br /&gt;
&lt;br /&gt;
Je réalise les plans de mes circuits imprimés à l&#039;aide du logiciel KiCad avec le système d&#039;exploitation Linux, les fichiers originaux de mes projets KiCad ne sont pas disponibles en téléchargement (disponibles cependant sur demande), mais sachez que mes dessins sont réalisés à l&#039;aide de ma propre bibliothèque de composants en vue schématique et PCB, bibliothèque construite de façon normée à partir des fiches techniques officielles des composants et également de mon expérience personnelle concernant leurs implantations (ergonomie de positionnement et de brasure, etc...).&lt;br /&gt;
&lt;br /&gt;
Le reste de la conception n&#039;est pas laissée au hasard (diamètres des perçages pour le passage des broches des composants, calculs des dimensions des pistes en fonction du courant, prise en compte des parasites, plans de masse, distances entre les composants, distances au bord des PCB, normalisation de la sérigraphie et du nommage, épaisseur des lettres, des tracés, positions et orientations des mots, etc...).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07971.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc07980.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
Les plans de fabrication de mes circuits imprimés sont tous disponibles au format de fichiers Gerber (.gbl, .gbs, .gbo, .gbr, .gtl, .gts, .gto, .drl), car ce sont des fichiers normalisés utilisés par toute l&#039;industrie de l&#039;électronique pour la transmission de plans de production entre les différentes manufactures.&lt;br /&gt;
&lt;br /&gt;
Le format de fichiers Gerber est le standard directement pris en charge par toutes les usines de fabrication.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Le choix des composants traversants ou montés en surface :&#039;&#039;&#039;&lt;br /&gt;
Dans mes circuits électroniques j&#039;ai souhaité l&#039;implantation de composants traversants plutôt que montés en surface (cms) :&lt;br /&gt;
&lt;br /&gt;
Ceci est un choix arbitraire dans le but de privilégier la facilité de montage des éléments par des débutants notamment dans les &#039;&#039;&#039;&amp;quot;Fab lab&amp;quot;&#039;&#039;&#039; (pour &amp;quot;Fabrication laboratory&amp;quot;, ou laboratoire de fabrication). En effet les composants étant plus volumineux, leurs brasure sur les PCB est moins minutieuse et peut être effectuée avec du matériel peu onéreux. Aussi, les composants se trouvent plus facilement dans la petite boutique locale d&#039;électronique, ou via un recyclage des composants provenant d&#039;appareils du commerce destinés à la casse (entre autres victimes de l&#039;obsolescence programmée). Le démontage pour réparation est également plus aisé, ainsi que d&#039;éventuels tests in-situ avec un multimètre. Ensuite, certains composants traversants ne trouvent logiquement pas d&#039;équivalents montés en surface (certains condensateurs par exemple de par leurs capacité), et finalement la place prise sur le PCB est toute relative.&lt;br /&gt;
&lt;br /&gt;
En outre, ceci ne doit en aucun cas être un frein à votre créativité et à vos projets !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ressources :&lt;br /&gt;
&#039;&#039;&#039;Toutes les informations pour comprendre le projet MODULE :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[http://sylvainmahe.site/understandWhatIsModule.html Comprendre ce qu&#039;est MODULE]&lt;br /&gt;
&amp;lt;br/&amp;gt;[http://sylvainmahe.site/howToInstallModule.html Comment installer le programme MODULE]&lt;br /&gt;
&amp;lt;br/&amp;gt;[http://sylvainmahe.site/howToProgramWidthModule.html Comment programmer avec MODULE]&lt;br /&gt;
&amp;lt;br/&amp;gt;[http://sylvainmahe.site/complementaryToolOfModule.html Les outils complémentaires du projet MODULE]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemples simples pour comprendre et débuter rapidement la programmation avec MODULE :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;[http://sylvainmahe.site/index.html#documentationGpioRead La documentation du programme MODULE]&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Module.zip&amp;diff=35471</id>
		<title>Fichier:Module.zip</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Module.zip&amp;diff=35471"/>
		<updated>2021-10-27T22:25:36Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Sylvainmahe a téléversé une nouvelle version de Fichier:Module.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MODULE est un système embarqué d&#039;automates programmables, c&#039;est-à-dire une partie logicielle (programmation) et une partie matérielle (électronique) permettant de réaliser des tâches d&#039;automatisation.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35438</id>
		<title>Programmer l&#039;ATmega328P sans Arduino</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35438"/>
		<updated>2021-10-23T11:22:20Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc01541.jpg&lt;br /&gt;
|description=Faire fonctionner le convertisseur analogique/numérique&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=GPL : GNU General Public License&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à tous les membres de PING.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
J&#039;ai eu envie d&#039;écrire ce petit tuto au fil de l&#039;écoute des conversations à l&#039;association, en effet il me semble important d&#039;apporter des éléments de compréhension et de calculs à chacun pour les cartes Arduino UNO (autant commencer par le commencement) afin de programmer le microcontrôleur ATmega328P en restant dans les spécifications constructeur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ici nous allons commencer par quelque chose de simple, lire une broche de la carte Arduino reliée en interne au convertisseur analogique/numérique du microcontrôleur ATmega328P, ceci sans utiliser l&#039;ide Arduino car il bride la compréhension du fonctionnement interne du microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette idée m&#039;est venue en entendant la phrase suivante : &amp;quot;Je peux faire lire à ma carte Arduino un signal avec une impédance de 1MΩ en entrée du convertisseur analogique/numérique.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous allez voir que cette affirmation est importante, car qui prendra cette info pourra y croire et faire des montages qui ne fonctionneront pas, ou fonctionneront dans certaines conditions extrêmes et extrêmement spécifiques qui dérogent complètement à la fiche technique du microcontrôleur considéré.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple complet de lecture ADC avec l&#039;ATmega328P (via votre carte Arduino UNO ou pas) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07569.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc01673.jpg|vignette|centré]]&lt;br /&gt;
[[Fichier:Dsc08343.jpg|vignette|centré]]&lt;br /&gt;
&lt;br /&gt;
La première chose à prendre en considération lorsque nous souhaitons programmer le microcontrôleur d&#039;une carte Arduino UNO, est la fiche technique de l&#039;ATmega328P : [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
À l&#039;aide de cette fiche technique nous pouvons écrire le programme suivant qui est complet (je vais expliquer les différentes lignes après) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;unsigned int readAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cet exemple est minimaliste mais permet sans bibliothèque additionnelle et sans ide Arduino de faire fonctionner le convertisseur analogique/numérique du microcontrôleur connecté sur la broche PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le programme la première chose à écrire se sont les directives préprocesseur qui permettent d’appeler les pointeurs des adresses de registres dont vous allez avoir besoin :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCSRA permet de démarrer le convertisseur analogique/numérique, de choisir le pré-diviseur d&#039;horloge, et aussi de démarrer une conversion et de savoir si elle s&#039;est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADMUX permet d&#039;indiquer le bon canal connecté à la bonne broche que nous souhaitons lire, et d&#039;indiquer si la référence de tension est interne ou externe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCLH est la valeur numérique sur 10 bits de la tension mesurée sur le canal choisi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction principale :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d&#039;une façon périodique, c&#039;est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog&lt;br /&gt;
&amp;lt;br/&amp;gt;Nul besoin de plus dans cette fonction principale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction startAnalog est très simple, mais renseigner un octet cohérent pour ce registre ADCSRA mérite que l&#039;on s&#039;y attarde plus qu&#039;un petit peu :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Détail de l&#039;octet 0b10000101 :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;ADC activé &amp;amp; pré-diviseur d&#039;horloge = 32&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fréquence du microcontrôleur est de 16MHz.&lt;br /&gt;
La fréquence du multiplexeur du convertisseur analogique numérique est donc égale à :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;16000000Hz / 32 = 500000Hz = 500kHz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit le calcul du temps alloué à la charge de la capacité de 14pF à la fréquence du multiplexeur : &amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000µs / (16000000Hz / 32) = 2µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 1kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000Ω * 0.000000000014F * 5τ = 0.00000007s = 70ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 1kΩ en entrée le condensateur met 70ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 100kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;100000Ω * 0.000000000014F * 5τ = 0.000007s = 7µs&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 100kΩ en entrée le condensateur met 7µs à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à 100kΩ, ceci est cohérent avec le choix du pré-diviseur d&#039;horloge qui peut aller de 2 à 128, cela se retrouve par calcul (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 2)) / (0.000000000014F * 5τ) = 1785.714Ω ≈ 1.7kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 128)) / (0.000000000014F * 5τ) = 114285.714Ω ≈ 114kΩ&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, ci-dessous la formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 10kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;10000Ω * 0.000000000014F * 5τ = 0.0000007s = 700ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 10kΩ en entrée le condensateur met 700ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En respect de la fiche technique du microcontrôleur évoquant une optimisation avec une impédance de 10kΩ, un pré-diviseur d&#039;horloge par exemple de 32 convient comme le montre le calcul suivant :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;((1 / (16000000Hz / 32)) / 0.000000000014F) / 10000Ω = 14.285τ ≈ 14t&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le condensateur sera chargé au dela de 99% (puisque 99% = 5τ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contrairement à ce qui est souvent dit, une fréquence de fonctionnement du microcontrôleur plus élevée n&#039;est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 2)) / (0.000000000014F * 5τ) = 3571.428Ω ≈ 3.5kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 128)) / (0.000000000014F * 5τ) = 228571.428Ω ≈ 228kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera davantage chargée avec un microcontrôleur cadencé à 8MHz, mais cela signifie qu&#039;avec une impédance d&#039;entrée de 1kΩ vous pouvez dans les deux cas (8MHz ou 16MHz) choisir un pré-diviseur d&#039;horloge de 2 seulement, en revanche avec une impédance d&#039;entrée de 100kΩ il faut choisir un pré-diviseur d&#039;horloge de 128 pour un microcontrôleur cadencé à 16Mhz, et un pré-diviseur d&#039;horloge de 128 ou 64 pour un microcontrôleur cadencé à 8Mhz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calcul de l&#039;impédance maximale en entrée en fonction du pré-diviseur d&#039;horloge de 32 pour charger la capacité à 99% :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 32)) / (0.000000000014F * 5τ) = 28571,428Ω ≈ 28kΩ&#039;&#039;&#039; max en entrée&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec 10kΩ en entrée, un microcontrôleur cadencé à 16MHz, et un pré-diviseur d&#039;horloge de 32, la charge de la capacité aura largement le temps de faire plus que 5 x la constante de temps et donc de se charger à plus de 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA !&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous n&#039;utilisez qu&#039;un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d&#039;utiliser une impédance d&#039;entrée trop élevée par rapport à la fréquence de multiplexage choisie, car la capacité sera chargée sur plusieurs échantillons successifs, mais la malfaçon n&#039;en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La suite est plus succinct, explications de la fonction readAnalog :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est le port PC0 relié à l&#039;ADC0 (convertisseur analogique/numérique canal 0) &amp;amp; le choix de la broche AVCC pour l&#039;alimentation du convertisseur analogique/numérique et référence de tension avec condensateur externe via la broche AREF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Correspond au démarrage d&#039;une conversion analogique/numérique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci boucle tant que la conversion n&#039;est pas terminée, le bit repasse à 0 si elle est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est la valeur numérique sur 10 bits de la tension mesurée sur PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il ne manque plus qu&#039;à compiler le programme avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas si vous avez des questions et/ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35437</id>
		<title>Programmer l&#039;ATmega328P sans Arduino</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35437"/>
		<updated>2021-10-23T11:21:16Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc01541.jpg&lt;br /&gt;
|description=Faire fonctionner le convertisseur analogique/numérique&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=GPL : GNU General Public License&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à tous les membres de PING.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
J&#039;ai eu envie d&#039;écrire ce petit tuto au fil de l&#039;écoute des conversations à l&#039;association, en effet il me semble important d&#039;apporter des éléments de compréhension et de calculs à chacun pour les cartes Arduino UNO (autant commencer par le commencement) afin de programmer le microcontrôleur ATmega328P en restant dans les spécifications constructeur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ici nous allons commencer par quelque chose de simple, lire une broche de la carte Arduino reliée en interne au convertisseur analogique/numérique du microcontrôleur ATmega328P, ceci sans utiliser l&#039;ide Arduino car il bride la compréhension du fonctionnement interne du microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette idée m&#039;est venue en entendant la phrase suivante : &amp;quot;Je peux faire lire à ma carte Arduino un signal avec une impédance de 1MΩ en entrée du convertisseur analogique/numérique.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous allez voir que cette affirmation est importante, car qui prendra cette info pourra y croire et faire des montages qui ne fonctionneront pas, ou fonctionneront dans certaines conditions extrêmes et extrêmement spécifiques qui dérogent complètement à la fiche technique du microcontrôleur considéré.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple complet de lecture ADC avec l&#039;ATmega328P (via votre carte Arduino UNO ou pas) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07569.jpg|vignette|gauche]]&lt;br /&gt;
[[Fichier:Dsc01673.jpg|vignette|gauche]]&lt;br /&gt;
[[Fichier:Dsc08343.jpg|vignette|gauche]]&lt;br /&gt;
&lt;br /&gt;
La première chose à prendre en considération lorsque nous souhaitons programmer le microcontrôleur d&#039;une carte Arduino UNO, est la fiche technique de l&#039;ATmega328P : [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
À l&#039;aide de cette fiche technique nous pouvons écrire le programme suivant qui est complet (je vais expliquer les différentes lignes après) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;unsigned int readAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cet exemple est minimaliste mais permet sans bibliothèque additionnelle et sans ide Arduino de faire fonctionner le convertisseur analogique/numérique du microcontrôleur connecté sur la broche PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le programme la première chose à écrire se sont les directives préprocesseur qui permettent d’appeler les pointeurs des adresses de registres dont vous allez avoir besoin :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCSRA permet de démarrer le convertisseur analogique/numérique, de choisir le pré-diviseur d&#039;horloge, et aussi de démarrer une conversion et de savoir si elle s&#039;est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADMUX permet d&#039;indiquer le bon canal connecté à la bonne broche que nous souhaitons lire, et d&#039;indiquer si la référence de tension est interne ou externe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCLH est la valeur numérique sur 10 bits de la tension mesurée sur le canal choisi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction principale :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d&#039;une façon périodique, c&#039;est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog&lt;br /&gt;
&amp;lt;br/&amp;gt;Nul besoin de plus dans cette fonction principale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction startAnalog est très simple, mais renseigner un octet cohérent pour ce registre ADCSRA mérite que l&#039;on s&#039;y attarde plus qu&#039;un petit peu :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Détail de l&#039;octet 0b10000101 :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;ADC activé &amp;amp; pré-diviseur d&#039;horloge = 32&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fréquence du microcontrôleur est de 16MHz.&lt;br /&gt;
La fréquence du multiplexeur du convertisseur analogique numérique est donc égale à :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;16000000Hz / 32 = 500000Hz = 500kHz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit le calcul du temps alloué à la charge de la capacité de 14pF à la fréquence du multiplexeur : &amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000µs / (16000000Hz / 32) = 2µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 1kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000Ω * 0.000000000014F * 5τ = 0.00000007s = 70ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 1kΩ en entrée le condensateur met 70ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 100kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;100000Ω * 0.000000000014F * 5τ = 0.000007s = 7µs&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 100kΩ en entrée le condensateur met 7µs à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à 100kΩ, ceci est cohérent avec le choix du pré-diviseur d&#039;horloge qui peut aller de 2 à 128, cela se retrouve par calcul (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 2)) / (0.000000000014F * 5τ) = 1785.714Ω ≈ 1.7kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 128)) / (0.000000000014F * 5τ) = 114285.714Ω ≈ 114kΩ&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, ci-dessous la formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 10kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;10000Ω * 0.000000000014F * 5τ = 0.0000007s = 700ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 10kΩ en entrée le condensateur met 700ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En respect de la fiche technique du microcontrôleur évoquant une optimisation avec une impédance de 10kΩ, un pré-diviseur d&#039;horloge par exemple de 32 convient comme le montre le calcul suivant :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;((1 / (16000000Hz / 32)) / 0.000000000014F) / 10000Ω = 14.285τ ≈ 14t&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le condensateur sera chargé au dela de 99% (puisque 99% = 5τ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contrairement à ce qui est souvent dit, une fréquence de fonctionnement du microcontrôleur plus élevée n&#039;est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 2)) / (0.000000000014F * 5τ) = 3571.428Ω ≈ 3.5kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 128)) / (0.000000000014F * 5τ) = 228571.428Ω ≈ 228kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera davantage chargée avec un microcontrôleur cadencé à 8MHz, mais cela signifie qu&#039;avec une impédance d&#039;entrée de 1kΩ vous pouvez dans les deux cas (8MHz ou 16MHz) choisir un pré-diviseur d&#039;horloge de 2 seulement, en revanche avec une impédance d&#039;entrée de 100kΩ il faut choisir un pré-diviseur d&#039;horloge de 128 pour un microcontrôleur cadencé à 16Mhz, et un pré-diviseur d&#039;horloge de 128 ou 64 pour un microcontrôleur cadencé à 8Mhz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calcul de l&#039;impédance maximale en entrée en fonction du pré-diviseur d&#039;horloge de 32 pour charger la capacité à 99% :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 32)) / (0.000000000014F * 5τ) = 28571,428Ω ≈ 28kΩ&#039;&#039;&#039; max en entrée&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec 10kΩ en entrée, un microcontrôleur cadencé à 16MHz, et un pré-diviseur d&#039;horloge de 32, la charge de la capacité aura largement le temps de faire plus que 5 x la constante de temps et donc de se charger à plus de 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA !&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous n&#039;utilisez qu&#039;un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d&#039;utiliser une impédance d&#039;entrée trop élevée par rapport à la fréquence de multiplexage choisie, car la capacité sera chargée sur plusieurs échantillons successifs, mais la malfaçon n&#039;en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La suite est plus succinct, explications de la fonction readAnalog :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est le port PC0 relié à l&#039;ADC0 (convertisseur analogique/numérique canal 0) &amp;amp; le choix de la broche AVCC pour l&#039;alimentation du convertisseur analogique/numérique et référence de tension avec condensateur externe via la broche AREF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Correspond au démarrage d&#039;une conversion analogique/numérique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci boucle tant que la conversion n&#039;est pas terminée, le bit repasse à 0 si elle est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est la valeur numérique sur 10 bits de la tension mesurée sur PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il ne manque plus qu&#039;à compiler le programme avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas si vous avez des questions et/ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35436</id>
		<title>Programmer l&#039;ATmega328P sans Arduino</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35436"/>
		<updated>2021-10-23T10:53:20Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc01541.jpg&lt;br /&gt;
|description=Faire fonctionner le convertisseur analogique/numérique&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=GPL : GNU General Public License&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à tous les membres de PING.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
J&#039;ai eu envie d&#039;écrire ce petit tuto au fil de l&#039;écoute des conversations à l&#039;association, en effet il me semble important d&#039;apporter des éléments de compréhension et de calculs à chacun pour les cartes Arduino UNO (autant commencer par le commencement) afin de programmer le microcontrôleur ATmega328P en restant dans les spécifications constructeur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ici nous allons commencer par quelque chose de simple, lire une broche de la carte Arduino reliée en interne au convertisseur analogique/numérique du microcontrôleur ATmega328P, ceci sans utiliser l&#039;ide Arduino car il bride la compréhension du fonctionnement interne du microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette idée m&#039;est venue en entendant la phrase suivante : &amp;quot;Je peux faire lire à ma carte Arduino un signal avec une impédance de 1MΩ en entrée du convertisseur analogique/numérique.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous allez voir que cette affirmation est importante, car qui prendra cette info pourra y croire et faire des montages qui ne fonctionneront pas, ou fonctionneront dans certaines conditions extrêmes et extrêmement spécifiques qui dérogent complètement à la fiche technique du microcontrôleur considéré.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple complet de lecture ADC avec l&#039;ATmega328P (via votre carte Arduino UNO ou pas) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07569.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc01673.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc08343.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
La première chose à prendre en considération lorsque nous souhaitons programmer le microcontrôleur d&#039;une carte Arduino UNO, est la fiche technique de l&#039;ATmega328P : [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
À l&#039;aide de cette fiche technique nous pouvons écrire le programme suivant qui est complet (je vais expliquer les différentes lignes après) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;unsigned int readAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cet exemple est minimaliste mais permet sans bibliothèque additionnelle et sans ide Arduino de faire fonctionner le convertisseur analogique/numérique du microcontrôleur connecté sur la broche PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le programme la première chose à écrire se sont les directives préprocesseur qui permettent d’appeler les pointeurs des adresses de registres dont vous allez avoir besoin :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCSRA permet de démarrer le convertisseur analogique/numérique, de choisir le pré-diviseur d&#039;horloge, et aussi de démarrer une conversion et de savoir si elle s&#039;est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADMUX permet d&#039;indiquer le bon canal connecté à la bonne broche que nous souhaitons lire, et d&#039;indiquer si la référence de tension est interne ou externe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCLH est la valeur numérique sur 10 bits de la tension mesurée sur le canal choisi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction principale :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d&#039;une façon périodique, c&#039;est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog&lt;br /&gt;
&amp;lt;br/&amp;gt;Nul besoin de plus dans cette fonction principale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction startAnalog est très simple, mais renseigner un octet cohérent pour ce registre ADCSRA mérite que l&#039;on s&#039;y attarde plus qu&#039;un petit peu :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Détail de l&#039;octet 0b10000101 :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;ADC activé &amp;amp; pré-diviseur d&#039;horloge = 32&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fréquence du microcontrôleur est de 16MHz.&lt;br /&gt;
La fréquence du multiplexeur du convertisseur analogique numérique est donc égale à :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;16000000Hz / 32 = 500000Hz = 500kHz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit le calcul du temps alloué à la charge de la capacité de 14pF à la fréquence du multiplexeur : &amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000µs / (16000000Hz / 32) = 2µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 1kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000Ω * 0.000000000014F * 5τ = 0.00000007s = 70ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 1kΩ en entrée le condensateur met 70ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 100kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;100000Ω * 0.000000000014F * 5τ = 0.000007s = 7µs&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 100kΩ en entrée le condensateur met 7µs à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à 100kΩ, ceci est cohérent avec le choix du pré-diviseur d&#039;horloge qui peut aller de 2 à 128, cela se retrouve par calcul (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 2)) / (0.000000000014F * 5τ) = 1785.714Ω ≈ 1.7kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 128)) / (0.000000000014F * 5τ) = 114285.714Ω ≈ 114kΩ&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, ci-dessous la formule de charge de la capacité de 14pF avec une impédance d&#039;entrée de 10kΩ (la capacité est considérée assez chargée à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;10000Ω * 0.000000000014F * 5τ = 0.0000007s = 700ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 10kΩ en entrée le condensateur met 700ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En respect de la fiche technique du microcontrôleur évoquant une optimisation avec une impédance de 10kΩ, un pré-diviseur d&#039;horloge par exemple de 32 convient comme le montre le calcul suivant :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;((1 / (16000000Hz / 32)) / 0.000000000014F) / 10000Ω = 14.285τ ≈ 14t&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le condensateur sera chargé au dela de 99% (puisque 99% = 5τ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contrairement à ce qui est souvent dit, une fréquence de fonctionnement du microcontrôleur plus élevée n&#039;est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 2)) / (0.000000000014F * 5τ) = 3571.428Ω ≈ 3.5kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 128)) / (0.000000000014F * 5τ) = 228571.428Ω ≈ 228kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera davantage chargée avec un microcontrôleur cadencé à 8MHz, mais cela signifie qu&#039;avec une impédance d&#039;entrée de 1kΩ vous pouvez dans les deux cas (8MHz ou 16MHz) choisir un pré-diviseur d&#039;horloge de 2 seulement, en revanche avec une impédance d&#039;entrée de 100kΩ il faut choisir un pré-diviseur d&#039;horloge de 128 pour un microcontrôleur cadencé à 16Mhz, et un pré-diviseur d&#039;horloge de 128 ou 64 pour un microcontrôleur cadencé à 8Mhz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calcul de l&#039;impédance maximale en entrée en fonction du pré-diviseur d&#039;horloge de 32 pour charger la capacité à 99% :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 32)) / (0.000000000014F * 5τ) = 28571,428Ω ≈ 28kΩ&#039;&#039;&#039; max en entrée&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec 10kΩ en entrée, un microcontrôleur cadencé à 16MHz, et un pré-diviseur d&#039;horloge de 32, la charge de la capacité aura largement le temps de faire plus que 5 x la constante de temps et donc de se charger à plus de 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA !&lt;br /&gt;
&amp;lt;br/&amp;gt;Si vous n&#039;utilisez qu&#039;un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d&#039;utiliser une impédance d&#039;entrée trop élevée par rapport à la fréquence de multiplexage choisie, car la capacité sera chargée sur plusieurs échantillons successifs, mais la malfaçon n&#039;en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La suite est plus succinct, explications de la fonction readAnalog :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est le port PC0 relié à l&#039;ADC0 (convertisseur analogique/numérique canal 0) &amp;amp; le choix de la broche AVCC pour l&#039;alimentation du convertisseur analogique/numérique et référence de tension avec condensateur externe via la broche AREF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Correspond au démarrage d&#039;une conversion analogique/numérique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci boucle tant que la conversion n&#039;est pas terminée, le bit repasse à 0 si elle est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est la valeur numérique sur 10 bits de la tension mesurée sur PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il ne manque plus qu&#039;à compiler le programme avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas si vous avez des questions et/ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35435</id>
		<title>Programmer l&#039;ATmega328P sans Arduino</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Programmer_l%27ATmega328P_sans_Arduino&amp;diff=35435"/>
		<updated>2021-10-22T20:59:25Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : Page créée avec « {{Tutoriel |status_pub=Publié |image=Dsc01541.jpg |description=Faire fonctionner le convertisseur analogique/numérique |compétences requises=Débutant C/C++ |license=GP... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tutoriel&lt;br /&gt;
|status_pub=Publié&lt;br /&gt;
|image=Dsc01541.jpg&lt;br /&gt;
|description=Faire fonctionner le convertisseur analogique/numérique&lt;br /&gt;
|compétences requises=Débutant C/C++&lt;br /&gt;
|license=GPL : GNU General Public License&lt;br /&gt;
|contributeurs=Sylvain Mahé,&lt;br /&gt;
}}&lt;br /&gt;
Bonjour à tous les membres de PING.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
J&#039;ai eu envie d&#039;écrire ce petit tuto au fil de l&#039;écoute des conversations à l&#039;association, en effet il me semble important d&#039;apporter des éléments de compréhension et de calculs à chacun pour les cartes Arduino UNO (autant commencer par le commencement) afin de programmer le microcontrôleur ATmega328P en restant dans les spécifications constructeur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ici nous allons commencer par quelque chose de simple, lire une broche de la carte Arduino reliée en interne au convertisseur analogique/numérique du microcontrôleur ATmega328P, ceci sans utiliser l&#039;ide Arduino car il bride la compréhension du fonctionnement interne du microcontrôleur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette idée m&#039;est venue en entendant la phrase suivante : &amp;quot;Je peux faire lire à ma carte Arduino un signal avec une impédance de 1MΩ en entrée du convertisseur analogique/numérique.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vous allez voir que cette affirmation est importante, car qui prendra cette info pourra y croire et faire des montages qui ne fonctionneront pas, ou fonctionneront dans certaines conditions extrêmes et extrêmement spécifiques qui dérogent complètement à la fiche technique du microcontrôleur considéré.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple complet de lecture ADC avec l&#039;ATmega328P (via votre carte Arduino UNO ou pas) :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dsc07569.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc01673.jpg|vignette]]&lt;br /&gt;
[[Fichier:Dsc08343.jpg|vignette]]&lt;br /&gt;
&lt;br /&gt;
La première chose à prendre en considération lorsque nous souhaitons programmer le microcontrôleur d&#039;une carte Arduino UNO, est la fiche technique de l&#039;ATmega328P : [https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf fiche technique de l&#039;ATmega328P]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
À l&#039;aide de cette fiche technique nous pouvons écrire le programme suivant qui est complet (je vais expliquer les différentes lignes après) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;unsigned int readAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cet exemple est minimaliste mais permet sans bibliothèque additionnelle et sans ide Arduino de faire fonctionner le convertisseur analogique/numérique du microcontrôleur connecté sur la broche PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le programme la première chose à écrire se sont les directives préprocesseur des adresses de registres dont vous allez avoir besoin :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCSRA (*(volatile unsigned char *)(0x7a))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADMUX (*(volatile unsigned char *)(0x7c))&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;#define _ADCLH (*(volatile unsigned int *)(0x78))&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCSRA permet de démarrer le convertisseur analogique/numérique, de choisir le pré-diviseur d&#039;horloge, et aussi de démarrer une conversion et de savoir si elle s&#039;est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADMUX permet d&#039;indiquer le bon canal connecté à la bonne broche que nous souhaitons lire, et d&#039;indiquer si la référence de tension est interne ou externe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ADCLH est la valeur numérique sur 10 bits de la tension mesurée sur le canal choisi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction principale :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;int main()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;startAnalog();&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;while (true)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;readAnalog();&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;return 0;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d&#039;une façon périodique, c&#039;est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog&lt;br /&gt;
Nul besoin de plus dans cette fonction principale.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fonction startAnalog est très simple, mais renseigner un octet cohérent pour ce registre ADCSRA mérite que l&#039;on s&#039;y attarde plus qu&#039;un petit peu :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;void startAnalog()&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Détail de l&#039;octet 0b10000101 :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADCSRA = 0b10000101;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;ADC activé &amp;amp; pré-diviseur d&#039;horloge = 32&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fréquence du microcontrôleur est de 16MHz.&lt;br /&gt;
La fréquence du multiplexeur du convertisseur analogique numérique est donc égale à :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;16000000Hz / 32 = 500000Hz = 500kHz&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.&lt;br /&gt;
&amp;lt;br/&amp;gt;Soit le calcul du temps alloué à la charge du condensateur de 14pF à la fréquence du multiplexeur : &amp;lt;br/&amp;gt;&#039;&#039;&#039;1000000µs / (16000000Hz / 32) = 2µs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge du condensateur de 14pF avec une impédance d&#039;entrée de 1kΩ (le condensateur est considéré assez chargé à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;1000Ω * 0.000000000014F * 5t = 0.00000007s = 70ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 1kΩ en entrée le condensateur met 70ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La formule de charge du condensateur de 14pF avec une impédance d&#039;entrée de 100kΩ (le condensateur est considéré assez chargé à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;100000Ω * 0.000000000014F * 5t = 0.000007s = 7µs&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 100kΩ en entrée le condensateur met 7µs à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à 100kΩ, ceci est cohérent avec le choix du pré-diviseur d&#039;horloge qui peut aller de 2 à 128, cela se retrouve par calcul (le condensateur est considéré assez chargé à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 2)) / (0.000000000014F * 5t) = 1785.714Ω ≈ 1.7kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 128)) / (0.000000000014F * 5t) = 114285.714Ω ≈ 114kΩ&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, ci-dessous la formule de charge du condensateur de 14pF avec une impédance d&#039;entrée de 10kΩ (le condensateur est considéré assez chargé à partir de 99% soit 5 fois la constante de temps) :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;10000Ω * 0.000000000014F * 5t = 0.0000007s = 700ns&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec une impédance de 10kΩ en entrée le condensateur met 700ns à se charger à 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En respect de la fiche technique du microcontrôleur évoquant une optimisation avec une impédance de 10kΩ, un pré-diviseur d&#039;horloge par exemple de 32 convient comme le montre le calcul suivant :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;((1 / (16000000Hz / 32)) / 0.000000000014F) / 10000Ω = 14.285t ≈ 14t&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Le condensateur sera chargé au dela de 99% (puisque 99% = 5t).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contrairement à ce qui est souvent dit, une fréquence de fonctionnement du microcontrôleur plus élevée n&#039;est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 2)) / (0.000000000014F * 5t) = 3571.428Ω ≈ 3.5kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (8000000Hz / 128)) / (0.000000000014F * 5t) = 228571.428Ω ≈ 228kΩ&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera davantage chargée avec un microcontrôleur cadencé à 8MHz, mais cela signifie qu&#039;avec une impédance d&#039;entrée de 1kΩ vous pouvez dans les deux cas (8MHz ou 16MHz) choisir un pré-diviseur d&#039;horloge de 2 seulement, en revanche avec une impédance d&#039;entrée de 100kΩ il faut choisir un pré-diviseur d&#039;horloge de 128 pour un microcontrôleur cadencé à 16Mhz, et un pré-diviseur d&#039;horloge de 128 ou 64 pour un microcontrôleur cadencé à 8Mhz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Calcul de l&#039;impédance maximale en entrée en fonction du pré-diviseur d&#039;horloge de 32 pour charger le condensateur à 99% :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;(1 / (16000000Hz / 32)) / (0.000000000014F * 5t) = 28571,428Ω ≈ 28kΩ&#039;&#039;&#039; max en entrée&lt;br /&gt;
&amp;lt;br/&amp;gt;Avec 10kΩ en entrée, un microcontrôleur cadencé à 16MHz, et un pré-diviseur d&#039;horloge de 32, la charge du condensateur aurra largement le temps de faire plus que 5 x la constante de temps et donc de se charger à plus de 99%.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA !&lt;br /&gt;
Si vous n&#039;utilisez qu&#039;un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d&#039;utiliser une impédance d&#039;entrée trop élevée par rapport à la fréquence de multiplexage choisie, car la capacité sera remplie sur plusieurs échantillons successifs, mais la malfaçon n&#039;en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La suite est plus succinct, explications de la fonction readAnalog :&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;_ADMUX = 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est le port PC0 relié à l&#039;ADC0 (convertisseur analogique/numérique canal 0) &amp;amp; le choix de la broche AVCC pour l&#039;alimentation du convertisseur analogique/numérique et référence de tension avec condensateur externe via la broche AREF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ADCSRA |= 0b01000000;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Correspond au démarrage d&#039;une conversion analogique/numérique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;while ((_ADCSRA &amp;amp; 0b01000000) != 0b00000000)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;{&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&#039;&#039;&#039;}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;Ceci boucle tant que la conversion n&#039;est pas terminée, le bit repasse à 0 si elle est terminée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;return _ADCLH;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;C&#039;est la valeur numérique sur 10 bits de la tension mesurée sur PC0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il ne manque plus qu&#039;à compiler le programme avec avr-gcc, le compilateur gcc dédiée au microcontrôleurs d&#039;architecture AVR, et le téléverser dans le circuit intégré avec avrdude.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
N&#039;hésitez pas si vous avez des questions et/ou des suggestions à apporter.&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc08343.jpg&amp;diff=35434</id>
		<title>Fichier:Dsc08343.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc08343.jpg&amp;diff=35434"/>
		<updated>2021-10-22T20:20:22Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;carte modulable 20&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc01673.jpg&amp;diff=35433</id>
		<title>Fichier:Dsc01673.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc01673.jpg&amp;diff=35433"/>
		<updated>2021-10-22T20:19:09Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;prototype carte modulable 20&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc07569.jpg&amp;diff=35432</id>
		<title>Fichier:Dsc07569.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc07569.jpg&amp;diff=35432"/>
		<updated>2021-10-22T20:17:18Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;alimentation de laboratoire&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Dsc01541.jpg&amp;diff=35431</id>
		<title>Fichier:Dsc01541.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Dsc01541.jpg&amp;diff=35431"/>
		<updated>2021-10-22T17:57:44Z</updated>

		<summary type="html">&lt;p&gt;Sylvainmahe : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sylvainmahe</name></author>
	</entry>
</feed>