Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

  1. dragon56360

    Date d'inscription
    mai 2011
    Messages
    5

    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
     


    • Publicité



  2. dragon56360

    Date d'inscription
    mai 2011
    Messages
    5

    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. simon.

    Date d'inscription
    août 2006
    Messages
    380

    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. dragon56360

    Date d'inscription
    mai 2011
    Messages
    5

    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. simon.

    Date d'inscription
    août 2006
    Messages
    380

    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.
     


    • Publicité



  6. maclag

    Date d'inscription
    mars 2009
    Localisation
    Singapour
    Âge
    34
    Messages
    167

    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...
     

  7. thibaultblf

    Date d'inscription
    janvier 2011
    Localisation
    Brest
    Messages
    66

    Re : probleme de lecture i2c entre pic18f2550 et accelerometre adxl345

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

  8. dragon56360

    Date d'inscription
    mai 2011
    Messages
    5

    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.
     

  9. maclag

    Date d'inscription
    mars 2009
    Localisation
    Singapour
    Âge
    34
    Messages
    167

    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.
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. Problème communication I2C entre RTC et uC
    Par punglelist dans le forum Électronique
    Réponses: 34
    Dernier message: 30/06/2010, 22h38
  2. lecture accéléromètre
    Par mzali 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 michael_mac dans le forum Électronique
    Réponses: 3
    Dernier message: 24/04/2007, 12h58
  5. Réponses: 3
    Dernier message: 01/11/2005, 22h45