Vous êtes sur la page 1sur 12

BURKINA FASO

-------------------
Ministère de L’Enseignement Supérieur de la Recherche Scientifique et
de l’Innovation
-------------------
Secrétariat Général
-------------------
UNIVERSITE NAZI BONI DE BOBO DIOULASSO
-------------------

Institut Universitaire de Technologie


-------------------
Département de Génie Electrique

-------------------
Deuxième année d’ingéniorat

Module : Réseaux Locaux et Industriels

TRAVAUX PRATIQUE 2

MESURE SUR LA LIAISON SERIE I2C

Présenté par OUATTARA Abdoul Kader et ZANGRE Omar

Enseignant : Dr Michel KAM

Année académique : 2022 – 2023


Introduction
Le bus I2C (Inter Integrated Circuit) fait partie des bus série : 3 fils pour communiquer
l'information (SDA, SCL et GND). Il a été développé au début des années 1980, par Philips
pour minimiser les liaisons entre les circuits intégrés numériques de ses produits.
Chaque périphérique sur le bus I2C est adressable, avec une adresse unique pour chaque
périphérique du bus. Le nombre maximal d’équipements est limité par le nombre d’adresses
disponibles, 7 bits d’adressage et un bit R/W (lecture ou écriture), soit 128 périphériques.

But
Le but de ce TP est de pouvoir échanger des données entre 2 cartes Arduino UNO par
l'intermédiaire du bus I2C. L’Arduino A sera configuré comme périphérique maître qui doit
arriver à envoyer des requêtes de lire ou d’écriture à l’Arduino B qui à son tour sera configuré
comme périphérique esclave capable de répondre à la requête du maître.

a. Partie théorique

− Donnons la différence fondamentale entre la communication sur liaison RS232 et sur liaison

I2C
La différence fondamentale entre la communication sur liaison RS232 et sur liaison I2C réside
dans le mode de communication. En effet, la liaison RS232 est un protocole de communication
série asynchrone qui utilise deux fils data (Rx et Tx) pour transmettre ou recevoir des données.
C’est un protocole mono-maître. Quant à la liaison I2C elle est un mode de communication
série synchrone qui utilise un fil data (SDA) pour les données et un fil horloge (SCL) qui impose
sa vitesse au système. C’est un protocole multi-maître qui fonctionne par adressage
(Halfduplex).

− Les différentes étapes de la communication ainsi que les valeurs transmises à chaque étape.

Exemple 1 :
 Repos : SDA et SCL sont à 1. Aucun périphérique n’émet.
 Start : pour transmettre des données, un périphérique maître envoie un signal de départ
sur le bus I2C. ce signal indique le début de la transmission.
Bit de start = 0.
1

 Adresse : le maître envoie l’adresse du périphérique esclave auquel il souhaite


communiquer.
L’adresse de l’esclave est : 1100111
 R/W : il indique le type de requête que le maître veut envoyer à l’esclave (lire ou écrire).
R/W = 1 cela indique que le maître souhaite lire des données.
 ACK : confirmation de réception. L’esclave envoie un signal d’acquittement au maître
pour confirmer la réception. ACK = 0
 Transmission de données : le maître reçoit les données qu’il souhaite lire de la part de
l’esclave et suivi d’un ACK qui indique la fin de la transmission de l’esclave. Les bits de
données : 11111000
ACK = 1
 Stop : il indique la fin de la communication.
Bit de stop = 1

Exemple 2 :
 Start : bit de start = 0
 Adresse : 1111001
 R/W : R/W = 0 cela indique que le maître souhaite envoyer une requête d’écriture.
 ACK : il indique la fin de la requête souhaiter par le maître. ACK = 1.
 Stop : il indique la fin de la communication. Bit de stop = 1

− A partir de la documentation technique de l’Arduino, déterminons où se trouvent les lignes

SDA et SCL
La carte Arduino n’a qu’un seul module I2C, mais elle fournit ces lignes SDA et SCL à deux
endroits différents.
− Donnons le rôle de chaque Arduino A et B (maitre ou esclave)
L’Arduino A est le périphérique maître et l’Arduino B est le périphérique escale.

− A partir de la documentation technique du circuit TMP36, déterminons la tension

d'alimentation, la gamme de température mesurée et le brochage du circuit.


D’après la datasheet on a :
La tension d’alimentation est : 𝑉𝐼𝐻 (𝐿𝑜𝑔𝑖𝑐 𝐻𝑖𝑔ℎ 𝐼𝑛𝑝𝑢𝑡 𝑉𝑜𝑙𝑡𝑎𝑔𝑒) = 𝟐, 𝟕 𝑽 et

𝑉𝐼𝐿 (𝐿𝑜𝑔𝑖𝑐 𝐿𝑜𝑤 𝐼𝑛𝑝𝑢𝑡 𝑉𝑜𝑙𝑡𝑎𝑔𝑒) = 𝟓, 𝟓 𝑽

La gamme de température est : −𝟒𝟎℃ à 𝟏𝟐𝟓℃


Le brochage du circuit est :

b. Mesure
Présentation du matériel
La carte Arduino UNO
La carte Arduino repose sur un microcontrôleur de type ATMEL de référence ATMega328 et
des composants électroniques complémentaires associée à des entrées et sorties qui
permettent à l'utilisateur de brancher différents types d'éléments externes. Le microcontrôleur
programmé peut analyser et produire des signaux électriques de manière à effectuer des
tâches très diverses. Arduino est utilisé dans beaucoup d'applications comme l'électronique
industrielle et embarquée, pilotage d'un robot, commande des moteurs et faire des jeux de
lumières, communiquer avec l'ordinateur, commander des appareils mobiles. Chaque module
d’Arduino possède un régulateur de tension +5 V et un oscillateur à quartez 16 MHz. Pour
programmer cette carte, on utilise le logiciel IDE Arduino.
Déroulement du programme

Tinkercad
Il s’agit d’une solution de CAO (conception assistée par ordinateur) conçu pour le secteur de
l’éducation qui permet de créer des conceptions en 3D et des simulations électroniques à l’aide
d’outils de codage ou de conception intégrés.

BreadBoard ou platine d’essai


Une platine d’essai ou breadboard permet de réaliser des prototypes de montages
électroniques sans soudure et donc de pouvoir réutiliser les composants.
Le potentiomètre
Le potentiomètre est une résistance variable dont on peut faire varier sa valeur ohmique à l’aide
d’un curseur. La plupart des potentiomètres sont soit rotatifs, soit linéaires.
Le rôle du potentiomètre dans le circuit est d'ajuster le contraste de l'écran LCD.

Symbole d’un potentiomètre

Ecran LCD
Les écrans LCD existent depuis 1971. Ils n'ont pas cessé de se développer depuis, et équipent
maintenant bien des appareils à affichage embarqué (appareils photo, digicodes, montres,
téléphones...). LCD est l'abréviation anglaise de "liquid crystal display" qui veut dire : afficheur
à cristaux liquides. L'écran LCD que nous allons utiliser est un écran permettant l'affichage de
16x2 caractères, c'est-à-dire deux lignes de 16 caractères.
Capteur de température TMP36
Ce capteur de température permet d’acquérir une température ambiante. Une fois alimenté, il
va délivrer une tension analogique proportionnelle à la température. Sa précision est de ± 2℃,
son échelle est de 10𝑚𝑉/℃ et sa calibration est de 750𝑚𝑉 à 25℃.

− Proposons un schéma de câblage possible des différents équipements.


Pour que les deux cartes Arduino puissent communiquer par l’intermédiaire du bus I2C et que
l’Arduino A reçois les mesures de température ambiante issues de l’Arduino B doté du capteur
de température TMP36, il faut procéder au câble du schéma comme suit : d’abord, il faut relier
les deux lignes SCL et SDA des deux cartes Arduino. Ensuite il faut relier la broche 2 du capteur
TMP36 à A0 de l’Arduino B (esclave) et les broches 1 et 3 respectivement à l’alimentation et
au GND. Enfin, relier l’écran LCD sur la carte Arduino A (maître) de la manière suivante :
Borne de l’écran Pin Arduino /Breadboard
1 (GND) Masse
2 (𝑉𝐶𝐶) +5V
3 (V0) Curseur du potentiomètre
4 (RS) Pin 12
5 (R/W) Masse
6 (E) Pin 11
11 (DB4) Pin 5
12 (DB5) Pin 4
13 (DB6) Pin 3
14 (DB7) Pin2
15 (Anode de LED) R ------- +5V
16 (Cathode de LED) Masse
La résistance permet de limiter le courant qui va traverser l’écran.
− Expliquons le rôle de nos principales fonctions liées à la communication I2C.
Fonctions pour Arduino maître
#include <Wire.h>
Wire : c’est le nom de la bibliothèque I2C intégrée à l’IDE Arduino. Cette bibliothèque permet
de communiquer via le bus I2C.
Wire.begin () : elle est utilisée pour initialiser la librairie Wire et se connecter au bus I2C en
tant que maître.
Afin de gérer l'affichage de messages sur l'écran, des instructions spécifiques existent. Elles
font partie d'une librairie qu'il est nécessaire d'intégrer au programme.
La librairie associée à notre écran LCD s'appelle LiquidCrystal.
On l'intègre dans un programme par l'instruction #include <LiquidCrystal.h> en tout début de
programme, en même temps que la déclaration des variables (avant la procédure setup()).
Dans la même partie du programme, on définit les broches de l'écran, en cohérence avec le
câblage vu précédemment : LiquidCrystal lcd (rs, en, d4, d5, d6, d7).

lcd.begin(16, 2) : initialisation de l'écran (16 colonnes et 2 lignes) ; lcd.clear() :


efface l'ensemble de l'écran ; lcd.setCursor(0, 0) : place le curseur à la
première colonne et la première ligne ; lcd.print(data) : affiche la valeur de la
variable data à partir du curseur ;

Wire.requestFrom(SLAVE_ADDRESS, 3) : requesForm() est une méthode de la bibliothèque


Wire utilisée pour demander des données à un périphérique esclave.
SLAVE_ADRESS est le paramètre de cette fonction qui représente l’adresse du périphérique
esclave.
3 est le deuxième paramètre qui indique le nombre de bytes de données que le maître souhaite
recevoir de l’esclave.
La fonction Wire.requestFrom(SLAVE_ADDRESS, 3) est utilisée par le périphérique maître
qui sert à envoyer une demande au périphérique esclave dont l’adresse est spécifiée par
‘SLAVE_ADRESS’, lui demandant de lui envoyer 3 bytes de données le périphérique esclave
reçoit cette demande et prépare les données demandées.

Wire.available() : cette fonction est utilisée pour vérifier s’il y a des données disponibles à lire
sur le bus I2C après avoir effectué une demande pour recevoir des données d’un périphérique
esclave. Elle retourne le nombre de bytes disponibles à la lecture.

Wire.read() : cette fonction est utilisée pour lire un octet qui a été transmis d’un périphérique
esclave à un maître ou a été transmis d’un maître à un esclave.

Fonctions pour Arduino esclave


Wire.begin(MASTER_ADDRESS) : rejoindre le bus I2C avec l’adresse du maître.

Wire.onRequest(requestEvent) :
onRequest() permet de définir une fonction de rappel pour traiter les demandes de données
provenant du maître. requestEvent : cette fonction sera automatiquement appelée lorsque le
maître envoie une requête de données à l’esclave.
Wire.onRequest(requestEvent) : elle permet d’enregistrer un événement à appeler lorsqu’un
maître demande des données à ce périphérique esclave.

Wire.write(dataBytes, 4) : cette fonction permet d’envoyer un tableau (dataBytes) de 4 octets


de données sur le bus I2C en tant que maître. Cette fonction écrit le paramètre qu’on lui donne
(le premier) sur le bus de communication. Elle est commune aux deux types de périphériques.
Le maître écrit sur le bus
L’esclave écrit sur le bus mais après requête du maître, il ne peut pas écrire de son propre chef.

void requestEvent() : fonction qui s’exécute chaque fois que des données sont demandées
par le maître à l’esclave.

− Réalisons une copie d’écran pour 5 mesures différentes


En faisant varier le curseur du capteur de température, on observe que la valeur indiquée par
le capteur et celle affichée par le LCD sont identique, ils évoluent dans le même ordre.
Conclusion
Nous avons réalisé le montage et expérimenté la transmission de données avec succès. Pour
chaque variation de la valeur observée au niveau du capteur TMP36, cela s’est immédiatement
perçu au niveau du maitre qui en faisant aussitôt l’affichage sur l’écran LCD. Nous sommes
satisfaits des résultats de l’expérience car la communication établit s’est montrée fidèle dans
l’échange d’information.

Vous aimerez peut-être aussi