Hallo an alle, ich hoffe ihr könnt mir helfen: Ich möchte fürs Fesselfliegen mit einem Brushlessmotor ein kleines Programm schreiben, was folgenden Programmablauf haben soll: 1. Warten bis Taster gedrückt wird 2. Dann 15 Sekunden warten, damit man Zeit hat zum Griff zu gehen 3. 3 Minuten Vollgas zum Fliegen 4. 5 Sekunden Halbgas um sich auf die Landung vorzubereiten 5. Motor aus um zu landen Eine LED soll mir dann anzeigen, wo ich bin: 1. LED dauerhaft an 2. LED 1 Sekunden Blinken 3. LED aus 4. LED 1 Sekunden Blinken 5. LED dauerhaft an Angeschlossen habe ich den Taster an PD6, die LED an PB5 und die Impulsleitung vom Servo an PD4. Das ist so merkwürdig, damit ich auf dem Lochraster möglichst keine Kabel benutzen musste. So weit so gut, der Regeler wird ja wie ein normales Servo angesteuert und in einem anderen Beitrag habe ich gelesen, das ich alle 20ms ein Signal von 1ms bis 2ms erzeugen muss, wobei 1ms 0% entsprechen und 2ms 100%, dementsprechend sind 1,5ms 50%. Aus dem AVR-Tutorial habe ich mir dann das Timerbeispiel von der Uhr genommen und die Werte so verändert, das ich mit dem internen Tackt vom Atmega8, also 1MHz, alle 0,5ms einen Interrupt bekomme. Über das Register r19 stelle ich nun ein, wie viele 0,5ms Impluse ich alle 20ms haben möchte. Und genau hier liegt das Problem, obwohl das 1 Sekunden Blinken der LED nach dem Tastendruck funktioniert, das Interrupt also richtig aufgerufen wird, läuft ein servo, wenn ich es anschließe an den Anschlag und summt weiter vor sich hin, als ob es noch weiter möchte. Am Servo liegt es nicht, denn ich habe es mit mehreren Probiert und kann mir nicht vorstellen, das alle kaputt sind. Leider habe ich kein Oszilloskop um mir das Ausgangssignal mal anzuschauen, also wollte ich fragen, ob sich vielleicht einer von euch mal den Quellcode anschauen kann, und vielleicht den Fehler findet. Schonmal vielen Dank im Vorraus. MfG. Daniel
Nutz doch die PWM Funktion vom Controller. Der kann dir eine PWM erzeugen, guck mal ins Datenblatt. Ueber ein Compare-Register kannst du dann die Pulsweite steuern. Ist eigentlich nicht weiter schwer.
Und ueberhaupt: Warum machst du das nicht in C auf einem Mega 8? Ist doch genug Flash-Speicher vorhanden. Hab mal ein Beispiel (hab ich damals fuer den ATTiny2313 gemacht, glaub ich) beigefuegt. Interrupts sind momentan auskommentiert. Uebrigens: Servos sind nicht besonders genau in der Ansteuerung, je nach Hersteller verhalten die sich ein wenig anders, was die Pulsweite anbelangt.
Erstmal Danke für die Hilfe, ich versuche es jetzt mit PWM, melde mich nochmal, wenn ich Probleme habe. MfG. Daniel
Hallo, ganz genau werden die 1-2ms von nahezu keinem Servo eingehalten. Es können auch mal 1,1-1,8ms sein oder ähnlich. Wenn der Servo an den Anschlag fährt und brummt bist du wahrscheinlich mit deiner Ansteuerung bei über 100%. Gruß Flieger
Bei genauerer Betrachtung ist mir aufgefallen, das ich es im Prinzip doch genau so mache, wie im Abschnitt "PWM in Software" im AVR-Tutorial beschrieben. Es muss also einfach nur ein Problem mit dem Abstand der Impulse bzw. der Länge derselbigen geben. Wenn sich jemand mal meinen Quellcode anschauen und mir Tipps dazu geben könnte, wäre ich sehr dankbar. MfG. Daniel
Sry für Doppelpost, habe aber gerade ein vergessenes rjmp eingefügt und nach einigem Debuggen jetzt auch Impulslaenge und -abstand einstellen können, aber das Servo macht immer noch nicht, was es soll. Jetzt ist es nur noch am Ticken, und zwar ziemlich schnell. Am RC-Empfänger funktioniert es einwandfrei. Den geänderten Code hänge ich an. MfG. Daniel
Danke, hat sich erledigt, ich hatte den Pin, anstatt ihn auf Low zu setzen, High gesetzt, das signal war also genau andersrum, jetzt funktioniert alles prima. MfG. Daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.