Problems with MMA7660

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Problems with MMA7660

Jump to solution
4,193 Views
nocturno
Contributor II

I'm trying to read an accelerometer MMA7660 with a PIC microcontroller and a program 

CCS. 
The code I'm using is this: 

 

 

#define DIR_MMA7660  0x4C

#define  RegX  0

#define  RegY  1

#define  RegZ  2

 

#define I2C_LEER        1

#define I2C_ESCRIBIR    0


int8 EjeX, EjeY, EjeZ;


void LecturaMMA7660() {

   i2c_start();

   i2c_write(DIR_MMA7660 | I2C_ESCRIBIR);

   i2c_write(RegX);

   i2c_start();

   i2c_write(DIR_MMA7660 | I2C_LEER);

   EjeX=i2c_read(1);

   EjeY=i2c_read(1); 

   EjeZ=i2c_read(0);

   i2c_stop();

}

 

but can not get no result. Can anyone give me some advice?

Labels (1)
0 Kudos
1 Solution
650 Views
nocturno
Contributor II

Thanks.

 

My problem is solved with this initialization:

 

   i2c_start();

   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);

   i2c_write(RegMode);

   i2c_write(1);

   i2c_stop();

   i2c_start();

   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);

   i2c_write(RegSR);

   i2c_write(0b011);

   i2c_stop();

 

The accelerometer works fine.

Thanks

View solution in original post

0 Kudos
9 Replies
650 Views
enrischa
Contributor I

Hola, podrias decirme cual fue el pic que utilizaste y como lo conectaste al MMA7660FC?

0 Kudos
650 Views
maron
Contributor I

Hello

Try first  set registers:

REFERENCE CODE:
//Configure MMA7660FC as Portrait/Landscape Detection
Write to the MODE register = 0x00 //Standby Mode
Write to the SPCNT register = 0x00 //No sleep count
Write to the INTSU register = 0x03 //Configure GINT Interrupt
Write to the PDET register = 0xE0 //No tap detection enabled
Write to the SR register = 0x34 //8 samples/s, TILT debounce filter = 2
Write to the PD register = 0x00 //No tap detection debounce count enabled
Write to the MODE register = 0x41 //Active Mode, INT = push-pull and active low

 (from application note  AN3837)

0 Kudos
651 Views
nocturno
Contributor II

Thanks.

 

My problem is solved with this initialization:

 

   i2c_start();

   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);

   i2c_write(RegMode);

   i2c_write(1);

   i2c_stop();

   i2c_start();

   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);

   i2c_write(RegSR);

   i2c_write(0b011);

   i2c_stop();

 

The accelerometer works fine.

Thanks

0 Kudos
650 Views
emapign
Contributor I

Hola se que resolviste el problema y me gustaria saber cual fue la secuencia que usaste para leerlo. Porque estoy intentando pero sin buenos resultados.. la lectura es siempre la misma para cualquiera de los ejes que lea.

 

Gracias

 

Salu2!

0 Kudos
650 Views
nocturno
Contributor II

Así:

 

void InicializaMMA7660() {
   i2c_start();
   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);
   i2c_write(RegMode);
   i2c_write(1);   // Lo configuramos en modo Activo
   i2c_stop();
   
   i2c_start();
   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);
   i2c_write(RegSR);
   i2c_write(0b011);// Lo configuramos para 32 samples por segundo
   i2c_stop();
   
}
void LecturaMMA7660() {
   i2c_start();
   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);
   i2c_write(RegX);      // Señalamos el registro X como primero a leer
   i2c_start();
   i2c_write(DIR_MMA7660|I2C_LEER);
   EjeX=i2c_read(1);   // Leemos RegX
   EjeY=i2c_read(1);   // Leemos RegY
   EjeZ=i2c_read(0);   // Leemos RegZ
   i2c_stop();
}

 

0 Kudos
650 Views
emapign
Contributor I

Ahhh ok ok.. muchas gracias, pero me queda una duda... cuando vos haces:

 

   i2c_start();
   i2c_write(DIR_MMA7660|I2C_ESCRIBIR);
   i2c_write(RegX);      // Señalamos el registro X como primero a leer
   i2c_start();
   i2c_write(DIR_MMA7660|I2C_LEER);
   EjeX=i2c_read(1);   // Leemos RegX
   EjeY=i2c_read(1);   // Leemos RegY
   EjeZ=i2c_read(0);   // Leemos RegZ
   i2c_stop();
para leer Y y Z no tendrias que posicionarte de vuelta en cada registro como lo hiciste para X??
Gracias !
0 Kudos
650 Views
nocturno
Contributor II

No es necesario, cuando lo pones a leer, cada byte que leas es el que corresponda a la siguiente dirección de memoria.

0 Kudos
650 Views
emapign
Contributor I

ahhh gracias capo, me parecio haber leido algo de autoincremento en los valores del registro pero no le di mucha im portancia, la verdad que me sacaste de un valle en el que estaba.

 

De nuevo gracias!

Salu2!

0 Kudos
650 Views
nocturno
Contributor II

De nada, me alegro que lo solucionaras.

0 Kudos