Gut, mit dem Timing dampft es etwas.
Für 1 mS prescale 64 Preload 6
zähler = 0 -->Pulse on
zähler = 20 ----> zähler reset
else ---->pulse off
d.h
1. mS PULSE ON
2. mS ---> 19. mS PULSE ON
20 ms zähler reset
Aber viel kannst du mit dem mS Timing nicht machen, ausser ganz links und ganz rechtsCode:#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 = 6; for(;;) { } } SIGNAL(SIG_OVERFLOW0) { switch(zaehler) { case 0: // case 1: das da aktivieren für 2 mS Servo PORTB |= (1<<PB0); zaehler++; break; case 20: zähler = 0; break; default: PORTB &= ~(1<<PB0); zaehler++; break; } TCNT0 = 6; }
Lesezeichen