“Composants électroniques modernes” Stage “Composants électroniques modernes” Lycée Joffre Montpellier ( 5 et 12 janvier 2005 ) Lycée Clos Banet Perpignan ( 16 et 23 mars 2005 ) Animateur : Christian BISSIERES ( Professeur de Physique Appliquée ) Responsable pédagogique : Jean-Claude REBEYROLE ( IA IPR )
Mise en œuvre de capteurs de température à sortie numérique directe. Programme du stage Mise en œuvre de capteurs de température à sortie numérique directe. Utilisation d'un potentiomètre à commande numérique.
Le capteur DS 1621 Le capteur "2 wire" DS 1621 relié au port série. ( pilotage avec Excel )
Le fichier Excel relatif à la mesure de température
Le capteur "1 wire" DS 1820 relié au port série. Le capteur DS 1820 Le capteur "1 wire" DS 1820 relié au port série.
Le logiciel fournit avec le capteur DS1820 (lecture de la température)
Le capteur autonome"1 wire" DS 1921. Le capteur DS 1921 Le capteur autonome"1 wire" DS 1921.
Le logiciel fournit avec le capteur DS19B21 (programmation d'une acquisition automatique et autonome)
Le potentiomètre numérique DS 1803 relié au port série. Borne "10k" position 255 Curseur position 0 à 255 Borne "0k" position 0 Le potentiomètre numérique DS 1803 relié au port série.
Le programme autonome de pilotage du potentiomètre réalisé avec DELPHI
Déroulement du stage 1. Utilisation du port série RS 232 pour communiquer avec les composants 1. 1. Utiliser Visual Basic (présent avec Excel) pour faire de la programmation sous Windows. 1. 2. Savoir déclarer et utiliser, avec Visual Basic, les fonctions et procédures d’une DLL donnée. 1. 3. Utiliser les fonctions de pilotage du port série avec la DLL “port.dll” pour piloter une maquette de feux tricolores.
2. Les capteurs numériques de température 2. 1. Présentation générale des capteurs à sortie numérique directe. 2. 2. Mise en œuvre du capteur "2 wire" DS1621 et pilotage avec Excel. 2. 3. Mise en oeuvre du capteur "1 wire" DS1820 avec logiciel spécialisé. 2. 4. Mise en oeuvre du capteurs autonôme "1 wire" DS1921 avec logiciel spécialisé.
3. Le potentiomètre numérique 3. 1. Présentation générale des potentiomètres numériques. 3. 2. Mise en œuvre du potentiomètre numérique DS1803 avec Excel. 3. 3. Réalisation d'une application Windows avec Delphi pour piloter le potentiomètre.
1.1. Utilisation de Visual Basic (VBA) 1- Basculer vers la fenêtre Visual Basic Editor Le travail à faire est indiqué par . Le code à écrire ou déjà écrit est indiqué en vert et les commentaire sont précédés par le caractère ' . Pour basculer entre la feuille Excel et la fenêtre Visual Basic il faut faire Alt + F11. Pour se placer dans la fenêtre Visual Basic Editor, effectuer les manipulations ci-dessous: Démarrer Excel. Sélectionner le menu Outils / Macro / Visual Basic Editor. Dans la fenêtre Projet – VBA Project, faire un double-clic sur Feuil1. La fenêtre où sera inséré le code du programme relatif à la feuille 1 apparaît sur la droite de l’écran :
1.1. Utilisation de Visual Basic (VBA) 2- Remplir des cellules directement depuis VBA Il faut tout d’abord donner un nom au programme : Dans la fenêtre relative aux programmes de la feuille 1, insérer le code : Sub sinusoide() 'début et nom du programme End Sub 'fin du programme Entre Sub et End Sub, insérer le code suivant: Cells(2, 2) = "Tension(Volts)" 'texte dans cellule B2 Cells(4, 2) = 12 'valeur 12 dans cellule B4 Cells(5, 2) = 5 'valeur 5 dans cellule B5 Appuyer sur le bouton Exécuter, sélectionner le programme "Sub sinusoide()" (macro) à exécuter et le résultat sera visible dans la feuille Excel (Faire Alt + F11 pour basculer de Excel vers Visual Basic). Résultat
1.1. Utilisation de Visual Basic (VBA) 3- Tracer une sinusoïde réglable en amplitude et en fréquence Nous allons remplir automatiquement 101 points (temps et valeur) d'un sinusoïde d'amplitude et de fréquence déterminée. Modifier le code relatif à Sub sinusoide() de la façon suivante : Sub sinusoide() 'début et nom du programme Cells(1, 1)="t (ms)" 'préparation du tableau Cells(1, 2)= "sinus (volt)" pi = 3.14159 'définition des constantes tmax = 0.001 amplitude = 5 frequence = 2000 For n = 0 To 100 'debut de la boucle des 101 points t = tmax / 100 * n 'découpage du temps entre 0 et tmax Cells(n + 2 , 1) = t * 1000 'affichage du temps sinus = amplitude * Sin(2* pi * frequence * t) 'création et affectation de la variable sinus Cells(n + 2, 2) = sinus 'affichage des valeurs de la variable sinus Next n 'retour ou fin de la boucle End Sub 'fin du programme Exécuter le programme Sub sinusoïde et vérifier le résultats dans Excel
3- Tracer une sinusoïde réglable en amplitude et en fréquence (suite et fin) Nous allons améliorer le programme en offrant la possibilité de régler l'amplitude et la fréquence à l'aide de barres de défilement. Revenir à Excel et faire Affichage / Barres d’outils / Boite à outils contrôles. Sélectionner le contrôle Barre de défilement et le dessiner horizontalement sur la feuille (amplitude). Faire un clic droit sur la barre pour afficher la fenêtre propriétés et les modifier (Min : 0 ; Max : 12). Dessiner aussi la barre de défilement relative à la fréquence (Min : 500 ; Max : 5000). Faire un double clic sur la 1° barre de défilement; on doit maintenant se retrouver dans VBA avec un nouveau programme Scrollbar1_Change. Ecrire simplement le code sinusoide à l’intérieur du programme pour appeler la programme sinusoide à chaque changement de position du curseur. Refaire le pour la 2° barre de défilement. Il faut modifier légèrement le code du programme sinusoïde. Pour tester le programme, il faut désactiver le mode "création" qui a été activé pour créer les contrôles. Partie du programme modifiée
1.2. Déclaration et utilisation d'une DLL 1- Pourquoi utiliser une DLL ? Pour piloter les montages proposés, il nous faut des fonctions qui exécutent les tâches suivantes : Ouvrir le port "COM" ( COM1 , COM2 , … au choix ). Refermer le port "COM" après usage. Commander les 3 lignes de sorties du port série ( 0 logique -11V et 1 logique +11V ). Lire l’état des 4 lignes d’entrée du port série ( tension < 1V 0 logique et tension > 2V 1 logique ). Générer des fonctions temporelles ( compteurs et temporisations ). Ces fonctions ne sont pas disponibles dans VBA, nous allons donc utiliser les fonctions suivantes proposées par "port.dll" : OPENCOM Exemple : OPENCOM(" COM2 , 1200 ,N , 8 ,1 ") permet d'ouvrir "COM2" avec 1200 bauds, pas de bit de parité, 8 bits de données et 1 bit de stop. CLOSECOM permet de refermer le dernier port ouvert. DTR, RTS et TXD commande des lignes de sortie Exemple : DTR 1 permet de mettre à "1" la ligne de sortie DTR (+11V). CTS, DSR, RI, DCD Exemple : lecture = DSR place la valeur DSR (0 ou 1) dans la variable lecture. DELAY Exemple : DELAY 100 introduit une pause de 100ms dans le programme. DELAYUS même fonction que DELAY mais en microsecondes.
1- Pourquoi utiliser une DLL ? (suite et fin) TIMEINIT Mise à zéro et démarrage du compteur des millisecondes. TIMEREAD Lecture du compteur des millisecondes. Exemple 1 : While TIMEREAD < 1000 Wend la boucle WHILE .. WHEND reste "bloquée" tant que le compteur n'a pas dépassé 1000 ms. Exemple 2 : For n = 1 to 10 WHILE TIMEREAD < n*100 Wend Cells ( n , 1 ) = Mesure Next n on mesure 10 points avec un intervalle de 100ms et on place les points dans le tableur. TIMEINITUS et TIMEREADUS Mêmes fonctions que TIMEINIT et TIMEREAD mais en microsecondes. Remarques : Pour des déclenchements temporels (acquisitions), il ne faut pas utiliser les fonctions DELAY ou DELAYUS car elles ne dépendent pas d'un compteur, elles introduisent uniquement des "pauses". Le compteur continue à "compter" même après une instruction TIMEREAD. REALTIME Cette fonction rend le programme prioritaire par rapport à toutes les tâches que gère Windows. Exemple : REALTIME True activation de la priorité temporelle.
1.2. Déclaration et utilisation d'une DLL 2- Déclaration des fonctions de la DDL (port.dll) Important : La DLL devra être placée dans le répertoire du programme ou dans le dossier Windows\System. Avant de faire appel aux fonctions proposées par la DLL, il faut indiquer à notre programme que l'on va utiliser ces fonction. Voici le code qu'il faudra inscrire au début du programme pour déclarer les fonctions de la DLL qu'on vient de décrire : Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer Declare Sub CLOSECOM Lib "Port" () Declare Sub DTR Lib "Port" (ByVal b%) Declare Sub RTS Lib "Port" (ByVal b%) Declare Sub TXD Lib "Port" (ByVal b%) Declare Function CTS Lib "Port" () As Integer Declare Function DSR Lib "Port" () As Integer Declare Function RI Lib "Port" () As Integer Declare Function DCD Lib "Port" () As Integer Declare Sub DELAY Lib "Port" (ByVal b%) Declare Sub TIMEINIT Lib "Port" () Declare Sub TIMEINITUS Lib "Port" () Declare Function TIMEREAD Lib "Port" () As Long Declare Function TIMEREADUS Lib "Port" () As Long Declare Sub DELAYUS Lib "Port" (ByVal l As Long) Declare Sub REALTIME Lib "Port" (ByVal i As Boolean)
1.2. Déclaration et utilisation d'une DLL 3- Réalisation d'un programme de feux tricolores On va utiliser une petite plaque de test pour connecter une LED rouge sur RTS, une LED orange sur DTR et une LED verte sur TXD. Remarque : on peut brancher directement une LED entre une sortie du port série et la masse car les sorties possèdent une résistance interne de 450 environ ( ce qui donnera 20mA pour la diode ). La déclaration des fonctions peut se faire "une fois pour toutes" en chargeant un module qui contient le Code relatif aux déclarations. Ouvrir un nouveau fichier Excel. Faire un clic droit dans la fenêtre project VBAProject et sélectionner Importer un fichier… . Le fichier se nomme port_dll.bas et est placé dans le répertoire de travail du stage. Une fois le fichier importé, faire un double clic dessus et constater qu'il contient le code relatif aux déclarations. Remarque : La DLL contient aussi d'autres fonctions ( carte son, port de jeux …). Résultat Clic droit
3- Réalisation d'un programme de feux tricolores (suite) Revenir au classeur Excel (Alt+F11) et faire Affichage / Barre d'outils / boite à outils Contrôles. Placer le Bouton de commande et la Barre de défilement comme indiqué ci-dessous (les autres composants ne sont que des "dessins"): Barre de défilement Bouton de commande
3- Réalisation d'un programme de feux tricolores (suite et fin) Faire un double clic sur le bouton de commande, on se retrouve alors dans VBA avec le programme vide CommandButton1_Click (vide) à compléter entre Private Sub et End Sub: Private Sub CommandButton1_Click() OPENCOM ("COM2,1200,N,8,1") 'Initialisation port com RTS 1 'allumage du rouge DTR 0 TXD 0 tempo = ScrollBar1.Value * 100 'tempo en 10° de secondes -> ms TIMEINIT For n = 1 To 5 '5 cycles d'allumage des feux tricolores While TIMEREAD < (10 * n - 5) * tempo 'attente 5*tempo Wend RTS 0 DTR 0 TXD 1 'vert While TIMEREAD < (10 * n - 1) * tempo 'attente 4*tempo Wend RTS 0 DTR 1 'orange TXD 0 While TIMEREAD < (10 * n) * tempo 'attente 1*tempo Wend RTS 1 'rouge DTR 0 TXD 0 Next n CLOSECOM End Sub Revenir à Excel, désactiver le mode création, brancher la maquette et tester le programme.
2. 1. Les capteurs de température numériques Généralités La mesure moderne de température se fait à l'aide de capteurs à sortie numérique directe. La transmission de données numériques est fiable car peu sensible aux parasites. Le capteur donne sa mesure sous forme d'un nombre binaire transmis en série. Il faut donc respecter le protocole de communication avec le composant pour récupérer la mesure avec du matériel numérique (ordinateur ou microcontrôleur). Le montage électronique autour du composant est en général très réduit (schéma ci-dessous): Capteur Dallas DS820 relié à une ligne d'un microcontrôleur Capteur Dallas DS1621 relié au port série
2. 2. Le capteur "2 wire" DS1621 1- Description Les caractéristiques générales de ce capteur sont les suivantes : Boîtier DIL 08 ( 4 et 8 : alimentation; 1 et 2 : communication; 5, 6 et 7 : adresse physique et 3 : thermostat ) Plage de mesure de -55°C à 125°C avec une précision de 0,5°C (1 mesure par seconde). Protocole de communication sur 2 fils (2 wire) nommé protocole I2C. Format de mesure de température sur 9 bits. Possibilité de brancher 8 capteurs simultanément.
2. 2. Le capteur "2 wire" DS1621 1- Description (suite et fin) Les capteur transmet la mesure à l'aide de 2 octets : Seul le bit de poids fort du premier octet contient une information (+1/2°C) Le deuxième octet représente la mesure en °C entiers (si négatif : complément à 2). Le tableau ci-dessous donne quelques exemples de conversion. 0 1
Diodes zener 5,1V (+11V 5V et -11V 0V) 2. 2. Le capteur "2 wire" DS1621 2- Liaison au port série RS232 Le capteur DS1621 sera connecté au port série du PC ce qui permettra de dialoguer avec le capteur mais aussi de l'alimenter. Le Schéma ci-dessous détaille le branchement de 2 capteurs DS1621 sur le port série RS232 : La ligne de sortie TXD sera reliée à l'entrée du régulateur 5V (alimentation du capteur). La ligne de sortie RTS sera reliée à l'horloge SCL. La ligne de sortie DTR sera reliée à SDA pour l'envoi de données. La ligne d'entrée CTS sera reliée à SDA pour la réception de données. Régulateur Diodes zener 5,1V (+11V 5V et -11V 0V) Capteur 1 d'adresse "000" Capteur 2 d'adresse "001"
2. 2. Le capteur "2 wire" DS1621 2- Liaison au port série RS232 (schéma)
2. 2. Le capteur "2 wire" DS1621 2- Liaison au port série RS232 (implantation)
2. 2. Le capteur "2 wire" DS1621 2- Liaison au port série RS232 (suite et fin) L'image ci-dessous représente la carte électronique de liaison du capteur avec le port série RS232. On repère facilement le capteur fixe (capteur 1) et le capteur déporté (capteur 2). Les deux capteurs sont connectés sur les mêmes lignes SCL-SDA. Capteur 1 (fixe) Capteur 2 (déporté)
2. 2. Le capteur "2 wire" DS1621 3- Pilotage directement avec Excel (présentation) Classeur Excel en "attente" de paramétrage de l'acquisition : Bouton d'affichage de la fenêtre de paramétrage des mesures
2. 2. Le capteur "2 wire" DS1621 3- Pilotage directement avec Excel (présentation) Affichage de la fenêtre de réglages et saisie des paramètres : Zones de saisie de paramètres Bouton de départ des mesures
2. 2. Le capteur "2 wire" DS1621 3- Pilotage directement avec Excel (présentation) Acquisition terminée : Tableau rempli automatiquement Attente d'une nouvelle acquisition Graphe relatif aux mesures
2. 2. Le capteur "2 wire" DS1621 4- Présentation du protocole I2C L'objectif de ce stage n'étant pas l'étude détaillée du protocole I2C, nous nous limiterons aux seules commandes utiles pour dialoguer avec le composant. Nous allons devoir envoyer des commandes au capteur mais aussi lire les données venant du capteur. L'électricité du bus I2C Le bus I2C comprend deux "fils", un pour l'horloge SCL et un pour la transmission des données SDA. Dans notre cas, le maître (l'ordinateur) génère le signal d'horloge et envoie un ou plusieurs octets vers l'esclave (capteur). Ensuite l'esclave transmet un ou plusieurs octets vers le maître qui génère toujours l'horloge.
2. 2. Le capteur "2 wire" DS1621 4- Présentation du protocole I2C (suite) Exemple d'écriture d'un octet Au repos, les lignes du bus sont au niveau "1" soit 5V. Le maître signale le début de la transmission par une condition de départ (start) : SCL doit être à "1" et SDA passe de "1" à "0", ensuite SCL passe à "0". Ensuite, le maître place le bit de poids fort de l'octet sur SDA ("0" ou "1") et force SCL à "1" puis replace SCL à "0" (la donnée doit être stable tant que SCL est à "1"). De la même manière, le maître place les 7 autres bits de l'octet. Après avoir transmis le dernier bit, le maître replace SDA à "1" et l'esclave accuse réception de l'octet en forçant SDA à 0. Le maître place SCL à "1" puis à "0" pour lire ce bit nommé "ACKnowlage" (ce neuvième coup d'horloge avec lecture ou non du bit ACK est obligatoire). Le maître signale la fin de la transmission par une condition d'arrêt (stop) : SCL passe à "1" et SDA passe de "0" à "1", la ligne se retrouve ainsi au repos. Le chronogramme ci-dessous résume l'écriture d'un octet avec le neuvième bit ACK.
2. 2. Le capteur "2 wire" DS1621 4- Présentation du protocole I2C (suite) Exemple d'écriture d'une donnée Pour écrire un ou plusieurs octets dans l'esclave, il faut respecter le protocole suivant : Le maître transmet l'octet d'adresse de l'esclave (octet dont le bit de poids faible est "0" pour une écriture) puis attend la confirmation ACK (9° coup d'horloge). Le maître transmet le premier octet avec attente confirmation ACK. Les éventuels autres octets seront transmis à la suite. Le chronogramme ci-dessous résume la procédure d'écriture d'une donnée (un octet) :
2. 2. Le capteur "2 wire" DS1621 4- Présentation du protocole I2C (suite) Exemple de lecture d'une donnée La lecture d'un ou plusieurs octets émis par l'esclave se fait de la manière suivante : Le maître transmet l'octet d'adresse de l'esclave (octet dont le bit de poids faible est "1" pour une lecture) puis attend la confirmation ACK (9° coup d'horloge). L'esclave place l'octet à transmettre en maintenant les "bits" stables durant le niveau haut de l'horloge SCL cadencée par le maître. Pour recevoir d'autres octets, c'est maintenant au maître d'accuser la réception du 1° en mettant SDA à "0" lors du niveau haut de SCL. Si le maître ne veut pas lire d'autres octets, il met SDA à "1" lors du niveau haut de SCL puis place la condition d'arrêt. Le chronogramme ci-dessous illustre la procédure de lecture d'une donnée (un octet) :
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel Utilisation de fonctions I2C déjà programmées Pour le protocole I2C, nous allons utiliser des fonctions "préprogrammées" qui se trouvent dans le module I2C_RS232.bas qu'il faudra importer. Examinons ces fonctions : I2CInit Sub I2CInit() RTS 1 'SCL = 1 (ligne SCL au repos) DTR 1 'SDA = 1 (ligne SDA au repos) End Sub Depart Sub Depart() RTS 1 ' SCL = 1 (mise au repos du bus, au cas où ...) DTR 1 ' SDA = 1 DTR 0 ' SDA = 0 (passage de "1" vers "0" et RTS reste à 1) End Sub Arret Sub Arret() RTS 1 ' SCL = 0 DTR 0 ' SDA = 0 DTR 1 ' SDA = 1 (passage de "0" vers "1" et RTS reste à 1) End Sub
Utilisation de fonctions I2C déjà programmées (suite) Sortie Function Sortie(Valeur As Byte) As Boolean Sortie = True ' Initialisation de l'erreur de transmission ValeurBit = 128 ' traitement du bit de poid fort en 1° RTS 0 For n = 1 To 8 If (Valeur And ValeurBit) = ValeurBit Then ' masque de sélection des bits DTR 1 ' SDA=1 transmission d'un "1" Else DTR 0 ' SDA=0 transmission d'un "0" End If RTS 1 ' SCL=1 DELAYUS 10 ' temporisation 10µs RTS 0 ' SCL=0 ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur Next n DTR 1 ' SDA=1 RTS 1 ' SCL=1 DELAYUS 10 ' Boucle de temporisation If CTS = 1 Then Sortie = False ' si SDA=1 pas de confirmation du récepteur RTS 0 ' SCL=0 End Function
Utilisation de fonctions I2C déjà programmées (suite) Lecture Function Lecture() As Byte DTR 1 ' SDA="1" ValeurBit = 128 ' traitement du bit de poids fort en 1° Valeur = 0 ' initialisation variable Valeur For n = 1 To 8 RTS 1 ' SCL="1" DELAYUS 10 ' temporisation 10µs Valeur = Valeur + ValeurBit * CTS ' lecture CTS transmis par l'esclave RTS 0 ' SCL="0" ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur Next n Lecture = Valeur ' affectation de l'octet reçu à la fonction ' SCL reste à "0" End Function
Utilisation de fonctions I2C déjà programmées (suite) Confirmer (attente d'un autre octet) Sub Confirmer() DTR 0 ' SDA = "0" RTS 1 ' SCL = "1" DELAYUS 10 ' Attente 10µs RTS 0 ' SCL = 0 End Sub Sans Confirmer (pas d'autre octet à lire) Sub SansConfirmer() DTR 1 ' SDA = "1" RTS 1 ' SCL = 1 DELAYUS 10 ' Attente 10µs DTR 0 ' préparation condition d'arrêt RTS 1 ' préparation condition d'arrêt
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite) Commandes pour la communication avec le capteur Pour communiquer avec le capteur, il faut utiliser les commandes suivantes : Adressage des capteurs en écriture (dernier bit à "0") Sortie (&H90) ' capteur 1 Sortie (&H92) ' capteur 2 Adressage des capteurs en lecture (dernier bit à "1") Sortie (&H91) ' capteur 1 Sortie (&H93) ' capteur 2 Registre de configuration Sortie (&HAC) ' écriture dans le registre de configuration Sortie (&H02) ' conversion en continu Début des conversions Sortie (&HEE) ' Demande de conversions Demande lecture Sortie (&HAA) ' demande de lecture d'une mesure
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite) Préparation du fichier Excel Le travail à faire est indiqué par . Le code à écrire ou déjà écrit est indiqué en vert et les commentaire sont précédés par le caractère ' . Pour basculer entre la feuille Excel et la fenêtre Visual Basic il faut faire Alt + F11. Ouvrir un nouveau fichier Excel , faire afficher la "boite à outils contrôles" et placer un "bouton de commande" sur la feuille. Faire un double clic sur le bouton pour se retrouver dans la fenêtre VisualBasic. Le programme relatif au clic sur le bouton doit être complété et apparaître ainsi : Private Sub CommandButton1_Click() UserForm1.Show 'affichage de la fenêtre End Sub Il faut maintenant créer la fenêtre UserForm1 en faisant un clic droit dans cette zone et sélectionner Insersion / UserForm. Revenir dans Excel et tester l'affichage de la fenêtre en cliquant sur le bouton (il faut d'abord désactiver le mode création). Revenir dans Visual Basic et importer les deux fichiers ( port_dll.bas et I2C_RS232.bas ) depuis le dossier relatif au stage en faisant un clic droit dans cette zone et en sélectionnant Importer un fichier ...
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite) Préparation de la fenêtre UserForm1 Il faut maintenant ajouter des contrôles à la fenêtre UserForm1. Faire un double clic sur UserForm1 ici pour afficher la fenêtre (vide). Placer les contrôles dans le fenêtre comme indiqué ci-dessous (les textes dans les contrôles seront ajoutés plus tard): Intitulé (affichage de texte uniquement) Zone de texte (texte modifiable par l'utilisateur) en 1° en 2° Bouton de commande (sélection du ou des capteurs) A placer en 1° en 2° en 3°
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite) Programmation des fonctions Plusieurs fonctions doivent être créées pour dialoguer avec le composant. Faire un clic droit sur UserForm1 ici et sélectionner Code, on se retrouve alors dans la fenêtre de programme (vide) relative à UserForm1 Ecrire le code de la procédure Capteur1Init Sub Capteur1Init() REALTIME True 'activation priorité temporelle Depart Sortie (&H90) 'adresse capteur1 : écriture Sortie (&HAC) 'écriture dans registre de configuration Sortie (&H2) 'conversions en continue Depart Sortie (&H90) 'adresse capteur1 : écriture Sortie (&HEE) 'commande de début des conversions Arret REALTIME False End Sub
2. 2. Le capteur "2 wire" DS1621 5- Programmation des fonctions (suite) Ecrire, à la suite et de la même manière, le code de la procédure Capteur2Init Sub Capteur2Init() ......................... 'activation priorité temporelle ......................... ......................... 'adresse capteur2 : écriture ......................... 'écriture dans registre de configuration ......................... 'conversions en continue ......................... ......................... 'adresse capteur2 : écriture ......................... 'commande de début des conversions ......................... ......................... End Sub On peut maintenant écrire le code de la procédure qui va se déclencher dès l'activation de la fenêtre Private Sub UserForm_Activate() OPENCOM ("COM2,9600,N,8,1") ' ouverture du port COM TXD 1 ' alimentation de la carte DELAY 100 I2CInit ' initialisation (mise au repos des lignes) Capteur1Init ' configuration capteur1 Capteur2Init ' configuration capteur2 End Sub
2. 2. Le capteur "2 wire" DS1621 5- Programmation des fonctions (suite) Code relatif à la fermeture de la fenêtre Private Sub UserForm_Deactivate() CLOSECOM ' fermeture de l'accès au port série après utilisation End Sub Création de la fonction MesureCapteur1 Function MesureCapteur1() As Single REALTIME True Depart ' début transmission Sortie (&H90) ' sélection capteur1 en écriture Sortie (&HAA) ' demande lecture mesure Depart ' début transmission Sortie (&H91) ' sélection capteur1 en lecture OctetPoidFort = Lecture ' lecture 1° octet de mesure Confirmer ' confirmation réception OctetPoidFaible = Lecture ' lecture 2° octet de mesure SansConfirmer ' pas d'autre octet à lire Arret ' fin transmission REALTIME False mesure = OctetPoidFort + (OctetPoidFaible / 256) 'récupération mesure MesureCapteur1 = CDec(mesure) ' transformation au format décimal et affectation mesure End Function
2. 2. Le capteur "2 wire" DS1621 5- Programmation des fonctions (suite et fin) Création de la fonction MesureCapteur2 Function MesureCapteur2() As Single ......................... ......................... ' début transmission ......................... ' sélection capteur2 en écriture ......................... ' demande lecture mesure ......................... ' début transmission ......................... ' sélection capteur2 en lecture ......................... ' lecture 1° octet de mesure ......................... ' confirmation réception ......................... ' lecture 2° octet de mesure ......................... ' pas d'autre octet à lire ......................... ' fin transmission ......................... ......................... 'récupération mesure ......................... ' transformation au format décimal et affectation mesure End Function
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite) Programmation des fonctions relatives aux clic sur les boutons .... àprès c'est fini ... ou presque ! Faire afficher UserForm1 et faire un double clic sur le bouton 1 (capteur1), la procédure apparaît vide, il ne reste plus qu'à la compléter Private Sub CommandButton1_Click() Columns("A:C").ClearContents Cells(1, 1) = "t (s)" 'péparation du tableau (écriture de texte) Cells(1, 2) = "T° Capteur1 (°C)" Intervalle = TextBox1.Value * 1000 ' intervalle en ms (lecture du TexBox1) Nombrepoints = TextBox2.Value ' nombre de points (lecture du TexBox2) TIMEINIT For n = 0 To Nombrepoints 'début de la boucle While TIMEREAD <= n * Intervalle ' attente déclenchement temporel (compteur) Wend Cells(n + 3, 1) = n * Intervalle / 1000 ' affichage "temps" Cells(n + 3, 2) = MesureCapteur1 ' affichage mesure Next n ' retour ou fin de la boucle UserForm1.Hide ' fermeture de la fenêtre après acquisition End Sub
2. 2. Le capteur "2 wire" DS1621 5- Programmation des fonctions relatives aux clic sur les boutons (c'est presque la fin !) Faire afficher UserForm1 et faire un double clic sue le bouton 2 (capteur2), la procédure apparaît vide, il ne reste plus qu'à la compléter comme pour CommandButton1_Click Private Sub CommandButton2_Click() ......................... ......................... 'péparation du tableau (écriture de texte) ......................... ......................... ' intervalle en ms (lecture du TexBox1) ......................... ' nombre de points (lecture du TexBox2) ......................... ......................... 'début de la boucle ......................... ' attente déclenchement temporel (compteur) ......................... ......................... ' affichage "temps" ......................... ' affichage mesure ......................... ' retour ou fin de la boucle ......................... ' fermeture de la fenêtre après acquisition End Sub
2. 2. Le capteur "2 wire" DS1621 5- Programmation des fonctions relatives aux clic sur les boutons (là c'est fini ... promis !) Faire afficher UserForm1 et faire un double clic sue le bouton 3 (capteurs 1 et 2), la procédure apparaît vide, il ne reste plus qu'à la compléter ... tout seul. Private Sub CommandButton3_Click() ......................... ......................... ......................... ......................... etc ... etc ... ......................... ......................... ......................... End Sub
2. 2. Le capteur "2 wire" DS1621 5- Pilotage directement avec Excel (suite et fin) Connexion de la carte au port série et essai du programme Connecter la carte électronique au port série COM2. Se placer dans le classeur (Alt + F11), désactiver le mode création et tester le programme avec le capteur 1, puis le capteur 2 puis les deux capteurs. Créer un graphique pour visualiser les variations de température. Si ça fonctionne (cela serait étonnant du 1° coup), plus rien à faire.... Si ce n'est pas le cas il faut voir pourquoi ? (erreur de frappe, protocole de travail mal suivi, le TP est mal expliqué ...). Il ne reste plus qu'à afficher le bon texte dans les boutons et dans les intitulés. Dans VisualBasic, faire un clic droit sur le contrôle CommandBUtton1 pour afficher ses propriétés. Changer la propriété Caption (texte affiché). Faire de même pour les deux autres boutons ainsi que les deux intitulés. D'autres propriétés sont modifiables (Font, BackColor ...). Fin de la manipulation sur le capteur DS1621.
2. 3. Le capteur "1 wire" DS1820 1- Description Les caractéristiques générales de ce capteur sont les suivantes : Boîtier TO92 (1 : masse; 2 : communication et 3 : alimentation). Plage de mesure de -55°C à 125°C avec une précision de 0,0625°C (1 mesure en 750ms). Protocole de communication sur 1 fil (1 wire) nommé protocole iButton. Format de mesure de température sur 9, 10, 11 ou 12 bits. Possibilité de brancher, en théorie, une infinité de capteurs simultanément.
2. 3. Le capteur "1 wire" DS1820 2- Liaison à un microcontrôleur Liaison "3fils" Le capteur se branche à un microcontrôleur avec seulement une résistance de rappel. L'alimentation et la masse occupe les deux autres broches Liaison "2fils" Le capteur se branche à un microcontrôleur avec seulement une résistance et un transistor à effet de champ (résistance commandée par une tension). La broche d'alimentation est reliée à la masse pour ne faire qu'un fil.
2. 3. Le capteur "1 wire" DS1820 3- Liaison au port série RS232 Le circuit DS9097U (Dallas) permet de relier tous les composants "1 Wire" au port série RS232. Le capteur DS18B20 sera directement branché à l'interface (liaison "2fils"). Capteur DS1820 (liaison "2 fils") Interface DS9097U (RS232) Fil "téléphone" (seulement 2 fils utilisés) Gaine Thermorétractable
2. 3. Le capteur "1 wire" DS1820 4- Utilisation du logiciel "iButton Viewer" Le logiciel iButton Viewer permet de dialoguer avec tous les composants "1 Wire" à travers l'interface série RS232 (DS9097U). Ce programme se télécharge directement depuis le site www.ibutton.com à la rubrique "Software Developper's Tools / 1-wire for Windows / 1-wire drivers / download version 3.32 (ou ultérieure). A l'installation du logiciel (exécution de "tm321b3_32.exe"), il faut ignorer les messages relatifs à l'USB. Après installation du logiciel, il suffit de connecter l'interface RS232 (et le capteur) au port série et de lancer l'application "ibutton viewer". Numéro de série (8octets) de l'interface RS 232 Numéro de série (8octets) du capteur connecté.
2. 3. Le capteur "1 wire" DS1820 4- Utilisation du logiciel "iButton Viewer" (suite et fin) Dans "iButton Viewer", un double clic sur le numéro de série du capteur permet de lancer le programme "Touch Thermometer". Ce programme permet de visualiser la température mesurée par le capteur connecté (DS18B20). Possibilité de paramétrer une alarme (température haute et basse)
2. 4. Le capteur "1 wire" DS1921 1- Présentation Le capteur de température DS1921 est un capteur autonome se présentant sous la forme d'une pile bouton. Après avoir été programmé, il réalise seul les mesures de températures sans aucune connexion électrique. Pour consulter l'ensemble des mesures ou pour reprogrammer une mission, il faut le connecter à un circuit spécialisé. Numéro de série unique sur 8 octets
2. 4. Le capteur "1 wire" DS1921 2- Liaison au port série RS232 Le circuit DS9097U (Dallas) permet de relier tous les composants "1 Wire" au port série RS232. Le Kit complet : capteur DS1921 + interface DS9097U + cordon ne coûte que 30€ (distributeur : Farnell). Capteur DS1921 Interface DS9097U (RS 232) Cordon de liaison Pince de manipulation du capteur Possibilité d'insérer deux capteurs
2. 4. Le capteur "1 wire" DS1921 3- Utilisation du logiciel "iButton Viewer" Le logiciel ibutton viewer sera naturellement utilisé puisqu'il permet de dialoguer avec tous les composants "1 Wire" à travers l'interface série RS232 (DS9097U). Après avoir connecté le capteur au port série à travers l'interface, il suffit de lancer le logiciel et la fenêtre suivante apparaît : Numéro de série (8octets) du capteur connecté. Numéro de série (8octets) de l'interface RS 232
2. 4. Le capteur "1 wire" DS1921 4- Utilisation du logiciel "Thermochron Viewer" Dans "iButton Viewer", un double clic sur le numéro de série du capteur permet de lancer le programme "Thermochron Viewer". Ce programme permet de définir une "mission" de mesure pour le capteur DS1921. Programmation de la mission : Programmation de la mission.
2. 4. Le capteur "1 wire" DS1921 4- Utilisation du logiciel "Thermochron Viewer" (suite) Vérification de l'état de la mission : Récapitulatif des paramètres de la mission
2. 4. Le capteur "1 wire" DS1921 4- Utilisation du logiciel "Thermochron Viewer" (suite et fin) Consultation des mesures : Récapitulatif des mesures Consultation des résultats de la mission Téléchargement des mesures stockées dans le capteur.
3.1. Présentation générale des potentiomètres numériques 1- Généralités La position du curseur d'un potentiomètre "traditionnel" se commande de façon mécanique (position angulaire ou linéaire) avec, en théorie, une infinité de positions. Le schéma ci-dessous illustre le principe d'un potentiomètre de résistance totale R en notant "x" la position du curseur (0 x 1): Pour un potentiomètre numérique, le curseur ne peut prendre qu'un nombre fini de positions. La commande de la position du curseur se fait de façon électronique (signaux numériques). Le schéma ci-dessous illustre les N+1 positions possibles du curseur pour un potentiomètre numérique de résistance totale R: C x 1 A B x.R (1-x).R C R/N R/N R/N R/N R/N R/N A B 1 2 3 N-3 N-2 N-1 N
3.1. Présentation générale des potentiomètres numériques 2- Caractéristiques Le schéma général d'un potentiomètre numérique est le suivant : La commande numérique de la position du curseur entraîne les propriétés suivantes : La position du curseur peut être volatile ou non volatile (conservation après coupure de l'alimentation). La commande peut être de type incrémental ou décrémental (augmentation ou diminution de la position du curseur). La commande peut être de type absolu (commande directe de la position). VDD A C Commande position curseur Multiplexeur B
3.2. Mise en œuvre du potentiomètre DS1803 1- Caractéristiques du DS1803 Le DS1803 a les caractéristiques suivantes : - double potentiomètre POT-0 et POT-1 (seul le P0T-0 sera utilisé pour notre application) - 256 positions volatiles par potentiomètre - commande absolue par bus I2C avec possibilité de lire la position (confirmation). Extrait de la documentation constructeur (Dallas Semiconductor) : Borne B "255" Borne A "0" Curseur C
3.2. Mise en œuvre du potentiomètre DS1803 2- Les différentes commandes Les commandes pour utiliser le potentiomètre sont précisées ci-dessous (POT-0 a été câblé avec l'adresse physique (a2,a1,a0) = (0,0,0): - Ecriture - Lecture
3.2. Mise en œuvre du potentiomètre DS1803 3- Le montage relié au port série RS232 (schéma)
3.2. Mise en œuvre du potentiomètre DS1803 3- Le montage relié au port série RS232 (implantation)
3.2. Mise en œuvre du potentiomètre DS1803 3- Le montage relié au port série RS232 (photo du montage)
3.2. Mise en œuvre du potentiomètre DS1803 4- Pilotage directement depuis Excel L'interface utilisateur du fichier Excel de pilotage du potentiomètre est représenté ci-dessous: Intitulés (affichage de texte fixe) Label2 (Intitulé) Label1 (Intilulé) ScrollBar1
4- Pilotage directement depuis Excel (suite) La réalisation du programme VBA devra passer par les étapes suivantes (rappel): Insertion du bouton de commande dans Excel pour l'affichage de la fenêtre de dialogue. Création de la procédure CommandButton1_Click() dans VBA pour afficher la fenêtre. Insertion de la fenêtre dans VBA (insertion UserForm). Importation des fichiers Port_dll.bas et I2C_RS232.bas. Placement des contrôles dans la fenêtre (barre de défilement et intitulés). Création des procédures UserForm_Activate() et Userform_Deactivate(). Création de la procédure ScrollBar1_Change() qui contiendra le dialogue avec le composant et l'affichage sur les intitulés (c'est le programme principal qui se déclenche à chaque changement de position de la barre de défilement).
4- Pilotage directement depuis Excel (suite et fin) Réaliser l'application complète pour piloter le potentiomètre (la procédure contenant le programme principal est indiquée ci-dessous) : Private Sub ScrollBar1_Change() Position = ScrollBar1.Value ' création et affectation de la variable "Position" Label1.Caption = Position ' affichage de la position commandée dans le 1° Label REALTIME True ' activation priorité temporelle Depart ' début protocole I2C Sortie (&H50) ' adresse POT_0 en écriture Sortie (&HA9) ' commande d'écriture position Sortie (CByte(Position)) ' écriture de la position de POT_0 (transformation texte en octet 8 bits Arret ' fin protocole I2C Sortie (&H51) ' adresse POT_0 en lecture Label2.Caption = Lecture ' lecture position + affichage dans le 2° Label SansConfirmer ' fin de lecture des données venant du composant REALTIME False ' désactivation priorité temporelle End Sub
3.3. Présentation d'une application Delphi pour piloter le potentiomètre 1- Limitations de VBA (VisualBasic Excel) Avantages de VBA : - Elaboration "visuelle" de l'application (placement des objets par dessin, propriétés affectées par défaut, sélection automatique des procédures, pas de déclarations initiales des variables et fonctions ...). - Affichage direct des données dans Excel (création de graphiques, traitement des données...). Limitations de VBA : - VBA ne peut fonctionner qu'avec une application Office (Word, Excel, ...). - La vitesse d'exécution est beaucoup plus lente que pour un programme autonome ( .exe). Il existe de nombreux logiciels pour élaborer des applications autonomes (fichier .exe) : - Visual Basic (identique à VBA mais toujours un problème de lenteur d'exécution). - Langage C : C++; C++Builder; Visual C++ (langage de programmation très performant mais demande un long apprentissage). - Delphi (langage de programmation Pascal, apprentissage aisé et vitesse d'exécution rapide). Le programme pilotant le potentiomètre sera donc réalisé avec Delphi.
3.3. Présentation d'une application Delphi pour piloter le potentiomètre 2- Présentation de l'interface L'interface utilisateur de l'application autonome PotNum.exe est représentée ci-dessous:
3.3. Présentation d'une application Delphi pour piloter le potentiomètre 2- Présentation de l'unité Port_dll.pas Le code source de l'unité Port_dll.pas est similaire à celui du module Port_dll.bas (extrait ci-dessous): unit Port_dll; interface uses windows; const THEDLL='PORT.DLL'; Procedure DELAY(i:WORD); stdcall; external THEDLL; Procedure TIMEINIT; stdcall; external THEDLL; Function TIMEREAD: DWORD; stdcall; external THEDLL; Procedure DELAYUS(i:DWORD); stdcall; external THEDLL; Procedure TIMEINITUS; stdcall; external THEDLL; Function TIMEREADUS: DWORD; stdcall; external THEDLL; Procedure OUTPORT(PortAddr:Word; Data:byte); stdcall; external THEDLL; Function INPORT(PortAddr:Word):Byte;stdcall; external THEDLL; Function OPENCOM(S:PCHAR):Integer;stdcall; external THEDLL; Procedure CLOSECOM;stdcall; external THEDLL; Function READBYTE:Integer;stdcall; external THEDLL; Procedure SENDBYTE(d:WORD);stdcall; external THEDLL; Procedure DTR(d:WORD);stdcall; external THEDLL; Procedure RTS(d:WORD);stdcall; external THEDLL; Procedure TXD(d:WORD);stdcall; external THEDLL;
2- Présentation de l'unité Port_dll.pas (suite et fin) Function CTS:Integer;stdcall; external THEDLL; Function DSR:Integer;stdcall; external THEDLL; Function RI:Integer;stdcall; external THEDLL; Function DCD:Integer;stdcall; external THEDLL; Procedure REALTIME(d:BOOLEAN);stdcall; external THEDLL; Function SOUNDSETRATE(Rate:DWORD):DWORD; stdcall; external THEDLL; Function SOUNDGETRATE:DWORD; stdcall; external THEDLL; Function SOUNDBUSY:Boolean; stdcall; external THEDLL; Function SOUNDIS:Boolean; stdcall; external THEDLL; Procedure SOUNDIN(Puffer:Pchar;Size:DWORD); stdcall; external THEDLL; Procedure SOUNDOUT(Puffer:Pchar;Size:DWORD); stdcall; external THEDLL; Function SOUNDGETBYTES:DWORD; stdcall; external THEDLL; Function SOUNDSETBYTES(B:DWORD):DWORD; stdcall; external THEDLL; Procedure SOUNDCAPIN; stdcall; external THEDLL; Procedure SOUNDCAPOUT; stdcall; external THEDLL; Function JOYX:DWORD;stdcall; external THEDLL; Function JOYY:DWORD;stdcall; external THEDLL; Function JOYZ:DWORD;stdcall; external THEDLL; Function JOYR:DWORD;stdcall; external THEDLL; Function JOYBUTTON:DWORD;stdcall; external THEDLL; implementation end.
3.3. Présentation d'une application Delphi pour piloter le potentiomètre 3- Présentation de l'unité I2C_RS232.pas Le code source de l'unité I2C_RS232.pas est similaire à celui du module I2C_RS232.bas (extrait ci-dessous): unit I2C_RS232; interface uses Port_dll, Windows; Procedure I2C_Init; Procedure Start; Procedure Stop; Procedure Confirmer; Procedure SansConfirmer; Function Sortie (Valeur : Byte): Boolean; Function Lecture : Byte; implementation procedure I2C_Init; begin RTS(1); DTR(1); end;
3- Présentation de l'unité I2C_RS232.pas (suite) procedure Start; begin RTS(1); DTR(1); DTR(0); end; procedure Stop; RTS(1); DTR(0); DTR(1); procedure Confirmer; DTR(0); RTS(1); Delayus (10); { Temporisation 10µs} RTS(0); procedure SansConfirmer; DTR(1); RTS(1); Delayus (10); { Temporisation 10µs } RTS(0); DTR(0); RTS(1);
3- Présentation de l'unité I2C_RS232.pas (suite) Function Sortie (Valeur : Byte): Boolean; var ValeurBit, n: Byte; begin Sortie := true; ValeurBit := 128; RTS(0); for n:= 1 to 8 do begin if (Valeur and ValeurBit) = ValeurBit then DTR(1) else DTR(0); { Positionner SDA } RTS(1); { SCL=1 } Delayus (10); { Temporisation 10µs } RTS(0); { SCL=0 } ValeurBit := ValeurBit div 2; end; DTR(1); { SDA=1 } RTS(1); { SCL=1, lire SDA } Delayus (10); { Temporisation 10µs } if CTS = 1 then Sortie := False; RTS(0); { SCL=0 }
3- Présentation de l'unité I2C_RS232.pas (suite et fin) function Lecture : Byte; var ValeurBit, Valeur, n: Byte; begin DTR(1); { SDA=1 } ValeurBit := 128; Valeur := 0; for n:= 1 to 8 do begin RTS(1); { SCL=1, lire SDA } Delayus (10); { Temporisation 10µs } Valeur := Valeur + ValeurBit * CTS; RTS(0); { SCL=0 } ValeurBit := ValeurBit div 2; end; Lecture := Valeur; end.