Marlin wird immer komplexer. Es ist nur noch eine Frage der Zeit, wann die Firmware den vorhandenen Speicher sprengt. Schon jetzt passiert es, dass bei Firmwareupdates der Datenspeicher mit den Konfigurationsdaten überschrieben wird und die Konfiguration neu durchgeführt werden muss. Dafür gibt es Abhilfe. Man kann über die I2C-Schnittstelle ein externes EEPROM anschließen. Ein wenig Konfiguration ist dann in Marlin noch notwendig
Auf dem BTT SKR 1.4 Turbo Board ist eine I2C-Schnittstelle verbaut. Um es präziser zu benennen: Es ist eine Schnittstelle von integriertem Schaltkreis zu einem anderen integriertem Schaltkreis vorhanden. Im Englischen nennt sich das inter-integrated circuit, – kurz I²C. Und weil diese hochgestellte 2 nicht immer darstellbar ist, wird meist I2C geschrieben.
Im Bild oben links sieht man den Anschluss des Displays mit den schwarzen Leitungen mit weißen Markierungen. Direkt unterhalb befindet sich die I²C-Schnittstelle.
Die vier Pins sind in dieser Lage von links nach rechts belegt mit:
Vcc — GND — SDA — SCL
Noch eine Hilfe: Vcc liegt dort, wo das C von I2C zu lesen ist.
Auf dem Markt sind diverse EEPROM-Module erhältlich. Interessanterweise sind bei Amazon die „Großpackungen“ mit 5 und mehr Modulen am günstigsten. Eigentlich kann man nicht viel verkehrt machen.
Ihr kennt das ja schon: Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Für den Käufer ändert sich der Preis dadurch nicht. |
Unglücklicherweise ist die Pinbelegung auf den meisten erhältlichen Modulen anders, – und zwar wirklich bei jedem anders, als auf der SKR-Platine.
Man kann sich dazu ein kurzes Kabel bauen oder sucht sich eine andere Anschlussmöglichkeit. Ich wollte gern eine Steckmontage, damit das Modul nicht frei herumliegt. Befestigen wäre ja auch schwierig gewesen.
Zwar kommen die Module üblicherweise richtig eingestellt, – trotzdem hier der Hinweis: Bei diesem Modul müssen alle Jumper auf die Steckposition in Richtung IC stecken. Macht es so, wie in meinem Bild. 3 der Jumper legen die Adresse (A0, A1, A2, 0x50) fest und einer ist für den Schreibschutz (WP = write protection) vorgesehen.
So sieht meine Lösung aus. Leider liegt Vcc genau auf der anderen Seite als gewünscht. Also habe ich eine kleine Brücke gelegt.
So sieht es dann eingesteckt aus. Als besondere Herausforderung kann man vielleicht sehen, dass die DC-DC-Brücke dort auch noch liegt. Es ist darauf zu achten, dass keine Kurzschlüsse entstehen!
Hardwareseitig war es das schon. Jetzt gibt es noch in der Firmware Anpassungen. Ich benutze Marlin 2.0.8. Ab 2.0.7 mit Fehlerpatch ist es die gleiche Konfiguration. Vor 2.0.7 sieht es anders aus! 2.0.7 ohne Fehlerpatch kann laut Internetquellen kein EEPROM ansteuern!
Die Configuration.h sieht im entsprechenden Abschnitt so aus:
Finger weg von der Option EEPROM_AUTO_INIT. Das ist der absolute Blindflug. Falls Fehler auftauchen, findet man sie auf diese Weise nie! Meistens ist die Configuration.h aber eh schon so eingestellt.
Die wirklichen Änderungen sollten dort vorgenommen werden, wo sie auch thematisch hingehören. Das ist die pins_BTT_SKR_V1_4.h.
Der gezeigte Abschnitt muss komplett von Hand eingetragen werden. Es gibt leider keine Vorgabe. Ich musste auch ziemlich lange im Netz suchen, weil speziell dieser Abschnitt ab Marlin 2.0.7 verändert wurde. Man gibt hier dem System bekannt, dass ein I2C-EEPROM eingebunden werden soll. Zudem wird die Größe definiert. Die oben verlinkte Miniplatine trägt einen AT24C256. Dieser hat (256/8) 32kB.
Nach Compilieren und übertragen auf die SD-Karte geht es nun an den Drucker. Die Kommandos M500 bis M503 werden jetzt genutzt. Es muss eine Rechnerverbindung bestehen um gcode-Kommandos zu senden.
Wir starten den Drucker mit der frischen Firmware auf der Karte. Sollte es knistern oder Ähnliches, war die Verdrahtung wohl nicht richtig oder unsauber. Leuchtet die kleine rote LED auf der neuen eeprom-Platine sieht es gut aus.
Jetzt senden wir dem Drucker ein M503 um die alten Daten zu sehen.
Die Daten kopiert man sich in den Editor auf dem PC.
Ein Wert wird geändert: M92 E111.
Wieder M503 zur Kontrolle.
Das hat funktioniert. Vorher stand da nämlich 396. Das beweist, dass die Werte gespeichert werden. Mit M501 sind die alten Werte wieder da, was man wiederum mit M503 überprüfen kann. Mit M500 speichern wir nun endgültig im EEPROM:
Zur Sicherheit kann man das EEPROM selbst mit M504 testen. Da sollte dann die Antwort „EEPROM OK“ kommen.
Theoretisch könnte man jetzt natürlich bei einem Schaden am SKR-Board das EERPOM abziehen und kann es dann gleich an einem neuen Board nutzen ohne neu zu kalibrieren. Andererseits ist das Kalibrieren wohl das kleinste Problem, wenn das Board abraucht.
Natürlich habe ich mir das alles nicht selbst ausgedacht. Meine wichtigsten Quellen waren …
https://www.instructables.com/BigTreeTech-SKR-14-14T-Adding-a-EEPROM/
und
https://www.makenprint.uk/3d-printing/3d-printing-guides/skr-v1-4-i2c-eeprom/