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:
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!!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; }
Gruß Michi







Zitieren

Lesezeichen