Tout faire avec seulement deux B.P.

Comptage évènementiel et chronométrage avec l’ATmega328 :

Vocable accrocheur qui masque une grande simplicité, car compter est l’une des fonctions les plus simples à mettre en œuvre sur un microcontrôleur quel qu’il soit. On peut presque affirmer que ces circuits intégrés sont fondamentalement conçus pour ça ! C’est une fonction tellement simple à mettre en œuvre que ce chapitre pourrait facilement être éludé. Il n’est toutefois pas judicieux d’en faire l’impasse, car il va nous permettre d’introduire les concepts de base qui permettent de lier une action de comptage au « temps qui s’écoule ». On se doute que l’aboutissement de ces études permettra plus avant d’agencer la fonction Fréquencemètre / Périodemètre. Commençons par le plus élémentaire :

Composants à ajouter pour la fonction comptage d’événements.

Sachant que les signaux que nous allons utiliser pour effectuer du comptage évènementiel seront issus de capteurs actuellement indéterminés, la logique incite à continuer à utiliser l’entrée A qui s’accommode sans risque de tensions pouvant être élevées et alternatives. Par ailleurs,

Fig 1

l’étude du fréquencemètre, avec anticipation de la présence d’un afficheur LCD (Qui imposera la réservation de plusieurs E/S pour le piloter) nous amène à privilégier l’utilisation de l’entrée binaire D5 pour servir les diverses fonctions effectuant du comptage. Comme ce chapitre n’est qu’une étape de transition servant d’études préliminaires, inutile de réaliser un circuit imprimé spécifique. Nous envisagerons une nouvelle version quand l’intégralité du schéma électronique sera déterminée.Pour cette manipulation on va se contenter, comme montré sur la Fig.1, de brancher « en provisoire » une résistance de 10kΩ entre le « commun » de l’entrée A et la broche D5 du microcontrôleur. Cette liaison supplémentaire qui se résume à une seule résistance de plus dans notre appareil de mesure sera suffisante pour pouvoir agencer plusieurs fonctions nouvelles dans notre projet. Économique non ?

x

Deux boutons poussoir… c’est tellement plus agréable !

Compter se résume à ajouter une unité à une variable entière, et à en afficher la grandeur que si cette dernière a changé de valeur. Informatiquement nous n’allons pas en attraper une migraine.
Il importe simplement de pouvoir remettre à zéro ce compteur à convenance, et pouvoir sortir de la fonction quand on le désire… sauf que pour le moment notre appareil de mesure est sensé ne disposer que d’un seul bouton poussoir pour tout faire. C’est faisable. Par exemple toute action sur BP force la valeur à zéro. Tout enfoncement de plus de deux ou trois secondes ramène à la fonction première de mesure des tensions. Rien de bien compliqué. Toutefois, on sent confusément que le nombre de fonctions possibles sur le multimètre va devenir significatif. Un appui de trop sur BP et l’on doit refaire un cycle complet pour « recirculer » jusqu’à l’option désirée. Avec l’agacement d’avoir été trop rapide la première tentative, on devient fébrile, et la mésaventure va se reproduire.

CE N’EST PAS CONVIVIAL ! Ceux qui vont choisir un sélecteur adopteront un modèle à douze positions facile à approvisionner dans le commerce et la difficulté est contournée. Mais si l’on désire privilégier la compacité de notre appareil de mesures, on doit dès maintenant orienter

Fig 2

la solution future vers l’usage de deux boutons poussoir. L’un utilisé pour faire « avancer » dans la liste des fonctions, l’autre qui permet de recirculer en « rétrograde ». On pourra ainsi agréablement « se déplacer » librement dans les deux sens de la liste des fonctions, avec parfois la facilité d’alterner rapidement entre deux options d’une même famille de mesurages. La solution de la Fig.1 en B évoquée dans le chapitre précédent s’impose alors naturellement pour ne pas avoir à « consommer » une entrée de plus sur l’ATmega328. Après réflexion on arrive au schéma de la Fig.2 qui oblige à ajouter deux résistances. Si vous n’entrevoyez pas l’utilité de celle de 1kΩ il suffit par la pensée de l’éliminer. Que se passerait-il alors si l’on enfonçait les deux boutons poussoir simultanément ?

Le logiciel va devoir effectuer de l’anti rebonds non plus sur des « 0 » et des « 1 », mais sur des seuils de plages de valeurs tout en filtrant simultanément les problèmes de parasites électriques se superposant à la tension continue mesurée sur A0.

La gestion analogique de plusieurs B.P.

Fig 3

Bien que traité sur deux boutons poussoirs dans le cadre de notre projet en cours d’études, cette technique permet sans problème de gérer jusqu’à six ou huit B.P. avec une seule entrée analogique. Il suffit d’adapter les plages de tolérance et les seuils de détection. Les explications seront relatives au schéma de la Fig.2 mais il sera très facile « d’interpoler » pour le cas d’éléments multiples. Considérons la Fig.3 sur laquelle figurent les valeurs de numérisations issues de la CAN. Pour des raisons « esthétiques » ces dernières sont arrondies à la dizaine la plus proche. Quand aucun B.P. n’est enfoncé, la numérisation fluctue autour de 490 à quelques unités près. (Présence de bruit comme déjà abordé dans le didacticiel.) Quand on appui sur le B.P. de Fonction – la valeur binaire retournée par le CAN est pratiquement un 0 constant. La plus grande valeur possible issue d’une CAN serait de 1023, mais la présence de la résistance de protection de 1kΩ dégrade à 930 la valeur numérisée quand Fonction + est activé. Pour luter efficacement contre le bruit, mais surtout contre les Pics jamais totalement exclus, il suffit de calculer les moyennes entre les valeurs numérisées pour définir les seuils de décision. Tout ce qui sera supérieur à 710 sera considéré comme une action sur Fonction +, toute CAN inférieure à 240 dénoncera une action sur Fonction –.

Sans pour autant pénaliser de façon significative la taille du programme, il est aisé d’améliorer encore la commodité de sélection des fonctions par bouton poussoir. Si le nombre des options et des calibres est important, il serait agréable de pouvoir à tout moment réinitialiser la fonction de base n° 1. Fig 4 Pour ce faire, il suffira d’appuyer sur l’un des boutons poussoir durant plus d’une seconde. Dans notre cas le menu reviendra à la fonction voltmètre sur le calibre +5Vcc.

La Fig.4 présente l’organigramme de la procédure qui traite la surveillance de l’entrée A0. Outre son appel et ses variables locales, elle totalise exactement 400 octets soit 1,24 % de la mémoire de programme. Ce n’est pas du tout exagéré si l’on prend en compte le fait que la qualité opérationnelle d’un appareil de mesure est directement fonction de la facilité qu’il y aura à naviguer entre les nombreuses options qui le caractérisent. La temporisation en (1) plus économique qu’une gestion anti rebonds la remplace parfaitement tout en assurant à la LED verte de s’allumer un minimum de temps, y compris si l’action sur l’un des deux B.P. est très courte.

Par contre pour minimiser le temps passé dans cette procédure, la gestion anti rebonds en (2) pour l’attente du relâcher des B.P. est effectuée par comptage d’au moins cinquante lectures stables sur A0 avant de décider que le repos est réellement stabilisé. Dans cette version du logiciel, cette procédure positionne trois booléens qui seront pris en compte dans la boucle de base :
Clic_sur_le_BP qui signale une requête,
Augmenter_le_choix qui détermine le B.P. actionné,
Retour_a_1 représentatif d’une action longue.
Quand Clic_sur_le_BP est à true, la boucle de base examine alors Augmenter_le_choix pour augmenter ou diminuer l’indexation dans le menu, avec priorité à Retour_a_1 qui force le premier choix de la liste du menu.

Caricaturant l’amplitude du bruit électronique présent sur l’entrée A0, la Fig.5 met en évidence l’importante immunité aux parasites que l’on peut obtenir quand l’étendue de numérisation ne comporte que trois plages. Ce dessin exagère vraiment la grandeur des PICs  et « de l’herbe ». Aussi, dans la réalité, on peut facilement diviser par six ou par huit la plage totale de numérisation sans pour autant diminuer significativement l’immunité aux parasites. Revenons à la structure du programme. Ce que ne montre pas l’organigramme de la Fig.4, c’est la faculté du microcontrôleur à effectuer simultanément plusieurs actions, et ce tout particulièrement quand il s’agit de compter.

Fig 5

L’ATmega328 met à notre disposition plusieurs compteurs indépendants qui fonctionnent en autonomie totale une fois que le microcontrôleur a été correctement configuré. L’un d’eux reçoit en permanence un signal de 1000 Hz issu de l’horloge 16 MHz pilotée par le quartz. Ce compteur est mis à zéro lors du RESET et « mouline en tâche de fond » sans autre forme de procès. On peut en ignorer la présence, mais pour effectuer un (Ou plusieurs simultanés.) chronométrage précis à la milliseconde près, il suffit d’en noter la grandeur au début de la mesure, et d’en soustraire cette donnée de la valeur de ce compteur à la fin de la période à mesurer. Le compilateur C de l’IDE d’Arduino met à notre disposition la fonction millis () qui retourne sous un unsigned long la valeur instantanée de ce compteur particulier. La grandeur exprimée est en millisecondes ce qui permet des chronométrages précis, et la taille de ce compteur est suffisante pour ne pas recycler à zéro avant… 49,71 Jours !

La procédure Tester_entree_A0 fait appel à ce compteur entre les deux instructions colorées en jaune sur le diagramme de la fig.4 donnée ci-avant. On convient de dire qu’il s’agit d’un travail de fond masqué.

 

Menu avec fonctions « bouclées ».

L’informatique nous démontre souvent qu’un concept initial simple cache souvent des pièges inattendus. Le développement d’une routine qui ne devait nous prendre que quelques minutes ruine notre optimisme et la procédure en question se goinfre de plusieurs heures de mise au point. Rien de bien nouveau … il faut faire avec.

Fig 6

Le chapitre précédent rentre dans le cadre de ces petites mésaventures de programmeur, si l’une ou plusieurs des options dans le menu est une procédure « bouclée ». De quoi s’agit-il ?
Considérons l’organigramme de la Fig.9 donné précédemment dans le chapitre « L’aspect logiciel » . Dans ce dernier, [Sélectionner puis traiter la fonction indexée] se résume à effectuer une mesure, et à en afficher la valeur si cette dernière a changé. On peut réduire cet organigramme à celui de la Fig.6 qui montre que [MESURER] est une

Fig 7

procédure ouverte dont la sortie est systématique après avoir effectué une mesure. Considérons maintenant la Fig.7 qui présente le cas d’une procédure bouclée. Contrairement au cas précédent dont la CAN était très courte et la sortie de la procédure pratiquement immédiate, dans une Option telle que du COMPTAGE, le mesurage est « continu ». On est donc « enfermé » dans la procédure qui persistera dans une boucle fermée (Pléonasme !) tant qu’une action spécifique sur l’un des deux B.P. ne sera pas effectuée pour imposer une sortie et un retour à la boucle de base. Cette situation pose un problème de « convivialité » dans la gestion des menus. Pour comprendre la difficulté dans une telle situation pour agencer un appareil de mesures agréable à utiliser, il faut au préalable établir une stratégie d’utilisation des deux B.P.

 

Stratégie d’utilisation des deux boutons poussoir.

Puisque c’est la fonction COMPTAGE d’événements qui la première nous place dans une situation de procédure bouclée, c’est dans ce cas de figure que nous allons effectuer l’analyse. Contrairement à afficher la valeur instantanée d’une tension, d’un courant etc, COMPTER revient à afficher un nombre chaque fois que ce dernier change, et ce JUSQU’À CE QUE L’OPÉRATEUR DÉCIDE D’ARRÊTER. C’est donc par une action particulière sur l’un des deux B.P. que sera provoquée la sortie. Par ailleurs, la fonction en cours peut présenter plusieurs options particulières, dont la sélection ne peut se faire que par le truchement des deux boutons poussoir. Il faut alors définir le protocole d’utilisation des deux B.P. pour que leur utilisation soit la plus « naturelle » possible. De plus, si l’une des options locales est « dangereuse », comme la sortie inopinée de la procédure, la sécurité incite à privilégier une action longue sur l’un des deux B.P. C’est ce que l’on fait sur le bouton de RESET d’un ordinateur par exemple. Dans notre cas, un clic sera considéré comme long s’il dépasse 0,5 seconde, cette valeur opérationnelle est déterminée expérimentalement.

Avant de définir une stratégie d’exploitation, examinons la combinatoire possible d’utilisation de deux B.P. sachant qu’appuyer sur les deux simultanément n’est pas une solution car elle engendre un 0 non différent de l’utilisation du B.P. Fonction – . Le petit tableau ci-dessous résume  les différentes possibilités et montre que la combinatoire ne présente que quatre variantes. Comme l’une d’elle, celle coloriée en rouge, est réservée pour la sortie de la procédure bouclée, toutes les fonctions de ce type ne pourront exploiter au maximum que trois « options locales ». Notez au passage que la sortie étant « à risque », c’est donc une action longue qui sera systématiquement utilisée pour ça, et le B.P. de Fonction + étant prévu au dessus de celui de Fonction – sur notre maquette, cette position sera un rappel qui symbolise le « risque maximum ».
Nous avons tous les éléments en main pour choisir un protocole d’exploitation de la fonction COMPTEUR d’événements dont il nous faut lister les options envisageables.

Comme nous ne savons pas à l’avance si l’opérateur désirera surveiller des fronts montants ou descendants, (Transitions électriques issues du capteur utilisé.) il faudra prévoir ces deux options dans la fonction de comptage. L’utilisateur pourra aussi désirer remettre à zéro à tout moment.
Nous aboutissons pour la fonction de comptage à deux options locales qui ne dépassent pas la combinatoire possible avec la limite de deux B.P. sur l’appareil de mesure. Quand la fonction COMPTEUR sera validée, on a choisi le protocole suivant :
• Action courte sur Fonction – : Forcera le résultat à zéro sans pour autant suspendre le comptage.
(Facile à retenir car zéro est généralement en bas dans les graphes, comme pour le B.P. F –)
• Action longue sur Fonction – : Même effet que celui de l’action courte.
• Action courte sur Fonction + : Inversera le sens des transitions dénombrées.
• Action Longue sur Fonction + : En « standard » sortie de la fonction en cours.
Naturellement d’autres protocoles pourraient être préférés dans cette combinatoire, et éventuellement chaque programmeur pourra personnaliser à sa guise en adaptant le code source.

Problème posé par les fonctions « bouclées ».

Informatiquement pas de quoi alerter le ministère des programmeurs : Provoquer la sortie d’une procédure sur examen d’un ou deux booléens n’a pas de quoi faire pâlir de frayeur. Mais c’est le comportement du programme ensuite qui peut rendre l’usage de notre appareil de mesure « indigeste ».
Envisageons le cas banal d’exploration du menu de base. Chaque action sur l’un des deux B.P. fait passer à l’option voisine et en affiche la nature. Si on chemine dans le menu et que l’on transite par l’une des fonctions bouclées, on entre forcément dans cette dernière qui affiche son titre. Comme mentalement on désire passer à la fonction suivante ou précédente, on va cliquer un court instant sur l’un des deux B.P. et inverser une option locale. Bzzzzz… agassif car il faut maintenant cliquer  « longuement » sur Fonction +.

À l’usage on arrive rapidement à la conclusion que ce n’est pas idéal du tout. Une succession d’actions courtes s’avère bien moins désagréable. L’idée pour parer cette difficulté consiste à demander une confirmation avant d’engager une fonction bouclée. Toujours dans le même ordre d’idées, le B.P. du haut sera attribué à l’option « risquée », c’est à dire pour le OUI et celui du bas pour le NON, autrement dit affecté au passage à la fonction « voisine » dans le MENU principal. Voisine est mise entre guillemets, car le cheminement actuel peut se faire aussi bien en mode prograde qu’en « déplacements » rétrogrades.
Comme nous sommes dans une situation où l’on veut « sauter » l’option, il est logique de continuer dans la progression en cours.

Fig 8

L’organigramme de la Fig.8 montre que finalement gérer informatiquement un MENU avec seulement deux boutons poussoir n’est tout compte faits pas si immédiat que l’on pouvait l’imaginer au départ. C’est le prix à payer pour la qualité opérationnelle. Comme ce type d’architecture peut se rencontrer souvent dans la vie d’un programmeur, autant l’agencer dans un programme de type outils dont on réutilisera à loisir la structure fonctionnelle.

Pour mettre au point le logiciel de la Fig.8 sans s’encombrer de la programmation des options du multimètre, je vous propose de tester P04_Deux_BP_et_Fonctions_Fermees.ino qui n’exige de brancher que les deux B.P. et la ligne série USB pour en vérifier le bienfondé. Certains vont peut être estimer qu’avoir consacré plus de quatre pages entières à la gestion de deux boutons est un peu exagéré. Force est de constater que des appareils commercialisés en grande série souffrent sur ce point de faiblesses manifeste, et tout particulièrement dans la gestion de l’anti rebonds quand le temps affecte le fonctionnement de leurs B.P. souvent de qualités médiocres, et qui se dégradent significativement au cours du temps…

L’approche triviale du comptage.

Riches de deux boutons poussoirs et d’un protocole réputé convivial, nous pouvons maintenant développer une procédure spécifique pour ajouter à notre multimètre une fonction de comptage événementiel. Pour l’amplitude du dénombrement, on va limiter à 9.999.999 la capacité maximale.
C’est une valeur qui se justifie par la limite envisagée pour le fréquencemètre, et par les problèmes de formatage de l’affichage qui seront abordés plus avant. Ceci étant précisé, avec une telle capacité, il sera rare de se trouver confronté à une insuffisance. Mais avant de passer à du « vrai comptage » notre cheminement va transiter par une petite expérience dans laquelle nous allons procéder de façon archi banale, c’est à dire utiliser une procédure classique avec une boucle « standard » qui surveille une entrée, puis procède à l’incrémentation chaque fois qu’une transition est détectée.
Comme le traitement envisagé n’est que très provisoire, seul un comptage sur front montant sera analysé. La technique présentée dans cette approche « simplifiée » est très courante, car elle élude l’apprentissage des INTERRUPTIONS et reste utilisable chaque fois que la fréquence des événements reste « modeste ». Par exemple dans notre démonstrateur nommé P05_Compteur_SIMPLIFIE.ino la fréquence limite reste inférieure à 1000Hz, principalement ralentie par l’affichage sur la ligne USB. Par ailleurs, le traitement est pratiquement nul, mais dans la boucle réalisée il faudrait aussi tester les boutons poussoir. Bref, cette technique élémentaire ne permet pas des cadences élevées.

>>> Page suivante.

Laisser un commentaire

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