Hi Picnick,
mit den Takten mein ich die Interrupts also nach 6 Interrupts 6ms usw.!
Ja die Befehle verbrauchen sxchon ein paar Takte aber die will ich jetzt mal hinterrücklings lassen!
Mein 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 Prescaler 64
   //1600000Mhz hat der µC 
   //0.0000000625s zischen den Takten 
   //mit Prescaler: 0.000004s zischen den Takten 
   //0.0001s/0.000004s = 25  
   //Preloadwert: 231 <= 256-25
   //Zeit zwischen Interrupt 0.1ms
   //1ms = 10 Takte
   //1.5ms = 15 Takte
   //2ms = 20 Takte
   //20ms = 200Takte
   //da erster Takt = 0
   //nach 9 Takten low
   //nach 199 Takten high!
   TCCR0 = (1<<CS01)|(1<<CS00); 
   TCNT0 = 231; 
   TIMSK |= (1 << TOIE0); 
   for(;;) 
   { 
   } 
} 
    
SIGNAL(SIG_OVERFLOW0) 
{ 
   switch(zaehler) 
   { 
        case 0:          
        case 1:       
		case 2: 
		case 3:
		case 4:
		case 5: //Links
		case 6:
		case 7:
		case 8:
		case 9: //1ms
		case 10:          
        case 11: //Mitte       
		case 12: 
		case 13:
		case 14:
		case 15://1.5ms
		case 16:
		case 17:
		case 18:
		case 19: //2ms //rechts
		
			PORTB |= (1<<PB0); 
                       zaehler++; 
			break; 
        case 199:        
			zaehler = 0;          
			break; 
		default: 
			PORTB &= ~(1<<PB0);      
            zaehler++; 
			break;    
         } 
    TCNT0 = 231; 
}
ich kann jetzt zwar wenn ich jetzt den Servo nach links stellen will einfach vor dem alles was nach case 5: kommt ein // setzen damit er nach linkns fährt, aber will jetzt dass ich einfach sag z.B. Servo 90 und er fährt zur Mittelstellung!! da muss ich wohl noch ein paar Funktionen einsetzen!!
Gruß Michi