Hallo
Vielleicht etwas offtopic weil nur 8 Servos an einem 8MHz-Mega8:
vla bis hri sind die Servopositionen vornelinksaußen bis hintenrechtsinnen. Die defines dazu:Code:ISR(TIMER2_COMP_vect) { static uint16_t count=0; static uint16_t count2=1000; static uint8_t impuls=0, servo=0; static uint8_t impuls2=0, servo2=0; if(!impuls) { if(servo == 0) { impuls=vla; servo0_on; } if(servo == 1) { impuls=vli; servo0_off; servo1_on; } if(servo == 2) { impuls=hla; servo1_off; servo2_on; } if(servo == 3) { impuls=hli; servo2_off; servo3_on; } if(servo == 4) servo3_off; if(servo < 5) servo++; } else impuls--; if(!impuls2) { if(servo2 == 4) { impuls2=hra; servo4_on; } if(servo2 == 5) { impuls2=hri; servo4_off; servo5_on; } if(servo2 == 6) { impuls2=vra; servo5_off; servo6_on; } if(servo2 == 7) { impuls2=vri; servo6_off; servo7_on; } if(servo2 == 8) servo7_off; if(servo2 < 9) servo2++; } else impuls2--; if(count < 2000) count++; else { count=impuls=servo=0; if(p) p--; } if(count2 < 2000) count2++; else { count2=impuls2=0; servo2=4; } }
Die ISR wird mit 100kHz aufgerufen ( TIMSK |= (1<<OCIE2); TCCR2 = (1<<WGM21) | (1<<CS20); OCR2 = 80Code:#define servo0_on PORTC |= (1<<PC1) #define servo0_off PORTC &= ~(1<<PC1) #define servo1_on PORTC |= (1<<PC0) #define servo1_off PORTC &= ~(1<<PC0) #define servo2_on PORTD |= (1<<PD4) #define servo2_off PORTD &= ~(1<<PD4) #define servo3_on PORTD |= (1<<PD5) #define servo3_off PORTD &= ~(1<<PD5) #define servo4_on PORTB |= (1<<PB1) #define servo4_off PORTB &= ~(1<<PB1) #define servo5_on PORTB |= (1<<PB2) #define servo5_off PORTB &= ~(1<<PB2) #define servo6_on PORTB |= (1<<PB4) #define servo6_off PORTB &= ~(1<<PB4) #define servo7_on PORTB |= (1<<PB5) #define servo7_off PORTB &= ~(1<<PB5)und die Servos werden nacheinander angesteuert. Bei maximal 2 ms pro Servo mal 8 Servos hat die ISR bei 20 ms Wiederholung noch ca. 4 ms Leerlaufzeit. Ein schnellerer Kontroller (16MHz) mit 200kHz-ISR-Frequenz sollte so genau 20 Servos schaffen. Der Hacken: Ich bin nicht sicher, ob die ISR nicht zu lange ist, ich habe die Ausführungszeit noch nicht berechnet. Bei meinem asuro sieht das dann so aus:
Externes Bild anzeigen
http://www.youtube.com/watch?v=uyojMyb8V0s
Gruß
mic







Zitieren

Lesezeichen