Cours/TD d’informatique embarquée Utilisation d’un microcontrôleur MBED Partie 8 Communication série I²C Serial communication with I²C Plan du cours 8.1. Introduction 8.2. Etude de la communication I²C 8.3. Utilisation de I²C avec mbed 8.4. Etude du circuit PCF8574 8.5. Etude du télémètre ultrason SFR08 CV C/TD INFO2 - Partie 8 page 1 8.1. Introduction I²C est l’abréviation de Inter-Integrated Integrated Circuit bus I²C est un protocole de ____________________________________________ Ce protocole utilise une relation ____________________________________________ ______________________ I²C utilise ________________ pour la communication (+ la masse) Les signaux de communication I²C sont - ____________________ - ____________________ Cela signifie qu’à chaque instant la donnée ne circule que dans un seul sens (maître>>esclave e ou esclave>>maître) Le protocole I²C utilise un bus série 2 fils : L’utilisation de seulement 2 fils (+ masse) fait de ce protocole un système ______________________ ______________________________________ Il existe de nombreux périphériques phériques I²C (LCD, capteurs, mémoires, E/S …) Cela permet de délocaliser facilement plusieurs composants en utilisant seulement 3 fils Exercice 1 : Quelle est la vitesse de transmission du bus I²C ? Rechercher 2 composants fonctionnant sur le bus I²C (capteur (capteur de température, LCD...) Quelle est la fonction du conposant PCF8583 ? CV C/TD INFO2 - Partie 8 page 2 8.2 Etude de la communication I²C I²C utilise un adressage des périphériques Intérêt : _______________________________________________ Chaque composant a _________________________ (comme les numéros de maison dans une rue) codée sur 7 bits + un ‘0’ Adresse = _____________________________ Pour parler à un composant il suffit de donner son ________________ dans le message qu’on envoie Lorsqu’il se reconnait le composant ____________________________________ Le composant qui initie la communication est appelé ______________________.. Le composant qui est adressé par le maître est appelé ______________________. ______________________ Les esclaves ________________________ et répondent uniquement aux données et aux commandes associées à _________________. _________________ Cette méthode d'adressage limite le nombre de périphériques esclaves qui peuvent co-exister co sur un 7 seul bus I²C car chaque appareil doit avoir une adresse unique. (max = 2 = 128 périphériques) périphériques Exemple : adresse du composant PCF8574 Pour ce composant (PCF8574) sur les 7 bits d’adresse : • 4 sont _______________ (0100) • 3 sont _______________ (A2A1A0) : l’utilisateur les fixe à _______________ ADR = 0100 A2A1A0 ADR = 0100 0000 = 0x40 ADR = 0100 0010 = 0x42 Exercice 3 : Combien de composant PCF8574 peut-on on connecter sur un bus I²C ? En étudiant la datasheet : a)dire quelle est la différence entre le PCF8574 et le PCF8574A. b)donner la fonction du circuit et dire sur quelles broches sont les sorties ? CV C/TD INFO2 - Partie 8 page 3 Connecter la masse et l'alimentation sur les composants ci-dessous. ci Fixer les adresses à 0x46 et 0x4C Un transfert de données commence lorsque le maître signale un Start, suivi par 1,2 ou 3 octets contenant l’adresse et les données. 1. Le START est défini par une transition ‘1’>>’0’ de SDA lorsque SCL est à l’état ‘1’ 2. Un front montant de SCL valide la donnée sur SDA. La donnée ne doit changer que lorsque l’horloge est à l’état ‘0’ 3. Une transition ‘0’>>’1’ de SDA lorsque SCL est à l’état ‘1’ signifie le STOP 8.3 Utilisation de I²C avec mbed Les méthodes associées au type I2C sont dans le tableau ci-dessous : I2C Utilisation du mbed comme un maître I2C I2C frequency read write start stop CV Crée un maître I2C connecté à des broches spécifiques Fixe la fréquence de l’interface I²C Permet la lecture de données issues d’un esclave Permet l’écriture d’une donnée vers un esclave Crée un START sur le bus I²C Crée un STOP sur le bus I²C C/TD INFO2 - Partie 8 page 4 Le LPC1768 possède 2 interfaces I²C sur les broches p9/p10 et p28/p27 Les signaux SDA et SCL doivent être reliés à l’alimentation avec des résistances (PullUp) dont la valeur peut être optimisée suivant la configuration du circuit. Ordre de grandeur : 1,8kΩ -> 10kΩ Exemple : Programme permettant de scanner toutes les adresses d’un bus I²C Permet de savoir si des composants sont connectés sur le bus I²C et quelles sont leurs adresses #include "mbed.h" I2C composant(p9, p10); //sda, sc1 Serial pc(USBTX, USBRX); //tx, rx int main() { int i; printf("Debut du Scan...\n\r"); for(i=0x00;i<=0xFF;i=i+2){ composant.start(); //Start rep = composant.write(i); //Envoi d’une adresse, y a-t-il une if(rep==1) //réponse ? { printf("Test de l’adresse %x Composant I2C present !!\n\r",i); } else{ printf("Test adr = %x ... rien ... " %x\n\r",i); } composant.stop(); //Stop wait(0.1); } printf("Fin du Scan...\n\r"); } CV C/TD INFO2 - Partie 8 page 5 8.4 Etude du composant I²C PCF8574 Diagramme fonctionnel : Exercice Entourer le l'acquittement traduction en direction vont 4 : composant qui permet au PCF8574 de produire et d'écrire des données sur le bus. Quelle est la français des deux blocs de droite ? Dans quelle les données ? Exemple : Ce programme permet de fixer la valeur des sorties du PCF8574 #include "mbed.h" I2C composant(p9, p10); //sda, sc1 int main() { char A=0xAA; // 1010 1010 char B=0x55; // 0101 0101 while(1){ composant.write(0x40,&A,1); //Transfert //l’adresse wait(0.5); composant.write(0x40,&B,1); //Transfert //l’adresse wait(0.5); } } CV C/TD INFO2 - Partie 8 de l’octet dont est &A de l’octet dont est &B page 6 Exercice 4 : a) Réaliser le montage et scanner toutes les adresses du bus avec le premier programme. . Quelle adresse a été trouvée ? b) Fixer A2A1A0 à "111" et refaites les scan. Quelle adresse a été trouvée ? c) Avec votre voisin, câbler deux composants sur un même bus et scanner les adresses. Quelles adresses ont été trouvées ? a) b) c) Exercice 5 : Réaliser et tester le programme permettant de fixer les valeurs des sorties. a) Relever à l'oscilloscope les chronogrammes de SDA et SCL. b) Relever à l'oscilloscope les chronogrammes des sorties p4 et p5 (broches 9 et 10 du PCF8574). CV C/TD INFO2 - Partie 8 page 7 Préciser clairement les échelles, les axes et les unités. a) chronogramme de SDA et SCL b)chronogramme de p4 et p5 Quelle est la fréquence du signal SCL ? (Comparer avec la liaison série asynchrone 9600 bauds) Quelle est la durée de la transmission d'un octet ? Exercice 6 : Travail à réaliser à deux : Réaliser un programme permetttant de saisir un nombre sur teraterm et de l'envoyer sur le PCF8574. L'écriture se fera à chaque fois que l'utilisateur rentre un nombre. Réaliser un deuxième programme permettant de lire une valeur présente sur le PCF8574 et de l'afficher sur le teraterm. La lecture devra se faire dans un Ticker appelé toutes les 500ms. Connecter entre eux les deux composants et envoyer un nombre depuis un PC vers le PC voisin. 8.4 Etude du composant I²C SRF08 Le capteur SRF08 est un capteur ___________________________ Il communique ses mesures en I²C et son adresse d’usine est _______ Procédure pour une lecture en cm : 1. Envoi _______________________ ______ (= l’octet suivant sera ta configuration) et ______ (= configuration en cm) 2. Envoi de ______ (= envoie moi la donnée sur 2 octets) 3. Lecture de la donnée sur 2 octets CV C/TD INFO2 - Partie 8 page 8 Le SRF08 peut être connecté comme sur la figure ci-dessous : SRF08 est alimenté en 5V et les résistances de PullUp tirent les potentiels au 5V (SDA, SCL). Exemple : Utilisation du SFR08 #include "mbed.h" I2C UltraSon(p9, p10); //sda, sc1 Serial pc(USBTX, USBRX); //tx, rx int addr = 0xE0; char config[2]; char lecture[2]; int main() { int valeur; while (1) { config[0] = 0x00; // config[1] = 0x51; // UltraSon.write(addr, config, 2); wait(0.07); config[0] = 0x02; UltraSon.write(addr, config, 1); UltraSon.read(addr, lecture, 2); valeur = ((lecture[0] << 8) + lecture[1]); pc.printf(« Distance = %d cm\n\r", valeur); wait(0.1); } } Exercice 6 : a) Câbler le SRF08 sur votre mbed et scanner les adresses. b) Tester le programme ci-dessus (modifier éventuellement le 0xE0). c) Etudier la documentation du SRF08 et modifier la configuration pour que la mesure soit réalisée en inches. d) Etudier la documentation et réaliser un programme qui permette de modifier l'adresse du SRF08. CV C/TD INFO2 - Partie 8 page 9 Questions de cours : Q1) Que signifie I2C ? Q2) Combien de fils possède le bus de I2C ? Q3) Quel est l'état de repos du bus ? Q4) Sur combien de bits sont adressés les composants ? Les adresses sont elles paires, impaires ou les deux ? Q5) Est-il possible de connecter plus de 2 composants I²C sur un même bus ? Q6) Dessiner la condition de Start et de Stop sur le bus I²C ? Q7) Au cours de la transmission d'un octet quel doit être l'état de SCL lorsque SDA varie ? Q8) Lorsque la méthode write est appelée avec un seul argument il faut utiliser les méthodes start et stop , vrai ou faux ? Q9) Lorsque la méthode write est appelée avec 3 arguments il est inutile d'utiliser les méthodes start et stop , vrai ou faux ? Q10) Lorsque la méthode write est appelée avec 3 arguments, quels sont ces arguments ? CV C/TD INFO2 - Partie 8 page 10
© Copyright 2024