Autor Tema: Acelerometro ADXL345 controlado mediante bus I2C  (Leído 8886 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado begoña1966

  • PIC10
  • *
  • Mensajes: 6
Acelerometro ADXL345 controlado mediante bus I2C
« en: 07 de Febrero de 2010, 21:32:02 »
buenas buenas a todos.

He adquirido un modulo a la compañía SPARKFUN con un acelerometro (ADXL345) de tres ejes programable a 2, 4, 8 y 16 G's y pretendo conectarlo a un Pic18F2550 mediante bis I2C, pero los unicos codigos que he encontrado son para micros ATmega328.

Alguien tiene alguna experiencia con este acelerometro, o sabe algún sitio donde puedo encontrar un código que pueda utilizar.

Muchas gracias por adelantado,

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Acelerometro ADXL345 controlado mediante bus I2C
« Respuesta #1 en: 07 de Febrero de 2010, 22:56:37 »
Y partiendo del datasheet del acelerometro no se puede determinar la trama necesaria para la comunicación? Por lo general no es complicado, solo requiere un poco de trabajo.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Acelerometro ADXL345 controlado mediante bus I2C
« Respuesta #2 en: 09 de Febrero de 2010, 04:53:01 »
http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
pagina 14

simplemente poniendo tu modelo en google ya te sale directamente el datasheet no busques ejemplos, porque nadie te asegura que vallas a encontrar algo fiable o funcional y tampoco cuesta tanto irse a la página del fabricante a buscar tu modelo de integrado y leer un poquito, normalmente esto es más rápido que arreglar codigo existente...
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado perseo963

  • PIC10
  • *
  • Mensajes: 1
Re: Acelerometro ADXL345 controlado mediante bus I2C
« Respuesta #3 en: 27 de Marzo de 2013, 01:14:20 »
hola a todos
necesito realizar un sistema que mida los grados de inclinacion en los tres ejes, para ello
adquirí un acelerometro adxl345 que se configura por medio de i2c, como microcontorlador he usado un 16f877a para leer los datos y poder procesarlos, he logrado comunicarlo con el pic, sin embargo no me toma lecturas negativas, la concatenacion la estoy realizando como dice en la pagina de fabricante, agradeceria cualquier aporte

#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4M)
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <lcd.c>
#use i2c(MASTER, SDA=PIN_c4, SCL=PIN_c3,FORCE_HW)

#define ACCEL_WRITE_ADDR 0XA6//0xA6 //0x53//0x3a
#define ACCEL_READ_ADDR 0XA7//0xA7 //0x53//0x3b
#define ACCEL_DATA_ADDR 0x32
#define ACCEL_PWRCTRL_ADDR 0x2d
#define ACCEL_MEASURE_MODE 0x08

unsigned int accel_data[6];
unsigned int16 x,y,z;
float x1,y1,z1,R;
float teta=0, gama=0,fi=0;

void main ()
{
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);

// initialize

while(true) {
lcd_init();

// Tell the accelerometer to wake up
i2c_start();
i2c_write(ACCEL_WRITE_ADDR);
i2c_write(0X31);
i2c_write(0X01);
i2c_stop();

I2C_start();
i2c_write(ACCEL_WRITE_ADDR);
i2c_write(ACCEL_PWRCTRL_ADDR);
i2c_write(ACCEL_MEASURE_MODE);
I2C_stop();


// Read data from the accel
i2c_start();
i2c_write(ACCEL_WRITE_ADDR);
i2c_write(ACCEL_DATA_ADDR);
i2c_start();
i2c_write(ACCEL_READ_ADDR);
accel_data[0] = i2c_read(); //x0
accel_data[1] = i2c_read(); //x1
accel_data[2] = i2c_read(); //y0
accel_data[3] = i2c_read(); //y1
accel_data[4] = i2c_read(); //z0
accel_data[5] = i2c_read(0); // z1, NACK on last read
i2c_stop();
//////////concatenar datos adxl345/////////////
x=((accel_data[1])<<8)|accel_data[0] ;
y=((accel_data[3])<<8)|accel_data[2];
z=((accel_data[5])<<8)|accel_data[4];


x1=(float)x/256;
y1=(float)y/256;
z1=(float)z/256;
////////////////////////////////////////////////
R=sqrt((x1*x1)+(y1*y1)+(z1*z1));


teta=acos(x1/R);
teta=teta * 57,296;

gama=acos(y1/R);
gama=gama*57,296;

fi=acos(z1/R);
fi=fi*57,296;


printf(lcd_putc,"\f %.2f %.2f %.2f ",x1,y1,z1);
printf(lcd_putc,"\n %f %f %f ",teta,gama,fi);

}
}

Desconectado miquel

  • PIC12
  • **
  • Mensajes: 69
Re: Acelerometro ADXL345 controlado mediante bus I2C
« Respuesta #4 en: 28 de Marzo de 2013, 06:17:59 »
Creo que el problema  esta aqui:  unsigned int16 x,y,z;
Deberian ser del tipo signed

Saludos,

Miquel