Hi,

Ok letzter versuch. Servo bewegt sich überhaupt nicht! Vielleicht liegt es ja nicht am Quellcode sondern am löten! Aber ich hab das auch schon 1000 mal gemessen!

Hier noch mal der veränderte 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(); 
   DDRD = (1<<PD7); 
   PORTD = (1<<PD7); 
   //Timer0 übernimmt die Highphase 
   //muss 1ms sein also 25 Takte bei einem Prescaler von 64 
   puls = 25; 
   TCCR2 = (1<<CS22); 
   TCNT2 = (255-puls); 
   TIMSK = (1<<TOIE2);  
   for(;;) 
   { 
   } 
   } 
    
SIGNAL(SIG_OVERFLOW2) 
   { 
   if(zaehler == 0) 
       { 
      PORTD &= ~(0<<PD7); 
      TCNT2 = (255-puls); 
      zaehler++;
	  //PORTB = (0<<PB0);  
      } 
   else if ( (zaehler > 0 ) && (zaehler < 20 ) ) 

      { 
      TCNT2 = (255-puls); 
      zaehler++; 
      } 
    else 
        { 
      TCNT2 = (255-puls); 
        zaehler = 0; 
      PORTD = (1<<PD7); 
        } 
   }
Was macht eigentlich die funktion "set_servo" ? Ich sehe gar nicht wo die auf gerufen wird! Oder übersehe ich was?

matic