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) :
La valeur 2 semble bonne sauf que j'ai un octet en trop, je ne comprends vraiment pas comment il arrive ici.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); }
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 ...
-----