22 Commits

Author SHA1 Message Date
Knutwurst
eaf291bf05 Bugfix for nozzle positioning via touchscreen, which was absolute instead of relative. 2020-06-06 23:55:40 +02:00
Knutwurst
3bbe852b3e Bump Version to 1.0.3 for next release 2020-06-06 23:08:31 +02:00
Knutwurst
fb927ee602 Optimized MEGA S extruder feedrate and acceleration values. 2020-06-06 23:04:49 +02:00
Knutwurst
33f611d0cc Update README.md regarding filament runout sensor. 2020-06-06 21:53:45 +02:00
Knutwurst
f93857edb1 Filament runout sensor can be disabled via special menu. 2020-06-06 21:51:19 +02:00
Knutwurst
b1dfd1fec5 Update README.md 2020-06-06 20:14:57 +02:00
Knutwurst
b6ad592a8d Automatically initialize EEPROM on any errors. 2020-06-06 20:13:26 +02:00
Oliver Köster
ecb83dcc13 Fix typo 2020-06-06 15:07:10 +02:00
Knutwurst
e1ca8ee7b3 Bump Version to 1.0.2 2020-06-06 14:38:56 +02:00
Knutwurst
a11043e5bc Bugfixes for almost every common Touchscreen problem, regarding freezes and lockups by substituting the GCodeQueue.enqueue_now_P method with the correct inject function, which also clears the current queue and ensures, our command is processed. 2020-06-06 14:32:04 +02:00
Oliver Köster
38fdba59ed Update README.md 2020-06-06 14:22:59 +02:00
Oliver Köster
bebffb6823 Update README.md 2020-06-06 13:52:25 +02:00
Knutwurst
a3b291f1cf Disable advanced pause feature, because resume does not work reliably. 2020-06-06 13:51:17 +02:00
Knutwurst
0486080289 - Remove unneccessary bed heating information.
- Disable debug information via serial console.
2020-06-06 12:53:11 +02:00
Oliver Köster
c20481ae96 Update README.md 2020-06-06 12:10:48 +02:00
Knutwurst
fafc91bea1 Add config switch defines for automated releases. 2020-06-06 01:03:30 +02:00
Knutwurst
a150ff02b9 Merge branch 'master' of https://github.com/knutwurst/Marlin-2-0-x-Anycubic-i3-MEGA-S
* 'master' of https://github.com/knutwurst/Marlin-2-0-x-Anycubic-i3-MEGA-S:
  Update README.md
2020-06-06 00:28:58 +02:00
Knutwurst
3ddbe448ae Reset print-timer after print stop. 2020-06-06 00:28:45 +02:00
Oliver Köster
640ca301b6 Update README.md 2020-06-06 00:25:35 +02:00
Knutwurst
c77a32a674 Bugfix for dumb wiggeling after stopping SD print. 2020-06-06 00:17:24 +02:00
Oliver Köster
bc9a6a2a4d Update README.md 2020-06-05 22:47:39 +02:00
Oliver Köster
8ee3f40f31 Update README.md 2020-06-05 22:32:02 +02:00
9 changed files with 229 additions and 121 deletions

View File

@@ -38,6 +38,9 @@
*/
#define CONFIGURATION_H_VERSION 020005
#define KNUTWURST_MEGAS
#define KNUTWURST_TMC
//===========================================================================
//============================= Getting Started =============================
//===========================================================================
@@ -673,7 +676,7 @@
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
*/
#if ENABLED(KNUTWURST_TMC)
#define X_DRIVER_TYPE TMC2208_STANDALONE
#define Y_DRIVER_TYPE TMC2208_STANDALONE
#define Z_DRIVER_TYPE TMC2208_STANDALONE
@@ -690,6 +693,26 @@
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988
#endif
#if DISABLED(KNUTWURST_TMC)
#define X_DRIVER_TYPE A4988
#define Y_DRIVER_TYPE A4988
#define Z_DRIVER_TYPE A4988
#define X2_DRIVER_TYPE A4988
#define Y2_DRIVER_TYPE A4988
#define Z2_DRIVER_TYPE A4988
#define Z3_DRIVER_TYPE A4988
#define Z4_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE A4988
#define E1_DRIVER_TYPE A4988
#define E2_DRIVER_TYPE A4988
#define E3_DRIVER_TYPE A4988
#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988
#endif
// Enable this feature if all enabled endstop pins are interrupt-capable.
// This will remove the need to poll the interrupt pins, saving many CPU cycles.
@@ -734,13 +757,29 @@
* Override with M92
* X, Y, Z, E0 [, E1[, E2...]]
*/
#if ENABLED(KNUTWURST_MEGAS)
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 384 }
#endif
#if DISABLED(KNUTWURST_MEGAS)
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 96 }
#endif
/**
* Default Max Feed Rate (mm/s)
* Override with M203
* X, Y, Z, E0 [, E1[, E2...]]
*/
#if ENABLED(KNUTWURST_MEGAS)
#define DEFAULT_MAX_FEEDRATE { 500, 500, 6, 30 }
#endif
#if DISABLED(KNUTWURST_MEGAS)
#define DEFAULT_MAX_FEEDRATE { 500, 500, 6, 60 }
#endif
//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2
#if ENABLED(LIMITED_MAX_FR_EDITING)
@@ -768,10 +807,18 @@
* M204 R Retract Acceleration
* M204 T Travel Acceleration
*/
#if ENABLED(KNUTWURST_MEGAS)
#define DEFAULT_ACCELERATION 1600 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 1500 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
#endif
#if DISABLED(KNUTWURST_MEGAS)
#define DEFAULT_ACCELERATION 1600 // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves
#endif
/**
* Default Jerk limits (mm/s)
* Override with M205 X Y Z E
@@ -1058,6 +1105,7 @@
// @section machine
#if ENABLED(KNUTWURST_TMC)
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false // set to true for stock drivers or TMC2208 with reversed connectors
#define INVERT_Y_DIR true // set to false for stock drivers or TMC2208 with reversed connectors
@@ -1074,6 +1122,26 @@
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false
#endif
#if DISABLED(KNUTWURST_TMC)
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR true // set to true for stock drivers or TMC2208 with reversed connectors
#define INVERT_Y_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_Z_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_E1_DIR false // set to false for stock drivers or TMC2208 with reversed connectors
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false
#endif
// @section homing
@@ -1448,9 +1516,9 @@
#define EEPROM_SETTINGS // Persistent storage with M500 and M501
//#define DISABLE_M503 // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
//#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
#if ENABLED(EEPROM_SETTINGS)
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
#endif
//
@@ -2282,9 +2350,10 @@
* The new version is to be identified by a "TRIGORILLA1.1" lettering
* on the upper left of the PCB silkscreen.
*/
#define TRIGORILLA_VERSION 1
#define TRIGORILLA_VERSION 0
// Enable Anycubic TFT
#define ANYCUBIC_TOUCHSCREEN
#define ANYCUBIC_FILAMENT_RUNOUT_SENSOR
#define ANYCUBIC_TFT_DEBUG
//#define ANYCUBIC_TFT_DEBUG

View File

@@ -1867,7 +1867,7 @@
* Requires NOZZLE_PARK_FEATURE.
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
*/
#define ADVANCED_PAUSE_FEATURE
//#define ADVANCED_PAUSE_FEATURE
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate.
#define PAUSE_PARK_RETRACT_LENGTH 4 // (mm) Initial retract.

View File

@@ -43,10 +43,7 @@
#include "../../feature/leds/leds.h"
#endif
#if ENABLED(ANYCUBIC_TOUCHSCREEN)
#include "../../lcd/anycubic_touchscreen.h"
#endif
#include "../../MarlinCore.h" // for wait_for_heatup and idle()
#include "../../MarlinCore.h" // for wait_for_heatup, idle, startOrResumeJob
/**
* M140: Set bed temperature
@@ -83,15 +80,9 @@ void GcodeSuite::M190() {
}
else return;
#ifdef ANYCUBIC_TOUCHSCREEN
AnycubicTouchscreen.BedHeatingStart();
#endif
ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));
thermalManager.wait_for_bed(no_wait_for_cooling);
//SERIAL_FLUSH();
}
#endif // HAS_HEATED_BED

View File

@@ -38,7 +38,7 @@
* Defines the version of the Marlin build. Not to be confused with
* Marlin's own build number, e.g. 2.0.x.
*/
#define CUSTOM_BUILD_VERSION "1.0.0"
#define CUSTOM_BUILD_VERSION "1.0.3"
#ifndef STRING_DISTRIBUTION_DATE
#define STRING_DISTRIBUTION_DATE "2020-03-31"

View File

@@ -42,9 +42,9 @@
// to which to write the next incoming character and tail is the index of the
// location from which to read.
#if (RAMEND < 1000)
#define SERIAL_BUFFER_SIZE 16
#else
#define SERIAL_BUFFER_SIZE 64
#else
#define SERIAL_BUFFER_SIZE 128
#endif
struct ring_buffer

View File

@@ -108,7 +108,7 @@ void AnycubicTouchscreenClass::Setup()
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
pinMode(19, INPUT);
WRITE(19, HIGH);
if (READ(19) == true)
if ((READ(19) == true) && FilamentSensorEnabled)
{
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER();
@@ -120,6 +120,7 @@ void AnycubicTouchscreenClass::Setup()
SelectedDirectory[0] = 0;
SpecialMenu = false;
FilamentSensorEnabled = true;
#ifdef STARTUP_CHIME
buzzer.tone(250, 554); // C#5
@@ -131,12 +132,12 @@ void AnycubicTouchscreenClass::Setup()
void AnycubicTouchscreenClass::WriteOutageEEPromData()
{
int pos = E2END - 256;
//int pos = E2END - 256;
}
void AnycubicTouchscreenClass::ReadOutageEEPromData()
{
int pos = E2END - 256;
//int pos = E2END - 256;
}
void AnycubicTouchscreenClass::KillTFT()
@@ -166,7 +167,7 @@ void AnycubicTouchscreenClass::StartPrint()
break;
case 1:
// regular sd pause
queue.enqueue_now_P(PSTR("M24")); // unpark nozzle
queue.inject_P(PSTR("M24")); // unpark nozzle
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
@@ -197,7 +198,7 @@ void AnycubicTouchscreenClass::StartPrint()
break;
case 3:
// paused by filament runout
queue.enqueue_now_P(PSTR("M24")); // unpark nozzle and resume
queue.inject_P(PSTR("M24")); // unpark nozzle and resume
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: M24 Resume from Filament Runout");
#endif
@@ -258,9 +259,9 @@ void AnycubicTouchscreenClass::PausePrint()
SERIAL_ECHOLNPGM("DEBUG: Filament Runout Pause");
#endif
// filament runout, retract and beep
queue.enqueue_now_P(PSTR("G91")); // relative mode
queue.enqueue_now_P(PSTR("G1 E-3 F1800")); // retract 3mm
queue.enqueue_now_P(PSTR("G90")); // absolute mode
queue.inject_P(PSTR("G91")); // relative mode
queue.inject_P(PSTR("G1 E-3 F1800")); // retract 3mm
queue.inject_P(PSTR("G90")); // absolute mode
buzzer.tone(200, 1567);
buzzer.tone(200, 1174);
buzzer.tone(200, 1567);
@@ -269,7 +270,7 @@ void AnycubicTouchscreenClass::PausePrint()
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Filament runout - Retract, beep and park.");
#endif
queue.enqueue_now_P(PSTR("M25")); // pause print and park nozzle
queue.inject_P(PSTR("M25")); // pause print and park nozzle
ai3m_pause_state = 3;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: M25 sent, parking nozzle");
@@ -294,8 +295,9 @@ void AnycubicTouchscreenClass::StopPrint()
wait_for_user = false;
wait_for_heatup = false;
card.endFilePrint();
queue.clear();
#ifdef ANYCUBIC_TFT_DEBUG
card.closefile();
//queue.clear();
#ifdef ANYCUBIC_TFT_DEBUGANYCUBIC_TFT_STATE_SDSTOP_REQ
SERIAL_ECHOLNPGM("DEBUG: Stopped and cleared");
#endif
print_job_timer.stop();
@@ -317,7 +319,7 @@ void AnycubicTouchscreenClass::StopPrint()
void AnycubicTouchscreenClass::FilamentChangeResume()
{
// call M108 to break out of M600 pause
queue.enqueue_now_P(PSTR("M108"));
queue.inject_P(PSTR("M108"));
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: M108 Resume called");
#endif
@@ -344,7 +346,7 @@ void AnycubicTouchscreenClass::FilamentChangePause()
#endif
// call M600 and set display state to paused
queue.enqueue_now_P(PSTR("M600"));
queue.inject_P(PSTR("M600"));
TFTstate = ANYCUBIC_TFT_STATE_SDPAUSE_REQ;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: M600 Pause called");
@@ -356,14 +358,14 @@ void AnycubicTouchscreenClass::ReheatNozzle()
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Send reheat M108");
#endif
queue.enqueue_now_P(PSTR("M108"));
queue.inject_P(PSTR("M108"));
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Resume heating");
#endif
// enable heaters again
HOTEND_LOOP()
thermalManager.reset_hotend_idle_timer(e);
//thermalManager.reset_hotend_idle_timer(e);
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Clear flags");
#endif
@@ -401,8 +403,8 @@ void AnycubicTouchscreenClass::ParkAfterStop()
SERIAL_ECHOLNPGM("DEBUG: SDSTOP: Park XY");
#endif
}
queue.enqueue_now_P(PSTR("M84")); // disable stepper motors
queue.enqueue_now_P(PSTR("M27")); // force report of SD status
queue.inject_P(PSTR("M84")); // disable stepper motors
queue.inject_P(PSTR("M27")); // force report of SD status
ai3m_pause_state = 0;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
@@ -430,61 +432,61 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
else if (strcmp(SelectedDirectory, "<pid tune hotend>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: PID Tune Hotend");
queue.enqueue_now_P(PSTR("M106 S204\nM303 E0 S210 C15 U1"));
queue.inject_P(PSTR("M106 S204\nM303 E0 S210 C15 U1"));
}
else if (strcmp(SelectedDirectory, "<pid tune ultrabase>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: PID Tune Ultrabase");
queue.enqueue_now_P(PSTR("M303 E-1 S60 C6 U1"));
queue.inject_P(PSTR("M303 E-1 S60 C6 U1"));
}
else if (strcmp(SelectedDirectory, "<save eeprom>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Save EEPROM");
queue.enqueue_now_P(PSTR("M500"));
queue.inject_P(PSTR("M500"));
buzzer.tone(105, 1108);
buzzer.tone(210, 1661);
}
else if (strcmp(SelectedDirectory, "<load fw defaults>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults");
queue.enqueue_now_P(PSTR("M502"));
queue.inject_P(PSTR("M502"));
buzzer.tone(105, 1661);
buzzer.tone(210, 1108);
}
else if (strcmp(SelectedDirectory, "<preheat ultrabase>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Preheat Ultrabase");
queue.enqueue_now_P(PSTR("M140 S60"));
queue.inject_P(PSTR("M140 S60"));
}
else if (strcmp(SelectedDirectory, "<start mesh leveling>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling");
queue.enqueue_now_P(PSTR("G29 S1"));
queue.inject_P(PSTR("G29 S1"));
}
else if (strcmp(SelectedDirectory, "<next mesh point>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point");
queue.enqueue_now_P(PSTR("G29 S2"));
queue.inject_P(PSTR("G29 S2"));
}
else if (strcmp(SelectedDirectory, "<z up 0.1>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1");
queue.enqueue_now_P(PSTR("G91\nG1 Z+0.1\nG90"));
queue.inject_P(PSTR("G91\nG1 Z+0.1\nG90"));
}
else if (strcmp(SelectedDirectory, "<z up 0.02>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02");
queue.enqueue_now_P(PSTR("G91\nG1 Z+0.02\nG90"));
queue.inject_P(PSTR("G91\nG1 Z+0.02\nG90"));
}
else if (strcmp(SelectedDirectory, "<z down 0.02>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02");
queue.enqueue_now_P(PSTR("G91\nG1 Z-0.02\nG90"));
queue.inject_P(PSTR("G91\nG1 Z-0.02\nG90"));
}
else if (strcmp(SelectedDirectory, "<z down 0.1>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1");
queue.enqueue_now_P(PSTR("G91\nG1 Z-0.1\nG90"));
queue.inject_P(PSTR("G91\nG1 Z-0.1\nG90"));
}
else if (strcmp(SelectedDirectory, "<filamentchange pause>") == 0)
{
@@ -496,6 +498,21 @@ void AnycubicTouchscreenClass::HandleSpecialMenu()
SERIAL_ECHOLNPGM("Special Menu: FilamentChange Resume");
FilamentChangeResume();
}
else if (strcmp(SelectedDirectory, "<disable fil. sensor>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Disable Filament Sensor");
FilamentSensorEnabled = false;
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<enable fil. sensor>") == 0)
{
SERIAL_ECHOLNPGM("Special Menu: Enable Filament Sensor");
FilamentSensorEnabled = true;
buzzer.tone(105, 1108);
buzzer.tone(105, 1108);
}
else if (strcmp(SelectedDirectory, "<exit>") == 0)
{
SpecialMenu = false;
@@ -540,6 +557,18 @@ void AnycubicTouchscreenClass::Ls()
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Load FW Defaults>");
break;
case 12: // Page 4
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Disable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Enable Fil. Sensor>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
/*
case 12: // Fourth Page
HARDWARE_SERIAL_PROTOCOLLNPGM("<Z Up 0.1>");
@@ -554,8 +583,8 @@ void AnycubicTouchscreenClass::Ls()
*/
default:
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
//HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
//HARDWARE_SERIAL_PROTOCOLLNPGM("<Exit>");
break;
}
}
@@ -714,7 +743,7 @@ void AnycubicTouchscreenClass::StateHandler()
#ifdef SDSUPPORT
if (!card.isPrinting())
{
// It seems that we are to printing anymore... pause or stopped?
// It seems that we are not printing anymore... pause or stopped?
if (card.isFileOpen())
{
// File is still open --> paused
@@ -768,7 +797,7 @@ void AnycubicTouchscreenClass::StateHandler()
if (!IsParked)
{
// park head and retract 2mm
queue.enqueue_now_P(PSTR("M125 L2"));
queue.inject_P(PSTR("M125 L2"));
IsParked = true;
}
}
@@ -795,7 +824,7 @@ void AnycubicTouchscreenClass::StateHandler()
HARDWARE_SERIAL_ENTER();
if ((!card.isPrinting()) && (!planner.movesplanned()))
{
// enter idle display state
queue.clear();
TFTstate = ANYCUBIC_TFT_STATE_IDLE;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: SD print stopped... J16");
@@ -809,7 +838,7 @@ void AnycubicTouchscreenClass::StateHandler()
// did we park the hotend already?
if ((!IsParked) && (!card.isPrinting()) && (!planner.movesplanned()))
{
queue.enqueue_now_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
queue.inject_P(PSTR("G91\nG1 E-1 F1800\nG90")); //retract
ParkAfterStop();
IsParked = true;
}
@@ -822,68 +851,71 @@ void AnycubicTouchscreenClass::StateHandler()
void AnycubicTouchscreenClass::FilamentRunout()
{
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
FilamentTestStatus = READ(19) & 0xff;
if (FilamentTestStatus > FilamentTestLastStatus)
if(FilamentSensorEnabled == true)
{
// filament sensor pin changed, save current timestamp.
const millis_t fil_ms = millis();
static millis_t fil_delay;
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
FilamentTestStatus = READ(19) & 0xff;
// since this is inside a loop, only set delay time once
if (FilamentSetMillis)
if (FilamentTestStatus > FilamentTestLastStatus)
{
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Set filament trigger time");
#endif
// set the delayed timestamp to 3000ms later
fil_delay = fil_ms + 3000UL;
// this doesn't need to run until the filament is recovered again
FilamentSetMillis = false;
}
// filament sensor pin changed, save current timestamp.
const millis_t fil_ms = millis();
static millis_t fil_delay;
// if three seconds passed and the sensor is still triggered,
// we trigger the filament runout status
if ((FilamentTestStatus > FilamentTestLastStatus) && (ELAPSED(fil_ms, fil_delay)))
{
if (!IsParked)
// since this is inside a loop, only set delay time once
if (FilamentSetMillis)
{
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: 3000ms delay done");
#endif
if (card.isPrinting())
{
ai3m_pause_state = 3;
; // set runout pause flag
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
#endif
PausePrint();
}
else if (!card.isPrinting())
{
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER();
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout... J15");
#endif
FilamentTestLastStatus = FilamentTestStatus;
}
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: Set filament trigger time");
#endif
// set the delayed timestamp to 3000ms later
fil_delay = fil_ms + 3000UL;
// this doesn't need to run until the filament is recovered again
FilamentSetMillis = false;
}
// if three seconds passed and the sensor is still triggered,
// we trigger the filament runout status
if ((FilamentTestStatus > FilamentTestLastStatus) && (ELAPSED(fil_ms, fil_delay)))
{
if (!IsParked)
{
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("DEBUG: 3000ms delay done");
#endif
if (card.isPrinting())
{
ai3m_pause_state = 3;
; // set runout pause flag
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOPAIR(" DEBUG: AI3M Pause State: ", ai3m_pause_state);
SERIAL_EOL();
#endif
PausePrint();
}
else if (!card.isPrinting())
{
HARDWARE_SERIAL_PROTOCOLPGM("J15"); //J15 FILAMENT LACK
HARDWARE_SERIAL_ENTER();
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout... J15");
#endif
FilamentTestLastStatus = FilamentTestStatus;
}
}
FilamentTestLastStatus = FilamentTestStatus;
}
FilamentTestLastStatus = FilamentTestStatus;
}
else if (FilamentTestStatus != FilamentTestLastStatus)
{
FilamentSetMillis = true; // set the timestamps on the next loop again
FilamentTestLastStatus = FilamentTestStatus;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout recovered");
#endif
}
#endif
}
else if (FilamentTestStatus != FilamentTestLastStatus)
{
FilamentSetMillis = true; // set the timestamps on the next loop again
FilamentTestLastStatus = FilamentTestStatus;
#ifdef ANYCUBIC_TFT_DEBUG
SERIAL_ECHOLNPGM("TFT Serial Debug: Filament runout recovered");
#endif
}
#endif
}
void AnycubicTouchscreenClass::GetCommandFromTFT()
@@ -1170,7 +1202,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
else if ((CodeSeen('C')) && (!planner.movesplanned()))
{
if ((current_position[Z_AXIS] < 10))
queue.enqueue_now_P(PSTR("G1 Z10")); //RASE Z AXIS
queue.inject_P(PSTR("G1 Z10")); //RASE Z AXIS
tempvalue = constrain(CodeValue(), 0, 275);
thermalManager.setTargetHotend(tempvalue, 0);
}
@@ -1232,14 +1264,14 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if (CodeSeen('X') || CodeSeen('Y') || CodeSeen('Z'))
{
if (CodeSeen('X'))
queue.enqueue_now_P(PSTR("G28 X"));
queue.inject_P(PSTR("G28 X"));
if (CodeSeen('Y'))
queue.enqueue_now_P(PSTR("G28 Y"));
queue.inject_P(PSTR("G28 Y"));
if (CodeSeen('Z'))
queue.enqueue_now_P(PSTR("G28 Z"));
queue.inject_P(PSTR("G28 Z"));
}
else if (CodeSeen('C'))
queue.enqueue_now_P(PSTR("G28"));
queue.inject_P(PSTR("G28"));
}
break;
case 22: // A22 move X/Y/Z or extrude
@@ -1329,7 +1361,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if ((!planner.movesplanned()) && (TFTstate != ANYCUBIC_TFT_STATE_SDPAUSE) && (TFTstate != ANYCUBIC_TFT_STATE_SDOUTAGE))
{
if ((current_position[Z_AXIS] < 10))
queue.enqueue_now_P(PSTR("G1 Z10")); // RAISE Z AXIS
queue.inject_P(PSTR("G1 Z10")); // RAISE Z AXIS
thermalManager.setTargetBed(50);
thermalManager.setTargetHotend(200, 0);
HARDWARE_SERIAL_SUCC_START;
@@ -1340,7 +1372,7 @@ void AnycubicTouchscreenClass::GetCommandFromTFT()
if ((!planner.movesplanned()) && (TFTstate != ANYCUBIC_TFT_STATE_SDPAUSE) && (TFTstate != ANYCUBIC_TFT_STATE_SDOUTAGE))
{
if ((current_position[Z_AXIS] < 10))
queue.enqueue_now_P(PSTR("G1 Z10")); //RAISE Z AXIS
queue.inject_P(PSTR("G1 Z10")); //RAISE Z AXIS
thermalManager.setTargetBed(80);
thermalManager.setTargetHotend(240, 0);

View File

@@ -117,6 +117,7 @@ private:
char SelectedDirectory[30];
uint8_t SpecialMenu = false;
uint8_t FilamentSensorEnabled = true;
#if ENABLED(ANYCUBIC_FILAMENT_RUNOUT_SENSOR)
char FilamentTestStatus = false;

View File

@@ -8,13 +8,28 @@ Diese Firmwarekonfiguration aktiviert viele neue erweitere Funktionen der Marlin
* Mesh-Bed Kalibrierung
* S-Kurven Beschleunigung
* Babystepping während des Druckvorgangs (nur über USB)
* Biliniar Bed Leveling (BBL)
* "Juction Deviation" statt des klassischen "Jerk"
* Babystepping während des Druckvorgangs
* Bilinear Bed Leveling (BBL)
* Manuelles Editieren der Messpunkte
* Volle Anycubic Touchscreen Unterstützung
* Pause & Filamentwechselfunktion
* Automatische EEPROM Initialisierung
* Filament Runout Sensor kann im Menü deaktiviert werden)
Bevor du irgendwas machst, nachdem du die Firmware geupdated hast, gehe zu `Special Menu > Load FW Defaults` um alte Einstellungen zu löschen!
Besser im Vergleich zu anderen Firmwares (Bugfixes):
* Aufgeräumtes Special-Menü
* Drucker hängt sich nicht auf, wenn man Dateien mit Sonderzeichen (oder Chinesisch) auf der SD Karte hat
* Kein dummes "wackeln" der Düse nach Stoppen eines Druckvorgangs
* Kein Abstürzen bei zu vielen Dateien auf der SD Karte
* Kein Abstürzen bei SD-Karten über 16 GB
* Fehler "Melodie" bei Thermal Runaway Protection
* Kein Aufhängen, wenn SD Karte + USB gleichzeitig genutzt wird
* Kein Aufhängen wenn man Pause drückt
* Kein Aufhängen, wenn das Filament leer ist.
Bekannte Bugs:
* Filament Runout Sensor wird bei jedem Neustart wieder aktiviert
---
@@ -47,7 +62,7 @@ Weder noch! Es gibt keine "V2" oder "V3". Die offizielle letzte Version von Trin
>Als ich die Treiber eingebaut habe, qualmte mein Mainboard in der Mitte rechts. Ist das normal?
Nein. Du hast die Treiber falsch herum eingebaut. Jetzt ist die Z-Diode (733A) verbrannt. Tausche sie aus und alles funktioniert wieder.
Nein. Du hast die Treiber falsch herum eingebaut. Jetzt ist die Z-Diode (733A) verbrannt. Tausche sie aus und alles funktioniert wieder. Deine falsch gesteckten Treiber kannst du aber vermutlich wegschmeißen.
>Muss ich wie bei anderen Firmwares noch die E-Steps einstellen, wenn ich einen Mega S besitze?
@@ -59,7 +74,7 @@ Nein, lade dir einfach die korrekte Version herunter. Trotzdem solltest du die S
### Download
Du kannst die fertigen Binärdateien hier herunterladen: https://github.com/knutwurst/Marlin-2-0-x-Anycubic-i3-MEGA-S/releases. Natürlich kannst du die Firmware auch selbst mit PlatformIO oder der Arduino IDE selbst kompilieren.
Du kannst die fertigen Binärdateien hier herunterladen: https://github.com/knutwurst/Marlin-2-0-x-Anycubic-i3-MEGA-S/releases. Natürlich kannst du die Firmware mit PlatformIO oder der Arduino IDE auch selbst kompilieren.
-> `i3_Mega.hex` ist für den unmodifizierten originalen Anycubic i3 MEGA (ohne S).

View File

@@ -2224,4 +2224,4 @@
// Enable Anycubic TFT
#define ANYCUBIC_TOUCHSCREEN
#define ANYCUBIC_FILAMENT_RUNOUT_SENSOR
#define ANYCUBIC_TFT_DEBUG
//#define ANYCUBIC_TFT_DEBUG