ja zB "s1001" heißt, dass er Servo 1 zur Position 001 also 1 bewegen soll. Startzeichen ist "&", Stopzeichen ist "!".
Danke!
Du, werd' das abend zu Hause einfach mal probieren.
Sag mir kurz, was ich eingeben muß
"&s1NNN|"
& start
| end
s Kennzeichen
1 servonummer 0-9
NNN eine Position
stimmt das ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ja zB "s1001" heißt, dass er Servo 1 zur Position 001 also 1 bewegen soll. Startzeichen ist "&", Stopzeichen ist "!".
Danke!
hallo, spät, aber doch !
Leider bin ich in der Vorweihnachtszeit nicht Herr meiner selbst, tut leid.
Anbei gezippt das Projekt. Vorsicht: ich hab mega32 mit 8 MHZ also ev. ausbessern.
Das tut jetzt, was es soll.
Damit ich was sehen kann, hab ich ein paar Terminal steuerungen eingebaut, du mußt etweder dein terminal auf VT100-Mode einstellen oder das Zeugs rauslöschen.
Ein paar sachen hab ich hin- und hergeschoben, aber du solltest dein Programm noch erkennen können
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi,
ich hab auch atmega32 und 8MHz also sollte das schon stimmen. Ich hab im Makefile mal meinen Programmer auf stk200 angepasst und /dev/parport0 statt com1 angegeben. Man kann es auch hochlagen auf den Controller. Das ganze Programm funktioniert auch wunderbar, solange man kein Terminal anschaltet. Wenn ich es anhabe springen die Servopositionen ab und zu mal hin und her. Eingaben von mir haben überhaupt keine Auswirkung. Was soll eigentlich der Spaß mit dem clear screen und terminal cursor? Und was ist VT100? Vielleicht liegts ja daran.
mfg
jagdfalke
Ahh, ich musste das Terminal auf ANSI stellen. Weiß zwar nicht warum aber es geht jetzt. Nur ein Problem gibts noch: Die Servos bewegen sich jetzt nur seeehr langsam. Hängt das mit den vielen Zeichen zusammen, die z.B. für dieses clear screen gesendet werden müssen? Hab schon den Timer auf CPU-Takt gesetzt, hat aber auch nicht viel geholfen. Man könnte doch die Baud-Rate erhöhen oder? Aber da spielt der Servotreiber wieder nicht mit
Naja, jetzt hab ich ja schonmal was vorzeigbares. Danke für die Hilfe !
WOW, hab grad noch was bemerkt: Wärend ich Zeichen sende, setzen die Servos machmal aus. Also die brechen für ne 10tel Sekunde komplett zusammen und sind dann wieder auf der gewünschten Position. Kann es sein, dass sich der CoController mit dem Servotreiber kurz aufhängt und sich selber ein RESET gibt?
mfg
jagdfalke
Der CoController RNS1 od. RNSX macht die Servosteuerung selbstätig und Interruptgesteuert. Solche Effekte sind da eher nicht möglich.Zitat von jagdfalke
Wenn sich die Servos zu langsam bewegen, dann sind wahrscheinlich die Schritte zu klein.
Denk mal: Du kannst einem Servo höchstens 50 Positionen in einer Sekunde übermitteln. (alle 20mS eine neue) das Übertragen EINER Position bei 9600 dauert ~ 4mS d.h. das reicht locker.
Du mußt jetzt deine Positions- und Schrittberechnung insgesamt mal genau anschauen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Das Zucken lag daran, dass ich nicht überprüft habe, ob der neue Wert zwischen 1 und 255 liegt.
Jetzt gehts gut!
Ich hab es jetzt anders gemacht: Der Betrag vom Step ist immer 1 und de Richtung wird bestimmt indem ich den signum-Wert dranmultipliziere.Du musst jetzt deine Positions- und Schrittberechnung insgesamt mal genau anschauen.
Jetzt ist es schon ein wenig schneller. Aber immernoch nicht zufriedenstellend. Klar ich könnte den Schritt standardmäßig auf 2 oder höher stellen aber aber dann ruckelts wahrscheinlich sehr, oder? Bevor ich mir die Arbeit mache die Probleme, die durch einen 2er-Schritt zustandekommen, zu lösen, wollte ich erstmal Fragen ob das die einzige Methode ist um das ganze schneller zu bekommen.
Nur damit ihr wisst um welche langsame Geschwindigkeit es sich hier handelt: Um von 1 bis 255 zu laufen braucht er ca 27 Sekunden :S
mfg
jagdfalke
Frage: Wie kommen denn solce Outputs im Terminal zustande ???
Da baut er irgendwie Mist, wenn ich was eingeben. Bei solchen Dingern kommen dann auch diese Zuckungen zustande.POSS DESTT
200 2007
127 127!
1277 127
1>7 1277
#sOA<#soA<
"POSS" == "POS"
"DESTT" == "DEST"
manchmal kommt aber auch ein anderer Buchstabenmix raus.
Die Nummern sollten eigentlich so aussehen:
200 200
127 127
127 127
127 127
mfg
jagdfalke
Ja, kommt daher, daß das Programm besonders im output-bereich ein absoluter Schnellschuss war(ist). da wird kreuz und quer "printf" oder UDR= gemacht, ohne sich aufeinander abzustimmen. Ist mehr Arbeit und Gefummel, als man meinen möchte.
Perfekterweise, wenn man beim Terminal-output bleibt, macht man auf kariertem Papier ein Konzept, was wo und wie lang auf dem Schirm stehen soll, und dann fummelt man halt rum.
Zuerst müßt mal auch mal alle "Kontroll" printf rausnehmen, die ja nur zeigen sollten, was und wo das Programm sich grad rumtreibt. das wissen wir ja jetzt so ziemlich, jetzt gehören andere Dinge gecheckt und herzgezeigt
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Zu dem Zeitpunkt als der gepostetet output gekommen ist hatte ich schon alle printfs entfernt.
Dieses "#sOA<#soA<" zeigt doch eigentlich, dass irgendwas dazwischen gefprintet wird wärend er die Servoposition übermittelt, oder? Soll ich da einfach cli()-sei() drum rum machen? Aber dann könnte es wieder sein, dass er Eingaben nicht registriert. Damn.
Zur Geschwindigkeit: Wenn ich das printf, das die Positionen ausgibt weglasse, ist er mind. doppelt so schnell. Naja, wäre trotzdem gut wenn wir ne andere Möglichkeit finden würden das schneller zu machen, denn irgendwann sollen die Daten vom PC empfangen werden.
Im Anhang nochmal der modifizierte Code
Lesezeichen