Was hast du genau an ihnen verändert?
Funktioniert ein "unveränderter" Servo?
Kannst du das Servosignal mit nem Oszi anschauen?
MFG
Hallo,
ich arbeite momentan an einem Projekt, bei dem Ich Servos ansteuern muss.
Ich versuche es mit folgendem Code, der einen Servo ansteuern soll:
Die Servos wurden, wie im Elektor-Schaltungsheft 07 beschrieben, modifieziert.Code:#define F_CPU 8000000L #include <avr/io.h> #inlcude <util/delay.h> void delay_ms(unsigned int ms) { while(ms--) _delay_ms(1); } int main(void) { DDRB |= (1<<PB0); //Servo an PB0 while(1) { PORTB |= (1<<PB0); delay_ms(2); PORTB &= ~(1<<PB0); delay_ms(15); } }
Aber die Servos drehen nicht, sonder bewegen sich nur ganz langsam oder gar nicht.
Gruß Pommestuete
Hey Hoh, letz program
Was hast du genau an ihnen verändert?
Funktioniert ein "unveränderter" Servo?
Kannst du das Servosignal mit nem Oszi anschauen?
MFG
Hallo tüte,
mixxers Vorschlag ist richtig: es geht darummöglichst einfach zu unterscheiden, ob du den Fehler auf der Servoseite oder auf der MC Seite suchen sollst.
Genau genommen ist ein Oszi nicht nötig, ein SoftwareOszi reicht da locker aus:
Bild hier
Damit siehst du genau, womit die Servos gefüttert werden. Ein kleines Programm reicht aus, um zu zeigen, was am Linein Eingang der Soundkarte anliegt. In meinem Beispiel werden die Servosignale von 2 Kanälen gezeigt.
grüsse,
Hannes
ob ein normaler servo funktioniert:
Nein, er lässt sich nicht stellen.
Er bewegt sich nicht oder schlägt voll aus!
Hey Hoh, letz program
Mit deinem Programm ist auch der Impuls 2ms - das heist voller Ausschlag. Wenn du ihn auf 1,5ms stellst (Pause dann 20ms-1,5ms) dann sollte der Servo auf Mittelstellung fahren!
MFG Mixxer
Hallo
Sowohl mit einer wie auch mit zwei Millisekunden Wartezeit funktioniert mein Billigservo mit dem an Port A0 angepassten Programm:
Stimmt denn die Taktfrequenz? Mein RP6 läuft mit Sicherheit mit 8 MHz.Code:// #define F_CPU 8000000L #include <avr/io.h> #include <util/delay.h> void delay_ms(unsigned int ms) { while(ms--) _delay_ms(1); } int main(void) { DDRA |= (1<<PA0); //Servo an PA0 while(1) { PORTA |= (1<<PA0); delay_ms(2); PORTA &= ~(1<<PA0); delay_ms(15); } }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Versuch mal das zweite delay auf 18ms zu stellen, vielleicht hilfts was.
Super, des mit den 18ms Funktioniert!
Aber mein Problem ist jetzt, wie ich 2 Servos mit Timern verwenden kann, da der ablauf ja nur einen Servo steuert.
Ich hab nen Atmega16 mit 5MHz.
Ach ja: Vorher warens 8.
Hey Hoh, letz program
Hallo Tüte,
alles zusammen in eine Schleife: Erst das eine Servo ansteuern, dann das andere Servo am anderen Port. Die Pause wieder so ergänzen, dass eine Runde 20ms dauert.
grüsse,
Hannes
so inteliigent bin ich auch schon, aber ich will eigentlich ne "intelligenz" in meiner main-schleife machen.
Da hab ich "keine" Zeit mehr, mich um die Servos zu kümmern.
Hey Hoh, letz program
Lesezeichen