ich lese hier zwar schon seit ca. 2 Monaten eifrig mit, das ist aber mein erstes Posting.
Vielen Dank an Udo für das Hosting des Forums und an euch Tüftler, die mir den Einstieg in die Materie wesentlich erleichtert haben.
Nach temporärem Umbau auf Fräse bin ich bald in die Z-Endstop-Falle getappt:
Schaltet man den Drucker aus, während der Z-Max-Endstop betätigt ist, glaubt er nach dem neuerlichen Einschalten, dass er auf Z min ist. Und man kann deshalb die Platte nicht mehr rauf fahren.
Da die beiden Endschalter sich einen Pin teilen, kann die Firmware hier keine definitive Aussage treffen.
Das passiert bei mir regelmäßig, wenn ich nach einem erfolgten "Output Object" ausschalte.
Möglicherweise gibt's eh einen Workaround, aber wenn, dann konnte ich ihn partout nicht finden - habe dann immer die Z-Achse von Hand hochgekurbelt.
Als bequemere Lösung habe ich mir jetzt eine kleine Erweiterung in die Firmware 0.91.55 gebastelt:
Falls der Drucker unmittelbar nach dem Einschalten feststellt, dass ein Z-Endstop aktiv ist, fragt er einfach welcher.
In Repetier.ino, gleich nach den includes (Zeile 130):
Code: Alles auswählen
#define FIX_AMBIGUOUS_Z_ENDSTOP // fix for wrong endstop detection, if Z max endstop is already hit at startup
#ifdef FIX_AMBIGUOUS_Z_ENDSTOP
void ui_check_keys(int &action);
#endif
Code: Alles auswählen
#ifdef FIX_AMBIGUOUS_Z_ENDSTOP
// fix for wrong endstop detection, if Z max endstop is already hit at startup
#if MIN_HARDWARE_ENDSTOP_Z
#if MAX_HARDWARE_ENDSTOP_Z
#if Z_MIN_PIN==Z_MAX_PIN
#if UI_HAS_KEYS
if (READ(Z_MIN_PIN) != ENDSTOP_Z_MIN_INVERTING) {
uid.printRowP(0, PSTR("Z endstop is hit"));
uid.printRowP(1, PSTR("Is bed up or dn?"));
#if UI_ROWS >= 4
uid.printRowP(2, PSTR(" "));
uid.printRowP(3, PSTR("Press up or down"));
#endif
HAL::stopWatchdog();
int nextAction = 0;
while (1) {
ui_check_keys(nextAction);
if (nextAction == UI_ACTION_PREVIOUS) {
Printer::endstopZMinHit = ENDSTOP_IS_HIT;
Printer::endstopZMaxHit = ENDSTOP_NOT_HIT;
#if UI_ROWS >= 4
uid.printRowP(2, PSTR(" UP "));
#endif
break;
} else if (nextAction == UI_ACTION_NEXT) {
Printer::endstopZMinHit = ENDSTOP_NOT_HIT;
Printer::endstopZMaxHit = ENDSTOP_IS_HIT;
#if UI_ROWS >= 4
uid.printRowP(2, PSTR(" DOWN "));
#endif
break;
}
}
#if UI_ROWS >= 4
uid.printRowP(3, PSTR(" (release key) "));
#endif
do {
nextAction = 0;
ui_check_keys(nextAction);
} while (nextAction != 0);
delay(200);
HAL::startWatchdog();
}
#endif
#endif
#endif
#endif
#endif
Achtung, getestet habe ich das ausschließlich an meinem RF1000.
lg
Alex