Partie 8 Communication série I²C Serial communication with I²C

Transcription

Partie 8 Communication série I²C Serial communication with I²C
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