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 :

Arduino et le bus I2C [Tutoriel]


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    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 072
    Billets dans le blog
    47
    Par défaut Arduino et le bus I2C


    Je vous propose un nouvel article intitulé :


    [...] Dans ce tutoriel, nous allons décrire l'architecture physique du bus I2C, le protocole de communication série et comment communiquer en I2C entre une carte Arduino et un capteur de température DS1621.
    Nom : prog_final2.jpg
Affichages : 5486
Taille : 97,1 Ko

    Bonne lecture



    Les meilleurs cours et tutoriels pour apprendre les systèmes embarqués
    Les meilleurs cours et tutoriels pour apprendre Arduino

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 658
    Par défaut
    Article intéressant.
    Juste une petit question à propos du paragraphe V-B. Branchements :

    L'adresse est codée avec sept bits. Dans le protocole, l'adresse est suivie du bit R/W pour indiquer une opération de lecture/écriture et former un octet. Avec Arduino, A0, A1 et A2 seront les bits de poids faible et le huitième bit de poids fort est à zéro. Ce qui donne pour la valeur de l'octet d'adresse du composant :
    Adresse = 0100 1000 = 48Hex
    Est-ce que le protocole I2C fixe la valeur des 5 premiers bits ?
    Si j'ai bien compris le 8ème bit de poids fort est forcément 0 car il correspond au start. Mais ensuite, les 4 bits suivants sont-ils obligatoirement 1001 ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    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 072
    Billets dans le blog
    47
    Par défaut
    Salut

    Peut-être faudra-t-il que je reformule ce passage dans l'article

    Dans le protocole I2C, l'adresse est codée sur 7 bits (quoi que j'ai vu qu'on pouvait étendre à 10 bits). Je prends un autre exemple, le MCP4018 (potar numérique):
    Nom : slaveaddressmcp4017.JPG
Affichages : 5772
Taille : 29,3 Ko

    Le constructeur a fixé l'adresse à : 0101111 (bits A0 à A6)
    Ici, aucune possibilité de modifier l'adresse de façon hardware comme avec le ds1621.

    Sous Arduino, il faut rajouter un bit A7=0 (pas évident que cela a un rapport avec le Start) pour passer l'adresse dans un octet, soit 0010 1111
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    Wire.beginTransmission(0x2F)

    Après c'est la tambouille de la librairie Wire d'Arduino de générer les start, stop, bit RW quand il faut.

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    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 072
    Billets dans le blog
    47
    Par défaut
    Il est vrai que c'est un peu confus, car on trouve aussi dans la littérature des "octets d'adresse" composés des 7 bits suivis du bit R/W (lecture ou écriture).

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 075
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 075
    Par défaut
    Citation Envoyé par f-leb Voir le message
    Nom : slaveaddressmcp4017.JPG
Affichages : 5772
Taille : 29,3 Ko

    Le constructeur a fixé l'adresse à : 0101111 (bits A0 à A6)
    Tiens, moi j'aurais écrit 0101111 (bits A6 à A0), histoire d'être en phase avec le croquis. Nan ?

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    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 072
    Billets dans le blog
    47
    Par défaut
    Oui oui, A6 à A0, de gauche à droite comme sur la figure.

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 239
    Par défaut
    Pour être plus précis, l'adresse est codée sur octet sous la forme 7 bits + un bit de R/W, donc un octet. Les 7 bits de poids fort constitue l'adresse du chip, tout ou partie de cette adresse pouvant être fixée en dur par le constructeur. Le bit de poids faible indique si le chip recevra des octets dans la suite de l'échange (R/W à 0) ou si au contraire c'est lui qui devra émettre des octets (R/W à 1).
    On peut ainsi extrapoler en disant qu'un chip à en réalité 2 adresses sur un octet, l'adresse paire pour recevoir, l'adresse impaire pour émettre.

    Cependant toutes les adresses ne sont pas utilisables, certaines sont réservées. C'est le cas de l'adresse 11110xx0, qui indique justement que on passe en mode adressage 10 bits. Dans ce cas on a 11110 qui indique ce mode, xx qui sont les 2 bits de poids fort de l'adresse et R/W systématiquement à 0. Suivra un second octet qui indiquera les 8 autres bits de l'adresse (donc pas de R/W ici). Et pour passer en émission, on fera suivre d'un restart avec un troisième octet copie du premier octet à l'exception du bit R/W qui passe à 1.

Discussions similaires

  1. bus I2C avec compilateur c de CCS
    Par damousino dans le forum C
    Réponses: 3
    Dernier message: 23/02/2009, 19h14
  2. Bus I2C entre Zigbee et PCF8575
    Par seicom2008 dans le forum C
    Réponses: 0
    Dernier message: 01/02/2008, 11h52
  3. Creer un bus I2c en C++
    Par ToMs dans le forum C++
    Réponses: 3
    Dernier message: 28/03/2006, 17h10
  4. acceder au bus i2c avec visual c++
    Par ledaker dans le forum MFC
    Réponses: 1
    Dernier message: 06/03/2006, 10h43

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