Hi und danke für die Antwort. Habe mir das angeguckt und das meiste (also wie ein Servo) funktioniert war mir klar.
Und ja, es handelt sich um ein Modellbau-Servo. Wusste gar nicht, dass es so viele verschiedene gibt.
Aber wirklich weiter gekommen bin ich noch nicht.
bei servo_init wird die PWM erzeugt. da Bin ich mir nicht ganz sicher, ob ich das so richtig geändert habe (benutze einen Attiny45). ISR(TIMER1_COMPA_vect) weiss ich gar nicht was das macht und habe auch nichts geändert. Beim Kompilieren gibt es aber schon einmal keinen Fehler. Trotzdem bewegt sich mein Servomotor kein stück.Code:#define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define SERVOPIN 0 #define SERVOPORT PORTB #define DDRSERVO DDRB volatile unsigned char servopos; void servo_init() { TIMSK |= (1<<OCIE1A); TCCR0A |= (1<<WGM01) | (1<<CS00); OCR0A = F_CPU/100000; DDRSERVO|=(1<<SERVOPIN); } ISR(TIMER1_COMPA_vect) { static int count; if(count>servopos)SERVOPORT&=~(1<<SERVOPIN); else SERVOPORT|=(1<<SERVOPIN); if(count<2000)count++; // Die Impulse sollten alle 20ms gesendet werden! 6.2.11 mic else count=0; } int main (void) { DDRB = 0b100111; PORTB = (1<<PB3) | (1<<PB4); // Servo auf Mittelstellung fahren while( 1 ) { if( !(PINB & (1<<PINB3)) ) { // Servo nach links drehen } if ( !(PINB & (1<<PINB4)) ) { // Servo nach rechts drehen } } return 0; }
Wie gebe ich jetzt die von der PWM die Pulsweite und die Periodenweite an? Da bin ich noch nicht ganz schlau draus geworden.
gruß







Zitieren

Lesezeichen