alim13
Bac STI2D

Le Bus I2C et SPI

Noms :  
Centre d'intérêt : CI 2 Instrumentation / Acquisition et restitution de grandeurs physiques
Classe : Term Sti2d Sin
Id programme : sin15, sin31  
Conditions : Par 2 , durée  3 heures.
Matériel : - un ordinateur;

Logiciel : - le logiciel Proteus;
- Utiliser le navigateur chrome;
Document :  

I. Objectifs

II. Présentation

Le but de ce TP est de connaitre la température mesurée par un capteur de température connecté sur un bus I2C.

 

  1. Rappels concernant le bus I2C

. Puisqu'il utilise une horloge et une ligne de donnée, ce bus est un bus

_________________________ .

 

Les principales fonctions disponibles pour gérer le bus I2C des cartes Arduino sont exposées dans un document ressources.

 

  1. Etude du capteur de température DS1621 : Afin d'utiliser ce capteur, nous allons commencer par

étudier sa documentation technique.

 

  1. Précisez la gamme de température mesurable par le DS 1621:

 

  1. Précisez la gamme d'alimentation acceptable par ce circuit:

 

  1. La température est renvoyée sous quelle forme?

 

  1. Complétez le tableau suivant:

 

Broche

Symbole

Description

1

SDA

 

2

SCL

 

3

TOUT

 

4

GND

 

5

A2

 

6

A1

 

7

A0

 

8

VDD

 

 

 

 

 

 

 

  1. Soit le tableau suivant présentant le code délivré en fonction de la température.

 

 

 

En remarquant que le code utilisé est le code complément à deux, complétez les deux lignes suivantes.

 

- +15,5°C : - -8,0°C :

- : 0001 1101 0000 0000 - : 1011 1100 1000 0000

 

  1. Que faut-il garder pour faire une lecture de la température au degré prés ?

 

  1. Donnez les deux modes de fonctionnement du DS1621.

 

-
-

  1. Donnez l'adresse I2C générique (en fonction de A2A1A0) d'un DS1621.

 

  1. En supposant que le DS1621 est configuré en mode « conversion unique sur demande ».

 Pour lire une température dans ce mode il faut donc envoyer tout d'abord l'ordre « Start Convert T », compléter avec les valeurs adéquates les tableaux des chronogrammes suivants.

 

 

 D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

 

 Dans un second temps, il faut envoyer l'ordre « Read Temperature ». Complétez les deux premiers octets à envoyer ci-dessous.

 

 

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

 

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

 

 

  

D7

D6

D5

D4

D3

D2

D1

D0

 

 

 

 

 

 

 

 

 

En supposant que la température renvoyée par le capteur est de 23,5°C, compléter la deuxième série de valeurs de la page précédente.

  1. Câblage du circuit DS1621 sur une carte Arduino

On désire que le DS1621 soit à l'adresse la plus basse possible.

  1. A partir de la notice et à l'aide du logiciel Fritzing (à récupérer sur le disque réseau), dessiner le dessin de la platine d'essai ou apparaitront: la carte arduino, la plaque de prototypage, le DS1621 et les deux résistances, ensuite dessiner les fils de câblage. (Pour obtenir des fils de câblage souples vérifier que l'option "Curvy wires and legs" placée dans Edition->Préférences -> vue de la platine d'essai est validée.

 

  1. Réaliser le câblage conformément au dessin que vous avez réalisé.

 

  1. Mise en œuvre du circuit

 

a. Avant d'utiliser ce circuit, il est nécessaire de l'initialiser, le début du programme pour la carte Arduino doit être le suivant:

#include <Wire.h> //___________________________________________________________

 

#define DS1621_ID 0b_ _ _ _ _ _ _ //Adresse du composant I2C sur 7 Bits

void setup() {

Serial.begin(9600); //________________________________________________________

Wire.begin(); //_____________________________________________________________________________

Wire.beginTransmission(DS1621_ID); //____________________________________________________________

Wire.write(0xAC); //_________________________________________________________________________

Wire.write(0x01); // ________________________________________________________________________

Wire.endTransmission(); //____________________________________________________________

}

void loop() {

……

Commentez avec précision les lignes du programme ci-dessus, notamment le choix des valeurs 0xAC et 0x01.

 

b. Ecrivez un programme qui envoie toutes les secondes sur le port série les deux octets de température du DS1621, pour cela s'aider des réponses à la question 3) i.

 

c. Testez le programme et vérifier la cohérence des valeurs obtenues.

 

d. Modifiez le programme précédent afin que la température soit affichée à +-0,5° par un nombre en virgule flottante.

 

  1. Relevés des signaux SCL et SDA

 

a. Relevez à l'aide d'un oscilloscope les signaux SCL et SDA pour les deux premiers octets de chaque mesure.

 

b. Sur les relevés précédents, repérez: les phases de Start et de Stop, les phases d'acquittement et les valeurs transmises.

 

c. Enlevez le circuit et par un relevé, montrez qu'il n'y a plus d'acquittement de la part de l'esclave.

 

d. Modifiez ce qui est nécessaire afin que le DS1621 soit à l'adresse la plus haute possible, montrez le bon fonctionnement par un relevé adéquat.

 

  1. Pour aller plus loin

D'après la notice du DS1621, il est possible d'obtenir une précision à -+0,1°, modifiez le programme afin d'obtenir cette précision de mesure.

 

III. Bus SPI

Mettre en oeuvre un bus spi en utilisant la carte arduino et un afficheur lcd SPI.

 

IV. Conclusion

Comparer le bus i2c et spi.

Affichages : 1534