Fischertechnik
AVR
Raspberry Pi
Elektronik
Netzwerk
Sonstiges
Impressum
|
Erste Tests mit Pollin Kompassmodul HDMM01
Arduino Quelltext
#define I2ADDR 0x30 // MMC2120=0x30 MMC2121=0x32 MMC2122=0x34 und MMC2123=0x36
#define TakeMeasure 0x01
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(115200);
}
void loop(){
byte MsbX,LsbX,MsbY,LsbY;
int x,y;
char line[80];
Wire.beginTransmission(I2ADDR); // Pollin HDMM01 mit MEMSIC MMC212xMG
Wire.send(0x00); // Adressfeld spielt hier keine Rolle
Wire.send(TakeMeasure); // Befehl zum Messen
Wire.endTransmission(); // stop transmitting
delay(20); // mindestens 5 Millisekunden warten
Wire.beginTransmission(I2ADDR); // Pollin HDMM01 mit MEMSIC MMC212xMG
Wire.send(0x01); // Adressfeld 1 um die 4 relevanten Register auszulesen
Wire.requestFrom(I2ADDR, 4);
while(Wire.available()<4);
MsbX =Wire.receive(); // obere 4 Bit X
LsbX =Wire.receive(); // untere 8 Bit X
MsbY =Wire.receive(); // obere 4 Bit Y
LsbY =Wire.receive(); // untere 8 Bit Y
Wire.endTransmission(); // stop transmitting
x=((MsbX&0x0f)*256)+(LsbX);
y=((MsbY&0x0f)*256)+(LsbY);
sprintf(line,"%02X %02X %02X %02X X=%4d Y=%4d\n",MsbX,LsbX,MsbY,LsbY,x,y);
Serial.print(line);
delay(400);
}
Als ersten Test habe ich mit obigen Programm die Werte x und y abgespeichert
während ich mich dreimal mit dem Sensor im Kreis gedreht habe. Die erste
Darstellung zeigt die Messwerte (blau ist X) in der Abfolge der Drehung. Die
Amplitude der beiden Kanäle ist nahezu identisch; die "Mitte" liegt aber
deutlich unterschiedlich. Das zweite Bild zeigt die Messwerte in
X/Y-Darstellung und zentriert.
|