probleme de lecture i2c entre pic18f2550 et accelerometre adxl345
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

probleme de lecture i2c entre pic18f2550 et accelerometre adxl345



  1. #1
    invite3f512146

    probleme de lecture i2c entre pic18f2550 et accelerometre adxl345


    ------

    Comme je l'ai marque dans le titre, j ai un probleme (peut etre de lecture je ne sais pas trop). En effet je lis les registres de mon accelerometre (le MSB=registre 0x32 et le LSB=registre 0x33) pour l'axe x, puis je multiplie le MSB par 256 auquel j ajoute la valeur du LSB pour avoir la veritable acceleration suivant x. Je suis avec un precision +-2g pour l accelerometre et je n obtient que des valeurs comprises entre 255 et 0 alors qu elles devraient etre comprises entre 0 et 1023... voila quelques parties de mon codes ou peuvent etre les erreurs. Alors si vous voyez quelque chose d anormal n esitez pas a me prevenir merci d avance.


    ****************************** **********************
    Voici ma fonction lecture:

    int read(int esclave,int registre) {

    unsigned char valeur;

    initialisation();
    StartI2C();
    IdleI2C();
    WriteI2C(esclave);//adresse de l esclave
    IdleI2C();
    WriteI2C(registre);//adresse du registre
    IdleI2C();
    StopI2C();
    IdleI2C();
    StartI2C();
    IdleI2C();
    WriteI2C(esclave+1);//adresse de l esclave en mode lecture
    IdleI2C();
    valeur=ReadI2C();
    IdleI2C();
    NotAckI2C();
    IdleI2C();
    StopI2C();

    return valeur;

    ****************************** ********************
    Voici un morceau d'une de mes fonction appelee dans le main:
    unsigned int acc_x;
    unsigned char x_MSB,x_LSB;


    x_MSB=read(0xA6,0x32);//on lit le registre ds l accelerometre suivant x
    x_LSB=read(0xA6,0x33);//on lit le registre ds l accelerometre suivant x

    acc_x=((x_MSB & 0x80) != 0) ? (((~0)>>16)<<16) | ((x_MSB<<8)+x_L): (x_MSB<<8)+x_LSB;

    sprintf(s,"acc_x=%d\r\n",acc_x );
    putsUSBUSART(s);//je transmet mes donnees par USB

    -----

  2. #2
    invite3f512146

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    je viens de me rendre compte que la fonction est declaree comme un int, je l ai donc changee en char read, mais les valeurs restent alors figee en 64...

  3. #3
    simon.

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    Citation Envoyé par dragon56360 Voir le message
    acc_x=((x_MSB & 0x80) != 0) ? (((~0)>>16)<<16) | ((x_MSB<<8)+x_L): (x_MSB<<8)+x_LSB;

    Qu'est-ce que c'est que ce tas de spaghettis...

    Tu attends des valeurs entre 0 et 1023 ? Alors pourquoi tester le bit fort du MSB ?

    Bref, je te propose: acc_x = (((int) x_MSB) << 8) | ((int) x_LSB);

    Y'a un peu ceinture et bretelles, mais ça devrait le faire.

  4. #4
    invite3f512146

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    effectivement ca aide un peu, puisque maintenant mes valeurs vont a peu pres de -255(bizarre puisque j utilise des unsigned) a 266 (MSB vaut 1 et LSB vaut 10) mais le MSB passe de 1 a 255 et la je ne comprend vraiment pas pourquoi.

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

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    Ah mais un coup d'oeil rapide au datasheet revele que les valeurs renvoyées sont visiblement signées... donc ca serait normal.

    Comme tu utilises %d dans le printf le fait que ton acc_x soit unsigned n'a aucune importance.

  7. #6
    maclag

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    Bonjour,

    Je ne sais pas comment tu obtiens le "de 0 à 255" et les valeurs suivantes.
    Par contre, si la sortie est signée, la plage de fonctionnement +/-2G donne +/-512 en signé (enfin, -512 à +511).

    Et si tu ne prends les sorties qu'en position statique, l'accéléromètre ne voit pas plus que la gravité, et là on aura donc +/-1G soit -256/+255.

    Apparemment, tu n'en es pas si loin...

  8. #7
    invited08e1382

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    Laurent, on t'a reconnu ! the dragon of belle ile

  9. #8
    invite3f512146

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    Merci maclag, en effet en "secouant" un peu man accelerometre, mes valeurs s'echelonnent de -512 à 511!!!! Alors qu en le deplaceant lentement, mes valeurs vont de -255 a 270. Le 270, la je ne vois pas mais mes valeurs s'echelonnent sur la bonne plage. Merci a tous pour vos reponse je crois qu on me probleme est regle ou "presque" regle.

  10. #9
    maclag

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

    C'est tout-à-fait normal si tu n'as pas un parfait 0 à l'offset et pas exactement 256LSB/G en sensibilité. Les capteurs sortis d'usine ont une erreur, et tu es encore dans les clous des spécifications.

    Refais une calibration vite fait (capteur fixe, orienté une fois vers le haut, mesure, une fois vers le bas, mesure) sur chaque axe si tu veux être précis.

Discussions similaires

  1. Problème communication I2C entre RTC et uC
    Par invite5267eae1 dans le forum Électronique
    Réponses: 34
    Dernier message: 30/06/2010, 22h38
  2. lecture accéléromètre
    Par inviteb2712aec dans le forum Électronique
    Réponses: 0
    Dernier message: 07/06/2010, 10h43
  3. PIC18F2550 - I2C - PCF8574 - LCD2x16
    Par Paintitblack dans le forum Électronique
    Réponses: 0
    Dernier message: 16/10/2009, 10h36
  4. bus I2C soucis de lecture
    Par invited2746380 dans le forum Électronique
    Réponses: 3
    Dernier message: 24/04/2007, 12h58
  5. Communication I2C entre PIC et ordinateur / Problème d'interruption
    Par invite68d5b092 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/11/2005, 22h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.