Beste,

Voor school moet met een orietatiesensor(MMA7660) die
communiceert met I²C uitlezen met een µ-Controller bordje
(ARDUINO UNO). In de bijhorende software heb ik volgende
code geschreven.

#include <Wire.h>

#define I2C_ADDRESS 0x4C
#define POWER_UP_DELAY 10


#define X_OUT 0x00
#define Y_OUT 0x01
#define Z_OUT 0x02



void setup()
{
  Serial.begin(9600);  // start serial for output
  setupacc();
  startacc();
}


void loop()
{
  char x = readRegister(X_OUT);
  char y = readRegister(Y_OUT);
  char z = readRegister(Z_OUT);

  Serial.print("X=");
  Serial.print(x, DEC);
  Serial.print(", Y=");
  Serial.print(y, DEC);
  Serial.print(", Z=");
  Serial.println(z, DEC);
  
  delay(200);
}


void setupacc()
{
  Wire.begin();
}


void startacc()
{
  delay(POWER_UP_DELAY);

// writing mode register of MMA7660 to active mode
  writeRegister(0x07,0b01);
  delay(100);

// setting SR register to 2 samples active
  writeRegister(0x08,0b001);
  delay(100);
    
}

void writeRegister(unsigned char r, unsigned char v)
{
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.send(r);
  Wire.send(v);
  Wire.endTransmission();
}

unsigned char readRegister(unsigned char r)
{
  unsigned char v;
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.send(r);  // register to read
  Wire.endTransmission();

  Wire.requestFrom(I2C_ADDRESS, 1); // read a byte
  while(!Wire.available())
  {
    // waiting
  }
  v = Wire.receive();
  return v;
}

Nu bekom ik volgend resultaat als ik dit serieel uitlees.


X=43, Y=43, Z=43
X=43, Y=43, Z=43
X=48, Y=48, Z=48
X=48, Y=48, Z=48
X=47, Y=47, Z=47
X=47, Y=47, Z=47
X=52, Y=52, Z=52
X=52, Y=52, Z=52

De waarden kunnen kloppen,
maar waarom zijn deze ALTIJD gelijk?
Dit mag toch niet, of dit moet toch heel toevallig zijn.
Mijn schakeling is gemaakt zoals in de datasheet (pg5)
http://www.comtech.com.cn/pdf/FSL-MMA7660FC.pdf

Nu vraag ik mij af waar ik mijn fout heb gemaakt.
Of misschien heb ik de datasheet volledig verkeerd begrepen.

Met vriendelijke groet

Lander Vanrobaeys

Dubbel topic:

Orientatie sensor MMA7660

In de toekomst graag geen dubbele topics meer openen (zie de FAQ). Deze gaat op slot.