3.1 Mise en œuvre de la liaison I2C




3.11: Analyse du protocole de communication


       Identifier sur le chronogramme suivant les différentes informations:


La condition de start

La condition de stop

La période du signal d’horloge TH (Oscilloscope calibre 10µs/carreau)

Repérer l’adresse (indiquer l’état des bits 0 ou 1)

Repérer le bit R/W (indiquer l’état du bit 0 ou 1)

Repérer le bit Ack (indiquer l’état du bit 0 ou 1)


       


               





       Répondes aux questions sur le document réponse_Logiciel_ele :


La condition de start

Calculer la période du signal SCL (TH).

Calculer la fréquence de communication du bus (fH).

Dans quel état est le bit Ack ?

Le chronogramme précédent a été relevé coté Raspberry ou coté Arduino ? Justifier votre réponse.

Calculer la valeur de l’adresse et relever l’état du bit R/W



               3.12 : Vérification du fonctionnement du bus



               On peut maintenant mettre en œuvre la communication sur le Bus I2C.

Si sur le système d'exploitation de la carte Raspberry on a déjà les ressources pour mettre en œuvre cette communication, sur la carte Arduino il n'y a aucun programme!

On vas donc créer un petit programme dans l’interface de développement "Arduino" qui permettra de configurer uniquement la liaison I2C.

Un programme minimum que l'on utilisera comme base dans la suite de cette étude.


3.121: Ouvrir le logiciel "Arduino" et copier/coller les lignes suivantes dans l'interface utilisateur.



/*  Programme test de la liaison I2C entre la carte Raspberry et la carte Arduino.

*  Auteur:

*  Date:

*  Le Raspberry est maître de la communication et l'Arduino esclave.

*  Utilisation de la librairie Wire:

*  Pour information:

*          https://www.arduino.cc/en/Reference/Wire

*         http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.LibrairieWire

*  Programme minimum pour déclarer le bus i2c.

*  L'utilisation de la librairie "Wire"

*  L'adresse de la carte Arduino est déclaré en hexadécimale.

*  Elle est déclarée, comme esclave, dans cette exemple à l'adresse N°3, première adresse libre du bus.

*  Rem: Le programme principal ne fait rien.

*  

*/

#include <Wire.h>


#define SLAVE_ADDRESS 0x03 // Déclaration de l'adresse de la carte Arduino


// Initialisation

void setup() {

     Wire.begin(SLAVE_ADDRESS); // Initialisation de la liaison i2c

}


// Programme principal

void loop() {

   delay(100);

}



3.122: Sauvegarder votre programme après avoir complété, le nom de l'auteur et la date, sous le nom :


test_i2c_VotreNom.ino


3.123: Téléverser votre programme dans la carte Arduino.

N'oublier pas de définir dans l'interface Arduino le type carte utilisé (la cible) et le port de communication qui doit être le même que dans votre gestionnaire de périphériques de votre système d'exploitation.


Voilà c'est fini, on peut (enfin) tester la communication


3.124: Ouvrir le logiciel "VNC Viewer" et connectez-vous sur votre carte Raspberry.



Sur votre bureau ouvrir le logiciel "LXTerminal".




Dans cette console, taper la commande suivante: "i2cdetect -y 1"



Cette commande dans le terminale vas déclencher une procédure d'analyse du bus par la carte Raspberry qui je le rappel ici est maître de la communication.

Cette procédure envoi sur le bus les adresses (adresse: 03H à 77H soit adresse: 3 à 119 en décimale) successivement avec un bit R/W à "0"  (écriture) et interprète l'état du bit Ack.

Si un périphérique est connecté au bus et voit son adresse passé sur le bus, il imposera un état bas pendant la période Ack.

Nous devrons donc obtenir avec ce programme test une réponse à l'adresse 03H (adresse de déclaration de la carte Arduino) et uniquement cette adresse s'il n'y a pas d'autre composant i2c connecté au bus.


Vous devez obtenir le résultat suivant:



Voici une image relevée à l'oscilloscope de la communication sur le bus:



Rem: si vous n'avez pas de réponse de la carte plusieurs problèmes sont possibles.

1: Vérifier votre montage (c'est fondamentale!!!), mesurer en statique la valeur les résistors de pull-up.

2: Avez-vous bien autorisé le fonctionnement du bus i2c dans la configuration de la carte Raspberry

3: Votre carte Arduino est bien configuré dans l'interface (bonne cible, bon port)?

4: au repos les deux lignes SDA et SCL sont à 5v coté Arduino et à 3,3v coté Raspberry? vérifier avec un multimètre.



Modifier le programme "Raspeberry_i2c_Arduino_test_VotreNom.ino" en choisissant une autre adresse, dans l’exemple suivant c’est l’adresse N°4.

Coller dans le document réponse votre image du résultat de l’exécution de la commande "i2cdetect -y 1"



Voici une image relevée à l'oscilloscope de la communication sur le bus:


Vous possédez maintenant un bus de communication opérationnel entre votre carte Raspberry (serveur du système) et votre carte Arduino.





Autre exemple à l'adresse 45H soit 69 décimale déclarée dans votre programme "Raspeberry_i2c_Arduino_test_VotreNom.ino".



Résultat de l’exécution de la commande:








Créé avec HelpNDoc Personal Edition: Générateur de documentation iPhone gratuit