Subversion Repositories FlightCtrl

Rev

Rev 942 | Rev 945 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 942 Rev 943
Line 11... Line 11...
11
 
11
 
12
volatile uint8_t twi_state              = 0;
12
volatile uint8_t twi_state              = 0;
13
volatile uint8_t motor_write    = 0;
13
volatile uint8_t motor_write    = 0;
14
volatile uint8_t motor_read     = 0;
14
volatile uint8_t motor_read     = 0;
15
volatile uint8_t dac_channel    = 0;
15
volatile uint8_t dac_channel    = 0;
16
volatile uint8_t motor_rx[8];
16
volatile uint8_t motor_rx[MOTOR_COUNT*2];
Line 17... Line 17...
17
volatile uint16_t I2CTimeout = 100;
17
volatile uint16_t I2CTimeout = 100;
18
 
18
 
Line 159... Line 159...
159
                // Master Transmit
159
                // Master Transmit
160
        case 0: // Send SLA-W
160
        case 0: // Send SLA-W
161
                I2C_WriteByte(0x52 + (motor_write * 2) );
161
                I2C_WriteByte(0x52 + (motor_write * 2) );
162
                break;
162
                break;
163
        case 1: // Send Data to Slave
163
        case 1: // Send Data to Slave
-
 
164
#ifdef HEXAKOPTER
164
                switch(motor_write)
165
                switch(motor_write)
165
                {
166
                    {
-
 
167
                    case 0:
-
 
168
                            I2C_WriteByte(Motor_FrontLeft);
-
 
169
                            break;
-
 
170
                    case 1:
-
 
171
                            I2C_WriteByte(Motor_RearRight);
-
 
172
                            break;
-
 
173
                    case 2:
-
 
174
                            I2C_WriteByte(Motor_FrontRight);
-
 
175
                            break;
-
 
176
                    case 3:
-
 
177
                            I2C_WriteByte(Motor_RearLeft);
-
 
178
                            break;
-
 
179
                    case 4:
-
 
180
                            I2C_WriteByte(Motor_Right);
-
 
181
                            break;
-
 
182
                    case 5:
-
 
183
                            I2C_WriteByte(Motor_Left);
-
 
184
                            break;
-
 
185
                    }
-
 
186
 
-
 
187
#else
-
 
188
                switch(motor_write++)
-
 
189
                    {
166
                    case 0:
190
                    case 0:
167
                            I2C_WriteByte(Motor_Front);
191
                            I2C_WriteByte(Motor_Front);
168
                            break;
192
                            break;
169
                    case 1:
193
                    case 1:
170
                            I2C_WriteByte(Motor_Rear);
194
                            I2C_WriteByte(Motor_Rear);
Line 174... Line 198...
174
                            break;
198
                            break;
175
                    case 3:
199
                    case 3:
176
                            I2C_WriteByte(Motor_Left);
200
                            I2C_WriteByte(Motor_Left);
177
                            break;
201
                            break;
178
                }
202
                }
-
 
203
#endif
179
                break;
204
                break;
180
        case 2: // repeat case 0+1 for all motors
205
        case 2: // repeat case 0+1 for all motors
181
                        I2C_Stop();
206
                                I2C_Stop();
182
                if (motor_write < 3)
207
                if (motor_write < (MOTOR_COUNT-1))
183
                {
208
                {
184
                                        motor_write++; // jump to next motor
209
                                        motor_write++; // jump to next motor
185
                                        twi_state = 0; // and repeat from state 0
210
                                        twi_state = 0; // and repeat from state 0
186
                                }
211
                                }
187
                else
212
                else
188
                {       // data to last motor send
213
                {       // data to last motor send
189
                                        motor_write = 0; // reset motor write counter
214
                                        motor_write = 0; // reset motor write counter
190
                                }
215
                                }
191
                I2C_Start(); // Repeated start -> switch salve or switch Master Transmit -> Master Receive
216
                I2C_Start(); // Repeated start -> switch salve or switch Master Transmit -> Master Receive
192
                break;
217
                break;
193
 
-
 
194
        // Master Receive
218
        // Master Receive
195
        case 3: // Send SLA-R
219
        case 3: // Send SLA-R
196
                I2C_WriteByte(0x53 + (motor_read * 2) );
220
                I2C_WriteByte(0x53 + (motor_read * 2) );
197
                break;
221
                break;
198
        case 4:
222
        case 4:
Line 205... Line 229...
205
                                break;
229
                                break;
206
        case 6:
230
        case 6:
207
                //Read 2nd byte
231
                //Read 2nd byte
208
                                motor_rx[motor_read + 4] = TWDR;
232
                                motor_rx[motor_read + 4] = TWDR;
209
                                motor_read++;
233
                                motor_read++;
210
                if (motor_read > 3) motor_read = 0;
234
                if (motor_read > (MOTOR_COUNT-1)) motor_read = 0;
211
                I2C_Stop();
235
                I2C_Stop();
212
                                twi_state = 0;
236
                                twi_state = 0;
213
                I2CTimeout = 10;
237
                I2CTimeout = 10;
214
                break;
238
                break;