Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Escalve I2C n'acquitte pas.



  1. #1
    petitnul12

    Escalve I2C n'acquitte pas.


    ------

    Bonjour,


    Je tente de faire une communication I2C entre deux PIC18F4680. Le Master, envoie bien le bit d'adresse et de R/W, mais l'esclave n'acquitte pas. Pourtant si j'ai bien lu la doc, l'esclave acquitte automatiquement ?
    Autre curiosité je suis obligé de paramétrer le TRIC3/4 en entrée pour que le Master puisse envoyer des données... Je n'ai toujours pas compris le truc... Le pire c'est que ça marche pour le Master.

    Code d'INIT
    Code:
    void i2c_init(unsigned char _mode, unsigned char _slew, unsigned char _address) {
        i2c.token = 1;
    
        if(_mode == 'M')
            SSPCON1 = 0x08;
        else
            SSPCON1 = 0x06;
    
        SSPCON2 = 0x00;
    
        if(_slew == 1)
            SSPSTAT = 0x00;
        else
            SSPSTAT = 0x80;
    
        SSPADD = _address;
    
        if(_mode == 'M')
            TRISC |= 0x18;
        else
            TRISC |= 0x18;
        
        SSPCON1bits.SSPEN = 1;
    }
    Le mode esclave est paramétrer quand le paramètre _mode = 'S'.

    Je ne suis pas tromper dans les bits de configuration ?

    -----

  2. Publicité
  3. #2
    remy01

    Re : Escalve I2C n'acquitte pas.

    Bonjour,
    à quoi sert le if .... else, comme tu fais la même chose : TRISC |= 0x18;

    if(_mode == 'M')
    TRISC |= 0x18;
    else
    TRISC |= 0x18;

    ?
    A+ ....Rémy.

  4. #3
    MiKL.66

    Re : Escalve I2C n'acquitte pas.

    Bonjour,

    Peux tu poster un schéma et un aperçu des trames ?

  5. #4
    petitnul12

    Re : Escalve I2C n'acquitte pas.

    Citation Envoyé par remy01 Voir le message
    Bonjour,
    à quoi sert le if .... else, comme tu fais la même chose : TRISC |= 0x18;

    if(_mode == 'M')
    TRISC |= 0x18;
    else
    TRISC |= 0x18;

    ?
    Dans les tests je mettais des trucs différents, car pour moi le Master devait être en "OUTPUT" mais il ne fonctionne qu'en "INPUT" ^^ Mais il est devenu obsolète



    Peux tu poster un schéma et un aperçu des trames ?
    Hummmm je n'ai pas l'oscillo sous la main (à l'école) mais la première trames correspond bien à l'adresse de l'esclave + le bit R/W + le non-acquittement.
    J'ai tester avec un bit R/W à 1 et 0.

  6. A voir en vidéo sur Futura
  7. #5
    inoxxam

    Re : Escalve I2C n'acquitte pas.

    Du datasheet:
    Any combination of the following conditions will cause
    the MSSP module not to give this ACK pulse:
    • The Buffer Full bit, BF (SSPSTAT<0>), was set
    before the transfer was received.
    • The overflow bit, SSPOV (SSPCON<6>), was set
    before the transfer was received.
    Jette un oeil du côté de ces deux bits.

  8. #6
    petitnul12

    Re : Escalve I2C n'acquitte pas.

    Bonsoir,

    Alors en réalité tout est correct a part les erreurs de syntaxe.
    Je me suis juste trompé en paramétrant la vitesse de la transmission, 0x0A au lieu de 0x19 par exemple dans le SSPADD. Donc je pense que tout allait bcp trop vite pour l'esclave qui ne suivait plus.

    Tout fonctionne à présent =)

  9. Publicité
Découvrez nos comparatifs produits sur l'informatique et les technologies.