Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 279 → Rev 280

/branches/v0.60_MicroMag3_Nick666/compass.c
79,31 → 79,50
{
switch (MM3.STATE)
{
case MM3_DRDY:
// 1. Byte ist da, abspeichern, an die MSB-Stelle rücken und Übertragung von 2. Byte auslösen
if (MM3.AXIS == MM3_X) {MM3.x_axis=SPDR; MM3.x_axis<<=8; SPDR=0x00; MM3.STATE=MM3_X_BYTE2; return;}
if (MM3.AXIS == MM3_Y) {MM3.y_axis=SPDR; MM3.y_axis<<=8; SPDR=0x00; MM3.STATE=MM3_Y_BYTE2; return;}
if (MM3.AXIS == MM3_Z) {MM3.z_axis=SPDR; MM3.z_axis<<=8; SPDR=0x00; MM3.STATE=MM3_Z_BYTE2; return;}
case MM3_X_BYTE2: // 2. Byte der entsprechenden Achse ist da.
MM3.x_axis |= SPDR;
MM3.x_axis -= OFF_X; // Sofort Offset aus der Kalibrierung berücksichtigen
MM3.AXIS = MM3_Y;
MM3.STATE = MM3_RESET;
case MM3_DRDY: // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken
if (MM3.AXIS == MM3_X)
{
MM3.x_axis = SPDR;
MM3.x_axis <<= 8;
}
else if (MM3.AXIS == MM3_Y)
{
MM3.y_axis = SPDR;
MM3.y_axis <<= 8;
}
else // if (MM3.AXIS == MM3_Z)
{
MM3.z_axis = SPDR;
MM3.z_axis <<= 8;
}
SPDR=0x00; // Übertragung von 2. Byte auslösen
MM3.STATE=MM3_BYTE2;
return;
case MM3_Y_BYTE2:
MM3.y_axis |= SPDR;
MM3.y_axis -= OFF_Y;
MM3.AXIS = MM3_Z;
MM3.STATE = MM3_RESET;
case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da
if (MM3.AXIS == MM3_X)
{
MM3.x_axis |= SPDR;
MM3.x_axis -= OFF_X; // Sofort Offset aus der Kalibrierung berücksichtigen
MM3.AXIS = MM3_Y;
MM3.STATE = MM3_RESET;
}
else if (MM3.AXIS == MM3_Y)
{
MM3.y_axis |= SPDR;
MM3.y_axis -= OFF_Y;
MM3.AXIS = MM3_Z;
MM3.STATE = MM3_RESET;
}
else // if (MM3.AXIS == MM3_Z)
{
MM3.z_axis |= SPDR;
MM3.z_axis -= OFF_Z;
MM3.STATE = MM3_TILT;
}
return;
case MM3_Z_BYTE2:
MM3.z_axis |= SPDR;
MM3.z_axis -= OFF_Z;
MM3.STATE = MM3_TILT;
return;
}
}
 
/branches/v0.60_MicroMag3_Nick666/compass.h
24,15 → 24,12
#define MM3_RESET 0
#define MM3_START_TRANSFER 1
#define MM3_WAIT_DRDY 2
#define MM3_DRDY 3
#define MM3_X_BYTE2 4
#define MM3_Y_BYTE2 5
#define MM3_Z_BYTE2 6
#define MM3_X 7
#define MM3_Y 8
#define MM3_Z 9
#define MM3_TILT 10
#define MM3_IDLE 255
#define MM3_DRDY 4
#define MM3_BYTE2 8
#define MM3_X 16
#define MM3_Y 32
#define MM3_Z 64
#define MM3_TILT 128
 
 
// Die Werte der Kompasskalibrierung