Hi Picnick,
inzwischen läuft mein Servo! wenigstens in eine Richtung!!
denn ich hab was entscheidendes vergessen:
TIMSK = (1<<TOIE0);
aktueller Code:
warum Preload 6 ich hab doch 25 ausgerechnet?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); } }
Wie mach ich das wenn ich in die andere Richtung will? Preload verdoppeln?
Gruß Michi







Zitieren

Lesezeichen