[Programmation] Laison I2C avec capteur de température TC74A3
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Laison I2C avec capteur de température TC74A3



  1. #1
    invite7e040f23

    Laison I2C avec capteur de température TC74A3


    ------

    Bonjour,

    j'essaie de communiquer avec le capteur de température TC74A3 en I2C, mais j'ai à chaque fois une collision sur le bus. Je n'arrive pas à trouver d'où cela provient, quelqu'un aurait une piste?

    Voici mon code :

    j'utilise les fonctions d'I2C fournies par microchip.


    Code:
    void Init_I2C()
    {
       
        // errata code from errata pdf
        TRISBbits.RB0=0;
        TRISBbits.RB1=0;
        LATBbits.LATB0=0;
        LATBbits.LATB1=0;
        TRISBbits.RB0=1;
        TRISBbits.RB1=1;
       
            
       
        SSPSTAT =0x00;
        SSPCON1 = 0x00;
        SSPCON2 = 0x00;
        SSPBUF = 0x00;
    
        //Réglage de l'I2C
       
        SSPSTATbits.SMP = 0;  // slew rate disabled for standard speed mode
        SSPSTATbits.CKE = 1; // enable SMBus specific inputs
        SSPCON1bits.SSPEN =1;  // configure pins for I2c and not I/O
        SSPCON1bits.SSPM = 0b1000;  // master mode
        SSPCON1bits.CKP = 0;
        PIR1bits.SSPIF = 0;             // Clear MSSP interrupt request flag
        OpenI2C(MASTER, SLEW_ON);// Initialize I2C module
        SSPADD = 9; //Paramétrage de la fréquence des signaux I2C --> 100kHz
        PIR1bits.SSPIF = 0;             // Clear MSSP interrupt request flag
        PIR2bits.BCLIF = 0;              // clear collision flag
        while(SSPCON1bits.SSPM!=0b1000);
    }
    Code:
    void IdleI2C( void )
    {
      while ( ( SSPCON2 & 0x1F ) || ( SSPSTATbits.R_W ) )
         continue;
    }
    Code:
    void StartI2C1( void )
    {
      SSP1CON2bits.SEN = 1;            // initiate bus start condition
    }
    et voici le début de ma communication, ou dès le premier test, à chaque tentative, il y a collision

    Code:
     Init_I2C();
        ClrWdt(); // Reset du WatchDog Timer
        IdleI2C(); //Attente de la disponibilité du bus I2C
        StartI2C(); //Envoi d'une condition START
     
        while (SSPCON2bits.SEN); //Attente de la validation de la condition START
        IdleI2C(); //Attente de la disponibilité du bus I2C
        if (PIR2bits.BCLIF) // Test d'une éventuelle collision sur le bus
        {
            SSPCON1=0x00;
            SSPCON1=0x28; // 1 au SSPEN pour pins SDA/SCL, et config master mode
            PIR2bits.BCLIF = 0;
            return 1; // Retour d'une erreur de collision sur le bus
        }

    -----

  2. #2
    invite7e040f23

    Re : Laison I2C avec capteur de température TC74A3

    Bonjour, désolé du double post, juste j'ai oublié quelques précisions :

    Résistances de pull up sur SDA et SCl : 2K

    microcontroleur utilisé: pic 18f4550

  3. #3
    paulfjujo

    Re : Laison I2C avec capteur de température TC74A3

    bonjour,

    L'adresse I2C du device , est elle correcte ?

    Sous MikroC
    apres l'init I2C , le test presence device doit etre OK
    Code:
    void check_device(unsigned short dev_address)
    {
    I2C1_Start();
     if (I2C1_Wr(dev_address))
     {
      sprintf(txt,"Device at adresse %02X  is not found",dev_address);
       UART1_Write_Text(txt);
     }
     else
     {
      sprintf(txt,"Device at adresse %02X found OK",dev_address);
       UART1_Write_Text(txt);
      }
    I2C1_Stop();
     CRLF();
    }
    
    
    exemple d'usage
    
    I2C1_Init(400000);
      
      UART1_Write_CText("test presence DS1307: \r\n");
      check_device(DS1307_ADDR)  ;
      UART1_Write_CText("test presence 24LC1026 : \r\n");
      check_device(EEPROM_128K_ADR);
      CRLF();
    sinon on peu faire un polling d'adresse dans une boucle
    pour trouver la bonne..

  4. #4
    invite7e040f23

    Re : Laison I2C avec capteur de température TC74A3

    la fonction de test de présence ne risque pas de marcher un mon avis vu que mon erreur de collision se fait juste après le start.

    Et oui, mon adresse est correcte : 0b1001011 (adresse donnée dans la datasheet pour la version A3 du TC74)

    sinon, au cas ou, voici mon init globale du micro...

    Code:
    void init_config() {
    
        /*Désactivation des E/S analogiques */
        ADCON0bits.ADON = 0;
        ADCON1bits.PCFG = 0;
        
        /* désactivation des interruptions*/
        INTCON=0b00000000;
        INTCON2=0b00000000;
        INTCON3=0b00000000;
        PIE1=0b00000000;
        PIE2=0b00000000; 
        
        /* ' Set ports */
        TRISA = 0b00000000; // 
        TRISB = 0b00000000;
        TRISC = 0b00000000; //
        TRISD = 0b00000000; // 
        TRISE = 0b00000000; //
        INTCON2bits.RBPU=1;
        // Désactivation des E/S CCP
        CCP1CONbits.CCP1M = 0;
    }

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

    Re : Laison I2C avec capteur de température TC74A3

    C'est bon, j'ai trouvé mon erreur.

    mes sorties étaient ana et on digi...

    remplacer ADCON1bits.PCFG = 0; par 0b1111

  7. #6
    invite6b3a1202

    Re : Laison I2C avec capteur de température TC74A3

    c'est en faisant qu'on apprend

Discussions similaires

  1. capteur température avec lm35dz
    Par inviteef6be1ff dans le forum Électronique
    Réponses: 2
    Dernier message: 10/04/2015, 15h23
  2. capteur de température avec carte stm32L
    Par inviteb97f8985 dans le forum Électronique
    Réponses: 8
    Dernier message: 05/03/2015, 14h19
  3. capteur de température avec relevé
    Par invitec1597d27 dans le forum Électronique
    Réponses: 17
    Dernier message: 02/03/2012, 16h48
  4. capteur temperature avec dsPIC en CCS
    Par invitefc1671e3 dans le forum Électronique
    Réponses: 1
    Dernier message: 12/02/2008, 00h36
  5. capteur de temperature dallas avec un 68HC11
    Par invite8e6b42f1 dans le forum Électronique
    Réponses: 9
    Dernier message: 10/11/2003, 14h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...