Problems with MMA7660

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

Problems with MMA7660

跳至解决方案
5,322 次查看
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?

标签 (1)
0 项奖励
回复
1 解答
1,779 次查看
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 项奖励
回复
9 回复数
1,779 次查看
enrischa
Contributor I

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

0 项奖励
回复
1,779 次查看
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 项奖励
回复
1,780 次查看
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 项奖励
回复
1,779 次查看
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 项奖励
回复
1,779 次查看
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 项奖励
回复
1,779 次查看
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 项奖励
回复
1,779 次查看
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 项奖励
回复
1,779 次查看
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 项奖励
回复
1,779 次查看
nocturno
Contributor II

De nada, me alegro que lo solucionaras.

0 项奖励
回复