Rev 272 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 272 | Rev 275 | ||
---|---|---|---|
Line 43... | Line 43... | ||
43 | switch (MM3.STATE) |
43 | switch (MM3.STATE) |
44 | { |
44 | { |
45 | case MM3_RESET: |
45 | case MM3_RESET: |
46 | PORTB |= (1<<PB2); // J8 auf High, MM3 Reset |
46 | PORTB |= (1<<PB2); // J8 auf High, MM3 Reset |
47 | MM3.STATE = MM3_START_TRANSFER; |
47 | MM3.STATE = MM3_START_TRANSFER; |
48 | break; |
48 | return; |
Line 49... | Line 49... | ||
49 | 49 | ||
50 | case MM3_START_TRANSFER: |
50 | case MM3_START_TRANSFER: |
Line 51... | Line 51... | ||
51 | PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High) |
51 | PORTB &= ~(1<<PB2); // J8 auf Low (war ~125 µs auf High) |
52 | 52 | ||
53 | if (MM3.AXIS == MM3_X) SPDR = 0x51; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus |
53 | if (MM3.AXIS == MM3_X) SPDR = 0x51; // Schreiben ins SPDR löst automatisch Übertragung (MOSI und MISO) aus |
Line 54... | Line 54... | ||
54 | else if (MM3.AXIS == MM3_Y) SPDR = 0x52; // Micromag Period Select ist auf 1024 (0x50) |
54 | else if (MM3.AXIS == MM3_Y) SPDR = 0x52; // Micromag Period Select ist auf 1024 (0x50) |
55 | else if (MM3.AXIS == MM3_Z) SPDR = 0x53; // 1: x-Achse, 2: Y-Achse, 3: Z-Achse |
55 | else SPDR = 0x53; // if (MM3.AXIS == MM3_Z) |
56 | 56 | ||
Line 57... | Line 57... | ||
57 | MM3.DRDY = SetDelay(15); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 1024) |
57 | MM3.DRDY = SetDelay(15); // Laut Datenblatt max. Zeit bis Messung fertig (bei PS 1024) |
58 | MM3.STATE = MM3_WAIT_DRDY; |
58 | MM3.STATE = MM3_WAIT_DRDY; |
59 | break; |
59 | return; |
Line 60... | Line 60... | ||
60 | 60 | ||
61 | case MM3_WAIT_DRDY: |
61 | case MM3_WAIT_DRDY: |
62 | if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei |
62 | if (CheckDelay(MM3.DRDY)) {SPDR = 0x00;MM3.STATE = MM3_DRDY;} // Irgendwas ins SPDR, damit Übertragung ausgelöst wird, wenn Wartezeit vorbei |
63 | break; // Jetzt gehts weiter in SIGNAL (SIG_SPI) |
63 | return; // Jetzt gehts weiter in SIGNAL (SIG_SPI) |
64 | 64 | ||
65 | case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in ° |
65 | case MM3_TILT: // Zeitnahe Speicherung der aktuellen Neigung in ° |
66 | MM3.NickGrad = IntegralNick/(EE_Parameter.UserParam1*8); |
66 | MM3.NickGrad = IntegralNick/(EE_Parameter.UserParam1*8); |
67 | MM3.RollGrad = IntegralRoll/(EE_Parameter.UserParam2*8); |
67 | MM3.RollGrad = IntegralRoll/(EE_Parameter.UserParam2*8); |
Line 68... | Line 68... | ||
68 | MM3.AXIS = MM3_X; |
68 | MM3.AXIS = MM3_X; |
Line 78... | Line 78... | ||
78 | //############################################################################ |
78 | //############################################################################ |
79 | { |
79 | { |
80 | switch (MM3.STATE) |
80 | switch (MM3.STATE) |
81 | { |
81 | { |
82 | case MM3_DRDY: |
82 | case MM3_DRDY: |
83 | // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken und Übertragung von 2. Byte auslösen |
83 | // 1. Byte ist da, abspeichern, an die MSB-Stelle rücken |
84 | if (MM3.AXIS == MM3_X) {MM3.x_axis=SPDR; MM3.x_axis<<=8; SPDR=0x00; MM3.STATE=MM3_X_BYTE2; break;} |
84 | if (MM3.AXIS == MM3_X) |
- | 85 | { |
|
- | 86 | MM3.x_axis=SPDR; |
|
- | 87 | MM3.x_axis<<=8; |
|
- | 88 | } |
|
85 | if (MM3.AXIS == MM3_Y) {MM3.y_axis=SPDR; MM3.y_axis<<=8; SPDR=0x00; MM3.STATE=MM3_Y_BYTE2; break;} |
89 | else if (MM3.AXIS == MM3_Y) |
- | 90 | { |
|
- | 91 | MM3.y_axis=SPDR; |
|
- | 92 | MM3.y_axis<<=8; |
|
- | 93 | } |
|
- | 94 | else // if (MM3.AXIS == MM3_Z) |
|
- | 95 | { |
|
- | 96 | MM3.z_axis=SPDR; |
|
- | 97 | MM3.z_axis<<=8; |
|
- | 98 | } |
|
- | 99 | ||
86 | if (MM3.AXIS == MM3_Z) {MM3.z_axis=SPDR; MM3.z_axis<<=8; SPDR=0x00; MM3.STATE=MM3_Z_BYTE2; break;} |
100 | SPDR=0x00; // Übertragung von 2. Byte auslösen |
- | 101 | MM3.STATE=MM3_BYTE2; |
|
- | 102 | return; |
|
87 | 103 | ||
88 | case MM3_X_BYTE2: // 2. Byte der entsprechenden Achse ist da. |
104 | case MM3_BYTE2: // 2. Byte der entsprechenden Achse ist da. |
- | 105 | if (MM3.AXIS == MM3_X) |
|
- | 106 | { |
|
89 | MM3.x_axis |= SPDR; |
107 | MM3.x_axis |= SPDR; |
90 | MM3.x_axis -= OFF_X; // Sofort Offset aus der Kalibrierung berücksichtigen |
108 | MM3.x_axis -= OFF_X; |
91 | MM3.AXIS = MM3_Y; |
109 | MM3.AXIS = MM3_Y; |
92 | MM3.STATE = MM3_RESET; |
110 | MM3.STATE = MM3_RESET; |
93 | break; |
111 | } |
94 | - | ||
95 | case MM3_Y_BYTE2: |
112 | else if (MM3.AXIS == MM3_Y) |
- | 113 | { |
|
96 | MM3.y_axis |= SPDR; |
114 | MM3.y_axis |= SPDR; |
97 | MM3.y_axis -= OFF_Y; |
115 | MM3.y_axis -= OFF_Y; |
98 | MM3.AXIS = MM3_Z; |
116 | MM3.AXIS = MM3_Z; |
99 | MM3.STATE = MM3_RESET; |
117 | MM3.STATE = MM3_RESET; |
100 | break; |
118 | } |
101 | - | ||
102 | case MM3_Z_BYTE2: |
119 | else // if (MM3.AXIS == MM3_Z) |
- | 120 | { |
|
103 | MM3.z_axis |= SPDR; |
121 | MM3.z_axis |= SPDR; |
104 | MM3.z_axis -= OFF_Z; |
122 | MM3.z_axis -= OFF_Z; |
105 | MM3.STATE = MM3_TILT; |
123 | MM3.STATE = MM3_TILT; |
- | 124 | } |
|
- | 125 | ||
106 | break; |
126 | return; |
107 | } |
127 | } |
108 | } |
128 | } |
Line 109... | Line 129... | ||
109 | 129 | ||
110 | signed int MM3_heading(void) |
130 | signed int MM3_heading(void) |