IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

I2C c'est facile . . . pour ceux qui savent


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut I2C c'est facile . . . pour ceux qui savent
    Bonjour à tous

    Je continue à être nouveau es Arduino, mais je me soigne.

    Avec vos aides, j'ai déjà réussi à afficher un peu ce que je veux sur un afficheur 2 lignes de 20 caractères et je m'essaye à la version quatre lignes qui est en I2C.

    J'ai trouvé des tutos, mais pour moi, ils ne fonctionnent pas, car probablement, j'oublie un détail capital.

    J'ai vu qu'il fallait trouver l'adresse du périphérique qui utilise la bibliothèque wire.h par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /*=================================================================
    Ce sketch est un scanner I2C: il essaye de communiquer avec toutes 
    les adresses I2C possibles et affiche celle(s) qui réponde(nt).
      
                          BRANCHEMENT
    * Pin SCD du moule à scanner  ----------->  SCD de l’Arduino
    * Pin SDA du moule à scanner  ----------->  SDA de l’Arduino
    ================================================================ */
     
    #include <Wire.h>
    void setup()
    {
      Wire.begin();
      Serial.begin(9600);
      Serial.println("\nI2C Scanner");
    }
     
    void loop()
    {
      byte error, address;
      int nDevices;
      Serial.println("Recherche en cours...");
      nDevices = 0;
      for(address = 1; address < 127; address++ ) 
      {
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
        if (error == 0)
        {
          Serial.print("Equiment 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'address 0x");
          if (address<16) 
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("Aucun Equipement I2C trouve\n");
      else
        Serial.println("Fini\n");
     
      delay(5000);           
    }
    Qui n'aboutit pas.

    Le câblage est ultra simple, et utilise quatre fils (alims et deux fils de communication), mais l'envoi du programme ne me renseigne pas.

    Où sont censées s'afficher les résultats?

    J'ai fait une version utilisant mon afficheur à quatre fils de data qui lui, fonctionne en deux lignes, mais ma modif pour afficher une valeur m'affiche 127.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    // i2c_scanner version 3
    //
    // Version 1
    //    This program (or code that looks like it)
    //    can be found in many places.
    //    For example on the Arduino.cc forum.
    //    The original author is not know.
    // Version 2, Juni 2012, Using Arduino 1.0.1
    //     Adapted to be as simple as possible by Arduino.cc user Krodal
    // Version 3, Feb 26  2013
    //    V3 by louarnold
    // Version 4, March 3, 2013, Using Arduino 1.0.3
    //    by Arduino.cc user Krodal.
    //    Changes by louarnold removed.
    //    Scanning addresses changed from 0...127 to 1...119,
    //    according to the i2c scanner by Nick Gammon
    //    http://www.gammon.com.au/forum/?id=10896
    // Version 5, March 28, 2013
    //    As version 4, but address scans now to 127.
    //    A sensor seems to use address 120.
    // 
    //
    // This sketch tests the standard 7-bit addresses
    // Devices with higher bit address might not be seen properly.
    //
     
    #include <Wire.h>
     
     
    void setup()
    {
      Wire.begin();
     
      Serial.begin(9600);
      Serial.println("\nI2C Scanner");
    }
     
     
    void loop()
    {
      byte error, address;
      int nDevices;
     
      Serial.println("Scanning...");
     
      nDevices = 0;
      for(address = 1; address < 127; address++ ) 
      {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
        if (error == 0)
        {
          Serial.print("I2C device found at address 0x");
          if (address<16) 
            Serial.print("0");
          Serial.print(address,HEX);
          Serial.println("  !");
     
          nDevices++;
        }
        else if (error==4) 
        {
          Serial.print("Unknow error at address 0x");
          if (address<16) 
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      else
        Serial.println("done\n");
     
      delay(5000);           // wait 5 seconds for next scan
    }
    Peut-être qu'une mise sur les rails en me précisant comment faire pour réussir.

    Dans le même ordre d'idées, je dois utiliser la RTC en I2C qui utilise le DS3231 que je viens de recevoir, et qui va me poser le même problème.


    Je réfléchis de plus en plus à l'architecture hardware et les boutons à utiliser.

    Je vais de ce pas aller préparer ces "commandes mécaniques" pour ajouter à ma maquette et commencer la programmation effective.

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 919
    Par défaut
    Bonjour
    Où sont censées s'afficher les résultats?
    il faut ouvrir la console série à 9600 bauds

    RTC en I2C qui utilise le DS3231
    ce sera assez simple: installez la RTClib
    connectez les 4 fils comme pour l'écran
    utilisez les exemples fournis


    Pour la gestion des boutons, je recommande la librairie de @bricoleau qui est en français et très efficace

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonjour,

    un point me chagrine dans ce que tu as écrit : tu dois rechercher l'adresse de ton composant. Elle n'est pas écrite sur le circuit ou dans la doc ? Parfois, on te donne une adresse partielle, que tu complètes en soudant deux pastilles CMS pour former un pont ("SMD solder jumper").

  4. #4
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut
    Citation Envoyé par Auteur Voir le message
    ... Elle n'est pas écrite sur le circuit ou dans la doc ? ...
    Je suis moi-même, un adepte convaincu des datasheets, mais là, mon fournisseur ne me la fournis pas.

    A moins que je ne sache pas la chercher.

    Le lien du fournisseur sur le composant ne précise pas grand chose:

    https://www.amazon.fr/gp/slredirect/...d-a5e3056b510c

    Rien dessus ne laisse supposer que c'est modifiable en adresse. Je vois trois micro-composants CMS au bout du circuit intégré et la batterie sur l'autre face.


    J'en ai reçu trois. Bien entendu, ils n'iront pas sur la même carte, mais encore, il faut pouvoir l'exploiter.

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    c'est un module avec une puce DS3231, c'est dans la datasheet du DS3231 qu'on trouve l'adresse :

    Nom : slaveAddress.PNG
Affichages : 164
Taille : 47,5 Ko

    1101000 = 0x68


    Mais l'adresse devrait apparaître avec le scanner I2C, bizarre... Mais je ne vois pas bien les connecteurs de ce module sur les photos, erreur de câblage ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    On devine des connecteurs +, - pour l'alimentation, puis D et C.
    D pour Data (SDA) et C pour Clock (SCL) je suppose...
    Images attachées Images attachées  

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 919
    Par défaut
    Les carte ds3231 sont prêtes à l’emploi et l’adresse I2C fixe et prise en compte par la bibliothèque. Installez RTClib et tout marchera directement

  8. #8
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 123
    Par défaut
    Bonjour à tous

    Citation Envoyé par f-leb Voir le message
    On devine des connecteurs +, - pour l'alimentation, puis D et C.
    D pour Data (SDA) et C pour Clock (SCL) je suppose...
    Je confirme. Ton image est même meilleure que la mienne, trouvée parmi une multitude de photos inutilisables.

    Je suppose que l'alimentation se fait en 3,3V et non en 5V, puisque, selon toute vraisemblance, la batterie (et non la pile dans cette version), doit comporter un élément de charge.

    Citation Envoyé par Jay M Voir le message
    Les carte ds3231 sont prête à l’emploi et l’adresse I2C fixe et prise en compte par la bibliothèque. Installez RTClib et tout marchera directement
    J'ai fini par trouver le RTClib.h, sauf que si je l'inclus dans le programme, il n'est pas trouvé.

    Où doit se trouver placé le RTClib.h? Si je le mets à la racine du répertoire Arduino du disque C, il est not found à la compilation. Je l'ai placé dans libraries, idem.

    Y a-t-il, dans les exemples de base, un .ino incluant la RTC, et directement utilisables?

    Merci à tous les participants grâce auxquels je me sens progresser, même si je tâtonne encore.

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 919
    Par défaut
    Pour la RTClib, elle est dispo directement dans le gestionnaire de bibliothèques, si vous l’installez par ce biais, elle sera mise au bon endroit pour vous

    La documentation en anglais sur l’installation des bibliothèques est ici

    Une fois que c’est installé, vous avez l’exemple ds3231 directement utilisable avec affichage dans la console

Discussions similaires

  1. Réponses: 21
    Dernier message: 13/10/2006, 13h12
  2. IIS + Apache + mysql...pour ceux qui ont déjà installé
    Par ludophil dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 15/10/2005, 02h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo