Hi Picnick,
inzwischen läuft mein Servo! wenigstens in eine Richtung!!
denn ich hab was entscheidendes vergessen:
TIMSK = (1<<TOIE0);
aktueller Code:
Code:
#include <avr/io.h> 
#include <avr/signal.h> 
#include <avr/interrupt.h> 
#include <inttypes.h> 
#include <math.h> 

volatile unsigned char servowert; 
volatile unsigned char puls; 
volatile unsigned char zaehler; 

int set_servo(volatile uint8_t pos) 
   { 
   servowert = (pos/180) + 1; 
   } 
    
int main(void) 
   { 
   zaehler = 0; 
   sei(); 
   DDRB = (1<<PB0); 
   PORTB = (1<<PB0); 
   //Timer0 übernimmt die Highphase 
   //muss 1ms sein also 25 Takte bei einem Prescaler von 64 
   puls = 25; 
   TCCR0 = (1<<CS01)|(1<<CS00); 
   TCNT0 = (255-puls); 
   TIMSK = (1<<TOIE0);  
   for(;;) 
   { 
   } 
   } 
    
SIGNAL(SIG_OVERFLOW0) 
   { 
   if(zaehler == 0) 
       { 
      PORTB = (0<<PB0); 
      TCNT0 = (255-puls); 
      zaehler++; 
      } 
   else if ( (zaehler > 0 ) && (zaehler < 20 ) ) 

      { 
      TCNT0 = (255-puls); 
      zaehler++; 
      } 
    else 
        { 
      TCNT0 = (255-puls); 
        zaehler = 0; 
      PORTB = (1<<PB0); 
        } 
   }
warum Preload 6 ich hab doch 25 ausgerechnet?
Wie mach ich das wenn ich in die andere Richtung will? Preload verdoppeln?
Gruß Michi