Hallo zusammen!
Wollte in einem AVR Atmega16 gerade einen 16Bit Integer (volatile) aus
einem TimerCompareInterrupt in der Main verarbeiten, doch ich bekomm bei
geschw immer 0...
1 | TIMSK = 0x00; //...Interrupt aus
|
2 | geschw = 2/(milli/1000)*3.6; //Berechung der Geschwindigkeit _hunderter = geschw/100;
|
3 | _zehner = (geschw - _hunderter*100)/10;
|
4 | _einer = (geschw - _hunderter*100 - _zehner*10);
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | Der Timer:
|
10 | TCCR1B = (1<<WGM12); // CTC
|
11 | TCCR1B |= (1<<CS10); // Prescaler 1
|
12 | OCR1A = 15999; //jede millisek. -- (15999+1)/16000000
|
hier der Handler und die Deklarationen:
1 | volatile uint16_t milli;
|
2 | uint16_t geschw;
|
3 | uint8_t _einer;
|
4 | uint8_t _zehner;
|
5 | uint8_t _hunderter;
|
6 |
|
7 | ISR(TIMER1_COMPA_vect)
|
8 | {
|
9 | milli++;
|
10 | }
|
11 |
|
12 |
|
13 |
|
14 | oder liegts vielleicht doch an dem hier?
|
15 |
|
16 |
|
17 | switch (_hunderter) //Die Hunderter werden ausgegeben:
|
18 | {
|
19 | case 0:
|
20 | zahl = null;
|
21 | case 1:
|
22 | zahl = eins;
|
23 | case 2:
|
24 | zahl = zwei;
|
25 | case 3:
|
26 | zahl = drei;
|
27 | case 4:
|
28 | zahl = vier;
|
29 | case 5:
|
30 | zahl = fuenf;
|
31 | case 6:
|
32 | zahl = sechs;
|
33 | case 7:
|
34 | zahl = sieben;
|
35 | case 8:
|
36 | zahl = acht;
|
37 | case 9:
|
38 | zahl = neun;
|
39 | }
|
kann mir bitte jemand sagen warum?
Danke im Vorraus,
Felix