Scanner de bus I2C pour Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Scanner de bus I2C pour Arduino

Messagepar tiptop » Ven 16 Aoû 2013 22:03

Scanner de bus I2C pour Arduino

Principe
Le bus I2C permet de relier facilement différents circuits à un microprocesseur.
Il est implémenté par logiciel dans le microcontrôleur Arduino.
I²C est alors utilisable avec la bibliothèque 'Wire'.

Plusieurs équipements, soit maîtres, soit esclaves, peuvent être connectés au bus.

Quand on réalise un branchement sur le bus I2C , on a besoin de savoir si le dispositif est bien branché et s'il répond correctement.

Programme Scanner I2C

Ce petit programme I2cScanner permet de scanner les adresses 7-bits (de 1 à 127) et de lister tous les dispositifs I2C qu'il trouve.

Code: Tout sélectionner
// --------------------------------------
// i2c_scanner
// Ce programme teste ce qui est branché sur le bus I2C
//
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Tiptopboards.com modifié 16 08 2013
//Source : http://playground.arduino.cc/Main/I2cScanner

#include <Wire.h>
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\n Scanner I2C");
}

void loop()
{
  byte error, address;
  int nDevices;
  Serial.println("Recherche...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) //Adresses 1-127
  {
    // Le scanner I2C utilise la valeur retournée par Write.endTransmisstion
   //pour voir si un dispositif répond à cette aderess
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("Dispositif I2C trouve a l addresse 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Erreur inconnue a l addresse 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("Pas de dispositif I2C trouve\n");
  else
    Serial.println("Termine\n");
  delay(5000);        // Attend 5 secondes pour lancer le scan suivant
}


Utilisation :
Image
Dans cet exemple un module horloge RTC DS1307 est branché sur le bus I2C et il fonctionne correctement.
Traduit d'après http://playground.arduino.cc/Main/I2cScanner

Connexion
La connexion I2C est réalisée par l'intermédiaire de 2 lignes :
  • SDA (Serial Data Line) : ligne de données bidirectionnelle,
  • SCL (Serial Clock Line) : ligne d'horloge de synchronisation bidirectionnelle.

en ajoutant
  • GND la masse qui doit être commune aux équipements.
  • La tension d'alimentation VDD


Documentation
La norme I2C http://fr.wikipedia.org/wiki/I2C
http://playground.arduino.cc/Main/I2cScanner
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités