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