飞思卡尔压力传感器MPL3115A2与Arduino进行I2C通信

时间:2012-11-15 10:47:25

标签: arduino sensor i2c pressure

有没有人有使用MPL3115A2飞思卡尔I2C压力传感器的经验? 我需要在有关Arduino UNO r3的项目中使用它,但我无法正确地进行它们之间的通信。这是我的代码:

    #include <Wire.h>

void setup(){
  Serial.begin(9600);
/*Start communication */
Wire.begin();
    // Put sensor as in Standby mode
    Wire.beginTransmission((byte)0x60); //0x60 is sensor address
    Wire.write((byte)0x26); //ctrl_reg
    Wire.write((byte)0x00); //reset_reg
    Wire.endTransmission();
    delay(10);
    // start sensor as Barometer Active
    Wire.beginTransmission((byte)0x60);
    Wire.write((byte)0x26); //ctrl_reg
    Wire.write((byte)0x01); //start sensor as barometer
    Wire.endTransmission();
    delay(10);
    }
void getdata(byte *a, byte *b, byte *c){
   Wire.beginTransmission(0x60); 
   Wire.write((byte)0x01);        // Data_PMSB_reg address
   Wire.endTransmission();    //Stop transmission
   Wire.requestFrom(0x60, 3); // "please send me the contents of your first three registers"
   while(Wire.available()==0);
   *a = Wire.read(); // first received byte stored here
   *b = Wire.read(); // second received byte stored here
   *c = Wire.read(); // third received byte stored here
  }
void loop(){    
  byte aa,bb,cc;
  getdata(&aa,&bb,&cc);
  Serial.println(aa,HEX); //print aa for example
  Serial.println(bb,HEX); //print bb for example
  Serial.println(cc,HEX); //print cc for example
  delay(5000);
}

我收到的数据是:05FB9(例如)。当我更改寄存器地址(参见Wire.write((byte)0x01); // Data_PMSB_reg address)时,我希望数据能够改变,但事实并非如此!你能解释一下吗? 您可以找到文档和数据表on the NXP website

我无法正确理解他们如何相互沟通。我在Arduino和其他一些具有相同通信协议的I2C传感器之间进行了通信,没有任何问题。

1 个答案:

答案 0 :(得分:1)

您的问题可能是由于飞思卡尔部分需要重复启动I2C通信来进行读取。最初的Arduino双线库(Wire使用的TWI库)不支持Repeated-Start。

我知道这是因为我必须为我的一个项目重写TWI以支持重复启动(中断驱动,主机和从机)。不幸的是,我从来没有上传过我的代码,但是其他人在这里做的基本相同(至少对于Master来说这是你需要的): http://dsscircuits.com/articles/arduino-i2c-master-library.html

丢失Wire库并使用他们的I2C库。