Validation de la longue ligne I2C.

Auto oscillations, ondes stationnaires et autres joyeusetés.

Franchement, ce chapitre a autant pour vocation de vous faire toucher du doigt les problèmes que l’on peut rencontrer quand on cherche à transmettre un signal sur une ligne filaire, que pour vérifier un comportement propre et répétitif, si de nombreux exemplaires risquent potentiellement de peupler la planète LudoArduine. Avec la limande étalée linéairement pour former une grande boucle magnétique ou enroulée sur elle même, il ne faut pas constater de dégradation significative du gignal qui transite entre ses deux extrémités. Les fronts de commutation binaire doivent rester « verticaux », et si possible sans oscillations amorties sur les transitoires. Pas de diaphonie détectable non plus. La ligne sera alors enroulée autour d’un petit transformateur secteur débitant au nominal sur une charge pour vérifier son immunité au « 50Hz ». Bref, on va la soumettre à un régime totalement déraisonnable pour en analyser le comportement. On se doute que le signal va forcément se dégrader, reste à voir si dans ces conditions il reste exploitable AVEC FIABILITÉ.
L‘interprétation de signaux complexes comme ceux issus d’un dialogue I2C n’est pas idéale pour faire émerger des observations les phénomènes critiques. Il est généralement plus probant de soumettre la ligne de transmission à un signal « carré » généré à la fréquence la plus élevée possible avec le microcontrôleur équipant le dispositif en cours de vérifications. Pour la circonstance, dans notre cas c’est P05_test_de_la_longue_ligne_I2C.ino qui sera chargé de cette mission. Quatre voies filaires dont trois bilatérales doivent être soumises à la campagne de tests. SDA et SCL de dialogue avec le capteur de pressions, la ligne pour celui des températures, et la sortie de pilotage de l’Alarme, à sens unique dirigée de l’ATmega328 vers l’interface. On va tester chaque voie séparément, ce qui nous obligera à modifier trois fois ce programme et à le téléverser quatre fois. Pour le jeu d’essais prévu, NANOMÉTÉO est entièrement achevée et bien calfeutrée dans son coffret. Elle est alimentée par la ligne USB qui sert au téléversement des croquis. La ligne de dialogue est également en place dans la configuration décrite dans le chapitre précédent. Enfin, les capteurs sont branchés à l’autre extrémité de la limande, disposés sur leurs supports dédiés.
En résumé : Le test de validation est effectué en conditions réelles avec le matériel en configuration nominale et « définitive ».
On se doute que les capteurs recevant un signal qui n’a rien à voir avec les protocoles officiels vont ignorer les fausses consignes. Leur présence est impérative, car ils constituent en fin de ligne une charge résistive et capacitive qui influence le comportement de la ligne de transmission.

Un son de cloche : La résonance.

Frappez énergiquement la base d’une cloche avec un marteau. Elle réagit bruyamment et fait entendre sa protestation à des lieux à la ronde. Puis, elle va marmonner de moins en moins fort jusqu’à retrouver son mutisme. Frappée avec énergie, son corps vibre à sa fréquence propre. La note musicale émise dépend un peu du matériau utilisé, (Avec du caoutchouc mousse la tonalité obtenue ne sera pas géniale !) et surtout de ses formes et des ses dimensions. Tout élément solide recevant brusquement de l’énergie mécanique se comportera de façon identique. L’énergie emmagasinée se résorbera lentement. Cette diminution progressive est nommée le « décrément logarithmique« .

x
– Hé totoche, avec tout ce baratin tu vas faire rappliquer la Salamandre.
– Oups, t’as raison, faisons plus court, mais je crois que c’est trop tard.

x
Électriquement on retrouve des comportements absolument analogues. Un conducteur électrique est pénard, au repos et sans électrons sauteurs qui se bousculent dans ses molécules.
Pafff, brusquement c’est le coup de marteau, un générateur lui cogne +5Vcc d’un seul coup.
Comme la cloche, secoué dans ses entrailles les plus intimes, il va se mettre à vibrer. En réalité ce n’est pas la ligne qui constitue « la caisse de résonance », mais le circuit complet avec capacités parasites, inductance répartie. Bref, le tout matérialise un circuit LC qui ne demande qu’à osciller à sa fréquence propre. Puis, le conducteur étant maintenu à une tension constante de +5V, l’oscillation va diminuer d’amplitude car la résistance interne du circuit transforme cette vibration en chaleur. (Et aussi en ondes dites radio.) Après quelques oscillations la vibration devient insignifiante. (En réalité si le circuit est faiblement amorti le nombre d’oscillations peut être notable.)

Le marteau électronique.

Illusion collective, nous sommes tous persuadés que les machines informatiques fonctionnent en binaire, en tout ou rien, en « 0 » ou « 1 ». C’est IMPOSSIBLE. Aucun mobile ne sera capable quelle que soit la technologie de passer de l’immobilité à une vitesse constante en un intervalle de temps nul. C’est pareil pour les électrons et totalement identique pour la « force qui les pousse », c’est à dire la tension. En réalité, quand la logique électronique passe de « 0 » à « 1 » par exemple, la tension passe de 0V à +5V en un temps très court, mais elle emprunte toutes les nuances entre ces deux valeurs. Cette variation est brutale, elle représente pour les éléments du circuit un vrai « coup de marteau électrique ». La durée nécessaire pour passer de « rien » à « tout » se nomme le temps de montée. (Pour le front montant.) La Fig.76 est propice à mettre en évidence la différence qui sépare la théorie de la pratique. Ce petit dessin envisage le comportement de l’une des sorties binaires d’Arduino. En bleu est tracée l’évolution de la tension dans un circuit hypothétiquement parfait. Jusqu’à T0 l’état logique est « 0 ». La broche du microcontrôleur est exactement à 0V. Puis, instantanément, la sortie passe à « 1 », c’est à dire à exactement +5V.
Malheureusement pour nous, la réalité électronique est bien plus compliquée que la logique informatique. En fonction du circuit branché sur l’ATmega328, ce dernier peut avoir du mal à « tirer » le potentiel exactement à zéro. Et l’on observe une petite tension résiduelle de +0,2V par exemple. Puis, électriquement à T0 c’est le coup de marteau. Les électrons s’affolent, et il faut pousser fort pour les bousculer. La tension peine à augmenter, et ce n’est qu’après le temps de montée qu’arrivée à T1 elle arrive à +5Vcc. (Du reste le microcontrôleur n’arrivera peut être pas à maintenir exactement +5V. On peut s’attendre à un petit écart, par exemple -0.1V dans cet exemple.) En fonction de la rapidité des circuits électroniques impliqués, ce temps de montées entre T0 et T1 peut être plus ou moins important. Il ne peut faire que quelques nano, pico, femto secondes, de toute façon la transition ne sera jamais « verticale » comme celle du tracé bleu. On ne la croit verticale sur les oscilloscopes que si la base de temps est lente au regard de ce phénomène. Mais si on la fait cavaler ventre à terre, la trace s’incline, la pente devient évidente, comme représenté par la courbe verte.

x
– STOP : On ne bouge plus !

x
Impossible, maintenant que les électrons ont été brutalisées, que la tension s’est mise à grimper comme une folle, il ne faut pas s’imaginer qu’arrivée exactement à +5Vcc elle va par magie stopper son évolution. Comme un caillou que l’on a lancé vers le haut, ce n’est pas parce que la main s’ouvre et ne pousse plus sur ce dernier qu’il s’arrête pile à la position du moment . Une fois lancé il continue.
C‘est exactement ce que traduit la partie tracée en rouge sur la Fig.76 où la tension continue de grimper et dépasse celle de l’alimentation du système. Puis, la gifle étant terminée, le circuit, à l’instar de la cloche, va se mettre à osciller à sa fréquence propre. Comme c’est très souvent le cas dans la nature, une oscillation libre prend l’allure d’une sinusoïde. C’est ce que l’on observe sur la Fig.76 pour le circuit LC concerné. Comme déjà précisé, l’énergie de vibration va se résorber, et l’on constate la diminution qui, concrètement, est généralement d’évolution logarithmique.

x
– Houlàla houlà, mais c’est méga la cata ça ! Plus rien ne va fonctionner alors ?
– Pas de panique Totoche, on a prévu les pansements pour les bobos électroniques.

x
Pour parer ces difficultés que l’on rencontrera forcément dans la pratique du binaire électrique, le premier remède va consister à diminuer autant que faire ce peut le coefficient de surtension du circuit, le but étant de rendre l’amplitude le l’oscillation amortie la plus faible possible. (Ce ne sera pas forcément facile ou possible.) La deuxième parade consiste à fixer des suils de « décision » les plus larges possibles pour « masquer » ces phénomènes. Sur la Fig.76 toute la zone bleue des tensions inférieures au seuil « 0 » seront considérées comme un état « RIEN ».

Toute les tensions de la zone coloriée en rose au dessus du seuil « 1 » seront considérées comme un état logique « TOUT ». Si les alternances négatives de l’oscillation restent contenues dans la zone rose, alors elles n’auront aucun effet logique. On retrouvera une approche équivalente pour les fronts descendants qui eux aussi vont auto-osciller. On peut observer sur la Fig.77 l’oscillation amortie qui se produit au moment de la transition négative quand la sortie de l’ATmega328 passe de l’état logique « 1 » à l’état binaire « 0 ». Les alternances positives de ces vibrations devront rester dans la zone coloriée en bleu clair pour « ne pas exister ». Il ne semble pas très malin d’avoir placé le seuil « 0 » de la zone bleue pastel éloigné de la valeur qui caractérise celui du « 1 » pour la région rose clair. Dans l’exemple de la Fig.77 on constate un léger dépassement de la première alternance positive colorié en orange. C’est que cet écart entre « 0 » et « 1 » tel qu’il est défini dans le standard TTL est imposé par les contraintes de fonctionnement des circuits intégrés logiques. On n’est plus dans la mathématique, il faut « industriellement » concilier de nombreux compromis.

x
– Et alors, que se passe-t-il dans la zone interdite blanche ?
– Ben … comme dans toute zone exposée au feu de l’ennemi … il ne faut pas s’y attarder.

x
Autrement dit, ne pas imposer à un circuit électronique logique une tension stable comprise entre les deux seuils de la norme. Si on persiste dans cette expérience, l’opérateur logique va se comporter comme un amplificateur à grand gain et à tous les coups il risque d’exploser en une virulente auto-oscillation.

Ainsi les circuits n’ont que le temps de « monter » ou de « descendre », pas d’osciller.

De la théorie à la pratique.

Désolé les amis d’avoir été aussi verbeux. Trois chapitres consacrés à de la théorie c’est un peu lourd, carrément indigeste. Mais si l’on veut comprendre un minimum ce que l’on va observer sur notre longue ligne de dialogue, autant se perdre dans la théorie du signal serait hors propos, autant faire moins me semble irréaliste. C’est tout bon, on peut passer à la pratique.

x
– Et bé, il était temps, je me suis complètement endormi mézigue !

x
Pour les lecteurs qui disposent d’un oscilloscope dans leur laboratoire d’électronique de loisir, le croquis P05_test_de_la_longue_ligne_I2C.ino est téléversé sans modification. Pour les autres, il vous faudra vous contenter des photographies issues de mes manipulations. C’est le test n°1 qui va s’exécuter, fournissant sur la sortie Alarme la cadence la plus effrénée possible. Voyons voir ce qui va se passer. La photographie de la Fig.78 montre en E ce que l’on observe en Entrée de ligne coté station météo, et en S ce que devient le signal carré en Sortie sur les broches de l’interface. Avec une base de temps de 2µS par graduation, les transitoires sont visuellement verticaux. On peut affirmer que les temps de montée et de descente sont de loin inférieurs à la microseconde. Les tensions qui déterminent les états les états « 0 » et « 1 » sont pratiquement celles de GND et de +5Vcc. Ces références sont reproduites sur la Fig.78 en observant que la trace pour S n’a pas été tout à fait cadrée sur la ligne du bas. On constate sur la Fig.78 que les oscillations amorties provoquent un dépassement en sortie d’environ 4V, la tension crête arrive à environ +9V. La première alternance négative fait descendre l’état « 1 » à environ +1V, nous commençons à singulièrement friser la correctionnelle.
Pas de panique, comme à l’extrémité S d’exploitation on trouve un transistor qui fonctionne en Saturé/Bloqué, si la commande met une microseconde à se stabiliser pour le pilotage d’une résistance chauffante, ça ne va pas changer grand chose à la température du local. Quand aux 9V appliqués à la base de T, si durant ce court laps de temps on passe à 400µA, le composant s’en fiche royalement. L’observation de la transition négative permet d’affirmer que S descend jusqu’à pratiquement -5V. On remarque qu’avec une alimentation de 5Vcc, le circuit en étude reçoit entre -5V et +9V … vous comprenez pourquoi l’électronique doit intégrer des protections et tolérer des plages fonctionnelles qui dépassent largement les valeurs nominales ?
Analysons plus en détail les signaux visualisés sur l’écran gradué et tout particulièrement ceux de la Fig.79 qui constituent un agrandissement  qui sur la Fig.78 se trouve dans l’encadré rose. L’amplification est obtenue en accélérant la base de temps. Pour ce cliché, elle est ajustée à 0,5µS par graduation ce qui va nous permettre d’évaluer la fréquence de l’oscillation amortie. Sur la Fig.79 trois graduations correspondant à 1,5µS sont mises en évidence par la flèche jaune. C’est le temps qu’il faut pour que l’amplitude de la vibration devienne négligeable. Durant ce laps de temps les traits rouges mettent huit alternances en évidence. On en déduit que la période de l’onde d’oscillation en résonnance est de 1,5 /  8 = 0,188µS. On en déduit facilement l’ordre de grandeur de la fréquence propre de la ligne qui avoisine 1 / 0.000000188 soit 5.33MHz.
Examinons maintenant le programme qui permet de générer le signal carré servant à « secouer » la ligne de transmission. Dans le programme P05_test_de_la_longue_ligne_I2C.ino on a placé en remarque les trois autres tests pour ne générer qu’un seul signal à la fois. Ainsi on va générer la fréquence la plus rapide possible incluant la présence d’instructions de délais. Si dans la boucle de base on enlève tous les commentaires, elle se résume alors à :


Cette boucle sans fin est élémentaire. En (1) on fait passer la sortie nommée Sentinelle à « 1 ». Puis on utilise l’instruction delayMicroseconds pour générer une temporisation d’1µS. En (2) la sortie Sentinelle repasse à « 0 » et toujours avec delayMicroseconds on y reste durant 1µS. Le délimiteur « } » ordonne de reprendre en (1) et le cycle recommence indéfiniment. En théorie, la période du signal carré devrait être de 2µS si nous étions dans un monde parfait. Force est de constater en E de la Fig.78 qu’une période complète s’étale sur six graduations soit 12µS.
L‘explication à cette anomalie apparente n’a rien de bien compliqué. Chaque instruction sur l’ATmega328 exige quelques « cycles machine ». Il faut donc un peu de temps pour faire passer Sentinelle à « 0 » ou à « 1 ». Il faut aussi quelques « pouillèmes » pour effectuer le branchement de retour « }« . Enfin, et surtout, delayMicroseconds pour se réaliser consomme un minimum de cycles d’horloge. C’est la raison pour laquelle il est bien spécifié dans la documentation du langage C de l’IDE qu’en dessous de 3µS l’instruction delayMicroseconds n’est plus fiable.
Remarquez que pour notre campagne d’essais cette fréquence de l’ordre de 83kHz est largement suffisante pour remuer énergiquement la longue ligne de dialogue. C’est pour aborder avec vous ces petites remarques que les instructions delayMicroseconds  ont été introduites dans la boucle de base. Si vous désirez vraiment générer la fréquence la plus rapide possible avec ce microcontrôleur cadencé à une fréquence d’horloge nominale de 16MHz il suffit d’enlever les deux temporisations qui ralentissent la boucle de base.

x
– Ouaisss, encore un long chapitre sans dessin, et paffff une salamandre de plus !

Comportement des lignes pour les capteurs.

Conduire les trois autres tests va nous obliger à adapter à la demande le programme de validation P05_test_de_la_longue_ligne_I2C.ino et à le téléverser pour procéder à la génération des signaux binaires. La technique consiste à passer en remarque les deux lignes du test précédent, et à valider celles relative au test à animer. Par exemple pour procéder au test suivant dans l’ordre d’écriture du croquis, la boucle de base devient :


Pour la photographie de la Fig.80 les paramétrages de l’oscilloscope sont assez analogues à ceux de la première manipulation. La base de temps est établie à 1µS par graduation. La sensibilité sur les deux voies est de 5V par carreau. Le signal en sortie de ligne S est cadré une ligne plus haut sur l’écran quadrillé. La période et la fréquence du signal carré produit sont identiques. Lors des transitions on retrouve les oscillations amorties avec des amplitudes qui ressemblent à celles du pilotage de la sentinelle. Une petite nuance dans le comportement distingue toutefois les observations des deux phénomènes. On constate que vers 2,8µS du front, mis en évidence dans l’encadré rose, la présence d’une oscillation amortie. Elle est de plus faible amplitude que celle engendrée sur le front montant ou descendant, mais bien présente. La nature de cette petite perturbation n’a pas été déterminée par une analyse plus fouillée. (Onde stationnaire en retour sur la ligne, effet de miroir dû à la présence des capteurs …) Une expérience strictement analogue conduite sur la ligne SDA révèle un comportement absolument identique, rien ne permet de distinguer de différence dans les oscillogrammes obtenus qui ne sont pas reproduits.
Enfin la Fig.81 montre ce que l’on obtient sur la ligne filaire unique qui dialogue avec le capteur d’humidité DHT11. Il n’y a plus présence de la petite perturbation en phase stabilisée de la ligne, mais on retrouve l’oscillation amortie engendrée par les facteurs capacitifs et inductifs des longs conducteurs. Il est normal de constater que la fréquence de résonnance soit du même ordre de grandeur. Nous pouvons maintenant proposer un bilan vraisemblable.

CONCLUSION : Que ce soit le DHT11 ou le BMP085, la durée de passage d’un état à son complémentaire sera largement supérieure à la durée des oscillations amorties. Ces perturbation inhérentes aux caractéristiques de notre longue ligne de pratiquement 9m passeront inaperçues, tout au moins en théorie. Par ailleurs, si une tentative de dialogue est perturbée, l’écouteur ignorera ce qui se passe en ligne, car il considérera que la consigne actuellement sur l’I2C ne lui est pas adressée. On peut raisonnablement considérer cette ligne comme fonctionnelle avec une faible probabilité de mesures incorrectes ou perdues. Une mise en fonction sévère durant plusieurs jours semblent confirmer ces estimations. (La ligne a été testée en plusieurs configurations.)

Par plusieurs configuration il faut entendre : Fonctionnement avec uniquement la première moitié de 4m, enroulée, déroulée, étalée en boucle fermée, en ligne. Un test a consisté à en faire une sorte de grosse bobine placée devant la porte d’un four à micro-ondes. Rien à signaler.

x
– Et dans le four à micro-ondes, t’as tenté le coup Totoche ?
– Vi, c’est rigolo, on dirait un orage avec des éclairs, mais NANO ne l’a pas prévu !

x
NON, on ne fait pas ce genre de plaisanterie, le four serait irrémédiablement détruit vous l’avez bien compris. Toutes ces tentatives avaient pour but de chercher à s’assurer qu’il serait possible et fiable de placer les capteurs loin de la station. Ils ont surtout montré un aspect particulièrement indigeste de cette belle ligne de télémesures :

Finalement, la caractéristique la plus critique d’une limande de ce type n’est pas sa capacité répartie, l’induction parasite, la diaphonie … c’est sont aptitude magique à faire inexorablement des nœuds tortillonnesques chaque fois que l’on désire la dérouler. AGASSIF !
Si la station météo est statique et la liaison passée une fois pour toute « dans les murs », pas de quoi se rouler dans le gazon. Par contre, si la petite merveille de la Fig.59 est anoblie en matériel expérimental manipulé souvent, un « H » en matériau quelconque tel que celui de la Fig.82 deviendra INDISPENSABLE. C’est simple, facile à faire et vous évitera plusieurs visites chez votre médecin de famille …
Terminer la description matérielle va enfin nous permettre d’aborder l’aspect logiciel. La Fig.83 présente la limande rallonge. Si vous acceptez un conseil, réalisez les deux « H » d’enroulement de la bretelle de raccordement AVANT de réaliser et de souder les fiches. J’ai compris la facilité qu’il y avait à le faire après avoir galéré substantiellement lors de la fabrication du premier prototype.
Comme c’était le cas pour les petits laboratoires, une petite étiquette comme celle montrée sur la Fig.84 sera la bienvenue avant de procéder à la finalisation logicielle. De toute façon elle sera indispensable, alors tant qu’à la réaliser, autant s’y prendre rapidement pour en bénéficier quand on va croiser le fer avec le compilateur. La Fig.85 à l’échelle unitaire si on l’imprime à partir du fichier.PDF en propose l’exemplaire adopté sur ma NANOMÉTÉO.

 AAA

>>> Page suivante.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *