Subversion Repositories FlightCtrl

Rev

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

Rev 918 Rev 1111
Line 4... Line 4...
4
#include "main.h"
4
#include "main.h"
Line 5... Line 5...
5
 
5
 
6
volatile unsigned char twi_state = 0;
6
volatile unsigned char twi_state = 0;
7
unsigned char motor = 0;
7
unsigned char motor = 0;
8
unsigned char motorread = 0;
8
unsigned char motorread = 0;
Line 9... Line 9...
9
unsigned char motor_rx[8];
9
unsigned char motor_rx[16];
10
 
10
 
11
//############################################################################
11
//############################################################################
12
//Initzialisieren der I2C (TWI) Schnittstelle
12
//Initzialisieren der I2C (TWI) Schnittstelle
Line 63... Line 63...
63
   
63
   
Line 64... Line 64...
64
    return(0);
64
    return(0);
Line -... Line 65...
-
 
65
   
-
 
66
}
-
 
67
 
-
 
68
#ifdef OCTO
-
 
69
//############################################################################
-
 
70
//Start I2C
-
 
71
SIGNAL (TWI_vect)
-
 
72
//############################################################################
-
 
73
{
-
 
74
    switch (twi_state++)
-
 
75
        {
-
 
76
        case 0:
-
 
77
                i2c_write_byte(0x52+(motor*2));
-
 
78
                break;
-
 
79
        case 1:
-
 
80
                switch(motor++)
-
 
81
                    {
-
 
82
                    case 0:
-
 
83
                            i2c_write_byte(Motor1);
-
 
84
                            break;
-
 
85
                    case 1:      
-
 
86
                            i2c_write_byte(Motor2);
-
 
87
                            break;
-
 
88
                    case 2:
-
 
89
                            i2c_write_byte(Motor3);
-
 
90
                            break;
-
 
91
                    case 3:
-
 
92
                            i2c_write_byte(Motor4);
-
 
93
                            break;
-
 
94
                    case 4:
-
 
95
                            i2c_write_byte(Motor5);
-
 
96
                            break;
-
 
97
                    case 5:      
-
 
98
                            i2c_write_byte(Motor6);
-
 
99
                            break;
-
 
100
                    case 6:
-
 
101
                            i2c_write_byte(Motor7);
-
 
102
                            break;
-
 
103
                    case 7:
-
 
104
                            i2c_write_byte(Motor8);
-
 
105
                            break;
-
 
106
                    }
-
 
107
                break;
-
 
108
        case 2:
-
 
109
                i2c_stop();
-
 
110
                if (motor<8) twi_state = 0;
-
 
111
                else motor = 0;
-
 
112
                i2c_start();  
-
 
113
                break;
-
 
114
                   
-
 
115
        //Liest Daten von Motor
-
 
116
        case 3:
-
 
117
                i2c_write_byte(0x53+(motorread*2));
-
 
118
                break;
-
 
119
        case 4:
-
 
120
                switch(motorread)
-
 
121
                    {
-
 
122
                    case 0:
-
 
123
                            i2c_write_byte(Motor1);
-
 
124
                            break;
-
 
125
                    case 1:      
-
 
126
                            i2c_write_byte(Motor2);
-
 
127
                            break;
-
 
128
                    case 2:
-
 
129
                            i2c_write_byte(Motor3);
-
 
130
                            break;
-
 
131
                    case 3:
-
 
132
                            i2c_write_byte(Motor4);
-
 
133
                            break;
-
 
134
                    case 4:
-
 
135
                            i2c_write_byte(Motor5);
-
 
136
                            break;
-
 
137
                    case 5:      
-
 
138
                            i2c_write_byte(Motor6);
-
 
139
                            break;
-
 
140
                    case 6:
-
 
141
                            i2c_write_byte(Motor7);
-
 
142
                            break;
-
 
143
                    case 7:
-
 
144
                            i2c_write_byte(Motor8);
-
 
145
                            break;
-
 
146
                    }
-
 
147
                break;
-
 
148
        case 5: //1 Byte vom Motor lesen       
-
 
149
                motor_rx[motorread] = TWDR;
-
 
150
 
-
 
151
        case 6:
-
 
152
                switch(motorread)
-
 
153
                    {
-
 
154
                    case 0:
-
 
155
                            i2c_write_byte(Motor1);
-
 
156
                            break;
-
 
157
                    case 1:      
-
 
158
                            i2c_write_byte(Motor2);
-
 
159
                            break;
-
 
160
                    case 2:
-
 
161
                            i2c_write_byte(Motor3);
-
 
162
                            break;
-
 
163
                    case 3:
-
 
164
                            i2c_write_byte(Motor4);
-
 
165
                            break;
-
 
166
                    case 4:
-
 
167
                            i2c_write_byte(Motor5);
-
 
168
                            break;
-
 
169
                    case 5:      
-
 
170
                            i2c_write_byte(Motor6);
-
 
171
                            break;
-
 
172
                    case 6:
-
 
173
                            i2c_write_byte(Motor7);
-
 
174
                            break;
-
 
175
                    case 7:
-
 
176
                            i2c_write_byte(Motor8);
-
 
177
                            break;
-
 
178
                    }
-
 
179
                break;  
-
 
180
        case 7: //2 Byte vom Motor lesen       
-
 
181
                motor_rx[motorread+4] = TWDR;
-
 
182
                motorread++;
-
 
183
                if (motorread>7) motorread=0;
-
 
184
                i2c_stop();
-
 
185
                I2CTimeout = 10;
-
 
186
                twi_state = 0;
-
 
187
                break;
-
 
188
        case 8: // Gyro-Offset
-
 
189
                i2c_write_byte(0x98); // Address of the DAC
-
 
190
                break;
-
 
191
        case 9:
-
 
192
                i2c_write_byte(0x10); // Update Channel A
-
 
193
                break;
-
 
194
        case 10:
-
 
195
                i2c_write_byte(AnalogOffsetNick); // Value
-
 
196
                break;
-
 
197
        case 11:
-
 
198
                i2c_write_byte(0x80); // Value
-
 
199
                break;
-
 
200
        case 12:
-
 
201
                i2c_stop();              
-
 
202
                I2CTimeout = 10;
-
 
203
                i2c_start();  
-
 
204
                break;
-
 
205
        case 13:
-
 
206
                i2c_write_byte(0x98); // Address of the DAC
-
 
207
                break;
-
 
208
        case 14:
-
 
209
                i2c_write_byte(0x12); // Update Channel B
-
 
210
                break;
-
 
211
        case 15:
-
 
212
                i2c_write_byte(AnalogOffsetRoll); // Value
-
 
213
                break;
-
 
214
        case 16:
-
 
215
                i2c_write_byte(0x80); // Value
-
 
216
                break;
-
 
217
        case 17:
-
 
218
                i2c_stop();              
-
 
219
                I2CTimeout = 10;
-
 
220
                i2c_start();  
-
 
221
                break;
-
 
222
        case 18:
-
 
223
                i2c_write_byte(0x98); // Address of the DAC
-
 
224
                break;
-
 
225
        case 19:
-
 
226
                i2c_write_byte(0x14); // Update Channel C
-
 
227
                break;
-
 
228
        case 20:
-
 
229
                i2c_write_byte(AnalogOffsetGier); // Value
-
 
230
                break;
-
 
231
        case 21:
-
 
232
                i2c_write_byte(0x80); // Value
-
 
233
                break;
-
 
234
        case 22:
-
 
235
                i2c_stop();              
-
 
236
                I2CTimeout = 10;
-
 
237
                twi_state = 0;
-
 
238
                break;
-
 
239
        }
65
   
240
 TWCR |= 0x80;
66
}
241
}
67
 
242
#else 
68
//############################################################################
243
//############################################################################
69
//Start I2C
244
//Start I2C
Line 200... Line 375...
200
                twi_state = 0;
375
                twi_state = 0;
201
                break;
376
                break;
202
        }
377
        }
203
 TWCR |= 0x80;
378
 TWCR |= 0x80;
204
}
379
}
-
 
380
#endif
205
 
381