Hi
Also ich versuche einen Servo ein meinem myAVR Board zu betreiben.
Als Beispiel habe ich den Code aus dem RN-Wissen Artikel genommen und er sieht jetzt wie folgt aus:
Nur leider macht er bis auf wie verrückt "zucken" nichts.Code:#include <avr/io.h> // I/O Port definitions #include <avr/interrupt.h> // Interrupt macros #define F_CPU 4000000 #define SERVOPIN 7 #define SERVOPORT PORTD #define DDRSERVO DDRD volatile unsigned char servopos; void servo_init() { TIMSK|=(1<<OCIE2); TCCR2 |= (1<<WGM21) | (1<<CS20); //Prescale=1, CTC mode OCR2 = F_CPU/100000; //alle 10µS ein IRQ DDRSERVO|=(1<<SERVOPIN); }; ISR(TIMER2_COMP_vect) { static int count; if(count>servopos) SERVOPORT&=~(1<<SERVOPIN); else SERVOPORT|=(1<<SERVOPIN); if(count<2000+servopos) count++; else count=0; }; int main(void) { DDRD = 0xFF; PORTD = 0x00; sei(); servo_init(); servopos=120; while(1) { } return 0; }
Was hab ich falsch gemacht?
gruß
Tobi
Edit:
So, habs nun doch noch selbst hinbekommen.
Das Beispiel für Bascom hat mich fehlgeleitet, dort steht man soll einen Wert zwischen 50 und 150 eingeben, bei C ist es aber ein Wert zwischen 0 und 100.
Und zum zucken... der Servo ist sehr alt, vielleicht kommt es ja davon.







Zitieren

Lesezeichen