Bonjour à tous,
Mon PIC16F887 communique avec un capteur de température TMP100 via I2C.
Lors de la lecture de la température, le PIC "plante" à un endroit étrange : au moment où lui-même envoie un ACK.
Code de l'envoie du ACK :
Il plante dans la boucle de vérification de l'ack terminé.Code:I2C_ack bank1 ; passer banque 1 bcf SSPCON2,ACKDT ; le bit qui sera envoyé vaudra « 0 » bsf SSPCON2,ACKEN ; lancer l’acknowledge (= ACKDT = 0 = ACK) I2C_ack2 btfsc SSPCON2,ACKEN ; tester si ACK terminé goto I2C_ack2 ; non, attendre bank0 ; repasser banque 0 return
Je trouve ça vraiment étrange, car si j'ai bien tout compris, lorsque le PIC envoie un ACK, il ne fait strictement aucunne vérification ... il envoie son ACK, point final, non ?
Pourquoi le programme planterait à cet dans cette boucle ???
Voici le code pour lire la température :
Et ça plante lors du "call I2C_ack" ... incompréhensable !Code:LM73_Read_Tc movlw LM73_ADDR movwf SLAVE movlw LM73_Tc_REGISTER movwf OCTET call I2C_start call I2C_adress_write call I2C_check call I2C_send ; on envoie l'adresse du registre de température call I2C_check call I2C_start ; Repeat Start call I2C_adress_read call I2C_check call I2C_read ; On lit les bits 15 -> 8 movf SSPBUF, 0; movwf Tc call I2C_ack ; on envoit un ACK call clear_afficheur call I2C_read ; on lit les bits 7 -> 0 movf SSPBUF, 0; movwf Tc+1 call I2C_noack call I2C_stop return
-----