Mahlzeit!
Wer ebenso wie ich ein RAMPS + Arduino Due als günstige 32bit Elektronik betreiben möchte und nicht auf ein EEPROM verzichten mag, steht zwangsweise bei dieser Kombination vor einem Problem. Der Arduino Due besitzt nämlich kein EEPROM und somit ist es nicht möglich mal eben irgendwelche geänderten Parameter per Konsole zu speichern.
Ich will euch hier zeigen, wie ihr relativ simpel ein EEPROM für den Due nachrüsten könnt.
Das ganze erfordert ein wenig Geschick beim Löten, dafür aber sehr geringe finanzielle Mittel und zeitlich ist man mit geschätzt 30 Minuten eigentlich gut dabei. (ich habe nicht auf die Uhr geschaut, es ging aber sehr fix von der Hand alles)
Die Kosten für das EEPROM + passender IC-Sockel beliefen sich bei mir jetzt auf 2,56€ + Versandkosten.
Was brauchen wir?
- Lötkolben
- Kabel
- EEPROM, hier ein 24LC256 (gibt es auf eBay oder Aliexpress)
- optional: passender IC-Sockel fürs EEPROM
- optional: ein Stück Lochrasterplatine
- optional: Dupont Crimps und Stecker
Folgender Schaltplan ist nötig:
[Bild: https://i.imgur.com/fal621I.jpg]
Oben im Bild sehr ihr die Kabel die ich verwende. Dafür habe ich ein altes und bereits zerschnittenes CAT5-Netzwerkkabel verwendet. CAT5-Netzwerkkabel sind vollkommen ausreichend, günstig, und ihr habt den Vorteil das ihr aus einem Stück von solch einem Kabel insgesamt 8 dünne Datenleitungen erhaltet. Perfekt für unseren Zweck. (die Kabel lassen sich auch super für die SPI-Verkabelung von TMC2130 Treibern verwenden!)
[Bild: https://i.imgur.com/kfxe3xV.jpg]
Ich habe mich dafür entschieden, dass ich den IC-Sockel zuerst auf ein zugeschnittenes Stück Lochrasterplatine löte.
Erstens weil die Beinchen wirklich sehr fein sind und ich dort nur ungern die Kabel irgendwie direkt anlöten wollte, zweitens weil ich nicht so kleinen Schrumpfschlauch hätte um dann die Beinchen mit den angelöteten Kabeln zu isolieren und drittens weil ich mir davon versprochen habe das die ganze Lötgeschichte deutlich einfacher von der Hand geht.
[Bild: https://i.imgur.com/oK4B4bm.jpg]
Fertig gelötet sieht das ganze dann so aus:
[Bild: https://i.imgur.com/zlHrdCg.jpg]
[Bild: https://i.imgur.com/eUUwN97.jpg]
Dann ging es ans Crimpen der Kabel. Ich habe mich für einen 4-fach Dupont Gehäuse entschieden. Hat den Vorteil gegenüber 1-fach Gehäusen, dass ihr im Endeffekt nichts vertauschen könnt. Vorausgesetzt ihr markiert euch am Ende dann die Richtung wie der 4er-Stecker drauf muss.
[Bild: https://i.imgur.com/YJ5IBA4.jpg]
So sieht das Ding dann gecrimpt aus. EEPROM steckt bereits im Sockel und ist bereit um aufs RAMPS gesteckt zu werden:
[Bild: https://i.imgur.com/PM3u5j6.jpg]
Achtet darauf, dass ihr das EEPROM korrekt herum einsteckt. Ich kann euch nicht sagen was passiert wenn ihr es falsch gesteckt in Betrieb nehmt. Im schlimmsten Falle ist es danach kaputt, daher bitte vorher versichern!
Das 24LC256 hat zwei Markierungen an denen ihr euch orientieren könnt. Einmal einen kleinen Kreis (kleiner Pfeil) der den Pin 1 markiert und dann die Einkerbung am Gehäuse selbst.
[Bild: https://i.imgur.com/yJShJxL.png]
Gesteckt wird das ganze auf den I2C Steckplatz:
[Bild: https://i.imgur.com/G37djmd.jpg]
Damit wären wir dann auch schon durch.
Zum Schluss habe ich noch einen kurzen Funktionstest durchgeführt.
Dazu müsst ihr natürlich erst einmal sicherstellen, dass das EEPROM bei euch in der Firmware aktiviert ist. Ist dies nicht der Fall so müsst ihr dies erst aktivieren, also eure Firmware neu flashen.
Verbindet euch dann einfach mit einem Remote-Host eurer Wahl (bei mir ist dies OctoPrint).
Zu Testzwecken habe ich den Filamentdurchmesser welcher in der Firmware gespeichert ist von 1,75mm auf 3,00mm gewechselt, per M500 gespeichert. Dann per M503 angerufen und dann mit M502 alles auf die Hardcoded-Settings zurückgesetzt. Nun kann ich versichert sein, dass das EEPROM funktioniert und bin mit diesem kleinen Projekt am Ende angelangt.
[Bild: https://i.imgur.com/gaqR94y.png]
[Bild: https://i.imgur.com/8CSBeJ9.png]
Das ganze was ich hier gemacht habe ist natürlich nicht zwingend notwendig.
Ihr braucht nicht zwingend einen IC-Sockel, genau so wenig braucht ihr zwingend das Stück Lochrasterplatine oder die Dupont Steckergehäuse und Crimps dafür. Ihr könnt auch einfach eiskalt die Kabel von unten an das RAMPS anlöten, hochführen und dann direkt an die Beine vom EEPROM anlöten. Ob das jetzt eine elegante Lösung ist überlasse ich jedem selbst.
Ich hatte Probleme beim kompilieren der Marlin-Firmware mit aktivierten UBL.
Es war mir kein erfolgreiches Kompilieren möglich.
Der Grund dafür war eine fehlende Definition in den Konfigurationsdateien wenn man das RAMPS4DUE als Board ausgewählt hat.
Folgendes müsst ihr euch in die configuration_adv.h eintragen, damit die Firmware erfolgreich durchkompiliert wird von der Arduino IDE:
Wichtig ist dabei offenbar, dass ihr den Wert hinter E2END auf das von euch gewählte EEPROM anpasst.
Da Marlin laut Aussagen der Entwickler maximal 32 kbyte EEPROMS unterstützt ist dies der maximal zu verwendende Wert. Auch wenn ich in meinem Fall eins mit 256 kbyte verwendet habe. 32 kbyte sind jedoch mehr als genug, wenn man bedenkt, dass ein Mega2560 mit 4 kbyte ausgestattet ist.
https://github.com/MarlinFirmware/Marlin/issues/11029
Wer ebenso wie ich ein RAMPS + Arduino Due als günstige 32bit Elektronik betreiben möchte und nicht auf ein EEPROM verzichten mag, steht zwangsweise bei dieser Kombination vor einem Problem. Der Arduino Due besitzt nämlich kein EEPROM und somit ist es nicht möglich mal eben irgendwelche geänderten Parameter per Konsole zu speichern.
Ich will euch hier zeigen, wie ihr relativ simpel ein EEPROM für den Due nachrüsten könnt.
Das ganze erfordert ein wenig Geschick beim Löten, dafür aber sehr geringe finanzielle Mittel und zeitlich ist man mit geschätzt 30 Minuten eigentlich gut dabei. (ich habe nicht auf die Uhr geschaut, es ging aber sehr fix von der Hand alles)
Die Kosten für das EEPROM + passender IC-Sockel beliefen sich bei mir jetzt auf 2,56€ + Versandkosten.
Was brauchen wir?
- Lötkolben
- Kabel
- EEPROM, hier ein 24LC256 (gibt es auf eBay oder Aliexpress)
- optional: passender IC-Sockel fürs EEPROM
- optional: ein Stück Lochrasterplatine
- optional: Dupont Crimps und Stecker
Folgender Schaltplan ist nötig:
[Bild: https://i.imgur.com/fal621I.jpg]
Oben im Bild sehr ihr die Kabel die ich verwende. Dafür habe ich ein altes und bereits zerschnittenes CAT5-Netzwerkkabel verwendet. CAT5-Netzwerkkabel sind vollkommen ausreichend, günstig, und ihr habt den Vorteil das ihr aus einem Stück von solch einem Kabel insgesamt 8 dünne Datenleitungen erhaltet. Perfekt für unseren Zweck. (die Kabel lassen sich auch super für die SPI-Verkabelung von TMC2130 Treibern verwenden!)
[Bild: https://i.imgur.com/kfxe3xV.jpg]
Ich habe mich dafür entschieden, dass ich den IC-Sockel zuerst auf ein zugeschnittenes Stück Lochrasterplatine löte.
Erstens weil die Beinchen wirklich sehr fein sind und ich dort nur ungern die Kabel irgendwie direkt anlöten wollte, zweitens weil ich nicht so kleinen Schrumpfschlauch hätte um dann die Beinchen mit den angelöteten Kabeln zu isolieren und drittens weil ich mir davon versprochen habe das die ganze Lötgeschichte deutlich einfacher von der Hand geht.
[Bild: https://i.imgur.com/oK4B4bm.jpg]
Fertig gelötet sieht das ganze dann so aus:
[Bild: https://i.imgur.com/zlHrdCg.jpg]
[Bild: https://i.imgur.com/eUUwN97.jpg]
Dann ging es ans Crimpen der Kabel. Ich habe mich für einen 4-fach Dupont Gehäuse entschieden. Hat den Vorteil gegenüber 1-fach Gehäusen, dass ihr im Endeffekt nichts vertauschen könnt. Vorausgesetzt ihr markiert euch am Ende dann die Richtung wie der 4er-Stecker drauf muss.
[Bild: https://i.imgur.com/YJ5IBA4.jpg]
So sieht das Ding dann gecrimpt aus. EEPROM steckt bereits im Sockel und ist bereit um aufs RAMPS gesteckt zu werden:
[Bild: https://i.imgur.com/PM3u5j6.jpg]
Achtet darauf, dass ihr das EEPROM korrekt herum einsteckt. Ich kann euch nicht sagen was passiert wenn ihr es falsch gesteckt in Betrieb nehmt. Im schlimmsten Falle ist es danach kaputt, daher bitte vorher versichern!
Das 24LC256 hat zwei Markierungen an denen ihr euch orientieren könnt. Einmal einen kleinen Kreis (kleiner Pfeil) der den Pin 1 markiert und dann die Einkerbung am Gehäuse selbst.
[Bild: https://i.imgur.com/yJShJxL.png]
Gesteckt wird das ganze auf den I2C Steckplatz:
[Bild: https://i.imgur.com/G37djmd.jpg]
Damit wären wir dann auch schon durch.
Zum Schluss habe ich noch einen kurzen Funktionstest durchgeführt.
Dazu müsst ihr natürlich erst einmal sicherstellen, dass das EEPROM bei euch in der Firmware aktiviert ist. Ist dies nicht der Fall so müsst ihr dies erst aktivieren, also eure Firmware neu flashen.
Verbindet euch dann einfach mit einem Remote-Host eurer Wahl (bei mir ist dies OctoPrint).
Zu Testzwecken habe ich den Filamentdurchmesser welcher in der Firmware gespeichert ist von 1,75mm auf 3,00mm gewechselt, per M500 gespeichert. Dann per M503 angerufen und dann mit M502 alles auf die Hardcoded-Settings zurückgesetzt. Nun kann ich versichert sein, dass das EEPROM funktioniert und bin mit diesem kleinen Projekt am Ende angelangt.
[Bild: https://i.imgur.com/gaqR94y.png]
[Bild: https://i.imgur.com/8CSBeJ9.png]
Das ganze was ich hier gemacht habe ist natürlich nicht zwingend notwendig.
Ihr braucht nicht zwingend einen IC-Sockel, genau so wenig braucht ihr zwingend das Stück Lochrasterplatine oder die Dupont Steckergehäuse und Crimps dafür. Ihr könnt auch einfach eiskalt die Kabel von unten an das RAMPS anlöten, hochführen und dann direkt an die Beine vom EEPROM anlöten. Ob das jetzt eine elegante Lösung ist überlasse ich jedem selbst.
_____________________________________________________________________________________________
WICHTIGER NACHTRAG:Ich hatte Probleme beim kompilieren der Marlin-Firmware mit aktivierten UBL.
Es war mir kein erfolgreiches Kompilieren möglich.
Der Grund dafür war eine fehlende Definition in den Konfigurationsdateien wenn man das RAMPS4DUE als Board ausgewählt hat.
Folgendes müsst ihr euch in die configuration_adv.h eintragen, damit die Firmware erfolgreich durchkompiliert wird von der Arduino IDE:
Code:
#define I2C_EEPROM
#define E2END 0x7FFF
Da Marlin laut Aussagen der Entwickler maximal 32 kbyte EEPROMS unterstützt ist dies der maximal zu verwendende Wert. Auch wenn ich in meinem Fall eins mit 256 kbyte verwendet habe. 32 kbyte sind jedoch mehr als genug, wenn man bedenkt, dass ein Mega2560 mit 4 kbyte ausgestattet ist.
https://github.com/MarlinFirmware/Marlin/issues/11029