PID Werte anpassen ohne USB-Port

  • Hallo zusammen,

    wie zur von mir zu lesen habe ich wohl ein Teil meines Atmega1280 gegrillt. Ich bin allerdings so weit, dass er mit dem zweiten Extruder ohne weiteres funktioniert. Allerdings steht der Drucker im Keller und die PID-Reglerwerte passen beim besten Willen nicht. Die Temperatur schwangt +/-15 Grad was ein Drucken unmöglich macht.


    Daher die entscheidene Frage: Kann ich die PID-Werte bei der Originalen Firmware oder bei Sailfish nachträglich ohne Relicatorg oder ähnlichen ändern. Die VERBINDUNG ÜBER USB IST NICHT MÖGLICH,DA DEFEKT.


    Die richtigen Werte für die einzelnen Regler sind mir bekannt, aber ich kenne keinen Weg diese temporär oder gar dauerhaft zu hinterlegen.


    Laienhaft daher auch die Frage, ob dies ggf über die ICSP-Schnittstelle möglich wäre? Ich bin leider mit meinem Latein am Ende.

  • Hallo BadFrog,


    da meines Wissens nach die PID Werte im EEPROM stehen, solltest du da eigentlich problemlos über ICSP rankommen. Mit avrdude kannst du dir den alten EEPROM auslesen, kannst ihn am PC bearbeiten und dann auch wieder schreiben.

    Wo im EEPROM jetzt genau was steht, kann ich dir leider nicht sagen (da musst du wohl reverse-engineeren).


    Andernfalls kann ich dir auch mal n dump von meinem EEPROM schicken (falls das hilft).

    Was für einen AVR-Programmer hast du denn? (ich gehe mal vom USBASP von fischl aus).


    Auslesen kannst du deinen EEPROM dann etwa so:

    Code
    1. avrdude -c usbasp -p m1280 -U eeprom:r:eeprom_dump.bin:i

    Bin mir nicht sicher ob :i oder :r die bessere Lösung ist ... da das erstmal nur der lesende Aufruf ist, kannst du damit ja mal rumspielen ob es dich weiterbringt.

    Hilfe dazu findest du grundsätzlich erstmal hier: https://linux.die.net/man/1/avrdude


    Viel Erfolg :thumbup:

  • Hi,

    also das auslesen habe ich gerade nicht getestet, stellt mich aber vor keine Problem. Benutze avrdude wie du beschrieben hast.


    Reverseengineering ist leider nicht meinen Stärke. Gibt es überhaupt einen Decompiler für AVR, ich bin leider bisher nicht wirklich fündig geworden, bzw stecke auch nicht tief genug im Thema.


    Einen anderen Weg durch einen angepassten G-Code ist nicht bekannt, oder?


    Die Originale .hex ist auch noch vorhanden.

  • EEPROM ist ein Speicher. Wenn du den über avrdude ausliest, dann hast du einfach den rohen Speicherinhalt vor dir. Da muss nichts dekompiliert werden. Das ist einfach nur ein memory-dump. Ich meinte mit dem reverse-engineering nur, dass du rausfinden musst, welche HEX Werte du dann entsprechend ändern musst.

    Wenn du weißt was für Werte drinstehen, kannst du diese Werte im dump suchen und diese dann ändern.


    Mit Sailfish kannst du diesen Dump glaub ich sogar ohne ICSP direkt über die SD Karte machen.

    Also den EEPROM auf die SD-Karte dumpen, am PC anschauen, entsprechende Werte ändern und dann wieder auf die SD-Karte spielen und zurückflashen (unbedingt den originalen dump als backup behalten).


    Ausgehend davon dass du den Segelfisch bei dir drauf hast, kann man ja im Code nachgucken wo im EEPROM was liegt:

    https://github.com/jetty840/Sa…c/MightyBoard/Motherboard


    Code
    1. eeprom_offsets::T0_DATA_BASE = 0x0100
    2. eeprom_offsets::T1_DATA_BASE = 0x011C
    3. toolhead_eeprom_offsets::EXTRUDER_PID_BASE = 0x0A
    4. pid_eeprom_offsets::P_TERM_OFFSET = 0x0
    5. pid_eeprom_offsets::I_TERM_OFFSET = 0x2
    6. pid_eeprom_offsets::D_TERM_OFFSET = 0x4

    Also Dump über ICSP oder SD Karte, den Dump in nem Hexviewer öffnen und an folgenden Stellen die Werte kontrollieren:

    Code
    1. E0_P -> 0x010A
    2. E0_I -> 0x010C
    3. E0_D -> 0x010E
    4. E1_P -> 0x0126
    5. E1_I -> 0x0128
    6. E1_D -> 0x012A


    Was meinst du mit "originale .hex"? Die Firmware? (Die hilft dir nicht, da diese in den Flash geschrieben wird und nicht in den EEPROM).


    Kennst du denn die aktuellen PID Werte die im Speicher stehen?

    Wenn ja, dann mach doch mal einen Dump (da kann nix passieren) und such nach diesen Werten in deinem dump (idealerweise stehen die auch an den erwarteten adressen):)

    The post was edited 2 times, last by t0mM3k ().

  • Der Tipp war klasse. Richtig, ich verwendet Sailfish 7.7. Den Dump habe ich (Angehängt).


    Die Originalwerte lauten für beide Extruder, aber das war vor Sailfish:

    P:7

    I:0,23...

    D:36


    Suche ich dann bspw für den D-Wert "36" nach einem Abschnitt der "33 36" lautet?

    Mit der Originalen Hex meinte ich die Firmware.

    Ich war naiv davon ausgegangen, dass ich den EEPROM auch beschreibe auf diese Weise. Ich war damals von der Originalen Firmware auf Sailfish gewechselt und dort trat der alt bekannte Fehler erneut auf. Meine Annahme war, dass mit dem Wechsel die Werte verändert oder resettet wurden.


    Parallel habe ich in die Beschreibung der Sailfishfirmware geschaut und auch wohl die Standartwerde im EEPROM gefunden. Allerdings vermisse ich hier die PID-Werte.

    https://www.sailfishfirmware.com/doc/parameters.html

  • Anzeige:
  • Ich denke, ich muss wegen dem EEPROM-Werte nochmal korrigieren. Aktuell dürfte ich die Werte nicht kennen. Über die Anleitung in Sailfish ist sehr gut beschrieben wie ich die Werte in den Drucker laden kann über Makerbot... aber hier ist wieder die Hürde mit dem USB-Anschluss, der leider defekt ist.


    Parallel hatte ich ein paar andere Dumps gefunden. Die sehen zumindest rein Optisch deutlich gefüllter aus.


    Ich schätze es wäre mit deinem Dump ein Versuch wert in der Hoffnung, dass er sich von den kalten Temperaturen des Kellers nicht aus der Ruhe bringen lässt.

  • Hey BadFrog,

    ich habe es leider gestern nicht geschafft das ganze noch weiter zu untersuchen. Ich habe einfach mal meinen EEPROM gedumpt und mit deinem Verglichen. Ich hab (da wo ich die PIDs vermute) exakt die selben Werte drin stehen wie du. Entweder versteh ich hier noch was falsch, oder das sind die Standardwerte?! :/


    In deinem EEPROM-dump denke ich, sind das hier die Werte für die PIDs:


    Ich versuche mich am Wochenende mal ein bisschen intensiver mit der Thematik zu befassen um dir schnellstmöglich eine Hilfe zukommen zu lassen. Vllt finde ich in den nächsten Wochen sogar mal die Zeit dazu, für das Editieren des Dumps ein Tool zu schreiben. Aber dafür muss ich mich erstmal ein bisschen intensiver mit dem Thema beschäftigen.


    Update:

    Das sind die default-PID Werte:

    Code
    1. #define DEFAULT_P_VALUE (7.0f)
    2. #define DEFAULT_I_VALUE (0.325f)
    3. #define DEFAULT_D_VALUE (36.0f)

    Diese werden recht stupide aufgesplittet: Das erste Byte ist der ganzzahlige Anteil, das zweite Byte der Fließkommaanteil.

    Hab hier mal n Script zusammengehackt mit dem du PID Werte nach Sailfish-Manier in Hexwerte umrechnen kannst, die du dann an die markierten Stellen im Dump schreiben kannst und dann via SD Karte (oder ICSP) zurückschreiben kannst.


    https://wandbox.org/permlink/tzwq7r64h7AEQhpM


    Wir haben also wirklich beide (auf beiden Extrudern) die default PID-Werte stehen :thumbsup:


    Viel Erfolg :)

    The post was edited 1 time, last by t0mM3k: Ergänzung um Script ().

  • Hey T0mM3k,

    dann haben wir beide definitiv diese Standartwerte drin. Ich werde hoffentlich nachher die Chance haben mal zu prüfen, ob die Änderungung auch einen Änderung im Heizverhalten erzeugt.


    Was mir gerade beim durchschauen auffällt ist, dass die Zahlenabfolge ganze 4x auftritt. Sollte sich bei meinem Versuch nichts verändern,versuche ich auch die anzupassen. Zugegeben, ich stocher im Dunkeln, da das komplettes neu ist für mich.


    Danke dir für die Unterstützung und das Script!


    *Update um hier nicht alles vollzuspammen*


    Mit der Anpassung der 2. bisher nicht erkannten Speichereinträge hat zum Erfolg geführt! Die Temp schwingt zwar einmal deutlich über und verbleibt leicht unter dem Soll, aber das ist feinjustierung des D-Werts (der anderen natürlich auch).


    Besteht Interesse die Werte hier nochmal zu Posten sofern ich akzeptable Werte habe?


    Bleibt nur die Frage offen, warum es 4 Werte gibt. Ich kann mir nur 2 davon erklären.

    The post was edited 1 time, last by BadFrog ().

  • Hey BadFrog,


    Ich habe mich damit auch noch nie beschäftigt. Ich lese ja auch nur den SourceCode und das was dabei herausfinde schreibe ich dir hier hin ;)


    Die Werte die ich dir im Screenshot markiert habe (mit rot, blau und grün), sind die PID-Werte für die Extruder (0 und 1). Die Werte die direkt nach den PIDs für E0 kommen, sind m.M.n. die PID-Werte für das Heatbed.

    Die Werte die nach den PIDs für E1 kommen, kann ich noch nicht zuordnen.:/


    Wie gesagt, bin ich jetzt auch ein bisschen neugierig was da noch so alles drin steht.

    Ich denke ich werde (wenn ich mal ein bisschen Zeit habe) n bisschen weiter in das Thema eintauchen und vllt springt ja ein kleines Tool dabei heraus, mit dem man den EEPROM-dump aus Sailfish direkt editieren und speichern kann.


    Bis dahin freue ich mich erstmal, dass ich dir helfen konnte :thumbup:


    Viel Erfolg beim PID-kalibrieren :thumbsup:

    • Gäste Informationen
    Hallo. Gefällt Dir dieses Thema im CTC-Forum und du möchtest etwas dazu schreiben? Dann melde dich bitte an. Hast du noch kein Benutzerkonto im CTC-Forum, dann registriere dich bitte. Nach der Freischaltung kannst Du dann das Forum uneingeschränkt benutzen.


Werde Teil des Forums.

Hallo. Gefällt Dir das CTC-Forum und du möchtest mitmachen? Dann melde dich bitte an. Hast du noch kein Benutzerkonto im CTC-Forum, dann registriere dich bitte. Nach der Freischaltung kannst Du dann das Forum uneingeschränkt benutzen.