Hallo,
hab mcih jetzt mal drangemacht und versucht, einen Servo anzusteuern:
Das Problem ist, das er bei Werten zwischen 0.002 und 0.001 eigentlich immer nur in eine Richtung will, gleiches wenn ich die Werte noch größer oder kleiner mache. D.h. es ist keine genaue Positionierung möglich.Code:#include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include <inttypes.h> #include <math.h> int16_t sollwert=(0.001/0.000004); int16_t wert_alt; int8_t pos; int main(void) { sei(); DDRB = (1<<DDB0); PORTB = (0<<PB0); wert_alt = 5000; TCCR0 = (0<<CS02) | (1<<CS01) | (1<<CS00); //Vorteiler 64 TCNT0 = (255-5000); //Timer vorladen TIMSK = (1<<TOIE0); //Interrupt enablen } SIGNAL (SIG_OVERFLOW0) { PORTB ^= (1<<PB0); //Pin tooglen if (wert_alt = 5000) { TCNT0 = sollwert; wert_alt = sollwert; } else { TCNT0 = 5000; wert_alt = 5000; } }
Meine Berechung ist folgendermaßen:
16000000/64 = 2500000
1/250000 =4*10^-6=0.000004 Zeit, die ein Takt braucht
20ms = 0.02s -> 0.02/0.000004 = 5000
1ms = 0.001s -> 0.001/0.000004 = 250
Weiss jemand, wo mein Fehler ist?







Zitieren

Lesezeichen