Hallo Zusammen Ich habe mir anhand einiger Beiträge aus diesem Forum ein Programm zum ansteuern von zwei Servos geschrieben. Dazu benutze ich die PWM Funktion von Timer1. Der Timer arbeitet soweit gut, aber wenn ich versuche die Servos drehen zu lassen wird der µC zurückgesetzt. Ich gebe zum Debuggen einzelne Zeichen über die serielle Schnittelle aus. Im Terminal sehe ich dann folgende Ausgabe: abcabcabcabcabcdeabcabcabcabcabcdeab usw.. Daraus entnehme ich das er erst beim 4 Durchlauf bis "e" kommt und dann auch nicht in der Main Schleife bleibt. Außerdem drehen die Servos nur ständig hin und her. Habe ich bei der Konfiguration des Timers einen Fehler gemacht oder liegt es an einer anderen Stelle? mfg Max Hardeware: STK500 mit ATMega16 bei 14,7456 MHz Compiler: avr-gcc 4.3.0 unter Ubuntu 8.10
Die Servos benoetigen 0.8 .. 2.2ms Einschaltzeit bei ca 20ms Periode. Wenn das Timing nicht stimmt, wegen einem Interrupt oder so, kommt das Servo aus dem Tritt. Es gibt servos, die fahren bei fehlendem, oder fehlerhaftem Steuersignal auf eine Deafultposition, andere halten die aktuelle position bei fehlendem Steuersignal. Ohne visuelle kontolle des Steuersignales mit einem Oszilloskop kann man keinerlei Aussagen machen.
Hallo aha Das halten einer Position ist ja kein Problem. Ich kann auch mit einiger Kraft am Servo drehen und er hält trotzdem die Stellung. Deshalb gehe ich mal davon aus das es kein Problem mit der Signallänge gibt. Habe gerade noch ausprobiert den Wert von ICR1 auf ca 22ms anzuheben, was aber keine Veränderung gebracht hat.
Was willst du in der for-Schleife machen?? Wenn ich das richtig sehe setzt du 50 mal den gleichen Wert in die compare-Register!!
>m Terminal sehe ich >dann folgende Ausgabe: abcabcabcabcabcdeabcabcabcabcabcdeab usw.. Daraus >entnehme ich das er erst beim 4 Durchlauf bis "e" kommt und dann auch >nicht in der Main Schleife bleibt. Da deine main-while-Schleife leer ist, und vorher ein 'e' ausgegeben wurde, schließe ich, dass die korrekte Ausgabe so aussehen sollte: abcde Da es immer wieder von vorn losgeht, bedeutet dass das der µC (ständig) resettet. Da du keine ISR freischaltest, kann es eigentlich nur ein hardware-reset sein. Möglich wäre zB ein brown-out-detect. Vielleicht ist der Aufbau hardwaremäßig, also im Sinne von EMV und Abblockkondensatoren, Spannungsversorgung,... nicht ganz "optimal" ??
@Mixer S. Die for-Schleife gibt den Servos nur zeit die Position zu erreichen. @holger Ja, ich arbeite mit Eclipse und dem AVR-Plugin. Alle Einstellungen sind korrekt. @Matthias Du hatest Recht. Danke! Habe die Brown-out detection deaktiviert und es läuft. Wass kann ich da an der Hardeware ändern um mich in zukunft besser vor sowas zu schützen? Reicht da ein 100nF Kondensator zwischen VCC und GND aus?
>Reicht da ein 100nF Kondensator zwischen VCC und GND aus?
Naja, das sollte nur eine Maßnahme sein.
Google mal nach
"emc desgin considerations"
Das ist ne AppNote von Atmel. Lies die dir mal durch. Die gilt für jede
digitale Schaltung.
Schon lange Zuleitungen und ein schwaches Netzteil reichen da, um
Probleme zu machen...
@Matthias Ok, werd ich machen. Danke nochmal an alle für die schnelle Hilfe.
Deine Zahlen für OCR stimmen nicht. 1ms OCR=1843 2ms OCR=3686 Ich hänge mal ein ziemlich umfangreiches Programm an, das auch noch Multiswitch-Module von futaba auslesen kann... Es ist zwar für den ATMega162 (scheinbar mein LIeblings-AVR) geschrieben, sollte aber Dank der Kommentare leicht änderbar sein. Die Servos hängen an "normalen" Portpins. "fosc" und die Registernamen müssten nur deinen Controller angepasst werden.
Hallo STK500-Besitzer Danke für den Code. Ich werd mal schaun ob das was für mich ist. Hab leider seit Dienstag keine Zeit mehr gehabt an dem Programm zu arbeiten. Auf jeden Fall Danke für den Code.
>sollte aber Dank der Kommentare leicht änderbar sein.
Die sind wohl irgendwie auf der Strecke geblieben...
Ich finde es aber relativ verständlich (naja, es ist ja auch von
mir...).
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.