Fischertechnik
AVR
Raspberry Pi
Elektronik
Netzwerk
Sonstiges


















Impressum

Erste Tests mit Pollin Kompassmodul HDMM01


Arduino Shield 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.