Hilfe bei Marlin - Mega 2560 - Ramps 1.4 - Full Graphic Display

TobyTetzi

Erfahrener Benutzer
#1
Hallo,

ich habe dieses Set gekauft - nicht da, von Eb.. Kleinanzeigen, original verpackt, aber ist genau das gleiche.

http://de.aliexpress.com/item/Mega-2560-R3-Mega2560-REV3-1pcs-RAMPS-1-4-Controller-RAMPS1-4-LCD-12864-LCD-for/1947686596.html?adminSeq=220878921&shopNumber=1185416

Nun habe ich versucht Marlin drauf zu spielen.

Zuerst konnte ich den originalen Andruino Treiber wohl installieren, aber das Board wollte nicht laufen.
Es konnte nicht gestartet werden - sagte Windows.
Es mussten diese Treiber installiert werden : CH341SER_ZIP

Ich habe die Firmware von Samella genommen und das Display in der FW eingebunden.
Also diese Zeile einkommentiert.

#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Dann natürlich die U8glib eingebunden/Installiert.

Gut und schön, es läuft.

Aber wenn ich den Drehgeber drücke um ins Menü zu kommen, kommt einmal kurz der Startbildschirm dann das Menü.
Nicht weiter schlimm, ist in etlichen Videos auch so, aber nervig.

Mit einer frischen Marlin Version und der Marlin Version 1.0.2 ist es genau so. Es ändert nichts.

Bei der Marlin Version 1.1 RC geht der Drehgeber nicht, ich komme also gar nicht ins Menü.

Ich habe schon die Pins in der Board-Datei nachgesehen, sind die gleichen.
Der Drehgeber will nicht.

Dann frag ich mich, was der Stop Taster auf dem Display soll.
Drücke ich ihn, geht weder das Drehgeber noch sonst irgend was.

Weiß jemand Rat?

Gruß Toby
 

MaxWin

(╯°□°)╯︵ ┻━┻
#2
Dann frag ich mich, was der Stop Taster auf dem Display soll.
Drücke ich ihn, geht weder das Drehgeber noch sonst irgend was.
Der Taster löst eigentlich ein RESET auf dem Board aus und startet es neu. Das sollte eigentlich auf jeden Fall gehen.

Seit einem Firmware update geht mein Drehregler allerdings auch nicht mehr. Drücken ja, drehen nein. Hatte bei mir mit dem Update auf einen alten Releasestand zu tuen, da Marlin lange Zeit einen Bug im AutoBedLeveling hatte der irgendwan reinprogrammiert wurde.

Ich klink mich hier mal mit ein. Hätte auch gerne mal wieder am Rad gedreht...
 

SteBa

Erfahrener Benutzer
#3
Bei meinem MKS base Board mit dem 2 Zeilen Display löst der reset Knopf wirklich ein reset aus, d.h. es stoppt & startet neu.

Bei dem großen Display + Ramps 1.4 löst dies jedoch nur einen Kill Befehl aus und danach muss man das Board manuell neu starten.
 

TobyTetzi

Erfahrener Benutzer
#4
Bei meinem MKS base Board mit dem 2 Zeilen Display löst der reset Knopf wirklich ein reset aus, d.h. es stoppt & startet neu.

Bei dem großen Display + Ramps 1.4 löst dies jedoch nur einen Kill Befehl aus und danach muss man das Board manuell neu starten.
In der Board Datei kann man den Taster festlegen was er machen soll. Meine Kill und Reset gelesen zu haben.
Kann mich aber auch irren.

Gruß Toby
 

TobyTetzi

Erfahrener Benutzer
#5
Soooo.

Nachdem ich mir die Datenblätter/Schaltpläne vom Mega 2560, Ramps 1.4 und Full Graphic Smart Controller
gezogen habe und kurz davor war, alle Pins nachzuvollziehen,
drückte ich während dem Einschalten des Boards mal Testweise die Stop-Taste und auch den Drehgeber,
jeweils einzeln getestet. Ich dachte evtl. ist einer der Pins in der Software vertauscht.

Plötzlich war ich im Menü, allerdings nur sehr kurz - 1-2 Sekunden etwa.

Ok, also die original Samella FW und Marlin 1.1 RC angesehen.
Die Pinne in der Board Datei passen.
Also alles was in der Samella Configuration.h anders ist in Marlin 1.1 RC übernommen. (Nur die Werte, keinen weiteren Code)

Keine Änderung.

Dann hab ich ein paar Codeteile der alten Marlin übernommen. Speziell die Daten des LCD's.
Nebenbei hab ich noch zwei Termistoren angeschlossen - Hey, es funktioniert.
SD Card noch "eingeschaltet" - geht.

Der Fehler das beim Beginn des Menüs einmal kurz der Startbildschirm angezeigt wird ist nicht mehr da.
Wenn man im Menü ist und keine Eingaben tätigt geht es von alleine nach etwa 5 Sekunden zurück zum Infoschirm. Gefällt mir :eek:

20151022_193246.jpg
20151022_193251.jpg
20151022_193257.jpg
20151022_193307.jpg
20151022_193314.jpg
20151022_193743.jpg
20151022_193749.jpg

Gruß Toby
 

TobyTetzi

Erfahrener Benutzer
#6
Jetzt aber ;)

Ich habe noch schnell die Drehgeber-Richtung geändert und den Stop-Taster getestet.
Killed ist so wie Tilt beim Flipper - Notaus - Nichts geht mehr.
20151022_200458.jpg

Grundsätzliches Problem habe ich jetzt auch raus gefunden.

Ohne Thermistoren kommt der Fehler "Err: Mintemp".
Bei Marlin 1.0.1 und 1.0.2 kein Problem.
In Version 1.1 RC geht allerdings nichts, klar eigentlich, da ein Fehler ansteht.

Ohne Thermistoren
20151022_200736.jpg
Nur mit Hotend Thermistor / ohne Bett Thermistor
20151022_200757.jpg

Gruß Toby

PS: Termistor wird mit h geschrieben, man lernt nie aus :D
 

SteBa

Erfahrener Benutzer
#7
Ok, das mit dern Thermistoren ist logisch. :) Daran hatte ich nicht gedacht. Du kannst für Testzwecke in der FW die Thermistoren kommentieren, dann sollte dein Display bedienbar sein.

Für den Reset/Stop habe ich softwareseitig auch noch keine Lösung gefunden. Ich denke das ist bei dem MKS Board von hardwareseite schon anders verbunden. In der FW gibt es leider nur den "Kill" Pin, einen "Reset" Pin habe ich vergeblich gesucht.
 

TobyTetzi

Erfahrener Benutzer
#8
Hallo,

der Reset Taster auf dem "RepRapDiscount Smart Controller" ist definitiv auf der Hardware mit Reset des Atmels verbunden.
http://reprap.org/mediawiki/images/7/70/Controller_final_reprapdiscount.pdf

Der Stop Taster des "RepRapDiscount Full Graphic Smart Controller" liegt auf dem Pin 41 nicht auf Reset, wie in diesem Schaltplan.
http://reprap.org/mediawiki/images/5/51/RRD_FULL_GRAPHIC_SMART_CONTROLER_SCHEMATIC.pdf

Die Routine des Tasters löscht alle Interupts und endet in einer Endlosschleife.

Man kann statt der Endlosschleife ein "asm volatile (" jmp 0");" also einen Rücksprung zum Programm Beginn, machen.
Das ist dann der gewünschte Software Reset.
Ich hab's getestet - läuft.

Man kann noch den Text der Message "KILLED." ändern. Ich hab da jetzt z.B. "RESET ausgelöst" stehen.
Um den Text noch lesen zu können, der Reset geht sehr schnell,
sollte noch ein Delay vor dem Rücksprung programmiert werden.

Gruß Toby
 
Zuletzt bearbeitet:
#9
Hallo Toby,

interessante Sache, wo hast du JMP 0 eingefügt?

Eins ist aber falsch interpretiert, nur weil auf dem Schaltplan ein Signal (JP3-PIN8) als Reset bezeichnet wird, ist da nicht automtisch ein Reset Pin hinter. Nach Ramps 1.4 werden über ein Controller Adapter, nur die Steckplätze AUX3&4 des Ramps benutzt und dort liegt kein Hardware Reset PIN des Atmega´s drauf. Also gilt für das Smart Graphic Display das gleiche, wie für Full Graphic Display.

Aber wäre ja nach deinem Ansatz dann auch nicht nötig, ausser der µC hängt.

Korrigiere bitte mal das nach deinen Vorgaben:

void kill()
{
cli(); // Stop interrupts
disable_heater();

disable_x();
disable_y();
disable_z();
disable_e0();
disable_e1();
disable_e2();

#if defined(PS_ON_PIN) && PS_ON_PIN > -1
pinMode(PS_ON_PIN,INPUT);
#endif
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_ERR_KILLED);
LCD_ALERTMESSAGEPGM(MSG_KILLED);
suicide();
// while(1) { /* Intentionally left empty */ } // Wait for reset Old
asm volatile (" jmp 0"); //RESET New
}


Grüße Jörg

PS: Funktion geprüft, kann so verwendet werden. Nur noch den Message Text "Killed in Reset" in der entsprechenden Language_DE.h ändern, falls gewünscht. Danke für den Hint!!!
 
Zuletzt bearbeitet:

TobyTetzi

Erfahrener Benutzer
#10
Hallo,

jetzt der Reihenfolge nach:

Der RepRapDiscount Smart Controller (das kleine LCD mit Reset Taster) hat den Taster auf Pin 8 des 10 Poligen Steckers JP3 (EXP2, da EXP1 der andere ist).
http://reprap.org/mediawiki/images/7/70/Controller_final_reprapdiscount.pdf

Der 10 Polige Stecker sitzt auf der Adapterplatine wieder EXP2, geht von D8 auf D41 des langen Steckers.
http://reprap.org/mediawiki/images/7/79/LCD_connect_SCHDOC.pdf

Der lange Stecker des Ramps (AUX4) hat auch die Bezeichnung D41, geht auch zum Atmel mit D41 weiter.
http://reprap.org/wiki/File:RAMPS1.4schematic.png

Ups, jetzt habe ich mich doch tatsächlich vertan! :confused:
Ich war fest der Meinung das der Taster des kleinen LCD's auf Reset geht. Oder hatte ich einen anderen Schaltplan?
Nein, kann nicht sein, da auf dem Ramps wirklich weder auf AUX3 noch auf AUX4 der RESET des Atmels drauf liegt.
Demnach kann es auch mit dem Taster des kleinen Display kein Reset ausgelöst werden.

Ach, jetzt!
Das kleine Display sitzt ja bei mir und SteBa nicht auf einem RAMPs, sondern auf einem MKS Gen 2Z.
Und DAS hat statt D41 den Reset beschaltet. So war das. ;)
Da sind im Vergleich vom LCD Connector für das Ramps EXP2 zum EXP2 des MKS Gen die Pinne 8 und 10 gegensätzlich belegt.
http://reprap.org/wiki/MKS_GEN_V1.1


So, was habe ich gemacht um einen Software Reset auszulösen?

Öffne die Firmware dann die Datei "Marlin_main.ccp".
Dort suche nach dieser Funktion "void kill(const char *lcd_msg)"
Diese komplette Funktion durch diese ersetzen:

void kill(const char *lcd_msg) {
//TobyTetzi Beginn
//Test Software Reset

#if ENABLED(ULTRA_LCD)
lcd_setalertstatuspgm(lcd_msg);
#endif

//delay(2000);

// FMC small patch to update the LCD before ending
sei(); // enable interrupts
for (int i = 5; i--; lcd_update()) delay(200); // Wait a short time
cli(); // disable interrupts
//suicide();
//software_Reset() ;
asm volatile (" jmp 0");
//TobyTetzi Ende

/*
#if ENABLED(ULTRA_LCD)
lcd_setalertstatuspgm(lcd_msg);
#endif

cli(); // Stop interrupts
disable_all_heaters();
disable_all_steppers();

#if HAS_POWER_SWITCH
pinMode(PS_ON_PIN, INPUT);
#endif

SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_ERR_KILLED);

// FMC small patch to update the LCD before ending
sei(); // enable interrupts
for (int i = 5; i--; lcd_update()) delay(200); // Wait a short time
cli(); // disable interrupts
suicide();
*/
// while(1) { /* Intentionally left empty */ } // Wait for reset

}


Die Zeile "asm volatile (" jmp 0");" erzeugt einen Rücksprung zur Startadresse des Programmspeichers.
Das ist der Software Reset. Das Programm startet von vorne.

Man sollte noch die Interupts löschen/zurück setzen. Nicht das etwas beim Neustart falsch läuft :rolleyes:
Das gucke ich mir aber morgen an.
Evtl. kann man nur den Befehl suizid() oder die Endlosschleife entfernen und da den Rücksprung setzen.

Gruß Toby
 
#11
Hallo Toby,

das es bei MKS Board beschaltet war, hatte Steffen bereits beschrieben, richtig. Also dort wäre es auch egal welches Display benutzt würde, es wäre die Reset Funktion aktiv. Kein Problem, da kann man ja auch bei den Boards durcheinander kommen.

Der Ansatz mit dem JMP 0 gefällt, werd ich mal ausprobieren, wie weit das dann getrieben werden kann.
Danke für´s teilen, ist noch ein Punkt, der auch im RepRap-Forum seine Lösung sucht.


Grüße Jörg
 

TobyTetzi

Erfahrener Benutzer
#13
Jetzt in Schön:

In der Marlin_main.cpp bitte Code Bereiche suchen und ersetzen.
Die Originale sind nur auskommentiert.

#if HAS_KILL

// Check if the kill button was pressed and wait just in case it was an accidental
// key kill key press
// -------------------------------------------------------------------------------
static int killCount = 0; // make the inactivity button a bit less responsive
const int KILL_DELAY = 750;
if (!READ(KILL_PIN))
killCount++;
else if (killCount > 0)
killCount--;

// Exceeded threshold and we can confirm that it was not accidental
// KILL the machine
// ----------------------------------------------------------------

//TobyTetzi Beginn
//if (killCount >= KILL_DELAY) kill(PSTR(MSG_KILLED));
if (killCount >= KILL_DELAY) kill(PSTR(MSG_RESET));
//TobyTetzi Ende
#endif
void kill(const char *lcd_msg) {

#if ENABLED(ULTRA_LCD)
lcd_setalertstatuspgm(lcd_msg);
#endif

cli(); // Stop interrupts
disable_all_heaters();
disable_all_steppers();

#if HAS_POWER_SWITCH
pinMode(PS_ON_PIN, INPUT);
#endif

SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_ERR_KILLED);

// FMC small patch to update the LCD before ending
sei(); // enable interrupts
for (int i = 5; i--; lcd_update()) delay(200); // Wait a short time
cli(); // disable interrupts
suicide();

//TobyTetzi Beginn
//Software Reset statt Endlosschleife
// while(1) { /* Intentionally left empty */ } // Wait for reset
asm volatile (" jmp 0");
//TobyTetzi Ende
}
In der Sprachdatei language_de.h bitte folgende Zeile einfügen:

#define MSG_NO_MOVE "Motoren Eingesch."
#define MSG_KILLED "KILLED."
//TobyTetzi Beginn
#define MSG_RESET "RESET Ausgelöst"
//TobyTetzi Ende
#define MSG_STOPPED "ANGEHALTEN."
#define MSG_CONTROL_RETRACT "Retract mm"
Ich hoffe es ist einigermaßen verständlich.

Gruß Toby
 
Erhaltene "Gefällt mir": helijoy
#14
Hi Toby,

Danke, ist aber nicht eilig, hab´s nicht vermisst, aber ist durchaus eine einfache Lösung, wenn es gebraucht wird.

Grüße Jörg

PS: Ohh sind die zwei Minuten schon rum:D, Danke!
 

TobyTetzi

Erfahrener Benutzer
#15
Oh,

ich habe allerdings die Marlin 1.1.0.
In den älteren Versionen ist das mit den Sprachdateien anders, :confused: vieleicht.
Da kann man einfach auch den geänderten Text weg lassen.
Dann bitte nur folgendes Ändern:

void kill(const char *lcd_msg) {

#if ENABLED(ULTRA_LCD)
lcd_setalertstatuspgm(lcd_msg);
#endif

cli(); // Stop interrupts
disable_all_heaters();
disable_all_steppers();

#if HAS_POWER_SWITCH
pinMode(PS_ON_PIN, INPUT);
#endif

SERIAL_ERROR_START;
SERIAL_ERRORLNPGM(MSG_ERR_KILLED);

// FMC small patch to update the LCD before ending
sei(); // enable interrupts
for (int i = 5; i--; lcd_update()) delay(200); // Wait a short time
cli(); // disable interrupts
suicide();

//TobyTetzi Beginn
//Software Reset statt Endlosschleife
// while(1) { /* Intentionally left empty */ } // Wait for reset
asm volatile (" jmp 0");
//TobyTetzi Ende
}
Sollte so gehen. Wenn nicht, fragen!
 

TobyTetzi

Erfahrener Benutzer
#16
Hi Toby,

Danke, ist aber nicht eilig, hab´s nicht vermisst, aber ist durchaus eine einfache Lösung, wenn es gebraucht wird.

Grüße Jörg

PS: Ohh sind die zwei Minuten schon rum:D, Danke!
Dauerte leider 5 min :rolleyes:

Jetzt das Nächste:

Wenn ich das Board mit eingesteckter SD Karte starte steht im Menü "Keine SDKarte".
Ich muss, damit die Karte erkannt wird, diese erst raus ziehen, dann wieder rein stecken.

Hat dafür jemand eine Idee parat?

Gruß Toby
 
#17
Du, kein Problem, meins war nur ein Beispiel, ab der 1.0.3 sieht das genauso aus.

Auch hierfür Danke, die Mühe gibt sich nicht jeder, es verständlich an den Mann zu bringen!

Grüße Jörg
 

TobyTetzi

Erfahrener Benutzer
#18
So,

Mit Repetier Host geht es auch wunderbar.
Eben getestet.
Das Board bleibt verbunden - Reset drücken - Kill erkannt - Reset erkannt - alleine wieder verbunden.

Alles gut so!

Wo wird das im RepRap gesucht?

Gruß Toby
 
#19
Hi Tobiy,

hier, dabei ist dann aber noch eine ander Funktion herausgekommen, nun ist der Button z.B. mit etwas Aufwand als Home-Button definierbar.

Sicherlich auch noch irgenwo anders...

Grüße Jörg
 

SteBa

Erfahrener Benutzer
#20
Gut gemacht Toby.

Den reset habe ich auf dem Ramps Board wirklich vermisst, da ich zu 99% nur mit SD-Karte drucke braucht man den ab und zu mal. :)

Eine Baustelle weniger, danke.

PS: Zu deinem SD-Problem, das kenne ich so bisher nicht. Habe die neue Marlin 1.1 jedoch auch noch nicht versucht. Die FW welche ich dir geschickt habe geht einwandfrei, bis auf (noch) den reset Button :)
 
FPV1

Banggood

Oben Unten