Bonjour,
pour la première fois je met en oeuvre du I2C est comme je m'y attendais un peu j'ai quelques difficultés mais quelque notion de programmation me manque certainement bien que les driver ce génère automatiquement sous MPLAB v4.15 harmony V2.06 quand ont vient les cochets.
Je travail avec un pic32mx795f512l et je viens échanger avec le MAX17205 (composant qui mesure et acquière le SOC d'une batterie)
Ceci avec 2 carte d'éval, une pour le micro et l'autre avec le max17205 sur sa carte de test qui fonctionne tout autant en USB avec l'interface constructeur dont 2 emplacement prévu pour brancher les pins SDA et SCL.
Seulement j'ai le choix entre l'option static et dynamique mais je ne perçois pas bien ce que ça signifie en faite, juste pour avoir évidemment essayé les 2, j'ai moins de difficulté en static à voir une trame sur l'oscilo ... en dynamique pour le moment rien.
J'ai donc continué en statique, en voyant bien les trames passer, lesquelles correspondent bien à l'adresse envoyer? seulement je traverse 2 soucis pour le moment ... d'autres viendront (: par la suite.
Je n'arrive pas à envoyer plus d'un octet, tout au moins avec la fonction utilisé
Puis lorsque j'envoi une trame au MAX17205, la résultant marque bien l'adresse mais après le signal est écrasé, certainement une mauvaise adaptation je pense seulement je n'en suis pas sûr ... au départ j'ai mis des résistances de pull up de 460 Ohm le signal étant écrasé je les ai remplacer par des 5k, mais là le signal semble plus applatiCode:char myBuffer[MY_BUFFER_SIZE] = { 56, 4, 78, 100, 55}; #define RTCC_SLAVE_ADDRESS 0x45 #define MY_BUFFER_SIZE 5 DRV_I2C1_Transmit ( RTCC_SLAVE_ADDRESS,&myBuffer,MY_BUFFER_SIZE,NULL);
Je ne sais pas encore si le problème est hard ou soft, bien que j'ai une suspicion sur le hard.
Code:#define AvSOC ((uint16_t)0x0E) uint16_t ReadRegistor (uint16_t reg) { RvBuffer[0]=0; RvBuffer[1]=0; if (reg>0xff) { uint8_t t_reg=0; t_reg=(uint8_t)(reg&0xff); //I2C_MultiByteRead(Md_Addr,RvBuffer,t_reg,2); DRV_I2C1_Transmit (Md_Addr,RvBuffer,t_reg,NULL); RvTemp =(uint16_t)(((uint16_t)RvBuffer[1] << 8) | RvBuffer[0]); return RvTemp; } else { //I2C_MultiByteRead(Sl_Addr,RvBuffer,reg,2); DRV_I2C1_Transmit (Sl_Addr,RvBuffer,reg,NULL); RvTemp =(uint16_t)(((uint16_t)RvBuffer[1] << 8) | RvBuffer[0]); return RvTemp; } ret_max17=ReadRegistor(AvSOC); }
Auriez vous des conseils s'il vous plait
-----