Sorry, dass ich wieder mal störe aber ich habe ein problem, ich habe 
entlich verstanden wie timer grundsätzlich funktionieren. ich habe eine 
led zum blinken gebracht, soweit sogut, dann wollte ich den timer so 
umfunktinieren, dass alle 0,1 ms ein interrupt ausgelößt wird, also bei 
8 mhz alle 800 takte. ich teile also mit dem prescaler den takt durch 8 
und zähle im timer bis hundert.
in der interruptrutine warte ich 200 interrupts ab (20ms) um dann 1ms zu 
warten. (muss ja mindestens gewartet werden) anschließend warte ich noch 
x zyklen ab, wobei x der servostellung entspricht. hier mein code, der 
servo schlägt ganz nach rechts aus, obwol er doch eigentlich in der 
Mittelstellung sein müsste oder?
hier das Beispiel
1  | #include <stdint.h>
  | 
2  | #include <avr/io.h> 
  | 
3  | #include <avr/interrupt.h>
  | 
4  | 
  | 
5  | 
  | 
6  | int8_t waiting, servo, tmp, servotmp;
  | 
7  | 
  | 
8  | 
  | 
9  | //Interrupt Service Routine
  | 
10  | ISR(TIMER0_COMP_vect)   // Sollte alle 0,1 ms per interrupt besucht werden
  | 
11  | {
 | 
12  | 
  | 
13  | servo = 5;           // Servoposition zwischen 0 und 10
  | 
14  | 
  | 
15  | waiting++;
  | 
16  | 
  | 
17  | if(waiting == 200){
 | 
18  | 
  | 
19  |  PORTB |= (1 << 0);    /* setzt Bit 0 an PortB auf 1 */
  | 
20  | 
  | 
21  |   if(tmp <= 9){      // auf jeden Fall 1 ms warten
 | 
22  |     tmp++;            // tmp für 1 ms warten
  | 
23  |   waiting=199;      // für rücksprung in schleife
  | 
24  |     servotmp=0;
  | 
25  |   }else{
 | 
26  |                       // jezt spezifische einstellung
  | 
27  | 
  | 
28  |   if(servotmp == servo){  // rücksprung
 | 
29  |       PORTB &= ~(1 << 0);   /* loescht Bit 0 an PortB */
  | 
30  |       waiting=0;  
  | 
31  |     tmp=0;
  | 
32  |   }else{
 | 
33  |     servotmp++;  // Korigieren und nächsten zyklus abwarten
  | 
34  |     waiting=199;
  | 
35  |   }
  | 
36  | 
  | 
37  |   }
  | 
38  | }
  | 
39  | 
  | 
40  | }
  | 
41  | 
  | 
42  | //Hauptprogramm
  | 
43  | 
  | 
44  | int main(void) {
 | 
45  | 
  | 
46  | //Pin Konfiguration
  | 
47  | DDRB = 0xFF; //PORT B als Ausgang
  | 
48  |   
  | 
49  | //Timer 0 initialisieren 
  | 
50  | TCNT0 = 0x00;          //Timer 0 mit Null initialisieren
  | 
51  | OCR0  = 0x64;          //Vergleichsregister initialisieren (bis 100 zählen)
  | 
52  | TIMSK = (1<<OCIE0);    //Output Compare interrupt enable
  | 
53  | sei();                 //Enable Global Interrupt
  | 
54  | 
  | 
55  | //Timer Start                       für Taktfrequenz / 8
  | 
56  | TCCR0 = ((1<<WGM01) | (1<<COM00) | (1<<CS01) |  (0<<CS00));
  | 
57  | //         CTC Mode | Toggle OC0 | Prescaler clk/8
  | 
58  |             
  | 
59  | while(1==1){
 | 
60  | 
  | 
61  | 
  | 
62  | 
  | 
63  | 
  | 
64  | };
  | 
65  |   
  | 
66  | return 0;
  | 
67  | }
  |