La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Stage Composants électroniques modernes Animateur : Christian BISSIERES ( Professeur de Physique Appliquée ) Responsable pédagogique : Jean-Claude REBEYROLE.

Présentations similaires


Présentation au sujet: "Stage Composants électroniques modernes Animateur : Christian BISSIERES ( Professeur de Physique Appliquée ) Responsable pédagogique : Jean-Claude REBEYROLE."— Transcription de la présentation:

1 Stage Composants électroniques modernes Animateur : Christian BISSIERES ( Professeur de Physique Appliquée ) Responsable pédagogique : Jean-Claude REBEYROLE ( IA IPR ) Lycée Joffre Montpellier ( 5 et 12 janvier 2005 ) Lycée Joffre Montpellier ( 5 et 12 janvier 2005 ) Lycée Clos Banet Perpignan ( 16 et 23 mars 2005 ) Lycée Clos Banet Perpignan ( 16 et 23 mars 2005 )

2 Mise en œuvre de capteurs de température à sortie numérique directe. Utilisation d'un potentiomètre à commande numérique. Programme du stage

3 Le capteur "2 wire" DS 1621 relié au port série. ( pilotage avec Excel ) Le capteur DS 1621

4 Le fichier Excel relatif à la mesure de température

5 Le capteur "1 wire" DS 1820 relié au port série. Le capteur DS 1820

6 Le logiciel fournit avec le capteur DS1820 (lecture de la température)

7 Le capteur autonome"1 wire" DS Le capteur DS 1921

8 Le logiciel fournit avec le capteur DS19B21 (programmation d'une acquisition automatique et autonome)

9 Le potentiomètre numérique DS 1803 relié au port série. Borne "10k " position 255 Curseur position 0 à 255 Borne "0k " position 0

10 Le programme autonome de pilotage du potentiomètre réalisé avec DELPHI

11 Déroulement du stage 1. 1.Utiliser Visual Basic (présent avec Excel) pour faire de la programmation sous Windows Savoir déclarer et utiliser, avec Visual Basic, les fonctions et procédures dune DLL donnée Utiliser les fonctions de pilotage du port série avec la DLL port.dll pour piloter une maquette de feux tricolores. 1.Utilisation du port série RS 232 pour communiquer avec les composants

12 2. 1. Présentation générale des capteurs à sortie numérique directe Mise en œuvre du capteur "2 wire" DS1621 et pilotage avec Excel Mise en oeuvre du capteur "1 wire" DS1820 avec logiciel spécialisé Mise en oeuvre du capteurs autonôme "1 wire" DS1921 avec logiciel spécialisé. 2. Les capteurs numériques de température

13 3. 1. Présentation générale des potentiomètres numériques Mise en œuvre du potentiomètre numérique DS1803 avec Excel Réalisation d'une application Windows avec Delphi pour piloter le potentiomètre. 3. Le potentiomètre numérique

14 1.1. Utilisation de Visual Basic (VBA) 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. Démarrer Excel. Sélectionner le menu Outils / Macro / Visual Basic Editor. Sélectionner le menu Outils / Macro / Visual Basic Editor. Dans la fenêtre Projet – VBA Project, faire un double-clic sur Feuil1. 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 :

15 1.1. Utilisation de Visual Basic (VBA) 1.1. Utilisation de Visual Basic (VBA) 2- Remplir des cellules directement depuis VBA Il faut tout dabord 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 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 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). 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

16 1.1. Utilisation de Visual Basic (VBA) 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 = 'définition des constantes tmax = 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 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 = 'définition des constantes tmax = 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 Exécuter le programme Sub sinusoïde et vérifier le résultats dans Excel

17 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 doutils / Boite à outils contrôles. Revenir à Excel et faire Affichage / Barres doutils / Boite à outils contrôles. Sélectionner le contrôle Barre de défilement et le dessiner horizontalement sur la feuille (amplitude). 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). 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). 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 à lintérieur du programme pour appeler la programme sinusoide à chaque changement de position du curseur. Refaire le pour la 2° barre de défilement. 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 à linté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. 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. 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

18 1.2. Déclaration et utilisation d'une DLL 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 dentrée du port série ( 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" : OPENCOMExemple : 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. OPENCOMExemple : 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. CLOSECOMpermet de refermer le dernier port ouvert. CLOSECOMpermet de refermer le dernier port ouvert. DTR, RTS et TXDcommande des lignes de sortie Exemple : DTR 1 permet de mettre à "1" la ligne de sortie DTR (+11V). DTR, RTS et TXDcommande des lignes de sortie Exemple : DTR 1 permet de mettre à "1" la ligne de sortie DTR (+11V). CTS, DSR, RI, DCDExemple : lecture = DSR place la valeur DSR (0 ou 1) dans la variable lecture. CTS, DSR, RI, DCDExemple : lecture = DSR place la valeur DSR (0 ou 1) dans la variable lecture. DELAYExemple : DELAY 100 introduit une pause de 100ms dans le programme. DELAYExemple : DELAY 100 introduit une pause de 100ms dans le programme. DELAYUSmême fonction que DELAY mais en microsecondes. DELAYUSmême fonction que DELAY mais en microsecondes.

19 1- Pourquoi utiliser une DLL ? (suite et fin) TIMEINITMise à zéro et démarrage du compteur des millisecondes. TIMEINITMise à zéro et démarrage du compteur des millisecondes. TIMEREADLecture 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. TIMEREADLecture 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 TIMEREADUSMêmes fonctions que TIMEINIT et TIMEREAD mais en microsecondes. TIMEINITUS et TIMEREADUSMê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. REALTIMECette fonction rend le programme prioritaire par rapport à toutes les tâches que gère Windows. REALTIMECette fonction rend le programme prioritaire par rapport à toutes les tâches que gère Windows. Exemple : REALTIME True activation de la priorité temporelle.

20 1.2. Déclaration et utilisation d'une DLL 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)

21 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. 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. 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. 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 …) Déclaration et utilisation d'une DLL 1.2. Déclaration et utilisation d'une DLL Clic droit Résultat

22 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. 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"): Placer le Bouton de commande et la Barre de défilement comme indiqué ci-dessous (les autres composants ne sont que des "dessins"): Bouton de commande Barre de défilement

23 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: 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 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. Revenir à Excel, désactiver le mode création, brancher la maquette et tester le programme.

24 2. 1. Les capteurs de température numériques Les capteurs de température numériquesGé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 DS1621 relié au port série Capteur Dallas DS820 relié à une ligne d'un microcontrôleur

25 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 ) 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). 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. Protocole de communication sur 2 fils (2 wire) nommé protocole I2C. Format de mesure de température sur 9 bits. Format de mesure de température sur 9 bits. Possibilité de brancher 8 capteurs simultanément. Possibilité de brancher 8 capteurs simultanément.

26 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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) 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 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

27 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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 RTS sera reliée à l'horloge SCL. La ligne de sortie DTR sera reliée à SDA pour l'envoi de données. 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. La ligne d'entrée CTS sera reliée à SDA pour la réception de données. Régulateur Capteur 1 d'adresse "000" Capteur 2 d'adresse "001" Diodes zener 5,1V (+11V 5V et -11V 0V)

28 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Liaison au port série RS232 (schéma)

29 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Liaison au port série RS232 (implantation)

30 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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é)

31 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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

32 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (présentation) Affichage de la fenêtre de réglages et saisie des paramètres : Bouton de départ des mesures Zones de saisie de paramètres

33 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (présentation) Acquisition terminée : Graphe relatif aux mesures Tableau rempli automatiquement Attente d'une nouvelle acquisition

34 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 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 Le capteur "2 wire" DS Le capteur "2 wire" DS1621

35 4- Présentation du protocole I2C (suite) Exemple d'écriture d'un octet 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 Le capteur "2 wire" DS Le capteur "2 wire" DS1621

36 4- Présentation du protocole I2C (suite) Exemple d'écriture d'une donnée 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 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 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) : Le capteur "2 wire" DS Le capteur "2 wire" DS1621

37 4- Présentation du protocole I2C (suite) Exemple de lecture d'une donnée 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). 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. 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. 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. 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) : Le capteur "2 wire" DS Le capteur "2 wire" DS1621

38 5- Pilotage directement avec Excel Utilisation de fonctions I2C déjà programmées 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 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

39 Utilisation de fonctions I2C déjà programmées (suite) Utilisation de fonctions I2C déjà programmées (suite) Sortie Function Sortie(Valeur As Byte) As Boolean 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° ValeurBit = 128 ' traitement du bit de poid fort en 1° RTS 0 RTS 0 For n = 1 To 8 For n = 1 To 8 If (Valeur And ValeurBit) = ValeurBit Then ' masque de sélection des bits If (Valeur And ValeurBit) = ValeurBit Then ' masque de sélection des bits DTR 1 ' SDA=1 transmission d'un "1" DTR 1 ' SDA=1 transmission d'un "1" Else Else DTR 0 ' SDA=0 transmission d'un "0" DTR 0 ' SDA=0 transmission d'un "0" End If End If RTS 1 ' SCL=1 RTS 1 ' SCL=1 DELAYUS 10 ' temporisation 10µs DELAYUS 10 ' temporisation 10µs RTS 0 ' SCL=0 RTS 0 ' SCL=0 DELAYUS 10 ' temporisation 10µs DELAYUS 10 ' temporisation 10µs ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur Next n Next n DTR 1 ' SDA=1 DTR 1 ' SDA=1 RTS 1 ' SCL=1 RTS 1 ' SCL=1 DELAYUS 10 ' Boucle de temporisation DELAYUS 10 ' Boucle de temporisation If CTS = 1 Then Sortie = False ' si SDA=1 pas de confirmation du récepteur If CTS = 1 Then Sortie = False ' si SDA=1 pas de confirmation du récepteur RTS 0 ' SCL=0 RTS 0 ' SCL=0 End Function End Function

40 Utilisation de fonctions I2C déjà programmées (suite) Utilisation de fonctions I2C déjà programmées (suite) Lecture Function Lecture() As Byte Lecture Function Lecture() As Byte DTR 1 ' SDA="1" ValeurBit = 128 ' traitement du bit de poids fort en 1° ValeurBit = 128 ' traitement du bit de poids fort en 1° Valeur = 0 ' initialisation variable Valeur Valeur = 0 ' initialisation variable Valeur For n = 1 To 8 For n = 1 To 8 RTS 1 ' SCL="1" RTS 1 ' SCL="1" DELAYUS 10 ' temporisation 10µs DELAYUS 10 ' temporisation 10µs Valeur = Valeur + ValeurBit * CTS ' lecture CTS transmis par l'esclave Valeur = Valeur + ValeurBit * CTS ' lecture CTS transmis par l'esclave RTS 0 ' SCL="0" RTS 0 ' SCL="0" DELAYUS 10 ' temporisation 10µs DELAYUS 10 ' temporisation 10µs ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur ValeurBit = ValeurBit \ 2 ' passage au bit de rang inférieur Next n Next n Lecture = Valeur ' affectation de l'octet reçu à la fonction Lecture = Valeur ' affectation de l'octet reçu à la fonction ' SCL reste à "0" End Function

41 Utilisation de fonctions I2C déjà programmées (suite) Utilisation de fonctions I2C déjà programmées (suite) Confirmer (attente d'un autre octet) Sub Confirmer() 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() Sans Confirmer (pas d'autre octet à lire) Sub SansConfirmer() DTR 1 ' SDA = "1" RTS 1 ' SCL = 1 DELAYUS 10 ' Attente 10µs RTS 0 ' SCL = 0 DTR 0' préparation condition d'arrêt RTS 1' préparation condition d'arrêt End Sub

42 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite) Commandes pour la communication avec le capteur 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 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 Début des conversions Sortie (&HEE)' Demande de conversions Demande lecture Sortie (&HAA)' demande de lecture d'une mesure Demande lecture Sortie (&HAA)' demande de lecture d'une mesure

43 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite) Préparation du fichier Excel 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. 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 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). 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... 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...

44 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite) Préparation de la fenêtre UserForm1 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). 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): Placer les contrôles dans le fenêtre comme indiqué ci-dessous (les textes dans les contrôles seront ajoutés plus tard): Bouton de commande (sélection du ou des capteurs) Intitulé (affichage de texte uniquement) Zone de texte (texte modifiable par l'utilisateur) A placer en 1°en 2° en 3° en 1° en 2°

45 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite) Programmation des fonctions 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 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 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

46 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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 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

47 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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 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

48 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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

49 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite) Programmation des fonctions relatives aux clic sur les boutons.... àprès c'est fini... ou presque ! 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 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

50 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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

51 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS 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 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

52 2. 2. Le capteur "2 wire" DS Le capteur "2 wire" DS Pilotage directement avec Excel (suite et fin) Connexion de la carte au port série et essai du programme Connexion de la carte au port série et essai du programme Connecter la carte électronique au port série COM2. 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é...). 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...). 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.

53 2. 3. Le capteur "1 wire" DS Le capteur "1 wire" DS Description Les caractéristiques générales de ce capteur sont les suivantes : Boîtier TO92 (1 : masse; 2 : communication et 3 : alimentation). 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). 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. Protocole de communication sur 1 fil (1 wire) nommé protocole iButton. Format de mesure de température sur 9, 10, 11 ou 12 bits. Format de mesure de température sur 9, 10, 11 ou 12 bits. Possibilité de brancher, en théorie, une infinité Possibilité de brancher, en théorie, une infinité de capteurs simultanément.

54 2. 3. Le capteur "1 wire" DS Le capteur "1 wire" DS Liaison à un microcontrôleur Liaison "3fils" 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" 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.

55 2. 3. Le capteur "1 wire" DS Le capteur "1 wire" DS 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

56 2. 3. Le capteur "1 wire" DS Le capteur "1 wire" DS 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 à 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) du capteur connecté. Numéro de série (8octets) de l'interface RS 232

57 2. 3. Le capteur "1 wire" DS Le capteur "1 wire" DS 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)

58 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS 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

59 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS 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 DS 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

60 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS 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

61 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS 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 : Programmation de la mission.

62 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS Utilisation du logiciel "Thermochron Viewer" (suite) Vérification de l'état de la mission : Vérification de l'état de la mission : Récapitulatif des paramètres de la mission

63 2. 4. Le capteur "1 wire" DS Le capteur "1 wire" DS Utilisation du logiciel "Thermochron Viewer" (suite et fin) Consultation des mesures : Consultation des mesures : Consultation des résultats de la mission Récapitulatif des mesures Téléchargement des mesures stockées dans le capteur.

64 3.1. Présentation générale des potentiomètres numériques 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: A B C AB C 0123N-3N-2N-1N x.R(1-x).R 01x R/N

65 3.1. Présentation générale des potentiomètres numériques 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 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 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). La commande peut être de type absolu (commande directe de la position). A B C V DD Multiplexeur Commande position curseur

66 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS 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 A "0" Borne B "255" Curseur C

67 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS 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 (a 2,a 1,a 0 ) = (0,0,0): -Ecriture -Lecture

68 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS Le montage relié au port série RS232 (schéma)

69 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS Le montage relié au port série RS232 (implantation)

70 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS Le montage relié au port série RS232 (photo du montage)

71 3.2. Mise en œuvre du potentiomètre DS Mise en œuvre du potentiomètre DS Pilotage directement depuis Excel L'interface utilisateur du fichier Excel de pilotage du potentiomètre est représenté ci-dessous: Label1 (Intilulé) Label2 (Intitulé) ScrollBar1 Intitulés (affichage de texte fixe)

72 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. 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. Création de la procédure CommandButton1_Click() dans VBA pour afficher la fenêtre. Insertion de la fenêtre dans VBA (insertion UserForm). Insertion de la fenêtre dans VBA (insertion UserForm). Importation des fichiers Port_dll.bas et I2C_RS232.bas. 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). 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 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). 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).

73 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) : 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 Depart' début 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 Arret' fin protocole I2C REALTIME False' désactivation priorité temporelle End Sub

74 3.3. Présentation d'une application Delphi pour piloter le potentiomètre 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.

75 3.3. Présentation d'une application Delphi pour piloter le potentiomètre 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:

76 3.3. Présentation d'une application Delphi pour piloter le potentiomètre 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;

77 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.

78 3.3. Présentation d'une application Delphi pour piloter le potentiomètre 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; 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); RTS(1); DTR(1);end;

79 3- Présentation de l'unité I2C_RS232.pas (suite) procedure Start; begin RTS(1); DTR(1); DTR(0); RTS(1); DTR(1); DTR(0);end; procedure Stop; begin RTS(1); DTR(0); DTR(1); RTS(1); DTR(0); DTR(1);end; procedure Confirmer; begin DTR(0); RTS(1); DTR(0); RTS(1); Delayus (10); { Temporisation 10µs} Delayus (10); { Temporisation 10µs} RTS(0); RTS(0);end; procedure SansConfirmer; begin DTR(1); RTS(1); DTR(1); RTS(1); Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } RTS(0); DTR(0); RTS(1); RTS(0); DTR(0); RTS(1);end;

80 3- Présentation de l'unité I2C_RS232.pas (suite) Function Sortie (Valeur : Byte): Boolean; var ValeurBit, n: Byte; begin Sortie := true; Sortie := true; ValeurBit := 128; ValeurBit := 128; RTS(0); RTS(0); for n:= 1 to 8 do begin for n:= 1 to 8 do begin if (Valeur and ValeurBit) = ValeurBit then DTR(1) if (Valeur and ValeurBit) = ValeurBit then DTR(1) else DTR(0); { Positionner SDA } else DTR(0); { Positionner SDA } RTS(1); { SCL=1 } RTS(1); { SCL=1 } Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } RTS(0); { SCL=0 } RTS(0); { SCL=0 } Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } ValeurBit := ValeurBit div 2; ValeurBit := ValeurBit div 2; end; end; DTR(1); { SDA=1 } DTR(1); { SDA=1 } RTS(1); { SCL=1, lire SDA } RTS(1); { SCL=1, lire SDA } Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } if CTS = 1 then Sortie := False; if CTS = 1 then Sortie := False; RTS(0); { SCL=0 } RTS(0); { SCL=0 }end;

81 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 } DTR(1); { SDA=1 } ValeurBit := 128; ValeurBit := 128; Valeur := 0; Valeur := 0; for n:= 1 to 8 do begin for n:= 1 to 8 do begin RTS(1); { SCL=1, lire SDA } RTS(1); { SCL=1, lire SDA } Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } Valeur := Valeur + ValeurBit * CTS; Valeur := Valeur + ValeurBit * CTS; RTS(0); { SCL=0 } RTS(0); { SCL=0 } Delayus (10); { Temporisation 10µs } Delayus (10); { Temporisation 10µs } ValeurBit := ValeurBit div 2; ValeurBit := ValeurBit div 2; end; end; Lecture := Valeur; Lecture := Valeur;end;end.


Télécharger ppt "Stage Composants électroniques modernes Animateur : Christian BISSIERES ( Professeur de Physique Appliquée ) Responsable pédagogique : Jean-Claude REBEYROLE."

Présentations similaires


Annonces Google