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
- Etudier le bus I2C et Spi.
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.
-
Rappels concernant le bus I2C
-
Ce bus utilise trois lignes pour communiquer: , et la
. Puisqu'il utilise une horloge et une ligne de donnée, ce bus est un bus
_________________________ .
-
La transmission se fait de la manière suivante:
-
Condition de départ: Le maitre passe SDA à l'état bas quand SCL est à l'état haut.
-
Transmission de l'adresse du récepteur sur 7 bits (valeur possible de 0 à 127), le 8éme bit indique si le maitre fait une opération de (niveau__) ou ____________________ (niveau__).
-
Acquittement du récepteur. Celui-ci force un état bas sur la ligne SDA sur la 9éme impulsion d'horloge générée par le maître. Si le récepteur n'acquitte pas, la ligne SDA reste au niveau 1 à cause de la résistance de rappel au +Vcc.
-
Transmission d'un octet de donnée (bit de poids fort en premier).
-
Acquittement du récepteur. Le maitre peut alors continuer à transmettre ses données.
-
Condition d'arrêt: Le maître force le signal SDA à l'état haut quand SCL est à l'état haut.
-
Les principales fonctions disponibles pour gérer le bus I2C des cartes Arduino sont exposées dans un document ressources.
-
Etude du capteur de température DS1621 : Afin d'utiliser ce capteur, nous allons commencer par
étudier sa documentation technique.
-
Précisez la gamme de température mesurable par le DS 1621:
-
Précisez la gamme d'alimentation acceptable par ce circuit:
-
La température est renvoyée sous quelle forme?
-
Complétez le tableau suivant:
Broche |
Symbole |
Description |
1 |
SDA |
|
2 |
SCL |
|
3 |
TOUT |
|
4 |
GND |
|
5 |
A2 |
|
6 |
A1 |
|
7 |
A0 |
|
8 |
VDD |
|
-
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
-
Que faut-il garder pour faire une lecture de la température au degré prés ?
-
Donnez les deux modes de fonctionnement du DS1621.
-
-
-
Donnez l'adresse I2C générique (en fonction de A2A1A0) d'un DS1621.
-
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.
-
Câblage du circuit DS1621 sur une carte Arduino
On désire que le DS1621 soit à l'adresse la plus basse possible.
-
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.
-
Réaliser le câblage conformément au dessin que vous avez réalisé.
-
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.
-
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.
-
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.