Montag, 30. Juli 2018

Firmwareupgrade auf dem 3D Drucker - Firmware passt doch :)

Ich habe mich selbst gehackt indem ich am Ende doch mal ins Repetier-Forum gepostet habe. Die Suche nach externer Inspiration kann ja nicht schaden.

https://forum.repetier.com/discussion/5577/how-can-i-disable-sd-support-solved

Als ich so meine Problematik schilderte dämmerte mir mehr und mehr das ich mir vielleicht doch selber helfen kann. Mir war klar das ich mit folgenden Tweaks noch nicht am Limit war:

Disable "Enable arc support (G2/G3)"
Disable "Enable sd support. Gets overwritten by ui-controller or board settings."
Disable additional languages
Disable menu animations

Da bei allen Firmwares die ich selber erstellte SD support aktiviert war musste ich ja Opfer der "Gets overwritten by ui-controller or board settings" Problematik sein.


Dadurch das ich die letzten Tage so viel Quellcode gesehen habe konnte ich mich drann erinnern das mein Board "MOTHERBOARD == 63" ist. Dann meinte ich mich weiter zu erinnern das in der pins.h die "bord settings" sind und da habe ich dann mal nachgeschaut. Siehe da, ein "#define SDSUPPORT 1  // sd card reader on board" überschreibt dort ganz unverblühmt die Setting aus der Configuration.h.
Nach einem Update auf  #define SDSUPPORT 0 konnte ich meine Firmware kompilieren.


Sonntag, 29. Juli 2018

Firmwareupgrade auf dem 3D Drucker - 128k PROGMEM

Vom 100sten ins 1000ste :)

Dave Johnsen aka fiveangle hat mich auf https://github.com/MarlinFirmware/Marlin in die richtige Richtung geschickt. Sein "simples" Statement:
[...] Search “128k PROGMEM” across open and closed issues and you’ll find lots of resources about this. [...] hat bei mir den lernprozess ausgelöst

Mit meiner Firmware ist alles in Ordnung, aber die 8-bit (???) CPU auf meinem Melzi-Board kann nur 128k Speicher bedienen.

Wir erinnern uns:

https://github.com/repetier/Repetier-Firmware/tree/master/boards/Zonestar%20P802M

https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json

https://github.com/Lauszus/Sanguino

https://blog.stevemarple.co.uk/2013/01/how-to-use-atmel-atmega1284-non-p.html

https://www.microchip.com/wwwproducts/en/ATmega1284P

[...]
The high-performance Microchip 8-bit AVR RISC-based microcontroller combines 128KB ISP flash memory with read-while-write capabilities, 4KB EEPROM, 16KB SRAM, 32 general purpose I/O lines, 32 general purpose working registers, a real time counter, three flexible timer/counters with compare modes and PWM, two USARTs, a byte oriented 2-wire serial interface, an 8-channel 10-bit A/D converter with optional differential input stage with programmable gain, programmable watchdog timer with internal oscillator, SPI serial port, a JTAG (IEEE 1149.1 compliant) test interface for on-chip debugging and programming, and six software selectable power saving modes. The device operates between 1.8-5.5 volts.
By executing powerful instructions in a single clock cycle, the device achieves throughputs approaching 1 MIPS per MHz, balancing power consumption and processing speed.
[...]

So kann ich also Stand heute nur eine Firmware mit auto bed leveling kompilieren die mehrere nicht unwichtige Features nicht enthaelt. Z.B. die Display-Ansteuerung :)

Wollen wir doch mal die potentiellen Teile der Firmware identifizieren die wir mal abschalten könnten:

Firmware release Storage used Storage used ( % ) Bed leveling? ARC support? LCD enabled? SD enabled?


1.0.2 87836 67 N N N Y


1.0.2 121126 93 N N Y Y


1.0.2 124274 95 N Y Y Y


1.0.2 101378 77 Y N N Y




Das Beste zum Schluß, ich bastel wild mit der Repetier Firmware rum, kein wunder das die Profi-Tips von fiveangle nicht fruchten, der tüftelt nämlich an Marlin rum...



Firmwareupgrade auf dem 3D Drucker

Hello again,

tatsächlich ist es mir gelungen ein Firmwareupgrade auf dem 3D Drucker durchzuführen. Aber so richtig leicht war das nicht :)

Alles fing damit an das ich ja gar keine Ahnung hatte wo man die Firmware downloaded.

Nachdem ja ein Grundkonzept von Open Source das "teilen" ist, haben es sich Hersteller meines Druckers nicht nehmen lassen munter gegen diesen fundamentalen Grundsatz zu verstoßen.

Soll heissen es gibt keine offizielle Downloadseite für die Firmware. Das war zumindest so als ich das letzte mal geschaut hatte. Mitlerweile ist das wohl anders, da gibt es diese Seite im Gearbest Blog:
V1.5:
https://www.gearbest.com/blog/download/acrylic-3dcstar-p802-mhs-3d-printer-rom-firmware-1279
V1.6:
https://www.gearbest.com/blog/download/tronxy-acrylic-p802-mhs-3d-printer-firmware-and-guide-2550

Ich hab mir garnicht die Mühe gemacht mich da mal anzumelden, denn ich hatte Großes vor. Ein "selfmade" Firmware Firmwareupgrade :)

Nun denn, leichter gesagt als getan. Ich habe gelernt das man sich seine Firmware selber zusammenbauen muss, aehnlich dem klassischen Kernel kompilieren unter Linux, was ich seit gefühlten 10 Jahren schon nicht mehr machen musste.

Als Einstieg emfpiehlt sich dieses ambitionierte Projekt welches ins Leben gerufen wurde als Gearbest seine Firmware noch nicht online gestellt hatte:

https://github.com/repetier/Repetier-Firmware/tree/master/boards/Zonestar%20P802M

Da gibts es eine Menge Informationen und vor Allem, das Wichtigste:

Configuration.h

Mit dieser File als Grundlage lässt sich naemlich  tatsächlich das Projekt realisieren eine eigene Firmware zu erstellen. Dieses File laden wir uns erstmal runter. Das war schon etwas schwerer denn das blinde Abspeichern führt dazu das sich allerlei Extra-Sonderzeichen in der Datei einnissten und sie damit für den nächsten Schritt unbrauchbar wird. Daher sicherstellen das wirklich nichts in der File komisch wirkt und da nur drinn steht was drinn stehen soll.

Aber selbst wenn die File nicht korrupt ist, muss man noch Hand anlegen. Ich war zunächst nicht sicher was genau da zu tun ist, aber durch try & error habe ich ein paar Erkentnisse gewonnen.

Im Kommentarfeld der Firmware für den P802M steht:

// Do not forget to update X/Y/Z min positions for your printer (it homes with
// negative values for X/Y) and then set X/Y/Z max travel so the printer does not
// kick max ends (all set from General tab of web configurator or later via EEPROM
// editor).






Pff. Woher soll ich denn wissen auf welchen negativen Values mein Drucker "homed"? Naja :) Das steht tatsächlich in der alten Firmware. Da kann man es bei noch laufendem Drucker im Menü nachlesen. Einfach ein wenig rummklicken auf dem 5-Knöpfe-Teil und siehe da:

#define X_MIN_POS -45
#define Y_MIN_POS -5
Die "X/Y/Z max travel" hab ich mal nach gut dünken eingestellt. Ich vermute mit 210/210/240 mach ich erstmal nix kaputt. Offiziell kommuniziert werden 220/220/240. Speziell bei Z muss man aufpassen das da oben nichts anschlägt.

#define X_MAX_LENGTH 210
#define Y_MAX_LENGTH 210
#define Z_MAX_LENGTH 240  


Warum ich jetzt tatsächlich noch dazu komme diesen Artikel zu schreiben ist die Tatsache das mein erster erfolgreicher Versuch eine Firmware zustande brachte mit:


#define ZAXIS_STEPS_PER_MM 1600 400

Für meinen Drucker ist das aber nicht richtig. Da sind 400 korrekt. Da muss ich also nochmal ran.

Dannach fängt die Maschine munter an sich selbst zu zerlegen, weil
#define MAX_JERK  20
gesetzt war. Die Annahme das 20mm/sec Geschwindigkeitsänderung keine Beschleunigung bräuchten ist sehr optimistisch. Ist aber zum "Show Off" im Freundeskreis definitiv ein Setting welches man im Hinterkopf behalten sollte :)

Ich probiers mal mit 
#define MAX_JERK 5


Die Firmware die auf dem Drucker zum Einsatz kommt ist:


https://www.repetier.com/documentation/repetier-firmware/


Dorthin mit nehmen wir jetzt unser Configuration.h File und laden uns eine tolle Firmware runter.