ja...
aber das programm von dirk wird ja wohl passen?
das funktioniert ja bei zig hunderten anderen user auch? und ich verwende nichts anderes...
Druckbare Version
ja...
aber das programm von dirk wird ja wohl passen?
das funktioniert ja bei zig hunderten anderen user auch? und ich verwende nichts anderes...
Das kann ich nicht beurteilen, C meide ich wenn ich kann und in Bascom ist das (Demo) super einfach. :-) Aber wenn bei mir ein Programm nicht klappt versuche ich ein anderes, viele Wege führen nach Rom. Am besten sind natürlich selbst verfasste Programme Da weiß man halt was man sich beim Coden gedacht hat und wenn es nicht klappt weiß man auch das das Problem VOR der Tastatur zu suchen ist. :-) :-)
Gruß Richard
jo das programm schaut aber richtig aus...
bins gerade nochmals durchgegangen - sollte so passen!
wär gut wenn mir wer weiterhelfen kann....
hiiiiiiiiiiiiiilfeeee...
es klappt immer noch nicht :(
hat denn keiner mehr irgendwelche ideen und hilfen?
Also irgendwo im Verlaufe des Threads habe ich jetzt den Faden verloren. Was klappt denn immer noch nicht? Servo an +, - und Signal angeschlossen? Welcher Steuerpin? Welches Programm? Vielleicht wäre mal eine kleine Zusammenfassung hilfreich.
Alles klar!
Am Anfang hatte ich probiert Micro Servos, welche ich geschenkt bekommen habe mit Dirks-Servo-Library anzusteuern. Da bewegte sich jedoch nichts. Da Dirks Servo Library jedoch bei vielen eingesetzt wird, kann ich davon ausgehen dass das Programm so stimmt. Haben dann auch den Code noch angesehen, laut Dirk und meiner Meinung passt da auch alles!
Also haben wir eine LED angebaut (wie vorher beschrieben angeschlossen) und Signale über ADC3 gegeben. Die LED fing an zu blinken. Scheint also als ob die Anschlüsse alle in Ordnung sind. DA die Servos geschenkt waren, und auch schon in nem Projekt verbaut waren, dachten wir uns dass die Defekt sind.
Also habe ich einen komplett neuen Servo gekauft, diesen richtig angeschlossen (+ und - an der Basis des RP6 angeschlossen) und auf ADC3 der Erweiterungsplatine angeklemmt. Dirks Programm laufen lassen doch es bewegt sich immer noch ncihts! Und dieser Servo ist aber komplett neu!...
Da stehe ich jetzt leider :(
Vielleicht solltest du testweise mal einen anderen Ansatz verfolgen:
Sleep(10); erzeugt Impulse von ca. 1ms Länge. Das Programm sollte nach entsptechender Anpassung auch auf dem m32 mit ADC3 funktionieren. Ein richtig angeschlossenes und funktionierendes Servo sollte damit eine Position anfahren und halten.Code:#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase();
DDRA |= 1; // ADC0 auf Ausgang
while(1)
{
PORTA |= 1;
sleep(10);
PORTA &= ~1;
sleep(200-10);
}
return(0);
}
Hallo,
Dein Programm funktioniert einwandfrei. Der Servo wird bis zum Anschlag gedreht und hält seine Position dort....
Habs auf der Base gemach tmit ADC0
...
Kannst du mir eventuell sagen was beim Ansatz von Dirk dann nicht stimmt?
EDIT:
Wie müsste ich jetzt das Programm umschreiben wenn sich der Servo erst nach rechts und dann nach links drehen soll?
Kann ich auch Winkelangaben machen?
Danke
Je nach Doku benötigen Servos Impulslängen zwischen ca. 0,5 und 2,5ms. Wenn du den Wert beim Aufruf der sleep()-Funktion änderst sollte das Servo eine andere Position anfahren (z.B. sleep(20);). Servopositionen nahe oder gar auf dem Endpunkt sind kritisch.Zitat:
Der Servo wird bis zum Anschlag gedreht und hält seine Position dort.
Sind auch wirklich alle GNDs (von Base, m32 und Servo) miteinander verbunden? Die Spannungsversorgung für das Servo sollte vom Base oder einem externen Akkupack kommen, weil inzwischen mehrfach darüber berichtet wurde, dass Servos direkt am m32 nicht funktionieren.Zitat:
Habs auf der Base gemach mit ADC0 ... Kannst du mir eventuell sagen was beim Ansatz von Dirk dann nicht stimmt?
Die Servoansteuerung von Dirk erzeugt die Impulslängen in zwei Schritten. Zuerst wird die Länge des kürzesten Impuls definiert (Anschlag eine Seite) und zu diesem wird die dem gewünschten Drehwinkel entsprechende Impulsdauer hinzuaddiert (bis maximal Anschlag andere Seite). Kritisch ist hierbei die Streuung der Servos (Hersteller, Model, ...) bezüglich der Impulslängen für die Endanschlagpositionen. Wenn der kürzeste Impuls nicht genau stimmt verfälschen sich auch alle anderen Positionen. Das kann sogar dazu führen, dass die verwendeten Impulslängen Positionen außerhalb des Drehbereichs anwählen! Allererster Schritt aller Servoansteuerungen sollte deshalb die Ermittlung der für die Endpositionen nötigen Impulslängen sein.
Da die ServoLib über das Tasksystem eingebunden wird, sollten im Programm keine blockierenden Funktionen verwendet werden. Da ich immer nur meine eigenen Ansteuerungen verwende kann ich zur Servolib sonst nicht viel mehr sagen.
Vielleicht noch zwei allgemeine Hinweise: Nach dem Editieren immer Speichern vor dem Kompilieren und nach Änderungen in der ServoLib immer ein Clean/Make all ausführen.
Beispiele für mehrere Servopositionen mit sleep():
https://www.roboternetz.de/community...l=1#post484891
https://www.roboternetz.de/community...l=1#post507080
https://www.roboternetz.de/community...l=1#post420023