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

Raspberry Pi Discussion :

Raspberry et I2C ,avec WiringPi, et module SI7021 . [Tutoriel]


Sujet :

Raspberry Pi

  1. #1
    Membre averti

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 204
    Points : 308
    Points
    308
    Par défaut Raspberry et I2C ,avec WiringPi, et module SI7021 .
    Bonjour à tous,

    Je viens de poster un petit tutoriel sur :


    Ce tutoriel est créé afin de réaliser une communication avec le module SI7021 en utilisant la bibliothèque
    wiringpi.

    Le tutoriel propose une sortie en mode console avec les deux mesures , température et humidité, ainsi que le checksum de ces deux valeurs.
    Pour les fondus de matériels, j'ai aussi traduis le code pour l'Arduino.

    J'espère vous avoir avoir aidé.
    N'hésitez pas à laisser un commentaire.

    Michel Semal.

    Le forum Raspberry Pi sur developpez.com

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 612
    Points : 56 717
    Points
    56 717
    Billets dans le blog
    40
    Par défaut
    Merci Michel pour cette contribution

    C'est important la partie décodage des trames I2C à partir de la datasheet, le lecteur pourra ainsi s'adapter à tout capteur I2C, et il y en a beaucoup.

    Wiring pi est installé par défaut sur Raspbian, mais toujours en C, le lecteur peut aussi utiliser la bibliothèque bcm2835(facile à installer) et causer à son capteur en I2C.

    Et si on préfère en Python avec RPi.GPIOhttps://deusyss.developpez.com/tutor...ythonEtLeGpio/

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 612
    Points : 56 717
    Points
    56 717
    Billets dans le blog
    40
    Par défaut
    Salut

    J'ai repris ce Si7021 que je pilote avec une carte maître FPGA programmée en Verilog. J'ai pas mal galéré, mais j'obtiens enfin quelque chose...

    Après avoir envoyé la commande de température en mode No Hold Master (commande 0xF3), je lance et relance la commande de lecture (Setup Read 0x40). Tant que la conversion n'est pas terminée, le capteur n'acquitte pas (NAK) :

    Nom : tramei2c_si7021_1.PNG
Affichages : 1035
Taille : 55,5 Ko
    (point vert = Start ou Start Repeating, point orange = Stop)

    Environ 7ms plus tard (conforme à la doc qui annonce 7ms typique et 10,8ms maxi), la conversion est terminée et le capteur acquitte enfin (Setup Read 0x40 + ACK):

    Nom : tramei2c_si7021_2.PNG
Affichages : 1044
Taille : 59,6 Ko

    Il reste alors à lire les 3 octets retournés (successivement poids fort MSB, poids faible LSB, et Checksum)

    0x6034, il fait 19,2°C

    Je pourrai en dire davantage quand j'aurai fini la mise au point, je ne maîtrise pas tout encore et je ne suis pas au bout de mes peines

    extrait du code (machine à états finis en Verilog)
    Code verilog : 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
    ...
            s_I2C_ADRR  : // Slave Address (0x40) + Read
              begin
                if (!i2c_busy) begin
                  i2c_start = 0;
                  i2c_write = 1;
                  i2c_data_in = I2C_ADRSi7021_Read;
                  r_I2C_State_Next = s_I2C_MEASURE_CHECK;
                end 
              end 
            
            s_I2C_MEASURE_CHECK :
              begin
                if (!i2c_busy) begin
                  if (i2c_ack_write) begin // si NAK
                    i2c_write = 0;
                    i2c_start = 1;
                    r_I2C_State_Next = s_I2C_ADRR; // si NAK, la conversion n'est pas terminée, on retourne à l'étape précédente
                  end else
                  begin // si AK
                    r_I2C_State_Next = s_I2C_MEASURE;  // si AK, fin de la conversion, il faut récupérer les données de température à l'étape suivante
                  end
                end
              end
    
            
            s_I2C_MEASURE : // conversion terminée
              begin
                if (!i2c_busy) begin
                  i2c_write = 0;
                  i2c_read = 1;
                  i2c_ack_read = 1;
                  r_I2C_State_Next = s_I2C_READ_MSB;
                end
              end
    
            s_I2C_READ_MSB :
              begin
              ...

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Salut

    J'ai repris ce Si7021 que je pilote avec une carte maître FPGA programmée en Verilog. J'ai pas mal galéré, mais j'obtiens enfin quelque chose...
    Hello,

    as-tu prévu un tutoriel ? J'aimerais bien connaître les cartes et logiciels que tu as utilisés. Les copies d'écran proviennent d'où ?

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


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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 612
    Points : 56 717
    Points
    56 717
    Billets dans le blog
    40
    Par défaut
    Salut,

    Pour un tutoriel, il faudra attendre un peu. Il y a trop de trucs que je ne maîtrise pas bien, ça reste assez bancal pour l'instant (je n'arrive pas à faire des relevés à suivre, je suis obligé de débrancher/rebrancher la carte à chaque mesure de température, je n'arrive pas à calculer la température en °C pour l'afficher, etc. encore du boulot)

    Pour la carte FPGA utilisée voir ici, pour les copies d'écran, voir

Discussions similaires

  1. Problème avec ordre des modules
    Par rafailow dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2008, 21h10
  2. Problème avec un nouveau module
    Par fontomas dans le forum Modules
    Réponses: 3
    Dernier message: 29/05/2008, 15h14
  3. Réponses: 1
    Dernier message: 16/08/2007, 16h42
  4. acceder au bus i2c avec visual c++
    Par ledaker dans le forum MFC
    Réponses: 1
    Dernier message: 06/03/2006, 10h43
  5. Plantage application avec défaillance du module Kernel32
    Par cosminutza dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 16h15

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