Hola 
Bueno, les cuento que tengo un giroscopio L3G4200D, lo estoy comunicando con un ATmega328p vía i2c
Al momento de leer los registros, si los puedo leer pero para escribirlos no puedo.
Sí estoy siguiendo bien la trama i2c que dice la hoja de datos, bueno al menos eso creo.
Según vi en la hoja de datos, es sensible a la estática y no fui muy cuidadoso en ese sentido.
Quisiera saber si no los escribe, por qué está dañado o por qué no funciona.
Ya descargué un par de códigos de arduino para comprobar que funciona pero ninguno me funcionó, y lo que yo programé de lectura de registros si funciona.
Esta función la uso para leer el registro que almacena la dirección del giroscopio y si funciona, solo que debo escribir dos veces la trama i2c, cuando debería ser solo una pero si lo escribo solo una vez, no funciona.
Esta es para inicializar el giroscopio habilitando los 3 ejes y el modo normal esta es la que no funciona, no escribe los registros :\'(
Uso codevision avr.
De antemano, gracias por su ayuda.
Bueno, les cuento que tengo un giroscopio L3G4200D, lo estoy comunicando con un ATmega328p vía i2c
Al momento de leer los registros, si los puedo leer pero para escribirlos no puedo.
Sí estoy siguiendo bien la trama i2c que dice la hoja de datos, bueno al menos eso creo.
Según vi en la hoja de datos, es sensible a la estática y no fui muy cuidadoso en ese sentido.
Quisiera saber si no los escribe, por qué está dañado o por qué no funciona.
Ya descargué un par de códigos de arduino para comprobar que funciona pero ninguno me funcionó, y lo que yo programé de lectura de registros si funciona.
Esta función la uso para leer el registro que almacena la dirección del giroscopio y si funciona, solo que debo escribir dos veces la trama i2c, cuando debería ser solo una pero si lo escribo solo una vez, no funciona.
Código:
unsigned char get_gy_address(void)
{
unsigned char address_of_gyroscope;
i2c_start();
i2c_write(L3G4200D_WRITE);
i2c_write(WHO_AM_I);
i2c_start();
i2c_write(L3G4200D_READ);
address_of_gyroscope = i2c_read(0);
i2c_stop();
//Aqui empieza de nuevo, solo asi funciona deberia ser solo lo de arriba
i2c_start();
i2c_write(L3G4200D_WRITE);
i2c_write(WHO_AM_I);
i2c_start();
i2c_write(L3G4200D_READ);
address_of_gyroscope = i2c_read(0);
i2c_stop();
return address_of_gyroscope;
}
Código:
void gy_init_cfg(void)
{
i2c_start();
i2c_write(L3G4200D_WRITE);
i2c_write(CTRL_REG1);
i2c_write(0x0F);
i2c_stop();
i2c_start();
i2c_write(L3G4200D_WRITE);
i2c_write(CTRL_REG1);
i2c_write(0x0F);
i2c_stop();
}
De antemano, gracias por su ayuda.
Última edición: