FRÉQUENCEMÈTRE avec le TIMER1.

La mesure des Fréquences avec l’ATmega328 :

Quand nous savons comment réaliser un compteur logiciel très rapide et à forte capacité, mesurer une fréquence ou une période deviennent élémentaires. Par définition, la fréquence d’un événement quelconque, et par voie de conséquences celle d’un signal électrique périodique, est le nombre de fois par seconde que ce produit le phénomène étudié. Quand à la période, c’est le temps qu’il faut entre deux retours aux « conditions initiales » créant un comptage.

Matériellement, c’est encore l’entrée D5 qui sera utilisée pour recevoir le signal électrique à analyser.
Cette nouvelle fonction du mini laboratoire est donc totalement gratuite puisqu’elle ne fait appel à aucun composant nouveau. Elle ne consommera que de l’espace dans la mémoire de programme, mais nous en avons à revendre. Du reste, quand l’intégralité du source sera intégrée en un seul logiciel avec toutes les fonctions et tous les perfectionnements possibles, il restera encore pratiquement la moitié de la place encore disponible. Ce n’est donc pas la peine de chercher à faire des économies « bout de chandelle ».
REMARQUE : Le fréquencemètre est la seule fonction qui était disponible sur le petit KIT visible sur la Fig.2. Et encore, avec un affichage tristounet sans les points décimaux et ne « comptant » qu’une fois par seconde. Autant dire que le microcontrôleur n’y est pas vraiment rentabilisé. C’est bien dommage, car matériellement ce KIT est un petit bijou très bien agencé.
Comme il en a été question pour le CHRONOMÈTRE, nous allons pour le FREQUENCEMÈTRE exploiter au mieux les trois options possibles de la fonction bouclée. Pour conserver un maximum de possibilités, PÉRIODE et FREQUENCE seront affichées « simultanément » puisque l’une se déduit de l’autre. Par contre, la recherche de convivialité de comportement a aboutit à une combinatoire qui s’écarte un peu de la philosophie qui se retrouve pour les autres fonctions bouclées. Pour comprendre cette petite entorse à « la routine », envisageons avant le « cahier des charges » (Ouaououou, ça fait sérieux ça !) de la FONCTION FREQUENCEMÈTRE / PÉRIODEMÈTRE :
• Affichage de la fréquence et de la période simultanément. (Sur une même ligne.)
• Précision d’au moins ± 0.000001 % pour les fréquences > 1 MHz. (Cinq chiffres significatifs.)
• Faculté de choisir entre une mesure par seconde (Précision maximale.) et dix mesures par seconde.
Dans le mode Rapide la précision n’est que de ± 0.00001 % mais le rafraichissement de l’écran pratiquement instantané. Cette possibilité est particulièrement agréable quand on désire ajuster un générateur, la durée de fonctionnement d’un monostable etc. Une fois l’ajustement dégrossi on peut alors affiner le réglage en cours avec le mode Lent.
• Possibilité de mettre en PAUSE et mémoriser la valeur actuelle mesurée. (Option HOLD.)

Protocole d’usage du FREQUENCEMÈTRE / PÉRIODEMÈTRE.

Imaginons notre mini laboratoire en action. L’entrée principale reçoit le signal à analyser, que ce soit un créneau de type TTL ou du sinusoïdal ; peu importe. À l’activation de la fonction, par défaut les mesures se font en mode Lent. Si l’on veut respecter la précision de six chiffres significatifs, il faut impérativement que la procédure void Mesurer_la_frequence() respecte rigoureusement le délai de 1S ou de 0,1S. Cet impératif interdit de tester les boutons poussoir dans ce sous-programme. Du coup, en mode Lent il faudra appuyer au moins durant une seconde ou légèrement plus sur le B.P. pour qu’il soit pris en compte. Comme Fonction + long fait sortir, seul Fonction – sera possible. Du coup, il faut pouvoir sélectionner Lent / Rapide et la PAUSE avec le même bouton ! La seule façon d’y parvenir réside dans l’utilisation particulière qui est faite des B.P. et résumée dans le tableau ci-dessus.
Le B.P. Fonction + court n’est pas exploité ce qui ressemble à du gaspillage. Il aurait été possible de s’en servir pour inverser la nature du front qui déclenche les comptages par exemple. Mais dans le cas d’un FRÉQUENCEMÈTRE ou d’un PÉRIODEMÈTRE c’est strictement sans utilité, alors autant simplifier au maximum les protocoles adoptés pour ce type de mesurage.

ATTENTION : Nous savons que tous les systèmes d’affichages numériques, par principe même de conception fluctuent toujours à ± 1 sur le chiffre des unités. Quand on indique Précision d’au moins ± 0.000001 % dans le cahier des charges, on précise en fait qu’en dessous de 1 MHz cette précision relative ne sera plus possible. C’est une évidence dans la mesure où l’affichage se fait à l’Hertz près, donc en dessous de 1 MHz le nombre de chiffres affichés devient forcément plus faible. De plus, c’est la fréquence dont on donne la précision, pas la Période. (Voir plus avant…)

L’organigramme de la Fig.1 présente l’architecture du programme de démonstration P10_Frequencemetre_sur_USB.ino dont la boucle principale ne fait pas grand chose si ce n’est de tester une activation d’un bouton poussoir, effectuer son traitement éventuel puis elle passe la main à la procédure qui effectue tout le travail  void Mesurer_la_frequence(). C’est dans cette procédure que l’on boucle durant 1/10ième ou une seconde sans pouvoir tester les

Fig 1

B.P. Ensuite, en sortie de cette procédure, il y a transmission des valeurs vers la ligne série USB si elles ont changé. Quand on prétend que c’est void Mesurer_la_frequence() qui fait tout, c’est largement exagéré. Dans la pratique c’est TIMER1 et sa routine d’interruption qui cavalent à toute vitesse pour compter les transitions à une cadence infernale sur l’entrée D5 de notre appareil de mesures. Concrètement void Mesurer_la_frequence() « se tourne royalement les pouces ». Elle ne fait qu’attendre une seconde ou dix fois moins, par contre avec une grande précision puisque cette durée est ajustée à la microseconde près.
C’est de cette temporisation rigoureuse que le mini laboratoire est redevable de la précision annoncée.

x

 

Affichage formaté pour de grands nombres.

Quand une mesure commence à donner des valeurs importantes telles que 1 732 651 qui de plus fluctuent sur quelques chiffres de poids faibles, on a bien du mal à repérer où se situent les « Kilo » et les « Méga ». En revanche, si on formatait la valeur affichée sous l’aspect 1.732.651, on serait convaincus immédiatement de l’amélioration de la lisibilité. Ce constat est évidemment le même que les informations soient listées sur l’écran vidéo ou sur un module LCD. Si vous consultez la fiche intitulée Affichage numérique formaté avec des points, il y est précisé, qu’une immobilité latérale pour ce type d’information est très importante au point de vue de l’aisance de lecture.
Force est de constater que souvent les programmes que l’on rencontre sur la toile, ou certains produits du commerce ne prennent pas en compte cet aspect relativement important pour la qualité opérationnelle. Citons par exemple le cas du petit fréquencemètre représenté en Fig.2 des préliminaires, pourtant un produit commercial dont la qualité matérielle est soignée. C’est peut être parce-que développer un traitement qui réalise un tel formatage est bien plus indigeste qu’il n’y parait avant analyse. J’avoue que pour ma part, de très nombreux essais infructueux ont jalonné le sentier qui m’a fait aboutir à du code fonctionnant correctement. Peu importe la difficulté, le temps passé, les routines qui assurent cette mise en forme des données font l’objet maintenant d’un « OUTIL » pouvant être inséré dans tout programme après une adaptation généralement facile.

Pour vous rendre compte de l’amélioration considérable apportée par ce type d’affichage amélioré, il vous suffit de charger P11_Frequencemetre_sur_USB_avec_formatage.ino et de soumettre à l’entrée D5 des signaux de fréquence relativement élevée et si possible instables sur deux où trois chiffres significatifs. Utilisez ensuite un quelconque générateur et faites varier « rapidement » la fréquence de ses signaux entre quelques dizaines d’Hertz et plusieurs Mégahertz. On constate immédiatement que compléter les affichages par des zéros en tête pour maintenir stable la position latérale des nombres affichés est un plus incontestable. Une expérience aussi simple sera largement suffisante pour justifier amplement l’augmentation de taille du programme engendrée par le formatage dans la présentation des données. Mais comme de toute façon dans notre projet la place ne manque pas, une telle amélioration des visualisation s’impose sans discussion.Fig1Page27

Accentués et gaspillage de place en mémoire.

L’avènement des « textos » et des forums sur Internet incite à aller au plus rapide, quitte à bafouer ici et là les règles élémentaires de la syntaxe. C’est dans l’ordre des choses et il faut faire avec. Mais une écriture sans mettre les accents où ils seraient les bienvenus est visuellement choquante pour les amoureux de la grammaire, ou tout simplement les « anciens » pour qui les accentués sont aussi importants que la présence d’un point final en fin de ligne ou l’utilisation d’une lettre majuscule à son début. J’appartiens à cette catégorie, aussi, visualiser des textes non accentués m’est frustrant au possible. Malheureusement l’I.D.E. d’Arduino « prend le contrepied ». Les accentués sont interdits dans les noms de programme, dans les identificateurs de variable.
Bref, plus d’accentués = Norme.

SI si si, plein d’accentués … PAPY fait de la résistance !
La ligne série USB dans l’environnement d’Arduino est allergique aux accentués mais on peut aisément contourner cette difficulté. Il suffit comme vous le rencontrez dans les divers programmes mis à votre disposition, d’utiliser le type char suivi d’une valeur ASCII. Une fiche est donnée en annexe , du coté intitulé TABRE DES CARACTÈRES ASCII affichables sur LCD, nous donne les principaux codes utilisable.

Facile non ?

ATTENTION : Le perfectionnisme a un coût ! Fig1Page28 dans le programme, la taille de ce dernier augmente entre 22 et 23 octets car il y a plusieurs appels à procédures. Chaque appel ajoute du code ainsi que chaque retour. Il n’est donc raisonnable de soigner de cette façon les affichages que si l’on dispose de beaucoup de place, ce qui suppose un programme qui soit loin de saturer les 32 256 octets disponibles. Chic chic chic : Une raison de plus pour vivre avec son temps…

>>> Page suivante.

Laisser un commentaire

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