Rev 839 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 839 | Rev 966 | ||
---|---|---|---|
Line 16... | Line 16... | ||
16 | //############################################################################ |
16 | //############################################################################ |
17 | //Initzialisieren der I2C (TWI) Schnittstelle |
17 | //Initzialisieren der I2C (TWI) Schnittstelle |
18 | void i2c_init(void) |
18 | void i2c_init(void) |
19 | //############################################################################ |
19 | //############################################################################ |
20 | { |
20 | { |
21 | TWSR = 0; |
21 | TWSR = 0; |
22 | TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
22 | TWBR = ((SYSCLK/SCL_CLOCK)-16)/2; |
23 | } |
23 | } |
Line 24... | Line 24... | ||
24 | 24 | ||
25 | //############################################################################ |
25 | //############################################################################ |
26 | //Start I2C |
26 | //Start I2C |
27 | char i2c_start(void) |
27 | char i2c_start(void) |
28 | //############################################################################ |
28 | //############################################################################ |
29 | { |
29 | { |
30 | TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
30 | TWCR = (1<<TWSTA) | (1<<TWEN) | (1<<TWINT) | (1<<TWIE); |
31 | return(0); |
31 | return(0); |
Line 32... | Line 32... | ||
32 | } |
32 | } |
33 | 33 | ||
34 | //############################################################################ |
34 | //############################################################################ |
35 | //Start I2C |
35 | //Start I2C |
36 | void i2c_stop(void) |
36 | void i2c_stop(void) |
37 | //############################################################################ |
37 | //############################################################################ |
38 | { |
38 | { |
Line 39... | Line 39... | ||
39 | TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
39 | TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT); |
40 | } |
40 | } |
41 | 41 | ||
42 | void i2c_reset(void) |
42 | void i2c_reset(void) |
43 | //############################################################################ |
43 | //############################################################################ |
44 | { |
44 | { |
45 | i2c_stop(); |
45 | i2c_stop(); |
46 | twi_state = 0; |
46 | twi_state = 0; |
47 | motor = TWDR; |
47 | motor = TWDR; |
48 | motor = 0; |
48 | motor = 0; |
49 | TWCR = 0x80; |
49 | TWCR = 0x80; |
50 | TWAMR = 0; |
50 | TWAMR = 0; |
51 | TWAR = 0; |
51 | TWAR = 0; |
52 | TWDR = 0; |
52 | TWDR = 0; |
53 | TWSR = 0; |
53 | TWSR = 0; |
54 | TWBR = 0; |
54 | TWBR = 0; |
55 | i2c_init(); |
55 | i2c_init(); |
Line 56... | Line 56... | ||
56 | i2c_start(); |
56 | i2c_start(); |
57 | i2c_write_byte(0); |
57 | i2c_write_byte(0); |
58 | } |
58 | } |
59 | 59 | ||
60 | //############################################################################ |
60 | //############################################################################ |
61 | //Start I2C |
61 | //Start I2C |
62 | char i2c_write_byte(char byte) |
62 | char i2c_write_byte(char byte) |
63 | //############################################################################ |
63 | //############################################################################ |
64 | { |
64 | { |
65 | TWSR = 0x00; |
65 | TWSR = 0x00; |
66 | TWDR = byte; |
66 | TWDR = byte; |
Line 67... | Line 67... | ||
67 | TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
67 | TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE); |
68 | 68 | ||
69 | return(0); |
69 | return(0); |
70 | } |
70 | } |
71 | 71 | ||
72 | //############################################################################ |
72 | //############################################################################ |
73 | //Start I2C |
73 | //Start I2C |
74 | SIGNAL (TWI_vect) |
74 | SIGNAL (TWI_vect) |
75 | //############################################################################ |
75 | //############################################################################ |
76 | { |
76 | { |
190 | } |
189 | } |
191 | #endif |
190 | #endif |
192 | i2c_write_byte(Motor_Rechts); |
191 | i2c_write_byte(Motor_Rechts); |
193 | break; |
192 | break; |
194 | case 3: |
193 | case 3: |
195 | #if 0 |
194 | #if 0 |
196 | pd_ergebnis = (scale_p* DiffRoll + scale_d * (AdWertRoll - AdNeutralRoll - Roll_X_Off)) / 10; |
195 | pd_ergebnis = (scale_p* DiffRoll + scale_d * (AdWertRoll - AdNeutralRoll - Roll_X_Off)) / 10; |
197 | if(pd_ergebnis > (GasMischanteil + abs(GierMischanteil))) |
196 | if(pd_ergebnis > (GasMischanteil + abs(GierMischanteil))) |
198 | { |
197 | { |
199 | pd_ergebnis = (GasMischanteil + abs(GierMischanteil)); |
198 | pd_ergebnis = (GasMischanteil + abs(GierMischanteil)); |
200 | } |
199 | } |
201 | if(pd_ergebnis < -(GasMischanteil + abs(GierMischanteil))) |
200 | if(pd_ergebnis < -(GasMischanteil + abs(GierMischanteil))) |
202 | { |
201 | { |
203 | pd_ergebnis = -(GasMischanteil + abs(GierMischanteil)); |
202 | pd_ergebnis = -(GasMischanteil + abs(GierMischanteil)); |
204 | } |
203 | } |
205 | /* M o t o r L i n k s */ |
204 | /* M o t o r L i n k s */ |
206 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
205 | motorwert = GasMischanteil + pd_ergebnis - GierMischanteil; |
207 | if (motorwert < 0) |
206 | if (motorwert < 0) |
208 | { |
207 | { |
209 | motorwert = 0; |
208 | motorwert = 0; |
210 | } |
209 | } |
211 | else if(motorwert > MAX_GAS) |
210 | else if(motorwert > MAX_GAS) |
212 | { |
211 | { |
213 | motorwert = MAX_GAS; |
212 | motorwert = MAX_GAS; |
214 | } |
213 | } |
215 | if (motorwert < MIN_GAS) |
214 | if (motorwert < MIN_GAS) |
216 | { |
215 | { |
217 | motorwert = MIN_GAS; |
216 | motorwert = MIN_GAS; |
218 | } |
217 | } |
219 | Motor_Links = motorwert; |
218 | Motor_Links = motorwert; |
220 | if(!MotorenEin) |
219 | if(!MotorenEin) |
221 | { |
220 | { |
- | 221 | Motor_Links = 0; |
|
- | 222 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
|
222 | Motor_Links = 0; |
223 | } |
- | 224 | #endif |
|
- | 225 | i2c_write_byte(Motor_Links); |
|
- | 226 | break; |
|
223 | if(MotorTest[2]) Motor_Links = MotorTest[2]; |
227 | } |
- | 228 | break; |
|
- | 229 | case 2: |
|
- | 230 | i2c_stop(); |
|
- | 231 | if (motor<4) twi_state = 0; |
|
- | 232 | else motor = 0; |
|
- | 233 | i2c_start(); |
|
- | 234 | break; |
|
- | 235 | ||
- | 236 | //Liest Daten von Motor |
|
- | 237 | case 3: |
|
- | 238 | i2c_write_byte(0x53+(motorread*2)); |
|
- | 239 | break; |
|
- | 240 | case 4: |
|
- | 241 | switch(motorread) |
|
- | 242 | { |
|
- | 243 | case 0: |
|
- | 244 | i2c_write_byte(Motor_Vorne); |
|
- | 245 | break; |
|
- | 246 | case 1: |
|
- | 247 | i2c_write_byte(Motor_Hinten); |
|
- | 248 | break; |
|
- | 249 | case 2: |
|
- | 250 | i2c_write_byte(Motor_Rechts); |
|
224 | } |
251 | break; |
- | 252 | case 3: |
|
- | 253 | i2c_write_byte(Motor_Links); |
|
- | 254 | break; |
|
- | 255 | } |
|
- | 256 | break; |
|
- | 257 | case 5: //1 Byte vom Motor lesen |
|
- | 258 | motor_rx[motorread] = TWDR; |
|
- | 259 | ||
- | 260 | case 6: |
|
- | 261 | switch(motorread) |
|
- | 262 | { |
|
- | 263 | case 0: |
|
225 | #endif |
264 | i2c_write_byte(Motor_Vorne); |
226 | i2c_write_byte(Motor_Links); |
- | |
227 | break; |
265 | break; |
228 | } |
- | |
229 | break; |
- | |
230 | case 2: |
266 | case 1: |
231 | i2c_stop(); |
- | |
232 | if (motor<4) twi_state = 0; |
- | |
233 | else motor = 0; |
267 | i2c_write_byte(Motor_Hinten); |
419 | UltrasonicRangeLow = TWDR; |
418 | UltrasonicRangeLow = TWDR; |
420 | i2c_stop(); |
419 | i2c_stop(); |
421 | I2CTimeout = 22; |
420 | I2CTimeout = 22; |
422 | twi_state = 0; |
421 | twi_state = 0; |