ADXL345三轴加速度传感器在I2C通信时 地址的选择问题
本帖最后由 UerRob 于 2015-1-22 11:00 编辑用的mega2560 只有一个SDA和SCL 所以打算改变传感器的地址来挂载多个器件。
ADXL345 I2C通信的时候不是可以用SD0口的置高低电平在两个地址中选择吗..
不过我试了给它置高电平和低电平,不过一直都是在同一个地址0x53上可以正常通信。
将代码中地址换为0x1D无论高低电平都无法正常获取数据了。
我用地址扫描检测无论高低地址都是0x53
地址扫描代码:http://www.geek-workshop.com/thread-287-1-1.html
结果:
代码
//I2C (sparkfun breakout)
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
#include <Wire.h>
int ADXAddress = 0x53; // the default 7-bit slave address
int reading = 0;
int val=0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(100);
// enable to measute g data
Wire.beginTransmission(ADXAddress);
Wire.write(Register_2D);
Wire.write(8); //measuring enable
Wire.endTransmission(); // stop transmitting
}
void loop()
{
//--------------X
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_X0);
Wire.write(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2)
{
X0 = Wire.read();
X1 = Wire.read();
X1=X1<<8;
X_out=X0+X1;
}
//------------------Y
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_Y0);
Wire.write(Register_Y1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2)
{
Y0 = Wire.read();
Y1 = Wire.read();
Y1=Y1<<8;
Y_out=Y0+Y1;
}
//------------------Z
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_Z0);
Wire.write(Register_Z1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2)
{
Z0 = Wire.read();
Z1 = Wire.read();
Z1=Z1<<8;
Z_out=Z0+Z1;
}
//----------------
Xg=X_out/256.0;
Yg=Y_out/256.0;
Zg=Z_out/256.0;
Serial.print("X= ");
Serial.print(Xg);
Serial.print(" ");
Serial.print("Y= ");
Serial.print(Yg);
Serial.print(" ");
Serial.print("Z= ");
Serial.print(Zg);
Serial.println(" ");
//==================
delay(200);
}
谁遇到过...感激不尽 UerRob 发表于 2015-1-21 13:22 static/image/common/back.gif
CS不是在I2C通信时必须置高么
这样不就达到你要选择芯片的目的了吗? 何不控制cs呢? 林定祥 发表于 2015-1-20 17:06 static/image/common/back.gif
何不控制cs呢?
CS不是在I2C通信时必须置高么 林定祥 发表于 2015-1-21 19:30 static/image/common/back.gif
这样不就达到你要选择芯片的目的了吗?
厉害!这确实是个不错的方法哈!
页:
[1]