TUBI
A Lesson Lived, Is A Lesson Learned
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