ReadI2C() - Retourne 2 octets d'un coup
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

ReadI2C() - Retourne 2 octets d'un coup



  1. #1
    invitebf0c0d36

    ReadI2C() - Retourne 2 octets d'un coup


    ------

    Bonjour à tous,

    Problème assez étrange avec le bus I2C.

    J'utilise la librairie I2C fournie par Microchip sur mon 18F46K22. Elle fonctionne parfaitement avec notamment des sondes de températures Maxim (DS1721).
    Je souhaite mesurer un thermocouple et utilise donc le composant suivant qui fonctionne en I2C : TMP512

    Jusque là pas de problème, sauf que je dois lire une valeur codée sur 2 octets que je récupère via l'I2C en 2 fois 1 octet.
    A la première lecture, je récupère la bonne valeur mais à la seconde lecture je récupère, je ne sais pas comment, 2 octets dans ma variable pourtant bien déclarée de type "char".

    Ce que je devrais récupérer :
    value1 : 00111001
    value2 : 10011111

    Ce que je récupère :
    value1 (MSB) : 00111001 (parfait !)
    value2 (LSB) : 11111111 10011111 ()

    Mon bout de code (je retourne volontairement qu'un seul octet, c'était pour les tests) :

    Code:
    unsigned char tk_read(void) {
    	unsigned char value1 = 0, value2 = 0;
    	StartI2C2();				// Start I2C communication
    	WriteI2C2(ADDR_TK);			// Address the chip
    	WriteI2C2(0x00);			// Access the specific register
    	StartI2C2();				
    	WriteI2C2(ADDR_TK+1);		// Address device w/read (+1)
    	value1 = ReadI2C2();		// Returns the MSB byte and stores it in 'value1'
    	IdleI2C2();
    	AckI2C2();					// Send a acknowledge
    	IdleI2C2();
    	value2 = ReadI2C2();		// Returns the LSB byte and stores it in 'value2'
    	NotAckI2C2();				// Send a not-acknowledge
    	StopI2C2();					// Stop all I2C communication
    	return(value2);				
    }
    La valeur 2 semble bonne sauf que j'ai un octet en trop, je ne comprends vraiment pas comment il arrive ici.
    Pour voir la valeur je l'affiche sur mon LCD.

    Si quelqu'un à une idée, j'avoue que je sèche depuis ce week-end ...

    -----

  2. #2
    invitebf0c0d36

    Re : ReadI2C() - Retourne 2 octets d'un coup

    Quelqu'un a trouvé la solution !
    C'est simplement la variable utilisée pour stocker le résultat de ma fonction que je n'avais pas mis en "unsigned"

  3. #3
    Jack
    Modérateur

    Re : ReadI2C() - Retourne 2 octets d'un coup

    je ne comprends toujours pas comment tu pouvais stocker 2 octets dans value2 qui était de type unsigned char ...

    A+

  4. #4
    invitebf0c0d36

    Re : ReadI2C() - Retourne 2 octets d'un coup

    Moi non plus !!

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : ReadI2C() - Retourne 2 octets d'un coup

    Citation Envoyé par quichedood Voir le message
    Moi non plus !!
    Alors comment as-tu pu connaitre la valeur 11111111 10011111 pour value2?

    A+

  7. #6
    invitebf0c0d36

    Re : ReadI2C() - Retourne 2 octets d'un coup

    C'est ce que mon LCD m'affichait

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/07/2009, 12h57
  2. 7 d'un coup
    Par invitec11fd99f dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 6
    Dernier message: 10/04/2009, 18h57
  3. mouvement d'un solide besoin d'un coup de main
    Par invite09cf1489 dans le forum Physique
    Réponses: 15
    Dernier message: 13/11/2007, 19h09
  4. Réponses: 24
    Dernier message: 11/05/2006, 14h07
  5. besoin d'un ptit coup de main pour commentaire d'un petit texte de Kant
    Par invite8725fb77 dans le forum [ARCHIVE] Philosophie
    Réponses: 4
    Dernier message: 30/10/2004, 11h40
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...