La fonction WOBULATEUR.

WOBULATEUR : Une fonction gourmande en ressources.

Naturellement, avec précipitation vous avez ouvert Usage du WOBULATEUR et goinfré avec avidité tout ce qui concerne les courbes en cloche de GAUSS et cet appareil au nom énigmatique nommé WOBULATEUR. Inutile de réexpliquer que cette créature étrange génère une cascade de fréquences et enregistre le signal qui en résulte en sortie d’un dispositif électronique quelconque. Dans le didacticiel susnommé, l’expérience était informatiquement très riche, mais aboutissait à un appareil pas vraiment opérationnel. D’une part l’écran LCD alphanumérique était tout, sauf graphique, et surtout l’appareil ne générait que des signaux « carrés » impropre à la consommation d’un wobulateur. PICOSYNTHÉ permet de contourner ces deux pierres d’achoppement, alors pourquoi s’en priver, d’autant plus que l’optimisation du programme P29_COMPLET_avec_LOGO.ino va nous laisser largement de place pour intégrer cette nouvelle fonction. Cette bonne nouvelle est suivie d’une deuxième : Quand vous avez activé l’outil logiciel P28_Ecrire_les_textes_en_EEPROM.ino pour loger les textes en EEPROM, ce dernier contenait tous les « bavardages » utilisés par les Futures Expansions.

Abordons en détails les développements principaux et les subtilités du démonstrateur P30_WOBULATEUR.ino qui comme à chaque découverte d’un nouveau monde a permis d’affiner les affichages et les protocoles d’exploitation. Le WOBULATEUR n’est pas autre chose qu’un générateur à balayage automatique. Au lieu de tourner un bouton pour faire changer la fréquence de l’onde générée par l’AD9850, on déclenche une séquence avec FC- et PICOSYNTHÉ se charge du reste. La grosse différence, c’est que chaque fréquence générée le sera durant environ 30mS pour laisser le temps au circuit électronique analysé de stabiliser son signal de sortie. Puis, la tension qui en résulte est mesurée constituant le  spectre de la fonction de transfert pour toute la plage allant de QRG INF à QRG SUP en 120 échantillons. Avant d’être soumise au convertisseur Analogique Numérique d’Arduino, le signal de sortie probablement sinusoïdal devra bénéficier d’un traitement de redressement et de filtrage. Profitant de l’expérience acquise pour réaliser la fonction oscilloscope numérique, divers concepts ont été directement repris, comme le gain automatique par exemple.

Comportement pratique du WOBULATEUR.

Présenté sur la Fig.65 la page d’accueil de la fonction WOBULATEUR propose plusieurs informations qui confèrent à notre appareil une qualité opérationnelle incontestable. La zone bleue est dédiée à la représentation graphique du spectre de la fonction de transfert de l’électronique espionnée, lorsque la fréquence varie linéairement entre QRG INF correspondant au bord gauche du cadre, et QRG SUP relative au bord droit de la zone bleue. La

courbe tracée ici est artificielle, je doute que vous soyez un jour face à un tel comportement. Pour avoir une trace initiale, tout en minimisant le code binaire pour la produire, une pyramide est générée dans la mémoire d’échantillonnage. Comme c’était le cas pour l’Oscilloscope, nous nous limitions « en largeur » à 120 PIXELs laissant à droite la possibilité d’afficher un INDEX. Pour mieux cerner les possibilités et les besoins satisfaits par le WOBULATEUR, examinons ensemble deux cas typiques.
Sur la Fig.66 la courbe est celle d’un filtre passe bande. L’INDEX sur le coté droit est calculé pour indiquer la valeur qui correspond à la moitié de la tension la plus élevée trouvée sur l’ensemble des 120 échantillons du graphe. Si l’on suppose une courbe du type de celle de la Fig.66, en standard ce repère indique en hauteur l’atténuation classique de -3dB. La Fig.67 est strictement identique à celle de la Fig.66 et permet de repérer horizontalement la valeur de -3 décibels. En tournant le bouton du capteur rotatif, on déplace latéralement le CURSEUR vertical repéré en rose qui peut occuper latéralement quarante et une positions, coté du cadre compris. La valeur de la fréquence qui était générée pour l’échantillon correspondant à la position du CURSEUR sur le graphe est indiquée en haut dans le cadre jaune. Durant ce mode d’exploitation, le synthétiseur génère en permanence un

signal dont la fréquence est égale à celle de l’échantillon désigné par le CURSEUR. Sur ces deux dessins vous pouvez observer que le curseur est positionné à l’endroit ou la courbe croise le niveau -3dB pour une fréquence de 60kHz. Déplacer le curseur en   permet d’obtenir la fréquence pour -3dB sur le flanc descendant de la courbe. Si dans cette position la fréquence indiquée est de 80kHz, on en déduit immédiatement que la bande passante pour ce filtre à la valeur de -3dB est de 80kHz – 60kHz = 20kHz. L’information X2 en haut à gauche de l’écran témoigne du coefficient d’amplification automatique appliqué à la déviation verticale. On retrouve le comportement explicité dans le chapitre Le gain automatique relatif à l’oscilloscope numérique. Sans cet artifice d’optimisation, la courbe tracée serait deux fois « plus plate ».
La courbe de la Fig.68 fait également partie des grands classiques. Toujours pour une atténuation de -3dB elle est relative au comportement d’un filtre de coupure à 3kHz. Sachant que l’intelligibilité d’un message parlé se situe dans la bande de fréquence [50Hz – 3000Hz], pour diminuer la place occupée par une station radio, on limite souvent la bande passante vocale à cette plage de valeurs, en B.L.U. notamment. (Bande Latérale

Unique.) La Fig.68 est issue de la fonction de transfert d’un filtre coupe haut. En déplaçant le CURSEUR on peut ainsi facilement déterminer la valeur de la fréquence en divers points de la courbe. Chaque position engendre la génération en continu de la fréquence de l’échantillon. On peut ainsi effectuer des mesures statiques complémentaires sur l’électronique en cours d’étude. Par exemple faire varier l’amplitude du signal sur le générateur pour déterminer le gain du filtre, la tension en entrée de saturation, le comportement de ce dernier sur harmoniques …
Sur la Fig.69 la numérisation a été déclenchée alors que l’entrée E était en l’air et ne mesurait que des parasites. Nous n’obtenons qu’un flot de points incohérents. La position de l’index semble légèrement plus basse que celle du point lumineux le plus élevé / 2. C’est une impression due à la présence de la ligne inférieure du cadre que l’on n’assimile pas visuellement à des points, effet auquel s’ajoute un arrondi « vertical » résultant du nombre limité des positions possibles.

Les trois modes de visualisation.

Visualiser un maximum d’informations de façon claire et épurée est à la base de l’efficacité de tout tableau de bord. Il importe de ne présenter au technicien que ce dont il a besoin en fonction des circonstances. Cet adage est général. Sur la Fig.65 les lignes pointillées horizontales permettent de situer cinq niveaux de tension entre zéro et 5, 2,5 et 1,25V en fonction du coefficient d’amplification à l’affichage. Si l’opérateur cherche à savoir la valeur de la tension en fonction de la fréquence appliquée au circuit, ces traces sont très utiles, mais s’il préfère ne se préoccuper que de l’évolution de la forme de la courbe, l’affichage plus épuré de la Fig.70 est nettementpréférable. Vous avez certainement téléversé P30_WOBULATEUR.ino sur votre carte Arduino, testez les diverses possibilité du logiciel. C’est avec l’utilisation du bouton poussoir central du capteur rotatif que se fait le changement de mode d’affichage. Trois options se succèdent en permutation circulaire dont celle de la Fig.71 qui redonne les valeurs des bornes de la plage balayée
QRG INF et QRG SUP. Le PAS correspond à la variation de fréquence quand le CURSEUR change de position. Par exemple, par calcul on retrouve bien que 2000 Hz + (40 * 50Hz) = 4000Hz. Par contre le saut en fréquence entre chaque échantillon se calcule avec :
4000 – 2000 / 120 = 16,66666666666666666666666666666Hz.

OUPSSSsss, mais ça ne tombe pas juste !

La saisie des données de configuration.

Aisée et rapide est cette dernière, puisque nous n’avons à indiquer au logiciel que les fréquences QRG INF et QRG SUP correspondant aux bornes de la fréquence balayée. Reprenant les techniques utilisées pour les autres fonctions de PICOSYNTHÉ, les Fig.48 et Fig.49 (Fin de ce chapitre.) sont parfaitement représentatives des deux pages d’écran qui seront invoquées quand on clique sur FC+ court. De manière ultra banale le changement de page ou le retour au mode exploitation se font avec FC+ long. En sortie de la saisie des options, c’est le mode d’affichage de la Fig.71 qui est visualisé résumant les données consignées. Comme à chaque fois, les valeurs bénéficient d’adaptations contournant des erreurs de logiques ou des aléas de traitement pour effectuer l’échantillonnage :

Les lignes (1) et (2) se chargent de collecter Limite_INF et Limite_SUP indiquées par l’opérateur. Pour sa part l’instruction (3) s’assure que l’ordre des deux bornes sera cohérent. La ligne (4) est beaucoup plus vitale. On vérifie qu’il pourra y avoir 120 fréquences différentes possibles, sachant que la plus petite variation devra faire au moins 1Hz. Pour simplifier le code, on part systématiquement de Limite_INF à laquelle on ajoute le minimum de 120 Hz. Si les deux fréquences saisies sont égales à 60.000.000Hz on constate que Limite_SUP vaudra 60.000.120Hz qui dépasse la valeur maximale de 60MHz. Ce n’est vraiment pas pénalisant, car le synthétiseur peut générer cette valeur que l’on avait imposée arbitrairement. La ligne (5) est indispensable. Elle certifie que le traitement sera possible, c’est à dire que le PAS sera un entier, et que Limite_SUP sera bien égale à un nombre entier de fois le PAS.

listage2P124Dans un premier temps la valeur entière du PAS est calculée en (6) dans la variable QRG_INF. C’est la procédure Calcule_QRG_Indexee qui en (7) fait effectuer ce calcul. Puis en (8) il y a détermination dans Frequence_desiree de la valeur de la fréquence la plus

élevée qui sera affectée à la borne supérieure Limite_SUP. On est ainsi certain que Limite_SUP correspondra à un entier valant 40 fois le PAS lui même entier. La ligne (10) procède à l’affichage des valeurs recalculées. Les fréquences des bornes ne seront pas forcément exactement celles qui ont été consignées. La ligne (9) peut sembler étrange. N’oublions pas que void Calcule_QRG_Indexee() nous a servi ici « gratuitement » pour calculer la valeur de Limite_SUP compatible avec les limites imposées par le circuit intégré AD9850. Cette procédure est fondamentalement dédiée au calcul de la fréquence correspondant à la position du CURSEUR  vertical. Si ce dernier est en position Ordre = 0 le calcul de (8) donne zéro. Hors l’AD9850 ne peut pas générer une fréquence nulle. C’est dans ce cas que Frequence_desiree devra prendre la valeur minimale de 1.

Consacrer toute un chapitre à la filtration des données fournies par un opérateur à un système informatique peut sembler exagéré. Mais, c’est absolument PRIMORDIAL. Une division par zéro, l’extraction d’une racine carrée d’un nombre négatif, générer une fréquence « négative » sont autant d’exemples de valeurs « incohérentes » qui font « planter » un logiciel. Un chapitre pour parer ces incidents … c’est pratiquement du gratuit !

La saisie des échantillons.

Ressemblant à s’y méprendre à celle de l’oscilloscope numérique à mémoire, elle en diffère pourtant par deux aspects importants. Le premier est relatif à la SYNchronisation. Dans le cas de l’oscilloscope, c’est le signal analysé qui rendait PICOLAB esclave de ses variations. Dans le cas du WOBULATEUR, c’est ce dernier qui prend l’initiative lorsque l’opérateur clique sur FC+ court déclenchant une séquence de numérisations. Les cas où le circuit électronique doive être synchronisé par un signal externe du WOBULATEUR sont extrêmement rares, vous n’y serez probablement jamais confrontés. Toutefois, pour vraiment parer toutes les éventualités, une impulsion « positive » d’une milliseconde est générée sur la sortie binaire D10. Le front descendant de cette dernière enchaine ensuite sur la génération des tonalités.
Le deuxième aspect résulte du type de mesure effectué : On injecte une onde la plus sinusoïdale possible à l’entrée d’un système électronique, et l’on observe le signal qui sort de ce dernier. Encore faut-il que ce circuit puisse avoir « vu » au moins trois ou quatre alternances pour « stabiliser » son comportement. C’est pour cette raison que les signaux sont échantillonnés en appliquant chaque fréquence durant 30mS. Après ce laps de temps on échantillonne le CAN de l’ATmega328. Cette durée de 30mS par échantillon a été déterminée expérimentalement pour minimiser au maximum le temps de saisie d’une courbe tout en restant compatible avec l’électronique de redressement, car multiplié par 120 on aboutit déjà à une séquence d’environ 3,6 secondes. Pour échantillonner un spectre c’est encore tolérable, mais nettement plus deviendrait proprement indigeste. Pour prévenir l’opérateur que PICOSYNTHÉ est en train de numériser, la LED jaune s’allume durant tout le processus qui affiche simultanément le texte > NUMERISATION.

L’intégration du WOBULATEUR dans le programme complet.

Possible ou trop volumineux notre gros bébé ?
De loin le plus simple pour apporter une réponse objective à une telle question, c’est encore d’essayer. Comme dans le démonstrateur les séquences relatives à la nouvelle fonction sont bien délimitées, il suffit de les recopier dans P31_Complet_avec_Wobulateur.ino qui va subir le diagnostic du compilateur. Si vous oubliez d’augmenter la valeur de la directive #define NB_Options à 8 ou de déclarer les variables propres à la nouvelle fonction, le compilateur saura vous y faire penser. Allez … compilez !
Le couperet tombe, impitoyable. PROUIIIIITTTCCCHHHhhhhhhhh … ça passe !
La bonne nouvelle, c’est que le WOBULATEUR est un gros bébé qui occupe 2886 octets de programme. C’est le plus volumineux nouveau-né du programme complet. Il s’accorde l’exclusivité de 134 emplacements en mémoire dynamique. Pour une fonction aussi complexe qui émule à la fois un oscilloscope et pilote un synthétiseur de fréquences, la facture n’est pas du tout catastrophique.
La mauvaise nouvelle, c’est qu’après avoir pratiqué toutes une tripoté d’optimisations, bien que le LOGO orne merveilleusement l’ouverture du programme, il reste encore 25% de place disponible pour du code programme, et la RAM dynamique n’est utilisée que sur 23% de son étendue. C’est une calamité, tous ces octets inutilisés dans l’ATmega328, on ne peut tolérer décemment un tel gaspillage. Nous nous trouvons dans l’obligation morale de trouver une application de plus à PICOSHYNTÉ alors que nous avons généré tout ce qui est possible de l’être.
Ce coup fatal à ruiné notre bonne humeur, gâché l’intégration si facile du WOBULATEUR dans le programme complet. Notre moral sombre dans une profondeur abyssale et ce n’est pas cette salamandre qui s’impose à presque toutes les pages du didacticiel qui va nous faire voir la vie en rose. Bref, on est dans la mouise la plus totale, c’est une catastrophe. Il faut absolument réagir …

>>> Page suivante.

Laisser un commentaire

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