Sous
prétexte d'une illusoire sécurité, Windows XP bloque
le fonctionnement de nombreux logiciels. De nouvelles versions de nos logiciels
sont donc proposées sur ce site. Mais le pilotage des cartes Candibus
pose problème, car XP interdit certaines fonctions Assembleur (In,
Out, Cli, Sti...). A suivre... Question de Ring 0...
Note importante : Le programme de MPI, BO n° 6 du 31
Août 2000 indique dans Partie thématique (environ 18 heures)
: Elle pourra être l'occasion ...d'utiliser quelques notions de programmation
(algorithme élémentaire : analyse d'un problème simple,
instruction conditionnelle alternative ; langage de programmation associé
au tableur utilisé en classe.).
Vous trouverez quelques pages plus loin des informations concernant
l'usage d'un tableur, destinées aux scientifiques, avec des exemples
d'applications.
Je suggère cependant de proposer aux bons élèves
la réalisation, à l'aide de Delphi, de petits logiciels d'acquisition
personnalisés. Cela n'est possible que si Delphi est complété
par une bibliothèque ou un composant
pilotant simplement les cartes d'acquisition dont vous disposez.
Ce site propose cela pour les cartes Candibus ; il serait souhaitable
qu'une collaboration s'instaure entre collègues, pour que d'autres
composants, pilotant d'autres cartes soient réalisés.
Vous pourrez modifier les exercices proposés (qui seront affinés
au fur et à mesure des expérimentations), par exemple en
remplaçant la réalisation de logiciels sur mesure, par l'emploi
de logiciels d'acquisition commerciaux.
Souvent, une carte d'acquisition comporte des ports logiques. Un
port correspond à huit bornes qui peuvent être configurées
soit en entrée, soit en sortie. Sur chaque borne en sortie, on peut
recueillir une tension de 0 ou 5 V, correspondant à une variable
logique valant 0 ou 1. La carte Candibus comporte trois ports appelés
A, B et C.
Le composant PhyJiC pour Delphi pilotant cette carte configure automatiquement
le port A en sortie et B et C en entrée. D'autres configurations
sont possibles (voir l'aide en ligne ou d'autres pages de ce site.).
Si on écrit, sur le port A configuré en sortie, le nombre,
de type Byte ou octet, 255, toutes ses bornes seront à une tension
de 5 V. Si des diodes électroluminescentes y sont raccordées
(à l'aide d'amplificateurs), elles seront allumées.
Notions abordées : État logique, port, liaison ordinateur
- composants extérieurs.
Rédigez en Delphi un programme allumant la diode électroluminescente
3 branchée sur le port A ; testez votre réalisation.
Remarque : Souvent en informatique, la numérotation commence
à zéro. La diode 3 est sans doute la quatrième.
Réponse : Voici son code source, ainsi que celui des exercices 2, 3 et 5 (de la page suivante).
Applications : commande de divers systèmes, par exemple, coupure du courant alimentant un électroaimant, ce qui permet de libérer une bille en acier, afin d'étudier la chute de celle-ci. ATTENTION : Si vous commandez des circuits à caractère inductif (bobine, moteur, voir programme de terminale), ceux-ci peuvent, lors de l'annulation du courant qui les traverse, engendrer une surtension capable de détruire votre ordinateur. Prévoyez une protection par condensateur ou diode.
Notions abordées : tirage d'un nombre au hasard, masque,
fonctions logiques ET, OU appliquées à un octet, variable
globale.
Dans un premier temps, votre programme doit allumer les huit diodes
électroluminescentes au hasard. Un clic sur un bouton doit allumer
la diode 3 (qu'elle soit éteinte ou allumée avant cela) ;
un clic sur un autre bouton doit la forcer à s'éteindre.
Tout cela sans modifier l'état allumé ou éteint des
autres diodes.
Réponse : Voici son code source.
Applications : Commande indépendante d'un circuit, sans modifier l'état des autres, paramétrage des composants internes d'un ordinateur, voir par exemple dans le code source du composant fourni sur ce site pour piloter les cartes Candibus, comment est réglée l'horloge n° 2 du PC.
Notions abordées : Instruction conditionnelle alternative,
test logique et l'éternel problème de l'informatique : comment
ne pas sortir des intervalles de valeurs prévus.
Réalisez un chenillard, allumant les diodes l'une après l'autre. Vous emploierez un composant Timer, utiliserez son événement OnTimer. Vous aurez aussi besoin d'une déclaration de variable du style : Const x : Byte = 1. Lorsque tout fonctionnera comme attendu, vous ajouterez deux boutons, marche et arrêt, qui agiront sur la propriété Enabled du Timer, pour le mettre en service ou l'arrêter.
Réponse : Voici son code source.
Cette carte comporte 3 ports logiques, dont voici les noms et les adresses
:
Chaque port est constitué de 8 cases (1 case = 1 bit, 8 bits = 1 octet, ou Byte), par exemple pour le port A :
|
Chaque port doit être configuré en entrée ou en
sortie ; cela se fait en écrivant un nombre, octet ou Byte, à
l'adresse de configuration, $28F.
|
Configurez les ports en entrée ou en sortie ; écrire ou lire un byte dans le port. Pour cela, votre version de Delphi, 3, 4 ou 5 est dotée d'un composant pilotant les cartes Candibus. Ce composant est programmé en langage d'Assembleur, dans Delphi. Il vous propose les procédures ou fonctions : Configurer (par défaut existe une configuration automatique, lisible dans l'inspecteur d'objets), EcrireDansA (ou B ou C), LireA (ou B ou C). Cela évite d'éventuelles erreurs d'adresses qui en Assembleur peuvent être fatales. Il faut naturellement placer sur votre fenêtre Form, un composant de la classe TPhyJiC, composant non visuel, pilotant la carte Candibus. Ce composant propose beaucoup d'autres procédures et fonctions dont la description figure dans son aide en ligne. |
Candi analogique comporte deux entrées, la voie 1 (borne verte) et la voie 2 (borne rouge). La tension appliquée entre une entrée et la masse (borne noire) est convertie par un convertisseur analogique numérique. Une tension réelle devient un nombre entier écrit sur 12 bits, aux adresses $280 (et $281) pour la voie 1, et 282 pour la voie 2. L'entier est converti en un réel approché, par le composant TPhyJiC. La carte est paramétrée pour convertir sur 12 bits toute tension comprise entre -5,12 V et +5,12 V. Un montage à base de diodes Zener protège les entrées contre les petites erreurs de branchement. |
Les 2 voies ne fonctionnent qu'en entrée. Il est donc inutile de les configurer. Pour lancer l'échantillonnage suivi d'une conversion analogique -> numérique, il faut écrire un nombre (255) à l'adresse $280 ou $282. Le composant TPhyJiC vous propose plusieurs méthodes : Lancer l'échantillonnage, attendre un peu, puis lire le résultat de la conversion, par LancerEchantNumVoie1 (ou Voie2), une boucle destinée à perdre du temps, puis LireVoie1 qui est une fonction. Une méthode plus simple consiste à faire AcquerirMoyenne(1, 15700) qui lance l'échantillonnage, fait une mesure, et en calcule la moyenne disponible dans TensionVoie1 (ou Voie2). En faisant la moyenne d'un plus grand nombre de points de mesure, il est possible d'améliorer les résultats. Une autre possibilité existe, Acquerir(256, 15700) qui remplit dans cet exemple un tableau, avec 256 mesures effectuées à 15700 Hz. Cela a été fait pour pallier à l'affligeante médiocrité de la gestion de l'horloge interne du PC, par Windows (pas plus de 20 Hz et au moins 5 % d'erreur sur une seconde). |
L'exemple de commande vocale (une véritable
commande vocale, avec reconnaissance des mots prononcés), proposé
page 1 de ce chapitre, peut être considéré comme à
la limite de ce programme, compte tenu de sa difficulté.
Il est éprouvant pour le professeur, car la chaîne de
commande est complexe, ce qui multiplie les risques de panne.
Il plaît beaucoup aux élèves.
A vous de voir.
Pour 500 points de mesure, choisissez une durée de mesure
de 10 secondes. Quelle est la période d'échantillonnage ?
Raccordez un tuyau souple à la sonde, lancez une acquisition par
F10, faites varier la pression à la bouche et assurez-vous que tout
fonctionne.
Pour 500 points de mesure, choisissez une période d'échantillonnage
de 20 ms. Vous constatez des fluctuations sur
la courbe. A quoi sont-elles dues ? Estimez leur valeur en volt. A quelle
valeur de variation de pression correspondent-elles ? Comment pourriez-vous
diminuer les erreurs de mesure dues à ces fluctuations ?
// Réponse partielle : Les parasites proviennent
du capteur, des fils de liaison, de la carte d'acquisition. Ils peuvent
être diminués en blindant le montage et les fils, en torsadant
les fils, en envoyant sur la carte d'acquisition deux tensions opposées,
fonctions affines de la pression (en supposant que la carte échantillonne
deux voies simultanément)... Choisir une sensibilité d'entrée
de la carte d'acquisition plus grande, calibre -2,5 V +2,5 V.
En anticipant sur la discussion suivante, nous allons calculer la
tension moyenne mesurée, en déduire la pression et afficher
celle-ci.
Calcul | tensionMoy = moy(EA0)
press = 1000 * tensionMoy (choisissez la bonne valeur des coefficients)
T -> Commentaire | La pression est de {press}
hectopascals
Une technique simple d'amélioration de la sensibilité
de mesure consiste à faire la moyenne de plusieurs mesures.
Cette méthode ne permet pas de supprimer les erreurs systématiques
de mesure. En effet, supposez que le capteur soit mal étalonné
(mal, ou pas parfaitement) ; la multiplication des mesures n'y changera
rien.
Pour vous en persuader, notez sur votre compte-rendu les valeurs de
la pression atmosphérique données par l'ensemble des capteurs
utilisés en classe. Que proposez-vous pour améliorer la situation
?
// On pourrait faire la moyenne des indications de
tous les capteurs, ce qui suppose qu'ils ont été correctement
étalonnés, avec une fluctuation autour de la bonne valeur.
On pourrait aussi effectuer une mesure comparative, à l'aide d'un
baromètre à mercure.
Les mesures fluctuent autour de la "bonne" valeur, à cause
de différents "parasites". Il apparaît assez naturel qu'en
calculant la moyenne des mesures successives, nous pourrons diminuer l'effet
de ces "parasites".
Des études mathématiques que nous n'aborderons pas montrent
que si les causes d'erreur sont en nombre infini, chacune ayant une influence
faible, alors la répartition des résultats de mesure, autour
de la "bonne" valeur, suit une loi mathématique connue (loi de Gauss,
ou loi de Poisson...). Nous en resterons là.
La fluctuation des mesures autour de leur valeur moyenne est donnée
par s, l'écart quadratique moyen ou écart-type.
// Racine carrée de la moyenne des carrés
des écarts à la moyenne. Usage de la calculatrice.
Quelle est dans cette salle de travail pratique la cause principale
de parasites électromagnétiques ?
Quelle est la fréquence de la tension électrique sinusoïdale
délivrée par EDF ? Quelle est sa période ? Que se
passe-t-il si les mesures s'effectuent pendant un nombre entier de périodes
du courant du secteur, et si on en fait la moyenne ?
Vous devrez effectuer les mesures demandées et compléter
le tableau suivant, puis réfléchir aux résultats obtenus.
nombre de mesures | période d'échantillonnage | durée de mesure | tension moyenne en V | écart de tension en V | Sur 10 séries de mesures | moyenne en V | écart en V |
100 | 20 ms | ||||||
100 | 10 ms | ||||||
10000 | 20 ms |
Vous devez constater que les mesures individuelles fluctuent beaucoup
plus autour de leur moyenne, que ces 10 moyennes autour de leur propre
moyenne. Evaluez l'amélioration.
Les mesures s'étalant sur une durée de 20 ms (une période
de la tension du secteur EDF) doivent moins fluctuer que celles s'étalant
sur 10 ms.
A quelle variation d'altitude correspondent les fluctuations observées
précédemment ?
Trouvez la formule permettant d'afficher la variation d'altitude du
capteur, par rapport à une position de référence.