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