Möglicherweise steht die Lösung hier (hab aber nur überflogen):
https://www.roboternetz.de/community...t=flash+eeprom
Möglicherweise steht die Lösung hier (hab aber nur überflogen):
https://www.roboternetz.de/community...t=flash+eeprom
Geändert von HeXPloreR (17.02.2014 um 19:27 Uhr)
@HeXPloreR
Genau da stand die Lösung!
Habe in den Fuse Bits die EESAVE Funktion aktiviert.
Nun kann ich den Speicher flashen ohne das EEPROM zu löschen, d,h. meine geschriebenen Werte bleiben erhalten.
Vielen Dank für deine Hilfe.
MfG
Roland
Robotik & Arduino Homepage
http://www.ardumega.de
Ah, gut zu wissen. Behalte ich mal im Hinterkopf, falls ich mal das EEPROM brauche![]()
Wie immer freut es mich wenn ich zur Lösung eines Problem etwas beitragen konnte
Gut finde ich auch das Du hier nochmal schreibst was genau Du jetzt eingestellt hast.
Viele Erfolg weiterhin
Jörg
Hallo
Habe nun die ungeliebten Metallarbeiten so gut wie abgeschlossen.
Ein paar Bilder vom Endergebnis im Anhang!
Nachdem ich den SD 21 Servocontroller mit dem M1284p angesteuert habe, musste ich nun feststellen, dass sämtliche Servowerte in etwa den doppelten Ausschlag ergaben.
Habe die komplette Software vom Sensobot 3 übernommen. Dort funktionierte alles einwandfrei !
Mal sehen was da schief gelaufen ist.
Was mich jedoch stutzig macht, einige Servos vollziehen Bewegungen, die ich in keiner Weise nachvollziehen kann!
Muss noch mal die I2C Routine kontrollieren, nicht das da etwas verdreht wurde .
Habe irgendwie den Eindruck, als ob die I2C Programmierung nicht exakt laüft.
Ansonsten bin ich mit dem bisherigen Hardwareaufbau ziemlich zufreíeden.
Werde mir demnächst ein wenig mehr Gedanken über die Sensorik machen, die ich einsetzen werde.
Mfg
![]()
Robotik & Arduino Homepage
http://www.ardumega.de
Hallo Roland,
das sieht sehr gut aus.
Zu Deinem ersten Problem:
Nun ich könnte mir vorstellen das wenn du das Programm von der Vorgänger Version übernommen hast, die Servos in den Beinen vielleicht symetrisch (3:3) angeordnet waren damit es schön aussieht.
Wenn ich es jetzt richtig erkannt hab, sind Deine Beine jetzt einmal rum alle in der gleichen Richtung angebracht - also nicht Deine Beine, Die vom BotDas bedeutet im Umkehrschluss, das die Bein dessen Servos jetzt andrersrum eingebaut sind, das läuft falschrum
Ebenso das Unterschenkelservo bekommt jetzt den Winkel über dem Knie ausgerechnet und nicht mehr den einschliessenden unter dem Knie. Jenachdem mit welchem Winkeln man im Programm natürlich arbeitet. Auch die eine hälfte der Hüftservo dreht jetzt falschrum.
Die Werte werden nachvollziehbar wenn Du einen einfachen Test mit einem an die SD21 angeschlossen Bein (3Servos) machen kannst: Der Oberschenkel steht 45° nach oben, der Unterschenkel steht 90° zum Oberschenkel nach unten. Die richtigen Werte dafür kannst rechnerisch überprüfen und ggf "hard" in ein Testprogramm nur dafür schreiben. Ich habe dafür z.B. eine RC-Fernbedienung benutz um den Höhenwert zu manipulieren. Vielleicht tut es auch eine kleine zeitliche Sequenz um einige Grad damit man etwas zu sehen bekommt. Ganz wichtig ist mit kleinen Bewegungen anzufangen um überhaupt eine tendenz zu erkennen, und nicht mit "gedachtem Vollanschlag" in die falsche richtuing zu fahren.
Wenn Du jetzt den ganzen Körper nach oben bewegst, dann sollte sich der Oberschenkel nach unten bewegen - dann ist dieser Wert so schon mal in richtiger Richtung berechnet. Passiert das andersrum ist die Achse entweder am Servo oder im Programm zu tauschen.
Jetzt der Unterschenkelservo wenn es mit dem Oberschenkel richtig rum läuft: Geht der Oberschenkel runter muss, wenn man nur die Höhe des Körpers ändert, sich der Unterschenkelwinkel vergrößern, weil die IK ja den vorgegeben Fußpunkt halten will. Bewegt er sich in die richtige Richtung hast Du mit diesem Bein eigentlich kein Problem bezüglich der IK. Den Test am besten für jedes Bein separat wiederholen um ganz genau mitzuschneiden was sich wie rum bewegt und ob das auch richtig ist.
Ich hatte diese Problem damals, allerdings schön gleichmässig, als ich von Conrad RS-2 Servos auf Hitec Servos umgestiegen bin. Dort waren bei gleicher Ausrichtung der Servohörner sämtliche Achsen verdreht. Habe das Problem über den Test oben dann so eingegrenzt und abgestellt natürlich über die Software.
Zum doppelten Wert:
Einen Servo an die SD21 anschliessen, diesen Servo einmal die Neutralstellung fahren (1500 ?). Markieren. Jetzt muss man wissen welcher Wert auf linksanschlag (1000 ?) hört und welcher auf rechtsanschlag (2000 ? ) UND den ungefähre Winkel dazu ( also etwa 180°/2 ?) davon rechnest Du jetzt einfach den 3.Teil aus also z.b.: 2000 - 1500 = 500 ;
500/ 90° = 5,55° ; 5,55° * 30° = ungefähr 166 ; 1500 + 166 = 1666 - Du gibst jetzt also über ein einfaches kleines Testprogram einmal oder mit 20ms Pausen in Schleife diesen erechneten wert aus. Jetzt sollte der Servo also etwa auf 30° neben der Neutralstellung stehen. Links oder rechts davon hängt tatsächlich wie ich schon sagte von den Servos ab. Der eine Hersteller dreht bei gleichem PWM Wert links weg, der andere rechts weg.
Das die SD21 über I²C dort was falsch macht halte ich für unwahrscheinlich, aber das deckst Du spätestens mit dem zweiten Test auf. Schau mal nach ob Du die config scl = Portc.0 und sda = Portc.1 im Programm drin hast und prüfe mal gegen ob der m128 das auch auf diesen Pins liegen hat. Vielleicht aber explizit vor und nach der Nutzung mal Inerrupts deaktivieren. Vielleicht hast Du dort etwas drin was "sich dazwischen mischt" und dann Seiteneffekte auslöst. Das findet sich ggf schneller wenn Du kurz beschreiben könntest wie Deine I²C Routinen genau funktionieren. Bascom arbeit ja gerne mit Pseudoregistern...da der Code vom m32 (?) stammt, hast Du vielleicht eine Register direkt angesprochen, welches es beim m128 nicht gibt oder etwas anders heißt?
Leider weiß ich nicht ob und welche Warnungen dann kommen sollten. Aber möglicherweise wurde der Code auch garnicht neu compiliert und dennoch manuell geflasht?
Ich z.B berechne momentan erstmal alle PWM-Werte in sechs IK durchläufen, rufe dann die Sub auf die diese Werte in einem Block global aufgenommen hat und schicke sie dann alle nacheinander durch die Funktion " Setzeservoposition(n, pwm)".
Das ist sicher noch verbesserungswürdig, aber ich kann hier ganz genau nachvollziehen was passiert. Dort deaktiviere ich ggf auch Beine die für Tests nicht benötigt werden zum testen der Berchnungszeit und und und ...oder ich nehme "Komponenten in echt" heraus, wenn Test mit etwas unklaren Ergebnissen anstehen.
Sollte das Verhalten insgesamt weiterhin auftreten dann tippe ich auf eine schlichte mehrfachberechnung bzw falscher Zuweisung auf schon fertig berechnete Werte. Also ich meine der eine Servo ist eigentlich schon berechnet, jetzt ist der Nächste dran, dieser Wert wird aber der falschen Variable übergeben. Im schlimmsten Fall nicht neu berechnet sonder auf aktuelle Werte auf- oder abgezogen. Das könnte so ein Verhalten auch erklären.
Hast du neue oder andere Servos benutzt?
Geändert von HeXPloreR (21.03.2014 um 18:31 Uhr)
@HeXPloreR
Danke für deine ausführlichen Erläuterungen!
Habe die alte Subroutine nur mal schnell in das neue Programm eingefügt, um zu sehen ob sich was bewegt.
Musste mittlerweile feststellen, dass es mit der neuen Beinkonstruktion alles ein wenig anders läuft als vorher.
Das Servo für das Kniegelenk sitzt z.B. jetzt im Schenkel. Dreht daher natürlich anders herum.
Ähnlich sieht es beim Fuss-Servo aus.
Die entspechenden Rechenwerte müssen eigentlich anstatt vorher abgezogen nun teilweise addiert werden und umgekehrt.
Ausserdem müssen die Berechnungen für die Hüftservos bedingt durch die runde Konstruktion komplett erneuert werden.
Die I2C Subroutine klappt einwandwrei. Das hast du schon richtig vermutet.
Habe es mit einem einzelnen Bein auch schon hinbekommen die Bewegungen so anzupassen, wie es der Laufweg erfordert!
Muss nun aber erst mal die Verkabelung in Angriff nehmen, bevor es mit der Programmierung weiter geht.
MfG
Robotik & Arduino Homepage
http://www.ardumega.de
Lesezeichen