commit
e184dcf1b9
68 changed files with 5296 additions and 3679 deletions
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG]<Enter comprehensive title>"
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please, before you create a new bug report, please make sure you searched in open and closed issues and couldn't find anything that matches.
|
||||
|
||||
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
|
||||
**Printer firmware version**- [e.g. 3.8.1, 3.8.1-RC1, ...]
|
||||
|
||||
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
|
||||
**MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...]
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Please describe steps to reproduce the behavior.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**G-code**
|
||||
Please attach a G-code. This will make it easier for us to replicate the error.
|
||||
|
||||
**Video**
|
||||
Please attach a video. It usually helps to solve the problem.
|
20
.github/ISSUE_TEMPLATE/enhancement.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/enhancement.md
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
name: Enhancement
|
||||
about: Suggest an idea for this project
|
||||
title: " [ENHANCEMENT]<Enter comprehensive title>"
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
|
||||
|
||||
Enter what type of printer or upgrade the enhancement applies to.
|
||||
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
|
||||
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
|
||||
|
||||
**Is your enhancement related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: "[FEATURE REQUEST]<Enter comprehensive title>"
|
||||
labels: feature request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
|
||||
|
||||
If it makes sense, enter what type of printer or upgrade the feature request applies to.
|
||||
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
|
||||
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
12
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
12
.github/ISSUE_TEMPLATE/question.md
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
name: Question
|
||||
about: What do you want to know?
|
||||
title: "[QUESTION]<Enter comprehensive title>"
|
||||
labels: question
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
Please, before you create a new question, please make sure you searched in open and closed issues and couldn't find anything that matches.
|
||||
|
||||
**What is your question?**
|
|
@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
|
|||
extern PGM_P sPrinterName;
|
||||
|
||||
// Firmware version
|
||||
#define FW_VERSION "3.8.1"
|
||||
#define FW_COMMIT_NR 2869
|
||||
#define FW_VERSION "3.9.0"
|
||||
#define FW_COMMIT_NR 3175
|
||||
// FW_VERSION_UNKNOWN means this is an unofficial build.
|
||||
// The firmware should only be checked into github with this symbol.
|
||||
#define FW_DEV_VERSION FW_VERSION_UNKNOWN
|
||||
|
@ -345,7 +345,7 @@ your extruder heater takes 2 minutes to hit the target on heating.
|
|||
#define Y_PROBE_OFFSET_FROM_EXTRUDER -29
|
||||
#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35
|
||||
|
||||
#define Z_RAISE_BEFORE_HOMING 4 // (in mm) Raise Z before homing (G28) for Probe Clearance.
|
||||
#define Z_RAISE_BEFORE_HOMING 5 // (in mm) Raise Z before homing (G28) for Probe Clearance.
|
||||
// Be sure you have this distance over your Z_MAX_POS in case
|
||||
|
||||
#define XY_TRAVEL_SPEED 8000 // X and Y axis travel speed between probes, in mm/min
|
||||
|
@ -424,7 +424,7 @@ your extruder heater takes 2 minutes to hit the target on heating.
|
|||
#define DEFAULT_XJERK 10 // (mm/sec)
|
||||
#define DEFAULT_YJERK 10 // (mm/sec)
|
||||
#define DEFAULT_ZJERK 0.4 // (mm/sec)
|
||||
#define DEFAULT_EJERK 2.5 // (mm/sec)
|
||||
#define DEFAULT_EJERK 4.5 // (mm/sec)
|
||||
|
||||
//===========================================================================
|
||||
//=============================Additional Features===========================
|
||||
|
@ -549,6 +549,12 @@ enum CalibrationStatus
|
|||
CALIBRATION_STATUS_UNKNOWN = 0,
|
||||
};
|
||||
|
||||
// Try to maintain a minimum distance from the bed even when Z is
|
||||
// unknown when doing the following operations
|
||||
#define MIN_Z_FOR_LOAD 50
|
||||
#define MIN_Z_FOR_UNLOAD 20
|
||||
#define MIN_Z_FOR_PREHEAT 10
|
||||
|
||||
#include "Configuration_adv.h"
|
||||
#include "thermistortables.h"
|
||||
|
||||
|
|
|
@ -165,8 +165,8 @@ void Config_PrintSettings(uint8_t level)
|
|||
#endif
|
||||
if (level >= 10) {
|
||||
#ifdef LIN_ADVANCE
|
||||
printf_P(PSTR("%SLinear advance settings:\n M900 K%.2f E/D = %.2f\n"),
|
||||
echomagic, extruder_advance_k, advance_ed_ratio);
|
||||
printf_P(PSTR("%SLinear advance settings:%S M900 K%.2f\n"),
|
||||
echomagic, echomagic, extruder_advance_K);
|
||||
#endif //LIN_ADVANCE
|
||||
}
|
||||
}
|
||||
|
|
|
@ -268,43 +268,29 @@
|
|||
#endif
|
||||
|
||||
/**
|
||||
* Implementation of linear pressure control
|
||||
*
|
||||
* Assumption: advance = k * (delta velocity)
|
||||
* K=0 means advance disabled.
|
||||
* See Marlin documentation for calibration instructions.
|
||||
*/
|
||||
* Linear Pressure Control v1.5
|
||||
*
|
||||
* Assumption: advance [steps] = k * (delta velocity [steps/s])
|
||||
* K=0 means advance disabled.
|
||||
*
|
||||
* NOTE: K values for LIN_ADVANCE 1.5 differs from earlier versions!
|
||||
*
|
||||
* Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak.
|
||||
* Larger K values will be needed for flexible filament and greater distances.
|
||||
* If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk)
|
||||
* print acceleration will be reduced during the affected moves to keep within the limit.
|
||||
*
|
||||
* See http://marlinfw.org/docs/features/lin_advance.html for full instructions.
|
||||
* Mention @Sebastianv650 on GitHub to alert the author of any issues.
|
||||
*/
|
||||
#define LIN_ADVANCE
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
#define LIN_ADVANCE_K 0 //Try around 45 for PLA, around 25 for ABS.
|
||||
|
||||
/**
|
||||
* Some Slicers produce Gcode with randomly jumping extrusion widths occasionally.
|
||||
* For example within a 0.4mm perimeter it may produce a single segment of 0.05mm width.
|
||||
* While this is harmless for normal printing (the fluid nature of the filament will
|
||||
* close this very, very tiny gap), it throws off the LIN_ADVANCE pressure adaption.
|
||||
*
|
||||
* For this case LIN_ADVANCE_E_D_RATIO can be used to set the extrusion:distance ratio
|
||||
* to a fixed value. Note that using a fixed ratio will lead to wrong nozzle pressures
|
||||
* if the slicer is using variable widths or layer heights within one print!
|
||||
*
|
||||
* This option sets the default E:D ratio at startup. Use `M900` to override this value.
|
||||
*
|
||||
* Example: `M900 W0.4 H0.2 D1.75`, where:
|
||||
* - W is the extrusion width in mm
|
||||
* - H is the layer height in mm
|
||||
* - D is the filament diameter in mm
|
||||
*
|
||||
* Example: `M900 R0.0458` to set the ratio directly.
|
||||
*
|
||||
* Set to 0 to auto-detect the ratio based on given Gcode G1 print moves.
|
||||
*
|
||||
* Slic3r (including Prusa Slic3r) produces Gcode compatible with the automatic mode.
|
||||
* Cura (as of this writing) may produce Gcode incompatible with the automatic mode.
|
||||
*/
|
||||
#define LIN_ADVANCE_E_D_RATIO 0 // The calculated ratio (or 0) according to the formula W * H / ((D / 2) ^ 2 * PI)
|
||||
// Example: 0.4 * 0.2 / ((1.75 / 2) ^ 2 * PI) = 0.033260135
|
||||
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed
|
||||
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility
|
||||
//#define LA_LIVE_K // Allow adjusting K in the Tune menu
|
||||
//#define LA_DEBUG // If enabled, this will generate debug information output over USB.
|
||||
//#define LA_DEBUG_LOGIC // @wavexx: setup logic channels for isr debugging
|
||||
#endif
|
||||
|
||||
// Arc interpretation settings:
|
||||
|
|
|
@ -99,6 +99,18 @@ void print_mem(uint32_t address, uint16_t count, uint8_t type, uint8_t countperl
|
|||
|
||||
#ifdef DEBUG_DCODE3
|
||||
#define EEPROM_SIZE 0x1000
|
||||
/*!
|
||||
*
|
||||
### D3 - Read/Write EEPROM <a href="https://reprap.org/wiki/G-code#D3:_Read.2FWrite_EEPROM">D3: Read/Write EEPROM</a>
|
||||
This command can be used without any additional parameters. It will read the entire eeprom.
|
||||
|
||||
D3 [ A | C | X ]
|
||||
|
||||
- `A` - Address (0x0000-0x0fff)
|
||||
- `C` - Count (0x0001-0x1000)
|
||||
- `X` - Data
|
||||
*
|
||||
*/
|
||||
void dcode_3()
|
||||
{
|
||||
DBG(_N("D3 - Read/Write EEPROM\n"));
|
||||
|
@ -176,6 +188,14 @@ extern float axis_steps_per_unit[NUM_AXIS];
|
|||
#endif //0
|
||||
#define LOG(args...)
|
||||
|
||||
/*!
|
||||
*
|
||||
### D-1 - Endless Loop <a href="https://reprap.org/wiki/G-code#G28:_Move_to_Origin_.28Home.29">D-1: Endless Loop</a>
|
||||
|
||||
D-1
|
||||
|
||||
*
|
||||
*/
|
||||
void dcode__1()
|
||||
{
|
||||
printf_P(PSTR("D-1 - Endless loop\n"));
|
||||
|
@ -185,6 +205,15 @@ void dcode__1()
|
|||
|
||||
#ifdef DEBUG_DCODES
|
||||
|
||||
/*!
|
||||
*
|
||||
### D0 - Reset <a href="https://reprap.org/wiki/G-code#D0:_Reset">D0: Reset</a>
|
||||
|
||||
D0 [ B ]
|
||||
|
||||
- `B` - Bootloader
|
||||
*
|
||||
*/
|
||||
void dcode_0()
|
||||
{
|
||||
if (*(strchr_pointer + 1) == 0) return;
|
||||
|
@ -203,6 +232,14 @@ void dcode_0()
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D1 - Clear EEPROM and RESET <a href="https://reprap.org/wiki/G-code#D1:_Clear_EEPROM_and_RESET">D1: Clear EEPROM and RESET</a>
|
||||
|
||||
D1
|
||||
|
||||
*
|
||||
*/
|
||||
void dcode_1()
|
||||
{
|
||||
LOG("D1 - Clear EEPROM and RESET\n");
|
||||
|
@ -213,6 +250,18 @@ void dcode_1()
|
|||
while(1);
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D2 - Read/Write RAM <a href="https://reprap.org/wiki/G-code#D2:_Read.2FWrite_RAM">D2: Read/Write RAM</a>
|
||||
This command can be used without any additional parameters. It will read the entire RAM.
|
||||
|
||||
D2 [ A | C | X ]
|
||||
|
||||
- `A` - Address (0x0000-0x1fff)
|
||||
- `C` - Count (0x0001-0x2000)
|
||||
- `X` - Data
|
||||
*
|
||||
*/
|
||||
void dcode_2()
|
||||
{
|
||||
LOG("D2 - Read/Write RAM\n");
|
||||
|
@ -256,6 +305,19 @@ void dcode_2()
|
|||
}*/
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D4 - Read/Write PIN <a href="https://reprap.org/wiki/G-code#D4:_Read.2FWrite_PIN">D4: Read/Write PIN</a>
|
||||
|
||||
To read the digital value of a pin you need only to define the pin number.
|
||||
|
||||
D4 [ P | F | V ]
|
||||
|
||||
- `P` - Pin (0-255)
|
||||
- `F` - Function in/out (0/1)
|
||||
- `V` - Value (0/1)
|
||||
*
|
||||
*/
|
||||
void dcode_4()
|
||||
{
|
||||
LOG("D4 - Read/Write PIN\n");
|
||||
|
@ -288,6 +350,19 @@ void dcode_4()
|
|||
|
||||
#ifdef DEBUG_DCODE5
|
||||
|
||||
/*!
|
||||
*
|
||||
### D5 - Read/Write FLASH <a href="https://reprap.org/wiki/G-code#D5:_Read.2FWrite_FLASH">D5: Read/Write Flash</a>
|
||||
This command can be used without any additional parameters. It will read the 1kb FLASH.
|
||||
|
||||
D5 [ A | C | X | E ]
|
||||
|
||||
- `A` - Address (0x00000-0x3ffff)
|
||||
- `C` - Count (0x0001-0x2000)
|
||||
- `X` - Data
|
||||
- `E` - Erase
|
||||
*
|
||||
*/
|
||||
void dcode_5()
|
||||
{
|
||||
printf_P(PSTR("D5 - Read/Write FLASH\n"));
|
||||
|
@ -351,11 +426,25 @@ void dcode_5()
|
|||
|
||||
#ifdef DEBUG_DCODES
|
||||
|
||||
/*!
|
||||
*
|
||||
### D6 - Read/Write external FLASH <a href="https://reprap.org/wiki/G-code#D6:_Read.2FWrite_external_FLASH">D6: Read/Write external Flash</a>
|
||||
|
||||
Reserved
|
||||
*
|
||||
*/
|
||||
void dcode_6()
|
||||
{
|
||||
LOG("D6 - Read/Write external FLASH\n");
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D7 - Read/Write Bootloader <a href="https://reprap.org/wiki/G-code#D7:_Read.2FWrite_Bootloader">D7: Read/Write Bootloader</a>
|
||||
|
||||
Reserved
|
||||
*
|
||||
*/
|
||||
void dcode_7()
|
||||
{
|
||||
LOG("D7 - Read/Write Bootloader\n");
|
||||
|
@ -371,6 +460,18 @@ void dcode_7()
|
|||
*/
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D8 - Read/Write PINDA <a href="https://reprap.org/wiki/G-code#D8:_Read.2FWrite_PINDA">D8: Read/Write PINDA</a>
|
||||
|
||||
D8 [ ? | ! | P | Z ]
|
||||
|
||||
- `?` - Read PINDA temperature shift values
|
||||
- `!` - Reset PINDA temperature shift values to default
|
||||
- `P` - Pinda temperature [C]
|
||||
- `Z` - Z Offset [mm]
|
||||
*
|
||||
*/
|
||||
void dcode_8()
|
||||
{
|
||||
printf_P(PSTR("D8 - Read/Write PINDA\n"));
|
||||
|
@ -412,6 +513,23 @@ void dcode_8()
|
|||
printf_P(PSTR("temp_pinda=%d offset_z=%d.%03d\n"), (int)temp_pinda, (int)offset_z, ((int)(1000 * offset_z) % 1000));
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D9 - Read ADC <a href="https://reprap.org/wiki/G-code#D9:_Read.2FWrite_ADC">D9: Read ADC</a>
|
||||
|
||||
D9 [ I | V ]
|
||||
|
||||
- `I` - ADC channel index
|
||||
- `0` - Heater 0 temperature
|
||||
- `1` - Heater 1 temperature
|
||||
- `2` - Bed temperature
|
||||
- `3` - PINDA temperature
|
||||
- `4` - PWR voltage
|
||||
- `5` - Ambient temperature
|
||||
- `6` - BED voltage
|
||||
- `V` Value to be written as simulated
|
||||
*
|
||||
*/
|
||||
const char* dcode_9_ADC_name(uint8_t i)
|
||||
{
|
||||
switch (i)
|
||||
|
@ -485,12 +603,24 @@ void dcode_9()
|
|||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D10 - Set XYZ calibration = OK <a href="https://reprap.org/wiki/G-code#D10:_Set_XYZ_calibration_.3D_OK">D10: Set XYZ calibration = OK</a>
|
||||
|
||||
*
|
||||
*/
|
||||
void dcode_10()
|
||||
{//Tell the printer that XYZ calibration went OK
|
||||
LOG("D10 - XYZ calibration = OK\n");
|
||||
calibration_status_store(CALIBRATION_STATUS_LIVE_ADJUST);
|
||||
}
|
||||
|
||||
/*!
|
||||
*
|
||||
### D12 - Time <a href="https://reprap.org/wiki/G-code#D12:_Time">D12: Time</a>
|
||||
|
||||
*
|
||||
*/
|
||||
void dcode_12()
|
||||
{//Time
|
||||
LOG("D12 - Time\n");
|
||||
|
@ -636,6 +766,20 @@ void dcode_2130()
|
|||
#endif //TMC2130
|
||||
|
||||
#ifdef PAT9125
|
||||
/*!
|
||||
*
|
||||
### D9125 - PAT9125 filament sensor <a href="https://reprap.org/wiki/G-code#D9:_Read.2FWrite_ADC">D9125: PAT9125 filament sensor</a>
|
||||
|
||||
D9125 [ ? | ! | R | X | Y | L ]
|
||||
|
||||
- `?` - Print values
|
||||
- `!` - Print values
|
||||
- `R` - Resolution. Not active in code
|
||||
- `X` - X values
|
||||
- `Y` - Y values
|
||||
- `L` - Activate filament sensor log
|
||||
*
|
||||
*/
|
||||
void dcode_9125()
|
||||
{
|
||||
LOG("D9125 - PAT9125\n");
|
||||
|
|
|
@ -146,40 +146,39 @@ void manage_inactivity(bool ignore_stepper_queue=false);
|
|||
#if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN > -1
|
||||
#if defined(Z_AXIS_ALWAYS_ON)
|
||||
#ifdef Z_DUAL_STEPPER_DRIVERS
|
||||
#define enable_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
|
||||
#define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#define poweron_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
|
||||
#define poweroff_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#else
|
||||
#define enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
|
||||
#define disable_z() {}
|
||||
#define poweron_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
|
||||
#define poweroff_z() {}
|
||||
#endif
|
||||
#else
|
||||
#ifdef Z_DUAL_STEPPER_DRIVERS
|
||||
#define enable_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
|
||||
#define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#define poweron_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
|
||||
#define poweroff_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#else
|
||||
#define enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
|
||||
#define disable_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#define poweron_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON)
|
||||
#define poweroff_z() { WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON); axis_known_position[Z_AXIS] = false; }
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#define enable_z() {}
|
||||
#define disable_z() {}
|
||||
#define poweron_z() {}
|
||||
#define poweroff_z() {}
|
||||
#endif
|
||||
|
||||
#ifdef PSU_Delta
|
||||
#ifndef PSU_Delta
|
||||
#define enable_z() poweron_z()
|
||||
#define disable_z() poweroff_z()
|
||||
#else
|
||||
void init_force_z();
|
||||
void check_force_z();
|
||||
#undef disable_z
|
||||
#define disable_z() disable_force_z()
|
||||
void disable_force_z();
|
||||
#undef enable_z
|
||||
#define enable_z() enable_force_z()
|
||||
void enable_force_z();
|
||||
void disable_force_z();
|
||||
#define enable_z() enable_force_z()
|
||||
#define disable_z() disable_force_z()
|
||||
#endif // PSU_Delta
|
||||
|
||||
|
||||
|
||||
|
||||
//#if defined(Z_ENABLE_PIN) && Z_ENABLE_PIN > -1
|
||||
//#ifdef Z_DUAL_STEPPER_DRIVERS
|
||||
//#define enable_z() { WRITE(Z_ENABLE_PIN, Z_ENABLE_ON); WRITE(Z2_ENABLE_PIN, Z_ENABLE_ON); }
|
||||
|
@ -296,6 +295,7 @@ void setPwmFrequency(uint8_t pin, int val);
|
|||
extern bool fans_check_enabled;
|
||||
extern float homing_feedrate[];
|
||||
extern bool axis_relative_modes[];
|
||||
extern float feedrate;
|
||||
extern int feedmultiply;
|
||||
extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders
|
||||
extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually
|
||||
|
@ -307,6 +307,7 @@ extern float max_pos[3];
|
|||
extern bool axis_known_position[3];
|
||||
extern int fanSpeed;
|
||||
extern int8_t lcd_change_fil_state;
|
||||
extern float default_retraction;
|
||||
|
||||
#ifdef TMC2130
|
||||
void homeaxis(int axis, uint8_t cnt = 1, uint8_t* pstep = 0);
|
||||
|
@ -358,9 +359,6 @@ extern int fan_speed[2];
|
|||
// Handling multiple extruders pins
|
||||
extern uint8_t active_extruder;
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
//Long pause
|
||||
extern unsigned long pause_time;
|
||||
extern unsigned long start_pause_print;
|
||||
|
@ -398,7 +396,7 @@ extern uint16_t gcode_in_progress;
|
|||
extern LongTimer safetyTimer;
|
||||
|
||||
#define PRINT_PERCENT_DONE_INIT 0xff
|
||||
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || card.paused || mmu_print_saved)
|
||||
#define PRINTER_ACTIVE (IS_SD_PRINTING || is_usb_printing || isPrintPaused || (custom_message_type == CustomMsg::TempCal) || saved_printing || (lcd_commands_type == LcdCommands::Layer1Cal) || mmu_print_saved)
|
||||
|
||||
//! Beware - mcode_in_progress is set as soon as the command gets really processed,
|
||||
//! which is not the same as posting the M600 command into the command queue
|
||||
|
@ -446,9 +444,8 @@ void setup_uvlo_interrupt();
|
|||
void setup_fan_interrupt();
|
||||
#endif
|
||||
|
||||
//extern void recover_machine_state_after_power_panic();
|
||||
extern void recover_machine_state_after_power_panic(bool bTiny);
|
||||
extern void restore_print_from_eeprom();
|
||||
extern bool recover_machine_state_after_power_panic();
|
||||
extern void restore_print_from_eeprom(bool mbl_was_active);
|
||||
extern void position_menu();
|
||||
|
||||
extern void print_world_coordinates();
|
||||
|
@ -457,6 +454,7 @@ extern void print_mesh_bed_leveling_table();
|
|||
|
||||
extern void stop_and_save_print_to_ram(float z_move, float e_move);
|
||||
extern void restore_print_from_ram_and_continue(float e_move);
|
||||
extern void cancel_saved_printing();
|
||||
|
||||
|
||||
//estimated time to end of the print
|
||||
|
@ -513,4 +511,6 @@ void M600_wait_for_user(float HotendTempBckp);
|
|||
void M600_check_state(float nozzle_temp);
|
||||
void load_filament_final_feed();
|
||||
void marlin_wait_for_click();
|
||||
void marlin_rise_z(void);
|
||||
void raise_z_above(float target, bool plan=true);
|
||||
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -319,6 +319,22 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
|
|||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
// send 0xFF until 0xFF received to give card some clock cycles
|
||||
t0 = (uint16_t)_millis();
|
||||
SERIAL_ECHOLNRPGM(PSTR("Sending 0xFF"));
|
||||
spiSend(0XFF);
|
||||
while ((status_ = spiRec()) != 0xFF)
|
||||
{
|
||||
spiSend(0XFF);
|
||||
if (((uint16_t)_millis() - t0) > SD_CARD_ERROR_FF_TIMEOUT)
|
||||
{
|
||||
error(SD_CARD_ERROR_CMD8);
|
||||
SERIAL_ECHOLNRPGM(PSTR("No 0xFF received"));
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
// check SD version
|
||||
if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) {
|
||||
type(SD_CARD_TYPE_SD1);
|
||||
|
|
|
@ -105,6 +105,8 @@ uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18;
|
|||
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19;
|
||||
/** crc check error */
|
||||
uint8_t const SD_CARD_ERROR_CRC = 0X20;
|
||||
/** no response to sent 0xFF */
|
||||
uint8_t const SD_CARD_ERROR_FF_TIMEOUT = 0X21;
|
||||
|
||||
/** Toshiba FlashAir: iSDIO */
|
||||
uint8_t const SD_CARD_ERROR_CMD48 = 0x80;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <stdio.h>
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include "pins.h"
|
||||
|
||||
uint8_t adc_state;
|
||||
uint8_t adc_count;
|
||||
|
@ -24,8 +25,8 @@ void adc_init(void)
|
|||
ADMUX |= (1 << REFS0);
|
||||
ADCSRA |= (1 << ADEN);
|
||||
// ADCSRA |= (1 << ADIF) | (1 << ADSC);
|
||||
DIDR0 = (ADC_CHAN_MSK & 0xff);
|
||||
DIDR2 = (ADC_CHAN_MSK >> 8);
|
||||
DIDR0 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) & 0xff);
|
||||
DIDR2 = ((ADC_CHAN_MSK & ADC_DIDR_MSK) >> 8);
|
||||
adc_reset();
|
||||
// adc_sim_mask = 0b0101;
|
||||
// adc_sim_mask = 0b100101;
|
||||
|
|
120
Firmware/backlight.cpp
Normal file
120
Firmware/backlight.cpp
Normal file
|
@ -0,0 +1,120 @@
|
|||
//backlight.cpp
|
||||
|
||||
#include "backlight.h"
|
||||
#include <avr/eeprom.h>
|
||||
#include <Arduino.h>
|
||||
#include "eeprom.h"
|
||||
#include "Marlin.h"
|
||||
#include "pins.h"
|
||||
#include "fastio.h"
|
||||
#include "Timer.h"
|
||||
|
||||
#ifdef LCD_BL_PIN
|
||||
|
||||
#define BL_FLASH_DELAY_MS 25
|
||||
|
||||
bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user
|
||||
int16_t backlightLevel_HIGH = 0;
|
||||
int16_t backlightLevel_LOW = 0;
|
||||
uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT;
|
||||
int16_t backlightTimer_period = 10;
|
||||
LongTimer backlightTimer;
|
||||
|
||||
static void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions.
|
||||
{
|
||||
if (!backlightSupport) return;
|
||||
backlightTimer.start();
|
||||
backlight_update();
|
||||
}
|
||||
|
||||
void force_bl_on(bool section_start)
|
||||
{
|
||||
if (section_start)
|
||||
{
|
||||
backlightMode = BACKLIGHT_MODE_BRIGHT;
|
||||
if (backlightLevel_HIGH < 30) backlightLevel_HIGH = 30;
|
||||
}
|
||||
else
|
||||
{
|
||||
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
|
||||
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
|
||||
}
|
||||
backlight_update();
|
||||
}
|
||||
|
||||
void backlight_wake(const uint8_t flashNo)
|
||||
{
|
||||
if (!backlightSupport) return;
|
||||
|
||||
if (flashNo)
|
||||
{
|
||||
uint8_t backlightMode_bck = backlightMode;
|
||||
for (uint8_t i = 0; i < (((backlightMode_bck == BACKLIGHT_MODE_AUTO) && !backlightTimer.running()) + (flashNo * 2)); i++)
|
||||
{
|
||||
backlightMode = !backlightMode; //toggles between BACKLIGHT_MODE_BRIGHT and BACKLIGHT_MODE_DIM
|
||||
backlight_update();
|
||||
_delay(BL_FLASH_DELAY_MS);
|
||||
}
|
||||
backlightMode = backlightMode_bck;
|
||||
}
|
||||
backlightTimer_reset();
|
||||
}
|
||||
|
||||
void backlight_save() //saves all backlight data to eeprom.
|
||||
{
|
||||
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH);
|
||||
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW);
|
||||
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode);
|
||||
eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period);
|
||||
}
|
||||
|
||||
void backlight_update()
|
||||
{
|
||||
if (!backlightSupport) return;
|
||||
|
||||
if (backlightMode == BACKLIGHT_MODE_AUTO)
|
||||
{
|
||||
if (backlightTimer.expired((uint32_t)backlightTimer_period * 1000ul)) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
|
||||
else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
|
||||
else {/*do nothing*/;} //display is dimmed.
|
||||
}
|
||||
else if (backlightMode == BACKLIGHT_MODE_DIM) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
|
||||
else analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
|
||||
}
|
||||
|
||||
void backlight_init()
|
||||
{
|
||||
//check for backlight support on lcd
|
||||
SET_INPUT(LCD_BL_PIN);
|
||||
WRITE(LCD_BL_PIN,HIGH);
|
||||
_delay(10);
|
||||
backlightSupport = !READ(LCD_BL_PIN);
|
||||
if (!backlightSupport) return;
|
||||
|
||||
//initialize backlight
|
||||
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
|
||||
if (backlightMode == 0xFF) //set default values
|
||||
{
|
||||
backlightMode = BACKLIGHT_MODE_AUTO;
|
||||
backlightLevel_HIGH = 130;
|
||||
backlightLevel_LOW = 50;
|
||||
backlightTimer_period = 10; //in seconds
|
||||
backlight_save();
|
||||
}
|
||||
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
|
||||
backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW);
|
||||
backlightTimer_period = eeprom_read_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT);
|
||||
|
||||
SET_OUTPUT(LCD_BL_PIN);
|
||||
backlightTimer_reset();
|
||||
}
|
||||
|
||||
#else //LCD_BL_PIN
|
||||
|
||||
void force_bl_on(__attribute__((unused)) bool section_start) {}
|
||||
void backlight_update() {}
|
||||
void backlight_init() {}
|
||||
void backlight_save() {}
|
||||
void backlight_wake(__attribute__((unused)) const uint8_t flashNo) {}
|
||||
|
||||
#endif //LCD_BL_PIN
|
32
Firmware/backlight.h
Normal file
32
Firmware/backlight.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
//backlight.h
|
||||
#ifndef _BACKLIGHT_H
|
||||
#define _BACKLIGHT_H
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "Marlin.h"
|
||||
#include "pins.h"
|
||||
|
||||
enum Backlight_Mode
|
||||
{
|
||||
BACKLIGHT_MODE_DIM = 0,
|
||||
BACKLIGHT_MODE_BRIGHT = 1,
|
||||
BACKLIGHT_MODE_AUTO = 2,
|
||||
};
|
||||
|
||||
extern int16_t backlightLevel_HIGH;
|
||||
extern int16_t backlightLevel_LOW;
|
||||
extern uint8_t backlightMode;
|
||||
extern bool backlightSupport;
|
||||
extern int16_t backlightTimer_period;
|
||||
|
||||
#define FORCE_BL_ON_START force_bl_on(true)
|
||||
#define FORCE_BL_ON_END force_bl_on(false)
|
||||
|
||||
extern void force_bl_on(bool section_start);
|
||||
extern void backlight_update();
|
||||
extern void backlight_init();
|
||||
extern void backlight_save();
|
||||
extern void backlight_wake(const uint8_t flashNo = 0);
|
||||
|
||||
|
||||
#endif //_BACKLIGHT_H
|
|
@ -25,7 +25,6 @@ CardReader::CardReader()
|
|||
sdpos = 0;
|
||||
sdprinting = false;
|
||||
cardOK = false;
|
||||
paused = false;
|
||||
saving = false;
|
||||
logging = false;
|
||||
autostart_atmillis=0;
|
||||
|
@ -242,24 +241,13 @@ void CardReader::startFileprint()
|
|||
if(cardOK)
|
||||
{
|
||||
sdprinting = true;
|
||||
paused = false;
|
||||
Stopped = false;
|
||||
Stopped = false;
|
||||
#ifdef SDCARD_SORT_ALPHA
|
||||
//flush_presort();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void CardReader::pauseSDPrint()
|
||||
{
|
||||
if(sdprinting)
|
||||
{
|
||||
sdprinting = false;
|
||||
paused = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CardReader::openLogFile(const char* name)
|
||||
{
|
||||
logging = true;
|
||||
|
@ -371,10 +359,10 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
|
|||
{
|
||||
if((int)file_subcall_ctr>(int)SD_PROCEDURE_DEPTH-1)
|
||||
{
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
|
||||
SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
|
||||
kill("", 1);
|
||||
// SERIAL_ERROR_START;
|
||||
// SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
|
||||
// SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
|
||||
kill(_n("trying to call sub-gcode files with too many levels."), 1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -408,9 +396,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
|
|||
SERIAL_ECHOLN(name);
|
||||
}
|
||||
sdprinting = false;
|
||||
paused = false;
|
||||
|
||||
|
||||
|
||||
SdFile myDir;
|
||||
const char *fname=name;
|
||||
diveSubfolder(fname,myDir);
|
||||
|
@ -492,24 +478,27 @@ uint32_t CardReader::getFileSize()
|
|||
|
||||
void CardReader::getStatus()
|
||||
{
|
||||
if(sdprinting){
|
||||
SERIAL_PROTOCOL(longFilename);
|
||||
SERIAL_PROTOCOLPGM("\n");
|
||||
SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
|
||||
SERIAL_PROTOCOL(sdpos);
|
||||
SERIAL_PROTOCOLPGM("/");
|
||||
SERIAL_PROTOCOLLN(filesize);
|
||||
uint16_t time = _millis()/60000 - starttime/60000;
|
||||
SERIAL_PROTOCOL(itostr2(time/60));
|
||||
SERIAL_PROTOCOL(':');
|
||||
SERIAL_PROTOCOL(itostr2(time%60));
|
||||
SERIAL_PROTOCOLPGM("\n");
|
||||
}
|
||||
else if (paused) {
|
||||
SERIAL_PROTOCOLLNPGM("SD print paused");
|
||||
}
|
||||
else if (saved_printing) {
|
||||
SERIAL_PROTOCOLLNPGM("Print saved");
|
||||
if(sdprinting)
|
||||
{
|
||||
if (isPrintPaused) {
|
||||
SERIAL_PROTOCOLLNPGM("SD print paused");
|
||||
}
|
||||
else if (saved_printing) {
|
||||
SERIAL_PROTOCOLLNPGM("Print saved");
|
||||
}
|
||||
else {
|
||||
SERIAL_PROTOCOL(longFilename);
|
||||
SERIAL_PROTOCOLPGM("\n");
|
||||
SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
|
||||
SERIAL_PROTOCOL(sdpos);
|
||||
SERIAL_PROTOCOLPGM("/");
|
||||
SERIAL_PROTOCOLLN(filesize);
|
||||
uint16_t time = _millis()/60000 - starttime/60000;
|
||||
SERIAL_PROTOCOL(itostr2(time/60));
|
||||
SERIAL_PROTOCOL(':');
|
||||
SERIAL_PROTOCOL(itostr2(time%60));
|
||||
SERIAL_PROTOCOLPGM("\n");
|
||||
}
|
||||
}
|
||||
else {
|
||||
SERIAL_PROTOCOLLNPGM("Not SD printing");
|
||||
|
|
|
@ -25,7 +25,6 @@ public:
|
|||
void closefile(bool store_location=false);
|
||||
void release();
|
||||
void startFileprint();
|
||||
void pauseSDPrint();
|
||||
uint32_t getFileSize();
|
||||
void getStatus();
|
||||
void printingHasFinished();
|
||||
|
@ -75,7 +74,6 @@ public:
|
|||
bool logging;
|
||||
bool sdprinting ;
|
||||
bool cardOK ;
|
||||
bool paused ;
|
||||
char filename[13];
|
||||
uint16_t modificationTime, modificationDate;
|
||||
uint32_t cluster, position;
|
||||
|
|
|
@ -500,7 +500,7 @@ void get_command()
|
|||
|
||||
//If command was e-stop process now
|
||||
if(strcmp(cmdbuffer+bufindw+CMDHDRSIZE, "M112") == 0)
|
||||
kill("", 2);
|
||||
kill(MSG_M112_KILL, 2);
|
||||
|
||||
// Store the current line into buffer, move to the next line.
|
||||
// Store type of entry
|
||||
|
@ -582,30 +582,8 @@ void get_command()
|
|||
((serial_char == '#' || serial_char == ':') && comment_mode == false) ||
|
||||
serial_count >= (MAX_CMD_SIZE - 1) || n==-1)
|
||||
{
|
||||
if(card.eof()){
|
||||
SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
|
||||
stoptime=_millis();
|
||||
char time[30];
|
||||
unsigned long t=(stoptime-starttime-pause_time)/1000;
|
||||
pause_time = 0;
|
||||
int hours, minutes;
|
||||
minutes=(t/60)%60;
|
||||
hours=t/60/60;
|
||||
save_statistics(total_filament_used, t);
|
||||
sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLN(time);
|
||||
lcd_setstatus(time);
|
||||
card.printingHasFinished();
|
||||
card.checkautostart(true);
|
||||
if(card.eof()) break;
|
||||
|
||||
if (farm_mode)
|
||||
{
|
||||
prusa_statistics(6);
|
||||
lcd_commands_type = LcdCommands::FarmModeConfirm;
|
||||
}
|
||||
|
||||
}
|
||||
if(serial_char=='#')
|
||||
stop_buffering=true;
|
||||
|
||||
|
@ -663,6 +641,37 @@ void get_command()
|
|||
else if(!comment_mode) cmdbuffer[bufindw+CMDHDRSIZE+serial_count++] = serial_char;
|
||||
}
|
||||
}
|
||||
if(card.eof())
|
||||
{
|
||||
// file was fully buffered, but commands might still need to be planned!
|
||||
// do *not* clear sdprinting until all SD commands are consumed to ensure
|
||||
// SD state can be resumed from a saved printing state. sdprinting is only
|
||||
// cleared by printingHasFinished after peforming all remaining moves.
|
||||
if(!cmdqueue_calc_sd_length())
|
||||
{
|
||||
SERIAL_PROTOCOLLNRPGM(_n("Done printing file"));////MSG_FILE_PRINTED
|
||||
stoptime=_millis();
|
||||
char time[30];
|
||||
unsigned long t=(stoptime-starttime-pause_time)/1000;
|
||||
pause_time = 0;
|
||||
int hours, minutes;
|
||||
minutes=(t/60)%60;
|
||||
hours=t/60/60;
|
||||
save_statistics(total_filament_used, t);
|
||||
sprintf_P(time, PSTR("%i hours %i minutes"),hours, minutes);
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLN(time);
|
||||
lcd_setstatus(time);
|
||||
card.printingHasFinished();
|
||||
card.checkautostart(true);
|
||||
|
||||
if (farm_mode)
|
||||
{
|
||||
prusa_statistics(6);
|
||||
lcd_commands_type = LcdCommands::FarmModeConfirm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif //SDSUPPORT
|
||||
}
|
||||
|
|
|
@ -2,9 +2,21 @@
|
|||
#define _CONFIG_H
|
||||
|
||||
|
||||
#include "Configuration_prusa.h"
|
||||
#include "pins.h"
|
||||
|
||||
#define IR_SENSOR_ANALOG (defined(VOLT_IR_PIN) && defined(IR_SENSOR))
|
||||
|
||||
//ADC configuration
|
||||
#if !IR_SENSOR_ANALOG
|
||||
#define ADC_CHAN_MSK 0b0000001001011111 //used AD channels bit mask (0,1,2,3,4,6,9)
|
||||
#define ADC_DIDR_MSK 0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
|
||||
#define ADC_CHAN_CNT 7 //number of used channels)
|
||||
#else //!IR_SENSOR_ANALOG
|
||||
#define ADC_CHAN_MSK 0b0000001101011111 //used AD channels bit mask (0,1,2,3,4,6,8,9)
|
||||
#define ADC_DIDR_MSK 0b0000001001011111 //AD channels DIDR mask (1 ~ disabled digital input)
|
||||
#define ADC_CHAN_CNT 8 //number of used channels)
|
||||
#endif //!IR_SENSOR_ANALOG
|
||||
#define ADC_OVRSAMPL 16 //oversampling multiplier
|
||||
#define ADC_CALLBACK adc_ready //callback function ()
|
||||
|
||||
|
@ -42,11 +54,8 @@
|
|||
#define W25X20CL_SPCR SPI_SPCR(W25X20CL_SPI_RATE, 1, 1, 1, 0)
|
||||
#define W25X20CL_SPSR SPI_SPSR(W25X20CL_SPI_RATE)
|
||||
|
||||
#include "boards.h"
|
||||
#include "Configuration_prusa.h"
|
||||
|
||||
//LANG - Multi-language support
|
||||
//#define LANG_MODE 0 // primary language only
|
||||
//define LANG_MODE 0 // primary language only
|
||||
#define LANG_MODE 1 // sec. language support
|
||||
|
||||
#define LANG_SIZE_RESERVED 0x3000 // reserved space for secondary language (12288 bytes)
|
||||
|
|
|
@ -72,14 +72,14 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_FILENAME (EEPROM_UVLO_CURRENT_POSITION - 8) //8chars to store filename without extension
|
||||
#define EEPROM_FILE_POSITION (EEPROM_FILENAME - 4) //32 bit for uint32_t file position
|
||||
#define EEPROM_UVLO_CURRENT_POSITION_Z (EEPROM_FILE_POSITION - 4) //float for current position in Z
|
||||
#define EEPROM_UVLO_TARGET_HOTEND (EEPROM_UVLO_CURRENT_POSITION_Z - 1)
|
||||
#define EEPROM_UVLO_TARGET_BED (EEPROM_UVLO_TARGET_HOTEND - 1)
|
||||
#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2)
|
||||
#define EEPROM_UVLO_UNUSED_001 (EEPROM_UVLO_CURRENT_POSITION_Z - 1) // uint8_t (unused)
|
||||
#define EEPROM_UVLO_TARGET_BED (EEPROM_UVLO_UNUSED_001 - 1)
|
||||
#define EEPROM_UVLO_FEEDRATE (EEPROM_UVLO_TARGET_BED - 2) //uint16_t
|
||||
#define EEPROM_UVLO_FAN_SPEED (EEPROM_UVLO_FEEDRATE - 1)
|
||||
#define EEPROM_FAN_CHECK_ENABLED (EEPROM_UVLO_FAN_SPEED - 1)
|
||||
#define EEPROM_UVLO_MESH_BED_LEVELING (EEPROM_FAN_CHECK_ENABLED - 9*2)
|
||||
|
||||
#define EEPROM_UVLO_Z_MICROSTEPS (EEPROM_UVLO_MESH_BED_LEVELING - 2)
|
||||
#define EEPROM_UVLO_Z_MICROSTEPS (EEPROM_UVLO_MESH_BED_LEVELING - 2) // uint16_t (could be removed)
|
||||
#define EEPROM_UVLO_E_ABS (EEPROM_UVLO_Z_MICROSTEPS - 1)
|
||||
#define EEPROM_UVLO_CURRENT_POSITION_E (EEPROM_UVLO_E_ABS - 4) //float for current position in E
|
||||
|
||||
|
@ -165,13 +165,11 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_EXTRUDER_MULTIPLIER_2 (EEPROM_EXTRUDER_MULTIPLIER_1 - 4) //float
|
||||
#define EEPROM_EXTRUDEMULTIPLY (EEPROM_EXTRUDER_MULTIPLIER_2 - 2) // uint16
|
||||
|
||||
//
|
||||
#define EEPROM_UVLO_TINY_CURRENT_POSITION_Z (EEPROM_EXTRUDEMULTIPLY-4) // float
|
||||
#define EEPROM_UVLO_TINY_Z_MICROSTEPS (EEPROM_UVLO_TINY_CURRENT_POSITION_Z-2) // uint16
|
||||
#define EEPROM_UVLO_TARGET_HOTEND (EEPROM_UVLO_TINY_CURRENT_POSITION_Z-2) // uint16
|
||||
|
||||
// Sound Mode
|
||||
//#define EEPROM_SOUND_MODE (EEPROM_EXTRUDEMULTIPLY-1) // uint8
|
||||
#define EEPROM_SOUND_MODE (EEPROM_UVLO_TINY_Z_MICROSTEPS-1) // uint8
|
||||
#define EEPROM_SOUND_MODE (EEPROM_UVLO_TARGET_HOTEND-1) // uint8
|
||||
#define EEPROM_AUTO_DEPLETE (EEPROM_SOUND_MODE-1) //bool
|
||||
|
||||
#define EEPROM_FSENS_OQ_MEASS_ENABLED (EEPROM_AUTO_DEPLETE - 1) //bool
|
||||
|
@ -201,9 +199,21 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
|
|||
#define EEPROM_SHEETS_BASE (EEPROM_CHECK_GCODE - EEPROM_SHEETS_SIZEOF) // Sheets
|
||||
static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
|
||||
|
||||
#define EEPROM_FSENSOR_PCB (EEPROM_SHEETS_BASE-1) // uint8
|
||||
#define EEPROM_FSENSOR_ACTION_NA (EEPROM_FSENSOR_PCB-1) // uint8
|
||||
|
||||
#define EEPROM_UVLO_SAVED_TARGET (EEPROM_FSENSOR_ACTION_NA - 4*4) // 4 x float for saved target for all axes
|
||||
#define EEPROM_UVLO_FEEDMULTIPLY (EEPROM_UVLO_SAVED_TARGET - 2) // uint16_t for feedmultiply
|
||||
|
||||
#define EEPROM_BACKLIGHT_LEVEL_HIGH (EEPROM_UVLO_FEEDMULTIPLY-1) // uint8
|
||||
#define EEPROM_BACKLIGHT_LEVEL_LOW (EEPROM_BACKLIGHT_LEVEL_HIGH-1) // uint8
|
||||
#define EEPROM_BACKLIGHT_MODE (EEPROM_BACKLIGHT_LEVEL_LOW-1) // uint8
|
||||
#define EEPROM_BACKLIGHT_TIMEOUT (EEPROM_BACKLIGHT_MODE-2) // uint16
|
||||
|
||||
#define EEPROM_UVLO_LA_K (EEPROM_BACKLIGHT_TIMEOUT-4) // float
|
||||
|
||||
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
|
||||
#define EEPROM_LAST_ITEM EEPROM_SHEETS_BASE
|
||||
#define EEPROM_LAST_ITEM EEPROM_UVLO_LA_K
|
||||
// !!!!!
|
||||
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
|
||||
// !!!!!
|
||||
|
|
|
@ -6,15 +6,16 @@
|
|||
#include <avr/pgmspace.h>
|
||||
#include "pat9125.h"
|
||||
#include "stepper.h"
|
||||
#include "planner.h"
|
||||
#include "fastio.h"
|
||||
#include "io_atmega2560.h"
|
||||
#include "cmdqueue.h"
|
||||
#include "ultralcd.h"
|
||||
#include "ConfigurationStore.h"
|
||||
#include "mmu.h"
|
||||
#include "cardreader.h"
|
||||
|
||||
#include "adc.h"
|
||||
#include "temperature.h"
|
||||
#include "config.h"
|
||||
|
||||
//! @name Basic parameters
|
||||
//! @{
|
||||
#define FSENSOR_CHUNK_LEN 0.64F //!< filament sensor chunk length 0.64mm
|
||||
|
@ -53,15 +54,8 @@ bool fsensor_enabled = true;
|
|||
bool fsensor_watch_runout = true;
|
||||
//! not responding - is set if any communication error occurred during initialization or readout
|
||||
bool fsensor_not_responding = false;
|
||||
//! printing saved
|
||||
bool fsensor_printing_saved = false;
|
||||
//! enable/disable quality meassurement
|
||||
bool fsensor_oq_meassure_enabled = false;
|
||||
//! as explained in the CHECK_FSENSOR macro: this flag is set to true when fsensor posts
|
||||
//! the M600 into the command queue, which elliminates the hazard of having posted multiple M600's
|
||||
//! before the first one gets read and started processing.
|
||||
//! Btw., the IR fsensor could do up to 6 posts before the command queue managed to start processing the first M600 ;)
|
||||
static bool fsensor_m600_enqueued = false;
|
||||
|
||||
//! number of errors, updated in ISR
|
||||
uint8_t fsensor_err_cnt = 0;
|
||||
|
@ -117,29 +111,46 @@ int16_t fsensor_oq_yd_max;
|
|||
uint16_t fsensor_oq_sh_sum;
|
||||
//! @}
|
||||
|
||||
#if IR_SENSOR_ANALOG
|
||||
ClFsensorPCB oFsensorPCB;
|
||||
ClFsensorActionNA oFsensorActionNA;
|
||||
bool bIRsensorStateFlag=false;
|
||||
unsigned long nIRsensorLastTime;
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
||||
void fsensor_stop_and_save_print(void)
|
||||
{
|
||||
printf_P(PSTR("fsensor_stop_and_save_print\n"));
|
||||
stop_and_save_print_to_ram(0, 0); //XYZE - no change
|
||||
stop_and_save_print_to_ram(0, 0);
|
||||
fsensor_watch_runout = false;
|
||||
}
|
||||
|
||||
void fsensor_restore_print_and_continue(void)
|
||||
{
|
||||
printf_P(PSTR("fsensor_restore_print_and_continue\n"));
|
||||
fsensor_watch_runout = true;
|
||||
fsensor_watch_runout = true;
|
||||
fsensor_err_cnt = 0;
|
||||
fsensor_m600_enqueued = false;
|
||||
restore_print_from_ram_and_continue(0); //XYZ = orig, E - no change
|
||||
restore_print_from_ram_and_continue(0);
|
||||
}
|
||||
|
||||
// fsensor_checkpoint_print cuts the current print job at the current position,
|
||||
// allowing new instructions to be inserted in the middle
|
||||
void fsensor_checkpoint_print(void)
|
||||
{
|
||||
printf_P(PSTR("fsensor_checkpoint_print\n"));
|
||||
stop_and_save_print_to_ram(0, 0);
|
||||
restore_print_from_ram_and_continue(0);
|
||||
}
|
||||
|
||||
void fsensor_init(void)
|
||||
{
|
||||
#ifdef PAT9125
|
||||
uint8_t pat9125 = pat9125_init();
|
||||
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
|
||||
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
|
||||
#endif //PAT9125
|
||||
uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
|
||||
fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
|
||||
fsensor_not_responding = false;
|
||||
#ifdef PAT9125
|
||||
uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED);
|
||||
fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
|
||||
|
@ -150,19 +161,27 @@ void fsensor_init(void)
|
|||
fsensor = 0; //disable sensor
|
||||
fsensor_not_responding = true;
|
||||
}
|
||||
else
|
||||
fsensor_not_responding = false;
|
||||
#endif //PAT9125
|
||||
#if IR_SENSOR_ANALOG
|
||||
bIRsensorStateFlag=false;
|
||||
oFsensorPCB=(ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
|
||||
oFsensorActionNA=(ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
if (fsensor)
|
||||
fsensor_enable();
|
||||
fsensor_enable(false); // (in this case) EEPROM update is not necessary
|
||||
else
|
||||
fsensor_disable();
|
||||
printf_P(PSTR("FSensor %S\n"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED\n")));
|
||||
fsensor_disable(false); // (in this case) EEPROM update is not necessary
|
||||
printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
|
||||
#if IR_SENSOR_ANALOG
|
||||
printf_P(PSTR(" (sensor board revision: %S)\n"),(oFsensorPCB==ClFsensorPCB::_Rev03b)?PSTR("03b or newer"):PSTR("03 or older"));
|
||||
#else //IR_SENSOR_ANALOG
|
||||
printf_P(PSTR("\n"));
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
if (check_for_ir_sensor()) ir_sensor_detected = true;
|
||||
|
||||
}
|
||||
|
||||
bool fsensor_enable(void)
|
||||
bool fsensor_enable(bool bUpdateEEPROM)
|
||||
{
|
||||
#ifdef PAT9125
|
||||
if (mmu_enabled == false) { //filament sensor is pat9125, enable only if it is working
|
||||
|
@ -187,18 +206,34 @@ bool fsensor_enable(void)
|
|||
FSensorStateMenu = 1;
|
||||
}
|
||||
#else // PAT9125
|
||||
fsensor_enabled = true;
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x01);
|
||||
FSensorStateMenu = 1;
|
||||
#endif // PAT9125
|
||||
#if IR_SENSOR_ANALOG
|
||||
if(!fsensor_IR_check())
|
||||
{
|
||||
bUpdateEEPROM=true;
|
||||
fsensor_enabled=false;
|
||||
fsensor_not_responding=true;
|
||||
FSensorStateMenu=0;
|
||||
}
|
||||
else {
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
fsensor_enabled=true;
|
||||
fsensor_not_responding=false;
|
||||
FSensorStateMenu=1;
|
||||
#if IR_SENSOR_ANALOG
|
||||
}
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
if(bUpdateEEPROM)
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, FSensorStateMenu);
|
||||
#endif //PAT9125
|
||||
return fsensor_enabled;
|
||||
}
|
||||
|
||||
void fsensor_disable(void)
|
||||
{
|
||||
void fsensor_disable(bool bUpdateEEPROM)
|
||||
{
|
||||
fsensor_enabled = false;
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00);
|
||||
FSensorStateMenu = 0;
|
||||
if(bUpdateEEPROM)
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FSENSOR, 0x00);
|
||||
}
|
||||
|
||||
void fsensor_autoload_set(bool State)
|
||||
|
@ -225,7 +260,7 @@ void fsensor_autoload_check_start(void)
|
|||
if (!fsensor_enabled) return;
|
||||
if (!fsensor_autoload_enabled) return;
|
||||
if (fsensor_watch_autoload) return;
|
||||
if (!pat9125_update_y()) //update sensor
|
||||
if (!pat9125_update()) //update sensor
|
||||
{
|
||||
fsensor_disable();
|
||||
fsensor_not_responding = true;
|
||||
|
@ -343,7 +378,6 @@ void fsensor_oq_meassure_start(uint8_t skip)
|
|||
fsensor_oq_sh_sum = 0;
|
||||
pat9125_update();
|
||||
pat9125_y = 0;
|
||||
fsensor_watch_runout = false;
|
||||
fsensor_oq_meassure = true;
|
||||
}
|
||||
|
||||
|
@ -355,7 +389,6 @@ void fsensor_oq_meassure_stop(void)
|
|||
printf_P(_N(" st_sum=%u yd_sum=%u er_sum=%u er_max=%hhu\n"), fsensor_oq_st_sum, fsensor_oq_yd_sum, fsensor_oq_er_sum, fsensor_oq_er_max);
|
||||
printf_P(_N(" yd_min=%u yd_max=%u yd_avg=%u sh_avg=%u\n"), fsensor_oq_yd_min, fsensor_oq_yd_max, (uint16_t)((uint32_t)fsensor_oq_yd_sum * fsensor_chunk_len / fsensor_oq_st_sum), (uint16_t)(fsensor_oq_sh_sum / fsensor_oq_samples));
|
||||
fsensor_oq_meassure = false;
|
||||
fsensor_watch_runout = true;
|
||||
fsensor_err_cnt = 0;
|
||||
}
|
||||
|
||||
|
@ -498,23 +531,11 @@ void fsensor_setup_interrupt(void)
|
|||
|
||||
#endif //PAT9125
|
||||
|
||||
void fsensor_st_block_begin(block_t* bl)
|
||||
void fsensor_st_block_chunk(int cnt)
|
||||
{
|
||||
if (!fsensor_enabled) return;
|
||||
if (((fsensor_st_cnt > 0) && (bl->direction_bits & 0x8)) ||
|
||||
((fsensor_st_cnt < 0) && !(bl->direction_bits & 0x8)))
|
||||
{
|
||||
// !!! bit toggling (PINxn <- 1) (for PinChangeInterrupt) does not work for some MCU pins
|
||||
if (PIN_GET(FSENSOR_INT_PIN)) {PIN_VAL(FSENSOR_INT_PIN, LOW);}
|
||||
else {PIN_VAL(FSENSOR_INT_PIN, HIGH);}
|
||||
}
|
||||
}
|
||||
|
||||
void fsensor_st_block_chunk(block_t* bl, int cnt)
|
||||
{
|
||||
if (!fsensor_enabled) return;
|
||||
fsensor_st_cnt += (bl->direction_bits & 0x8)?-cnt:cnt;
|
||||
if ((fsensor_st_cnt >= fsensor_chunk_len) || (fsensor_st_cnt <= -fsensor_chunk_len))
|
||||
fsensor_st_cnt += cnt;
|
||||
if (abs(fsensor_st_cnt) >= fsensor_chunk_len)
|
||||
{
|
||||
// !!! bit toggling (PINxn <- 1) (for PinChangeInterrupt) does not work for some MCU pins
|
||||
if (PIN_GET(FSENSOR_INT_PIN)) {PIN_VAL(FSENSOR_INT_PIN, LOW);}
|
||||
|
@ -529,8 +550,6 @@ void fsensor_enque_M600(){
|
|||
printf_P(PSTR("fsensor_update - M600\n"));
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1);
|
||||
eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1);
|
||||
enquecommand_front_P(PSTR("PRUSA fsensor_recover"));
|
||||
fsensor_m600_enqueued = true;
|
||||
enquecommand_front_P((PSTR("M600")));
|
||||
}
|
||||
|
||||
|
@ -542,29 +561,31 @@ void fsensor_enque_M600(){
|
|||
void fsensor_update(void)
|
||||
{
|
||||
#ifdef PAT9125
|
||||
if (fsensor_enabled && fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX) && ( ! fsensor_m600_enqueued) )
|
||||
if (fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX))
|
||||
{
|
||||
fsensor_stop_and_save_print();
|
||||
KEEPALIVE_STATE(IN_HANDLER);
|
||||
|
||||
bool autoload_enabled_tmp = fsensor_autoload_enabled;
|
||||
fsensor_autoload_enabled = false;
|
||||
bool oq_meassure_enabled_tmp = fsensor_oq_meassure_enabled;
|
||||
fsensor_oq_meassure_enabled = true;
|
||||
|
||||
fsensor_stop_and_save_print();
|
||||
// move the nozzle away while checking the filament
|
||||
current_position[Z_AXIS] += 0.8;
|
||||
if(current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
|
||||
plan_buffer_line_curposXYZE(max_feedrate[Z_AXIS], active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
// check the filament in isolation
|
||||
fsensor_err_cnt = 0;
|
||||
fsensor_oq_meassure_start(0);
|
||||
|
||||
enquecommand_front_P((PSTR("G1 E-3 F200")));
|
||||
process_commands();
|
||||
KEEPALIVE_STATE(IN_HANDLER);
|
||||
cmdqueue_pop_front();
|
||||
st_synchronize();
|
||||
|
||||
enquecommand_front_P((PSTR("G1 E3 F200")));
|
||||
process_commands();
|
||||
KEEPALIVE_STATE(IN_HANDLER);
|
||||
cmdqueue_pop_front();
|
||||
st_synchronize();
|
||||
float e_tmp = current_position[E_AXIS];
|
||||
current_position[E_AXIS] -= 3;
|
||||
plan_buffer_line_curposXYZE(200/60, active_extruder);
|
||||
current_position[E_AXIS] = e_tmp;
|
||||
plan_buffer_line_curposXYZE(200/60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
uint8_t err_cnt = fsensor_err_cnt;
|
||||
fsensor_oq_meassure_stop();
|
||||
|
@ -575,24 +596,86 @@ void fsensor_update(void)
|
|||
err |= (fsensor_oq_er_sum > 2);
|
||||
err |= (fsensor_oq_yd_sum < (4 * FSENSOR_OQ_MIN_YD));
|
||||
|
||||
if (!err)
|
||||
{
|
||||
printf_P(PSTR("fsensor_err_cnt = 0\n"));
|
||||
fsensor_restore_print_and_continue();
|
||||
}
|
||||
else
|
||||
{
|
||||
fsensor_enque_M600();
|
||||
fsensor_watch_runout = false;
|
||||
}
|
||||
fsensor_restore_print_and_continue();
|
||||
fsensor_autoload_enabled = autoload_enabled_tmp;
|
||||
fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
|
||||
|
||||
if (!err)
|
||||
printf_P(PSTR("fsensor_err_cnt = 0\n"));
|
||||
else
|
||||
fsensor_enque_M600();
|
||||
}
|
||||
#else //PAT9125
|
||||
if ((digitalRead(IR_SENSOR_PIN) == 1) && CHECK_FSENSOR && fsensor_enabled && ir_sensor_detected && ( ! fsensor_m600_enqueued) )
|
||||
{
|
||||
fsensor_stop_and_save_print();
|
||||
fsensor_enque_M600();
|
||||
if (CHECK_FSENSOR && ir_sensor_detected)
|
||||
{
|
||||
if(digitalRead(IR_SENSOR_PIN))
|
||||
{ // IR_SENSOR_PIN ~ H
|
||||
#if IR_SENSOR_ANALOG
|
||||
if(!bIRsensorStateFlag)
|
||||
{
|
||||
bIRsensorStateFlag=true;
|
||||
nIRsensorLastTime=_millis();
|
||||
}
|
||||
else
|
||||
{
|
||||
if((_millis()-nIRsensorLastTime)>IR_SENSOR_STEADY)
|
||||
{
|
||||
uint8_t nMUX1,nMUX2;
|
||||
uint16_t nADC;
|
||||
bIRsensorStateFlag=false;
|
||||
// sequence for direct data reading from AD converter
|
||||
DISABLE_TEMPERATURE_INTERRUPT();
|
||||
nMUX1=ADMUX; // ADMUX saving
|
||||
nMUX2=ADCSRB;
|
||||
adc_setmux(VOLT_IR_PIN);
|
||||
ADCSRA|=(1<<ADSC); // first conversion after ADMUX change discarded (preventively)
|
||||
while(ADCSRA&(1<<ADSC))
|
||||
;
|
||||
ADCSRA|=(1<<ADSC); // second conversion used
|
||||
while(ADCSRA&(1<<ADSC))
|
||||
;
|
||||
nADC=ADC;
|
||||
ADMUX=nMUX1; // ADMUX restoring
|
||||
ADCSRB=nMUX2;
|
||||
ENABLE_TEMPERATURE_INTERRUPT();
|
||||
// end of sequence for ...
|
||||
if((oFsensorPCB==ClFsensorPCB::_Rev03b)&&((nADC*OVERSAMPLENR)>((int)IRsensor_Hopen_TRESHOLD)))
|
||||
{
|
||||
fsensor_disable();
|
||||
fsensor_not_responding = true;
|
||||
printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
|
||||
if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
|
||||
if(oFsensorActionNA==ClFsensorActionNA::_Pause)
|
||||
lcd_pause_print();
|
||||
}
|
||||
else
|
||||
{
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
fsensor_checkpoint_print();
|
||||
fsensor_enque_M600();
|
||||
#if IR_SENSOR_ANALOG
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // IR_SENSOR_PIN ~ L
|
||||
bIRsensorStateFlag=false;
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
}
|
||||
}
|
||||
#endif //PAT9125
|
||||
}
|
||||
|
||||
#if IR_SENSOR_ANALOG
|
||||
bool fsensor_IR_check()
|
||||
{
|
||||
uint16_t volt_IR_int;
|
||||
bool bCheckResult;
|
||||
|
||||
volt_IR_int=current_voltage_raw_IR;
|
||||
bCheckResult=(volt_IR_int<((int)IRsensor_Lmax_TRESHOLD))||(volt_IR_int>((int)IRsensor_Hmin_TRESHOLD));
|
||||
bCheckResult=bCheckResult&&(!((oFsensorPCB==ClFsensorPCB::_Rev03b)&&(volt_IR_int>((int)IRsensor_Hopen_TRESHOLD))));
|
||||
return(bCheckResult);
|
||||
}
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#define FSENSOR_H
|
||||
|
||||
#include <inttypes.h>
|
||||
#include "config.h"
|
||||
|
||||
|
||||
//! minimum meassured chunk length in steps
|
||||
|
@ -20,6 +21,8 @@ extern bool fsensor_oq_meassure_enabled;
|
|||
extern void fsensor_stop_and_save_print(void);
|
||||
//! restore print - restore position and heatup to original temperature
|
||||
extern void fsensor_restore_print_and_continue(void);
|
||||
//! split the current gcode stream to insert new instructions
|
||||
extern void fsensor_checkpoint_print(void);
|
||||
//! @}
|
||||
|
||||
//! initialize
|
||||
|
@ -27,8 +30,8 @@ extern void fsensor_init(void);
|
|||
|
||||
//! @name enable/disable
|
||||
//! @{
|
||||
extern bool fsensor_enable(void);
|
||||
extern void fsensor_disable(void);
|
||||
extern bool fsensor_enable(bool bUpdateEEPROM=true);
|
||||
extern void fsensor_disable(bool bUpdateEEPROM=true);
|
||||
//! @}
|
||||
|
||||
//autoload feature enabled
|
||||
|
@ -57,12 +60,39 @@ extern void fsensor_oq_meassure_stop(void);
|
|||
extern bool fsensor_oq_result(void);
|
||||
//! @}
|
||||
|
||||
|
||||
#include "planner.h"
|
||||
//! @name callbacks from stepper
|
||||
//! @{
|
||||
extern void fsensor_st_block_begin(block_t* bl);
|
||||
extern void fsensor_st_block_chunk(block_t* bl, int cnt);
|
||||
extern void fsensor_st_block_chunk(int cnt);
|
||||
|
||||
// There's really nothing to do in block_begin: the stepper ISR likely has
|
||||
// called us already at the end of the last block, making this integration
|
||||
// redundant. LA1.5 might not always do that during a coasting move, so attempt
|
||||
// to drain fsensor_st_cnt anyway at the beginning of the new block.
|
||||
#define fsensor_st_block_begin(rev) fsensor_st_block_chunk(0)
|
||||
//! @}
|
||||
|
||||
|
||||
#if IR_SENSOR_ANALOG
|
||||
#define IR_SENSOR_STEADY 10 // [ms]
|
||||
|
||||
enum class ClFsensorPCB:uint_least8_t
|
||||
{
|
||||
_Old=0,
|
||||
_Rev03b=1,
|
||||
_Undef=EEPROM_EMPTY_VALUE
|
||||
};
|
||||
|
||||
enum class ClFsensorActionNA:uint_least8_t
|
||||
{
|
||||
_Continue=0,
|
||||
_Pause=1,
|
||||
_Undef=EEPROM_EMPTY_VALUE
|
||||
};
|
||||
|
||||
extern ClFsensorPCB oFsensorPCB;
|
||||
extern ClFsensorActionNA oFsensorActionNA;
|
||||
|
||||
extern bool fsensor_IR_check();
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
||||
#endif //FSENSOR_H
|
||||
|
|
|
@ -45,6 +45,12 @@
|
|||
// If there are any change requirements in the future, the signal must be checked with an osciloscope again,
|
||||
// ad-hoc changes may completely screw things up!
|
||||
|
||||
// 2020-01-29 update: we are introducing a new option to the automaton that will allow us to force the output state
|
||||
// to either full ON or OFF. This is so that interference during the MBL probing is minimal.
|
||||
// To accomplish this goal we use bedPWMDisabled. It is only supposed to be used for brief periods of time as to
|
||||
// not make the bed temperature too unstable. Also, careful consideration should be used when using this
|
||||
// option as leaving this enabled will also keep the bed output in the state it stopped in.
|
||||
|
||||
///! Definition off finite automaton states
|
||||
enum class States : uint8_t {
|
||||
ZERO_START = 0,///< entry point of the automaton - reads the soft_pwm_bed value for the next whole PWM cycle
|
||||
|
@ -61,6 +67,8 @@ enum class States : uint8_t {
|
|||
///! Inner states of the finite automaton
|
||||
static States state = States::ZERO_START;
|
||||
|
||||
bool bedPWMDisabled = 0;
|
||||
|
||||
///! Fast PWM counter is used in the RISE and FALL states (62.5kHz)
|
||||
static uint8_t slowCounter = 0;
|
||||
///! Slow PWM counter is used in the ZERO and ONE states (62.5kHz/8 or 64)
|
||||
|
@ -93,6 +101,7 @@ ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
|
|||
{
|
||||
switch(state){
|
||||
case States::ZERO_START:
|
||||
if (bedPWMDisabled) return; // stay in the OFF state and do not change the output pin
|
||||
pwm = soft_pwm_bed << 1;// expecting soft_pwm_bed to be 7bit!
|
||||
if( pwm != 0 ){
|
||||
state = States::ZERO; // do nothing, let it tick once again after the 30Hz period
|
||||
|
@ -136,6 +145,7 @@ ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
|
|||
break;
|
||||
case States::ONE: // state ONE - we'll either stay in ONE or change to FALL
|
||||
OCR0B = 255;
|
||||
if (bedPWMDisabled) return; // stay in the ON state and do not change the output pin
|
||||
slowCounter += slowInc; // this does software timer_clk/256 or less
|
||||
if( slowCounter < pwm ){
|
||||
return;
|
||||
|
|
88
Firmware/la10compat.cpp
Normal file
88
Firmware/la10compat.cpp
Normal file
|
@ -0,0 +1,88 @@
|
|||
#include "la10compat.h"
|
||||
#include "Marlin.h"
|
||||
|
||||
|
||||
static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode
|
||||
static float la10c_orig_jerk = 0; // Unadjusted/saved e-jerk
|
||||
|
||||
|
||||
LA10C_MODE la10c_mode_get()
|
||||
{
|
||||
return la10c_mode;
|
||||
}
|
||||
|
||||
|
||||
void la10c_mode_change(LA10C_MODE mode)
|
||||
{
|
||||
if(mode == la10c_mode) return;
|
||||
|
||||
// always restore to the last unadjusted E-jerk value
|
||||
if(la10c_orig_jerk)
|
||||
cs.max_jerk[E_AXIS] = la10c_orig_jerk;
|
||||
|
||||
SERIAL_ECHOPGM("LA10C: Linear Advance mode: ");
|
||||
switch(mode)
|
||||
{
|
||||
case LA10C_UNKNOWN: SERIAL_ECHOLNPGM("UNKNOWN"); break;
|
||||
case LA10C_LA15: SERIAL_ECHOLNPGM("1.5"); break;
|
||||
case LA10C_LA10: SERIAL_ECHOLNPGM("1.0"); break;
|
||||
}
|
||||
la10c_mode = mode;
|
||||
|
||||
// adjust the E-jerk if needed
|
||||
cs.max_jerk[E_AXIS] = la10c_jerk(cs.max_jerk[E_AXIS]);
|
||||
}
|
||||
|
||||
|
||||
// Approximate a LA10 value to a LA15 equivalent.
|
||||
static float la10c_convert(float k)
|
||||
{
|
||||
float new_K = k * 0.004 - 0.06;
|
||||
return (new_K < 0? 0: new_K);
|
||||
}
|
||||
|
||||
|
||||
float la10c_value(float k)
|
||||
{
|
||||
if(la10c_mode == LA10C_UNKNOWN)
|
||||
{
|
||||
// do not autodetect until a valid value is seen
|
||||
if(k == 0)
|
||||
return 0;
|
||||
else if(k < 0)
|
||||
return -1;
|
||||
|
||||
la10c_mode_change(k < 10? LA10C_LA15: LA10C_LA10);
|
||||
}
|
||||
|
||||
if(la10c_mode == LA10C_LA15)
|
||||
return (k >= 0 && k < 10? k: -1);
|
||||
else
|
||||
return (k >= 0? la10c_convert(k): -1);
|
||||
}
|
||||
|
||||
|
||||
float la10c_jerk(float j)
|
||||
{
|
||||
la10c_orig_jerk = j;
|
||||
|
||||
if(la10c_mode != LA10C_LA10)
|
||||
return j;
|
||||
|
||||
// check for a compatible range of values prior to convert (be sure that
|
||||
// a higher E-jerk would still be compatible wrt the E accell range)
|
||||
if(j < 4.5 && cs.max_acceleration_units_per_sq_second_normal[E_AXIS] < 2000)
|
||||
return j;
|
||||
|
||||
// bring low E-jerk values into equivalent LA 1.5 values by
|
||||
// flattening the response in the (1-4.5) range using a piecewise
|
||||
// function. Is it truly worth to preserve the difference between
|
||||
// 1.5/2.5 E-jerk for LA1.0? Probably not, but we try nonetheless.
|
||||
j = j < 1.0? j * 3.625:
|
||||
j < 4.5? j * 0.25 + 3.375:
|
||||
j;
|
||||
|
||||
SERIAL_ECHOPGM("LA10C: Adjusted E-Jerk: ");
|
||||
SERIAL_ECHOLN(j);
|
||||
return j;
|
||||
}
|
46
Firmware/la10compat.h
Normal file
46
Firmware/la10compat.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
// la10compat: LA10->LA15 conversion
|
||||
//
|
||||
// When the current mode is UNKNOWN autodetection is active and any K<10
|
||||
// will set the mode to LA15, LA10 is set otherwise. When LA10
|
||||
// compatbility mode is active the K factor is converted to a LA15
|
||||
// equivalent (that is, the return value is always a LA15 value).
|
||||
//
|
||||
// E-jerk<2 is also bumped in LA10 mode to restore the the printing speed
|
||||
// to values comparable to existing settings.
|
||||
//
|
||||
// Once the interpretation mode has been set it is kept until the mode
|
||||
// is explicitly reset. This is done to handle transparent fallback for
|
||||
// old firmware revisions in combination with the following gcode
|
||||
// sequence:
|
||||
//
|
||||
// M900 K0.01 ; set LA15 value (interpreted by any firmware)
|
||||
// M900 K10 ; set LA10 value (ignored by LA15 firmware)
|
||||
//
|
||||
// A LA15 firmware without this module will only parse the first
|
||||
// correctly, rejecting the second. A LA10 FW will parse both, but keep
|
||||
// the last value. Since the LA15 value, if present, corresponds to the
|
||||
// truth value, the compatibility stub needs to "lock" onto the first
|
||||
// seen value for the current print.
|
||||
//
|
||||
// The mode needs to be carefully reset for each print in order for
|
||||
// diffent versions of M900 to be interpreted independently.
|
||||
|
||||
#pragma once
|
||||
|
||||
enum __attribute__((packed)) LA10C_MODE
|
||||
{
|
||||
LA10C_UNKNOWN = 0,
|
||||
LA10C_LA15 = 1,
|
||||
LA10C_LA10 = 2
|
||||
};
|
||||
|
||||
// Explicitly set/get/reset the interpretation mode for la10c_value()
|
||||
void la10c_mode_change(LA10C_MODE mode);
|
||||
LA10C_MODE la10c_mode_get();
|
||||
static inline void la10c_reset() { la10c_mode_change(LA10C_UNKNOWN); }
|
||||
|
||||
// Return a LA15 K value according to the supplied value and mode
|
||||
float la10c_value(float k);
|
||||
|
||||
// Return an updated LA15 E-jerk value according to the current mode
|
||||
float la10c_jerk(float j);
|
|
@ -17,10 +17,10 @@ uint8_t lang_selected = 0;
|
|||
|
||||
#if (LANG_MODE == 0) //primary language only
|
||||
|
||||
uint8_t lang_select(uint8_t lang) { return 0; }
|
||||
uint8_t lang_select(__attribute__((unused)) uint8_t lang) { return 0; }
|
||||
uint8_t lang_get_count() { return 1; }
|
||||
uint16_t lang_get_code(uint8_t lang) { return LANG_CODE_EN; }
|
||||
const char* lang_get_name_by_code(uint16_t code) { return _n("English"); }
|
||||
uint16_t lang_get_code(__attribute__((unused)) uint8_t lang) { return LANG_CODE_EN; }
|
||||
const char* lang_get_name_by_code(__attribute__((unused)) uint16_t code) { return _n("English"); }
|
||||
void lang_reset(void) { }
|
||||
uint8_t lang_is_selected(void) { return 1; }
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ void menu_back(void)
|
|||
menu_back(1);
|
||||
}
|
||||
|
||||
static void menu_back_no_reset(void)
|
||||
void menu_back_no_reset(void)
|
||||
{
|
||||
if (menu_depth > 0)
|
||||
{
|
||||
|
@ -136,7 +136,7 @@ void menu_submenu(menu_func_t submenu)
|
|||
}
|
||||
}
|
||||
|
||||
static void menu_submenu_no_reset(menu_func_t submenu)
|
||||
void menu_submenu_no_reset(menu_func_t submenu)
|
||||
{
|
||||
if (menu_depth < MENU_DEPTH_MAX)
|
||||
{
|
||||
|
@ -184,6 +184,22 @@ static void menu_draw_item_puts_P(char type_char, const char* str)
|
|||
lcd_printf_P(PSTR("%c%-18.18S%c"), menu_selection_mark(), str, type_char);
|
||||
}
|
||||
|
||||
static void menu_draw_toggle_puts_P(const char* str, const char* toggle, const uint8_t settings)
|
||||
{
|
||||
//settings:
|
||||
//xxxxxcba
|
||||
//a = selection mark. If it's set(1), then '>' will be used as the first character on the line. Else leave blank
|
||||
//b = toggle string is from progmem
|
||||
//c = do not set cursor at all. Must be handled externally.
|
||||
char lineStr[LCD_WIDTH + 1];
|
||||
const char eol = (toggle == NULL)?LCD_STR_ARROW_RIGHT[0]:' ';
|
||||
if (toggle == NULL) toggle = _T(MSG_NA);
|
||||
sprintf_P(lineStr, PSTR("%c%-18.18S"), (settings & 0x01)?'>':' ', str);
|
||||
sprintf_P(lineStr + LCD_WIDTH - ((settings & 0x02)?strlen_P(toggle):strlen(toggle)) - 3, (settings & 0x02)?PSTR("[%S]%c"):PSTR("[%s]%c"), toggle, eol);
|
||||
if (!(settings & 0x04)) lcd_set_cursor(0, menu_row);
|
||||
fputs(lineStr, lcdout);
|
||||
}
|
||||
|
||||
//! @brief Format sheet name
|
||||
//!
|
||||
//! @param[in] sheet_E Sheet in EEPROM
|
||||
|
@ -375,6 +391,33 @@ uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t)
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings)
|
||||
{
|
||||
if (menu_item == menu_line)
|
||||
{
|
||||
if (lcd_draw_update) menu_draw_toggle_puts_P(str, toggle, settings | (menu_selection_mark()=='>'));
|
||||
if (menu_clicked && (lcd_encoder == menu_item))
|
||||
{
|
||||
if (toggle == NULL) // print N/A warning message
|
||||
{
|
||||
menu_submenu(func);
|
||||
return menu_item_ret();
|
||||
}
|
||||
else // do the actual toggling
|
||||
{
|
||||
menu_clicked = false;
|
||||
lcd_consume_click();
|
||||
lcd_update_enabled = 0;
|
||||
if (func) func();
|
||||
lcd_update_enabled = 1;
|
||||
return menu_item_ret();
|
||||
}
|
||||
}
|
||||
}
|
||||
menu_item++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
|
||||
{
|
||||
if (menu_item == menu_line)
|
||||
|
@ -390,17 +433,12 @@ uint8_t menu_item_gcode_P(const char* str, const char* str_gcode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
const char menu_20x_space[] PROGMEM = " ";
|
||||
|
||||
const char menu_fmt_int3[] PROGMEM = "%c%.15S:%s%3d";
|
||||
|
||||
const char menu_fmt_float31[] PROGMEM = "%-12.12S%+8.1f";
|
||||
|
||||
const char menu_fmt_float13[] PROGMEM = "%c%-13.13S%+5.3f";
|
||||
|
||||
const char menu_fmt_float13off[] PROGMEM = "%c%-13.13S%6.6S";
|
||||
|
||||
template<typename T>
|
||||
static void menu_draw_P(char chr, const char* str, int16_t val);
|
||||
|
||||
|
@ -409,8 +447,8 @@ void menu_draw_P<int16_t*>(char chr, const char* str, int16_t val)
|
|||
{
|
||||
int text_len = strlen_P(str);
|
||||
if (text_len > 15) text_len = 15;
|
||||
char spaces[21];
|
||||
strcpy_P(spaces, menu_20x_space);
|
||||
char spaces[LCD_WIDTH + 1] = {0};
|
||||
memset(spaces,' ', LCD_WIDTH);
|
||||
if (val <= -100) spaces[15 - text_len - 1] = 0;
|
||||
else spaces[15 - text_len] = 0;
|
||||
lcd_printf_P(menu_fmt_int3, chr, str, spaces, val);
|
||||
|
@ -423,7 +461,7 @@ void menu_draw_P<uint8_t*>(char chr, const char* str, int16_t val)
|
|||
float factor = 1.0f + static_cast<float>(val) / 1000.0f;
|
||||
if (val <= _md->minEditValue)
|
||||
{
|
||||
lcd_printf_P(menu_fmt_float13off, chr, str, _i(" [off]"));
|
||||
menu_draw_toggle_puts_P(str, _T(MSG_OFF), 0x04 | 0x02 | (chr=='>'));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -76,6 +76,7 @@ void menu_start(void);
|
|||
extern void menu_end(void);
|
||||
|
||||
extern void menu_back(void);
|
||||
extern void menu_back_no_reset(void);
|
||||
extern void menu_back(uint8_t nLevel);
|
||||
|
||||
extern void menu_back_if_clicked(void);
|
||||
|
@ -83,6 +84,7 @@ extern void menu_back_if_clicked(void);
|
|||
extern void menu_back_if_clicked_fb(void);
|
||||
|
||||
extern void menu_submenu(menu_func_t submenu);
|
||||
extern void menu_submenu_no_reset(menu_func_t submenu);
|
||||
|
||||
extern uint8_t menu_item_ret(void);
|
||||
|
||||
|
@ -118,6 +120,10 @@ extern uint8_t menu_item_function_P(const char* str, menu_func_t func);
|
|||
#define MENU_ITEM_FUNCTION_NR_P(str, number, func, fn_par) do { if (menu_item_function_P(str, number, func, fn_par)) return; } while (0)
|
||||
extern uint8_t menu_item_function_P(const char* str, char number, void (*func)(uint8_t), uint8_t fn_par);
|
||||
|
||||
#define MENU_ITEM_TOGGLE_P(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x02)) return; } while (0)
|
||||
#define MENU_ITEM_TOGGLE(str, toggle, func) do { if (menu_item_toggle_P(str, toggle, func, 0x00)) return; } while (0)
|
||||
extern uint8_t menu_item_toggle_P(const char* str, const char* toggle, menu_func_t func, const uint8_t settings);
|
||||
|
||||
#define MENU_ITEM_GCODE_P(str, str_gcode) do { if (menu_item_gcode_P(str, str_gcode)) return; } while (0)
|
||||
extern uint8_t menu_item_gcode_P(const char* str, const char* str_gcode);
|
||||
|
||||
|
@ -127,7 +133,6 @@ extern const char menu_fmt_int3[];
|
|||
extern const char menu_fmt_float31[];
|
||||
extern const char menu_fmt_float13[];
|
||||
|
||||
|
||||
extern void menu_draw_float31(const char* str, float val);
|
||||
|
||||
extern void menu_draw_float13(const char* str, float val);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "mesh_bed_leveling.h"
|
||||
#include "stepper.h"
|
||||
#include "ultralcd.h"
|
||||
#include "temperature.h"
|
||||
|
||||
#ifdef TMC2130
|
||||
#include "tmc2130.h"
|
||||
|
@ -946,6 +947,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
|
|||
)
|
||||
{
|
||||
bool high_deviation_occured = false;
|
||||
bedPWMDisabled = 1;
|
||||
#ifdef TMC2130
|
||||
FORCE_HIGH_POWER_START;
|
||||
#endif
|
||||
|
@ -1044,6 +1046,7 @@ inline bool find_bed_induction_sensor_point_z(float minimum_z, uint8_t n_iter, i
|
|||
#ifdef TMC2130
|
||||
FORCE_HIGH_POWER_END;
|
||||
#endif
|
||||
bedPWMDisabled = 0;
|
||||
return true;
|
||||
|
||||
error:
|
||||
|
@ -1053,6 +1056,7 @@ error:
|
|||
#ifdef TMC2130
|
||||
FORCE_HIGH_POWER_END;
|
||||
#endif
|
||||
bedPWMDisabled = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
//internationalized messages
|
||||
const char MSG_AUTO_HOME[] PROGMEM_I1 = ISTR("Auto home"); ////
|
||||
const char MSG_AUTO_MODE_ON[] PROGMEM_I1 = ISTR("Mode [auto power]"); ////
|
||||
const char MSG_BABYSTEP_Z[] PROGMEM_I1 = ISTR("Live adjust Z"); //// c=18
|
||||
const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of the nozzle and the bed surface has not been set yet. Please follow the manual, chapter First steps, section First layer calibration."); ////c=20 r=12
|
||||
const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////
|
||||
|
@ -22,9 +21,7 @@ const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); ////
|
|||
const char MSG_CONFIRM_NOZZLE_CLEAN[] PROGMEM_I1 = ISTR("Please clean the nozzle for calibration. Click when done."); ////c=20 r=8
|
||||
const char MSG_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
|
||||
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
|
||||
const char MSG_CRASHDETECT_NA[] PROGMEM_I1 = ISTR("Crash det. [N/A]"); ////
|
||||
const char MSG_CRASHDETECT_OFF[] PROGMEM_I1 = ISTR("Crash det. [off]"); ////
|
||||
const char MSG_CRASHDETECT_ON[] PROGMEM_I1 = ISTR("Crash det. [on]"); ////
|
||||
const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////
|
||||
const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
|
||||
const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1
|
||||
const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
|
||||
|
@ -40,9 +37,8 @@ const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////
|
|||
const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1
|
||||
const char MSG_FOLLOW_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("Printer has not been calibrated yet. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
|
||||
const char MSG_FOLLOW_Z_CALIBRATION_FLOW[] PROGMEM_I1 = ISTR("There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."); ////c=20 r=8
|
||||
const char MSG_FSENS_AUTOLOAD_NA[] PROGMEM_I1 = ISTR("F. autoload [N/A]"); ////c=17 r=1
|
||||
const char MSG_FSENSOR_OFF[] PROGMEM_I1 = ISTR("Fil. sensor [off]"); ////
|
||||
const char MSG_FSENSOR_ON[] PROGMEM_I1 = ISTR("Fil. sensor [on]"); ////
|
||||
const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=17 r=1
|
||||
const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); ////
|
||||
const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////
|
||||
const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
|
||||
const char MSG_HOMEYZ[] PROGMEM_I1 = ISTR("Calibrate Z"); ////
|
||||
|
@ -85,14 +81,16 @@ const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor");
|
|||
const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////
|
||||
const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////
|
||||
const char MSG_HW_SETUP[] PROGMEM_I1 = ISTR("HW Setup"); ////
|
||||
const char MSG_SILENT_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [high power]"); ////
|
||||
const char MSG_SILENT_MODE_ON[] PROGMEM_I1 = ISTR("Mode [silent]"); ////
|
||||
const char MSG_STEALTH_MODE_OFF[] PROGMEM_I1 = ISTR("Mode [Normal]"); ////
|
||||
const char MSG_STEALTH_MODE_ON[] PROGMEM_I1 = ISTR("Mode [Stealth]"); ////
|
||||
const char MSG_MODE[] PROGMEM_I1 = ISTR("Mode"); ////
|
||||
const char MSG_HIGH_POWER[] PROGMEM_I1 = ISTR("High power"); ////
|
||||
const char MSG_AUTO_POWER[] PROGMEM_I1 = ISTR("Auto power"); ////
|
||||
const char MSG_SILENT[] PROGMEM_I1 = ISTR("Silent"); ////
|
||||
const char MSG_NORMAL[] PROGMEM_I1 = ISTR("Normal"); ////
|
||||
const char MSG_STEALTH[] PROGMEM_I1 = ISTR("Stealth"); ////
|
||||
const char MSG_STEEL_SHEET_CHECK[] PROGMEM_I1 = ISTR("Is steel sheet on heatbed?"); ////c=20 r=2
|
||||
const char MSG_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////
|
||||
const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////
|
||||
const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal. "); ////c=20 r=1
|
||||
const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=12 r=1
|
||||
const char MSG_TEMP_CALIBRATION_DONE[] PROGMEM_I1 = ISTR("Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."); ////c=20 r=12
|
||||
const char MSG_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17
|
||||
const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1
|
||||
|
@ -104,13 +102,48 @@ const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard
|
|||
const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); ////
|
||||
const char MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=17 r=1
|
||||
const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20
|
||||
const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); ////
|
||||
const char MSG_ON[] PROGMEM_I1 = ISTR("On"); ////
|
||||
const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); ////
|
||||
const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); ////
|
||||
const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); ////
|
||||
const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); ////
|
||||
const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); ////
|
||||
const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////
|
||||
const char MSG_MODEL[] PROGMEM_I1 = ISTR("Model"); ////
|
||||
const char MSG_FIRMWARE[] PROGMEM_I1 = ISTR("Firmware"); ////
|
||||
const char MSG_GCODE[] PROGMEM_I1 = ISTR("Gcode"); ////
|
||||
const char MSG_NOZZLE_DIAMETER[] PROGMEM_I1 = ISTR("Nozzle d."); ////
|
||||
const char MSG_MMU_MODE[] PROGMEM_I1 = ISTR("MMU Mode"); ////
|
||||
const char MSG_SD_CARD[] PROGMEM_I1 = ISTR("SD card"); ////
|
||||
const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[] PROGMEM_I1 = ISTR("FlashAir"); ////
|
||||
const char MSG_SORT[] PROGMEM_I1 = ISTR("Sort"); ////
|
||||
const char MSG_SORT_TIME[] PROGMEM_I1 = ISTR("Time"); ////
|
||||
const char MSG_SORT_ALPHA[] PROGMEM_I1 = ISTR("Alphabet"); ////
|
||||
const char MSG_RPI_PORT[] PROGMEM_I1 = ISTR("RPi port"); ////
|
||||
const char MSG_SOUND[] PROGMEM_I1 = ISTR("Sound"); ////
|
||||
const char MSG_SOUND_LOUD[] PROGMEM_I1 = ISTR("Loud"); ////
|
||||
const char MSG_SOUND_ONCE[] PROGMEM_I1 = ISTR("Once"); ////
|
||||
const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////
|
||||
const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////
|
||||
const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); ////
|
||||
const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
|
||||
const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////
|
||||
const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////
|
||||
const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////
|
||||
const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); ////
|
||||
const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); ////
|
||||
const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); ////
|
||||
const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); ////
|
||||
const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); ////
|
||||
const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); ////
|
||||
const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); ////
|
||||
|
||||
//not internationalized messages
|
||||
const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
|
||||
const char MSG_BROWNOUT_RESET[] PROGMEM_N1 = " Brown out Reset"; ////
|
||||
const char MSG_EXTERNAL_RESET[] PROGMEM_N1 = " External Reset"; ////
|
||||
const char MSG_FILE_SAVED[] PROGMEM_N1 = "Done saving file."; ////
|
||||
const char MSG_OFF[] PROGMEM_N1 = "Off"; ////
|
||||
const char MSG_ON[] PROGMEM_N1 = "On "; ////
|
||||
const char MSG_POSITION_UNKNOWN[] PROGMEM_N1 = "Home X/Y before Z"; ////
|
||||
const char MSG_SOFTWARE_RESET[] PROGMEM_N1 = " Software Reset"; ////
|
||||
const char MSG_UNKNOWN_COMMAND[] PROGMEM_N1 = "Unknown command: \""; ////
|
||||
|
@ -134,3 +167,6 @@ const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; ////
|
|||
const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; ////
|
||||
const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20
|
||||
const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err: PRINT FAN ERROR"; ////c=20
|
||||
const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20
|
||||
const char MSG_ADVANCE_K[] PROGMEM_N1 = "Advance K:"; ////c=13
|
||||
const char MSG_POWERPANIC_DETECTED[] PROGMEM_N1 = "POWER PANIC DETECTED"; ////c=20
|
||||
|
|
|
@ -10,7 +10,6 @@ extern "C" {
|
|||
// LCD Menu Messages
|
||||
//internationalized messages
|
||||
extern const char MSG_AUTO_HOME[];
|
||||
extern const char MSG_AUTO_MODE_ON[];
|
||||
extern const char MSG_BABYSTEP_Z[];
|
||||
extern const char MSG_BABYSTEP_Z_NOT_SET[];
|
||||
extern const char MSG_BED[];
|
||||
|
@ -23,9 +22,7 @@ extern const char MSG_CARD_MENU[];
|
|||
extern const char MSG_CONFIRM_NOZZLE_CLEAN[];
|
||||
extern const char MSG_COOLDOWN[];
|
||||
extern const char MSG_CRASH_DETECTED[];
|
||||
extern const char MSG_CRASHDETECT_NA[];
|
||||
extern const char MSG_CRASHDETECT_OFF[];
|
||||
extern const char MSG_CRASHDETECT_ON[];
|
||||
extern const char MSG_CRASHDETECT[];
|
||||
extern const char MSG_ERROR[];
|
||||
extern const char MSG_EXTRUDER[];
|
||||
extern const char MSG_FILAMENT[];
|
||||
|
@ -41,9 +38,8 @@ extern const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[];
|
|||
extern const char MSG_FINISHING_MOVEMENTS[];
|
||||
extern const char MSG_FOLLOW_CALIBRATION_FLOW[];
|
||||
extern const char MSG_FOLLOW_Z_CALIBRATION_FLOW[];
|
||||
extern const char MSG_FSENS_AUTOLOAD_NA[];
|
||||
extern const char MSG_FSENSOR_OFF[];
|
||||
extern const char MSG_FSENSOR_ON[];
|
||||
extern const char MSG_FSENSOR_AUTOLOAD[];
|
||||
extern const char MSG_FSENSOR[];
|
||||
extern const char MSG_HEATING[];
|
||||
extern const char MSG_HEATING_COMPLETE[];
|
||||
extern const char MSG_HOMEYZ[];
|
||||
|
@ -85,10 +81,12 @@ extern const char MSG_SELFTEST_FILAMENT_SENSOR[];
|
|||
extern const char MSG_SELFTEST_WIRINGERROR[];
|
||||
extern const char MSG_SETTINGS[];
|
||||
extern const char MSG_HW_SETUP[];
|
||||
extern const char MSG_SILENT_MODE_OFF[];
|
||||
extern const char MSG_SILENT_MODE_ON[];
|
||||
extern const char MSG_STEALTH_MODE_OFF[];
|
||||
extern const char MSG_STEALTH_MODE_ON[];
|
||||
extern const char MSG_MODE[];
|
||||
extern const char MSG_HIGH_POWER[];
|
||||
extern const char MSG_AUTO_POWER[];
|
||||
extern const char MSG_SILENT[];
|
||||
extern const char MSG_NORMAL[];
|
||||
extern const char MSG_STEALTH[];
|
||||
extern const char MSG_STEEL_SHEET_CHECK[];
|
||||
extern const char MSG_STOP_PRINT[];
|
||||
extern const char MSG_STOPPED[];
|
||||
|
@ -104,12 +102,47 @@ extern const char MSG_WIZARD_QUIT[];
|
|||
extern const char MSG_YES[];
|
||||
extern const char MSG_V2_CALIBRATION[];
|
||||
extern const char WELCOME_MSG[];
|
||||
extern const char MSG_OFF[];
|
||||
extern const char MSG_ON[];
|
||||
extern const char MSG_NA[];
|
||||
extern const char MSG_AUTO_DEPLETE[];
|
||||
extern const char MSG_CUTTER[];
|
||||
extern const char MSG_NONE[];
|
||||
extern const char MSG_WARN[];
|
||||
extern const char MSG_STRICT[];
|
||||
extern const char MSG_MODEL[];
|
||||
extern const char MSG_FIRMWARE[];
|
||||
extern const char MSG_GCODE[];
|
||||
extern const char MSG_NOZZLE_DIAMETER[];
|
||||
extern const char MSG_MMU_MODE[];
|
||||
extern const char MSG_SD_CARD[];
|
||||
extern const char MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY[];
|
||||
extern const char MSG_SORT[];
|
||||
extern const char MSG_SORT_TIME[];
|
||||
extern const char MSG_SORT_ALPHA[];
|
||||
extern const char MSG_RPI_PORT[];
|
||||
extern const char MSG_SOUND[];
|
||||
extern const char MSG_SOUND_LOUD[];
|
||||
extern const char MSG_SOUND_ONCE[];
|
||||
extern const char MSG_SOUND_BLIND[];
|
||||
extern const char MSG_MESH[];
|
||||
extern const char MSG_Z_PROBE_NR[];
|
||||
extern const char MSG_MAGNETS_COMP[];
|
||||
extern const char MSG_FS_ACTION[];
|
||||
extern const char MSG_FS_CONTINUE[];
|
||||
extern const char MSG_FS_PAUSE[];
|
||||
extern const char MSG_BRIGHTNESS[];
|
||||
extern const char MSG_BL_HIGH[];
|
||||
extern const char MSG_BL_LOW[];
|
||||
extern const char MSG_TIMEOUT[];
|
||||
extern const char MSG_BRIGHT[];
|
||||
extern const char MSG_DIM[];
|
||||
extern const char MSG_AUTO[];
|
||||
|
||||
//not internationalized messages
|
||||
extern const char MSG_BROWNOUT_RESET[];
|
||||
extern const char MSG_EXTERNAL_RESET[];
|
||||
extern const char MSG_FILE_SAVED[];
|
||||
extern const char MSG_OFF[];
|
||||
extern const char MSG_ON[];
|
||||
extern const char MSG_POSITION_UNKNOWN[];
|
||||
extern const char MSG_SOFTWARE_RESET[];
|
||||
extern const char MSG_UNKNOWN_COMMAND[];
|
||||
|
@ -135,6 +168,9 @@ extern const char MSG_OCTOPRINT_RESUMED[];
|
|||
extern const char MSG_OCTOPRINT_CANCEL[];
|
||||
extern const char MSG_FANCHECK_EXTRUDER[];
|
||||
extern const char MSG_FANCHECK_PRINT[];
|
||||
extern const char MSG_M112_KILL[];
|
||||
extern const char MSG_ADVANCE_K[];
|
||||
extern const char MSG_POWERPANIC_DETECTED[];
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ uint8_t mmu_extruder = MMU_FILAMENT_UNKNOWN;
|
|||
uint8_t tmp_extruder = MMU_FILAMENT_UNKNOWN;
|
||||
|
||||
int8_t mmu_finda = -1;
|
||||
uint32_t mmu_last_finda_response = 0;
|
||||
|
||||
int16_t mmu_version = -1;
|
||||
|
||||
|
@ -264,6 +265,7 @@ void mmu_loop(void)
|
|||
if (mmu_rx_ok() > 0)
|
||||
{
|
||||
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
|
||||
mmu_last_finda_response = _millis();
|
||||
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
||||
puts_P(PSTR("MMU - ENABLED"));
|
||||
mmu_enabled = true;
|
||||
|
@ -376,11 +378,11 @@ void mmu_loop(void)
|
|||
if (mmu_rx_ok() > 0)
|
||||
{
|
||||
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer
|
||||
mmu_last_finda_response = _millis();
|
||||
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
||||
//printf_P(PSTR("Eact: %d\n"), int(e_active()));
|
||||
if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
|
||||
fsensor_stop_and_save_print();
|
||||
enquecommand_front_P(PSTR("PRUSA fsensor_recover")); //then recover
|
||||
fsensor_checkpoint_print();
|
||||
ad_markDepleted(mmu_extruder);
|
||||
if (lcd_autoDepleteEnabled() && !ad_allDepleted())
|
||||
{
|
||||
|
@ -1355,7 +1357,7 @@ void lcd_mmu_load_to_nozzle(uint8_t filament_nr)
|
|||
manage_response(true, true, MMU_TCODE_MOVE);
|
||||
mmu_continue_loading(false);
|
||||
mmu_extruder = tmp_extruder; //filament change is finished
|
||||
marlin_rise_z();
|
||||
raise_z_above(MIN_Z_FOR_LOAD, false);
|
||||
mmu_load_to_nozzle();
|
||||
load_filament_final_feed();
|
||||
st_synchronize();
|
||||
|
@ -1545,7 +1547,7 @@ void mmu_continue_loading(bool blocking)
|
|||
};
|
||||
Ls state = Ls::Enter;
|
||||
|
||||
const uint_least8_t max_retry = 2;
|
||||
const uint_least8_t max_retry = 3;
|
||||
uint_least8_t retry = 0;
|
||||
|
||||
while (!success)
|
||||
|
@ -1556,34 +1558,27 @@ void mmu_continue_loading(bool blocking)
|
|||
increment_load_fail();
|
||||
// no break
|
||||
case Ls::Retry:
|
||||
#ifdef MMU_HAS_CUTTER
|
||||
if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
|
||||
++retry; // overflow not handled, as it is not dangerous.
|
||||
if (retry >= max_retry)
|
||||
{
|
||||
mmu_command(MmuCmd::K0 + tmp_extruder);
|
||||
manage_response(true, true, MMU_UNLOAD_MOVE);
|
||||
}
|
||||
state = Ls::Unload;
|
||||
#ifdef MMU_HAS_CUTTER
|
||||
if (1 == eeprom_read_byte((uint8_t*)EEPROM_MMU_CUTTER_ENABLED))
|
||||
{
|
||||
mmu_command(MmuCmd::K0 + tmp_extruder);
|
||||
manage_response(true, true, MMU_UNLOAD_MOVE);
|
||||
}
|
||||
#endif //MMU_HAS_CUTTER
|
||||
}
|
||||
mmu_command(MmuCmd::T0 + tmp_extruder);
|
||||
manage_response(true, true, MMU_TCODE_MOVE);
|
||||
success = load_more();
|
||||
if (success) success = can_load();
|
||||
++retry; // overflow not handled, as it is not dangerous.
|
||||
if (retry >= max_retry) state = Ls::Unload;
|
||||
|
||||
break;
|
||||
case Ls::Unload:
|
||||
stop_and_save_print_to_ram(0, 0);
|
||||
|
||||
//lift z
|
||||
current_position[Z_AXIS] += Z_PAUSE_LIFT;
|
||||
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
|
||||
plan_buffer_line_curposXYZE(15, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
//Move XY to side
|
||||
current_position[X_AXIS] = X_PAUSE_POS;
|
||||
current_position[Y_AXIS] = Y_PAUSE_POS;
|
||||
plan_buffer_line_curposXYZE(50, active_extruder);
|
||||
st_synchronize();
|
||||
long_pause();
|
||||
|
||||
mmu_command(MmuCmd::U0);
|
||||
manage_response(false, true, MMU_UNLOAD_MOVE);
|
||||
|
@ -1594,6 +1589,7 @@ void mmu_continue_loading(bool blocking)
|
|||
if (blocking)
|
||||
{
|
||||
marlin_wait_for_click();
|
||||
st_synchronize();
|
||||
restore_print_from_ram_and_continue(0);
|
||||
state = Ls::Retry;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ extern uint8_t mmu_extruder;
|
|||
extern uint8_t tmp_extruder;
|
||||
|
||||
extern int8_t mmu_finda;
|
||||
extern uint32_t mmu_last_finda_response;
|
||||
extern bool ir_sensor_detected;
|
||||
|
||||
extern int16_t mmu_version;
|
||||
|
|
|
@ -258,11 +258,11 @@ void optiboot_w25x20cl_enter()
|
|||
uint32_t addr = (((uint32_t)rampz) << 16) | address;
|
||||
// During a single bootloader run, only erase a 64kB block once.
|
||||
// An 8bit bitmask 'pages_erased' covers 512kB of FLASH memory.
|
||||
if (address == 0 && (pages_erased & (1 << addr)) == 0) {
|
||||
if ((address == 0) && (pages_erased & (1 << (addr >> 16))) == 0) {
|
||||
w25x20cl_wait_busy();
|
||||
w25x20cl_enable_wr();
|
||||
w25x20cl_block64_erase(addr);
|
||||
pages_erased |= (1 << addr);
|
||||
pages_erased |= (1 << (addr >> 16));
|
||||
}
|
||||
w25x20cl_wait_busy();
|
||||
w25x20cl_enable_wr();
|
||||
|
|
|
@ -71,12 +71,13 @@
|
|||
#define HEATER_2_PIN -1
|
||||
#define TEMP_2_PIN -1
|
||||
|
||||
#define TEMP_AMBIENT_PIN 5 //A5
|
||||
#define TEMP_AMBIENT_PIN 6 //A6
|
||||
|
||||
#define TEMP_PINDA_PIN 3 //A3
|
||||
|
||||
#define VOLT_PWR_PIN 4 //A4
|
||||
#define VOLT_BED_PIN 9 //A9
|
||||
#define VOLT_IR_PIN 8 //A8
|
||||
|
||||
|
||||
#define E0_TMC2130_CS 66
|
||||
|
@ -99,7 +100,7 @@
|
|||
|
||||
//#define KILL_PIN 32
|
||||
|
||||
//#define LCD_BL_PIN 5 //backlight control pin
|
||||
#define LCD_BL_PIN 5 //backlight control pin
|
||||
#define BEEPER 84 // Beeper on AUX-4
|
||||
#define LCD_PINS_RS 82
|
||||
#define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03)
|
||||
|
|
|
@ -126,11 +126,14 @@ float extrude_min_temp=EXTRUDE_MINTEMP;
|
|||
#endif
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
float extruder_advance_k = LIN_ADVANCE_K,
|
||||
advance_ed_ratio = LIN_ADVANCE_E_D_RATIO,
|
||||
position_float[NUM_AXIS] = { 0 };
|
||||
float extruder_advance_K = LIN_ADVANCE_K;
|
||||
float position_float[NUM_AXIS];
|
||||
#endif
|
||||
|
||||
// Request the next block to start at zero E count
|
||||
static bool plan_reset_next_e_queue;
|
||||
static bool plan_reset_next_e_sched;
|
||||
|
||||
// Returns the index of the next block in the ring buffer
|
||||
// NOTE: Removed modulo (%) operator, which uses an expensive divide and multiplication.
|
||||
static inline int8_t next_block_index(int8_t block_index) {
|
||||
|
@ -262,6 +265,13 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
uint16_t final_adv_steps = 0;
|
||||
if (block->use_advance_lead) {
|
||||
final_adv_steps = exit_speed * block->adv_comp;
|
||||
}
|
||||
#endif
|
||||
|
||||
CRITICAL_SECTION_START; // Fill variables used by the stepper in a critical section
|
||||
// This block locks the interrupts globally for 4.38 us,
|
||||
// which corresponds to a maximum repeat frequency of 228.57 kHz.
|
||||
|
@ -272,6 +282,9 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
|
|||
block->decelerate_after = accelerate_steps+plateau_steps;
|
||||
block->initial_rate = initial_rate;
|
||||
block->final_rate = final_rate;
|
||||
#ifdef LIN_ADVANCE
|
||||
block->final_adv_steps = final_adv_steps;
|
||||
#endif
|
||||
}
|
||||
CRITICAL_SECTION_END;
|
||||
}
|
||||
|
@ -424,14 +437,16 @@ void plan_init() {
|
|||
block_buffer_head = 0;
|
||||
block_buffer_tail = 0;
|
||||
memset(position, 0, sizeof(position)); // clear position
|
||||
#ifdef LIN_ADVANCE
|
||||
memset(position_float, 0, sizeof(position)); // clear position
|
||||
#endif
|
||||
#ifdef LIN_ADVANCE
|
||||
memset(position_float, 0, sizeof(position_float)); // clear position
|
||||
#endif
|
||||
previous_speed[0] = 0.0;
|
||||
previous_speed[1] = 0.0;
|
||||
previous_speed[2] = 0.0;
|
||||
previous_speed[3] = 0.0;
|
||||
previous_nominal_speed = 0.0;
|
||||
plan_reset_next_e_queue = false;
|
||||
plan_reset_next_e_sched = false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -639,7 +654,9 @@ void planner_abort_hard()
|
|||
// Apply inverse world correction matrix.
|
||||
machine2world(current_position[X_AXIS], current_position[Y_AXIS]);
|
||||
memcpy(destination, current_position, sizeof(destination));
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
memcpy(position_float, current_position, sizeof(position_float));
|
||||
#endif
|
||||
// Resets planner junction speeds. Assumes start from rest.
|
||||
previous_nominal_speed = 0.0;
|
||||
previous_speed[0] = 0.0;
|
||||
|
@ -647,6 +664,9 @@ void planner_abort_hard()
|
|||
previous_speed[2] = 0.0;
|
||||
previous_speed[3] = 0.0;
|
||||
|
||||
plan_reset_next_e_queue = false;
|
||||
plan_reset_next_e_sched = false;
|
||||
|
||||
// Relay to planner wait routine, that the current line shall be canceled.
|
||||
waiting_inside_plan_buffer_line_print_aborted = true;
|
||||
}
|
||||
|
@ -659,15 +679,15 @@ float junction_deviation = 0.1;
|
|||
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
|
||||
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
|
||||
// calculation the caller must also provide the physical length of the line in millimeters.
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder)
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target)
|
||||
{
|
||||
// Calculate the buffer head after we push this byte
|
||||
int next_buffer_head = next_block_index(block_buffer_head);
|
||||
|
||||
// If the buffer is full: good! That means we are well ahead of the robot.
|
||||
// Rest here until there is room in the buffer.
|
||||
waiting_inside_plan_buffer_line_print_aborted = false;
|
||||
if (block_buffer_tail == next_buffer_head) {
|
||||
waiting_inside_plan_buffer_line_print_aborted = false;
|
||||
do {
|
||||
manage_heater();
|
||||
// Vojtech: Don't disable motors inside the planner!
|
||||
|
@ -687,6 +707,43 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
|
|||
planner_update_queue_min_counter();
|
||||
#endif /* PLANNER_DIAGNOSTICS */
|
||||
|
||||
// Prepare to set up new block
|
||||
block_t *block = &block_buffer[block_buffer_head];
|
||||
|
||||
// Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
|
||||
block->busy = false;
|
||||
|
||||
// Set sdlen for calculating sd position
|
||||
block->sdlen = 0;
|
||||
|
||||
// Save original destination of the move
|
||||
if (gcode_target)
|
||||
memcpy(block->gcode_target, gcode_target, sizeof(block_t::gcode_target));
|
||||
else
|
||||
{
|
||||
block->gcode_target[X_AXIS] = x;
|
||||
block->gcode_target[Y_AXIS] = y;
|
||||
block->gcode_target[Z_AXIS] = z;
|
||||
block->gcode_target[E_AXIS] = e;
|
||||
}
|
||||
|
||||
// Save the global feedrate at scheduling time
|
||||
block->gcode_feedrate = feedrate;
|
||||
|
||||
// Reset the starting E position when requested
|
||||
if (plan_reset_next_e_queue)
|
||||
{
|
||||
position[E_AXIS] = 0;
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[E_AXIS] = 0;
|
||||
#endif
|
||||
|
||||
// the block might still be discarded later, but we need to ensure the lower-level
|
||||
// count_position is also reset correctly for consistent results!
|
||||
plan_reset_next_e_queue = false;
|
||||
plan_reset_next_e_sched = true;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
|
||||
#endif // ENABLE_AUTO_BED_LEVELING
|
||||
|
@ -752,21 +809,15 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
|
|||
#endif // ENABLE_MESH_BED_LEVELING
|
||||
target[E_AXIS] = lround(e*cs.axis_steps_per_unit[E_AXIS]);
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
const float mm_D_float = sqrt(sq(x - position_float[X_AXIS]) + sq(y - position_float[Y_AXIS]));
|
||||
float de_float = e - position_float[E_AXIS];
|
||||
#endif
|
||||
|
||||
#ifdef PREVENT_DANGEROUS_EXTRUDE
|
||||
if(target[E_AXIS]!=position[E_AXIS])
|
||||
{
|
||||
if(degHotend(active_extruder)<extrude_min_temp)
|
||||
{
|
||||
position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
|
||||
#ifdef LIN_ADVANCE
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[E_AXIS] = e;
|
||||
de_float = 0;
|
||||
#endif
|
||||
#endif
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLNRPGM(_n(" cold extrusion prevented"));////MSG_ERR_COLD_EXTRUDE_STOP
|
||||
}
|
||||
|
@ -775,10 +826,9 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
|
|||
if(labs(target[E_AXIS]-position[E_AXIS])>cs.axis_steps_per_unit[E_AXIS]*EXTRUDE_MAXLENGTH)
|
||||
{
|
||||
position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[E_AXIS] = e;
|
||||
de_float = 0;
|
||||
#endif
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[E_AXIS] = e;
|
||||
#endif
|
||||
SERIAL_ECHO_START;
|
||||
SERIAL_ECHOLNRPGM(_n(" too long extrusion prevented"));////MSG_ERR_LONG_EXTRUDE_STOP
|
||||
}
|
||||
|
@ -786,15 +836,6 @@ void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate
|
|||
}
|
||||
#endif
|
||||
|
||||
// Prepare to set up new block
|
||||
block_t *block = &block_buffer[block_buffer_head];
|
||||
|
||||
// Set sdlen for calculating sd position
|
||||
block->sdlen = 0;
|
||||
|
||||
// Mark block as not busy (Not executed by the stepper interrupt, could be still tinkered with.)
|
||||
block->busy = false;
|
||||
|
||||
// Number of steps for each axis
|
||||
#ifndef COREXY
|
||||
// default non-h-bot planning
|
||||
|
@ -998,6 +1039,9 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
block->nominal_rate *= speed_factor;
|
||||
}
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
float e_D_ratio = 0;
|
||||
#endif
|
||||
// Compute and limit the acceleration rate for the trapezoid generator.
|
||||
// block->step_event_count ... event count of the fastest axis
|
||||
// block->millimeters ... Euclidian length of the XYZ movement or the E length, if no XYZ movement.
|
||||
|
@ -1005,10 +1049,51 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
if(block->steps_x.wide == 0 && block->steps_y.wide == 0 && block->steps_z.wide == 0)
|
||||
{
|
||||
block->acceleration_st = ceil(cs.retract_acceleration * steps_per_mm); // convert to: acceleration steps/sec^2
|
||||
#ifdef LIN_ADVANCE
|
||||
block->use_advance_lead = false;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
block->acceleration_st = ceil(cs.acceleration * steps_per_mm); // convert to: acceleration steps/sec^2
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
/**
|
||||
* Use LIN_ADVANCE within this block if all these are true:
|
||||
*
|
||||
* block->steps_e : This is a print move, because we checked for X, Y, Z steps before.
|
||||
* extruder_advance_K : There is an advance factor set.
|
||||
* delta_mm[E_AXIS] > 0 : Extruder is running forward (e.g., for "Wipe while retracting" (Slic3r) or "Combing" (Cura) moves)
|
||||
* |delta_mm[Z_AXIS]| < 0.5 : Z is only moved for leveling (_not_ for priming)
|
||||
*/
|
||||
block->use_advance_lead = block->steps_e.wide
|
||||
&& extruder_advance_K
|
||||
&& delta_mm[E_AXIS] > 0
|
||||
&& abs(delta_mm[Z_AXIS]) < 0.5;
|
||||
if (block->use_advance_lead) {
|
||||
e_D_ratio = (e - position_float[E_AXIS]) /
|
||||
sqrt(sq(x - position_float[X_AXIS])
|
||||
+ sq(y - position_float[Y_AXIS])
|
||||
+ sq(z - position_float[Z_AXIS]));
|
||||
|
||||
// Check for unusual high e_D ratio to detect if a retract move was combined with the last
|
||||
// print move due to min. steps per segment. Never execute this with advance! This assumes
|
||||
// no one will use a retract length of 0mm < retr_length < ~0.2mm and no one will print
|
||||
// 100mm wide lines using 3mm filament or 35mm wide lines using 1.75mm filament.
|
||||
if (e_D_ratio > 3.0)
|
||||
block->use_advance_lead = false;
|
||||
else {
|
||||
const uint32_t max_accel_steps_per_s2 = cs.max_jerk[E_AXIS] / (extruder_advance_K * e_D_ratio) * steps_per_mm;
|
||||
if (block->acceleration_st > max_accel_steps_per_s2) {
|
||||
block->acceleration_st = max_accel_steps_per_s2;
|
||||
#ifdef LA_DEBUG
|
||||
SERIAL_ECHOLNPGM("LA: Block acceleration limited due to max E-jerk");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// Limit acceleration per axis
|
||||
//FIXME Vojtech: One shall rather limit a projection of the acceleration vector instead of using the limit.
|
||||
if(((float)block->acceleration_st * (float)block->steps_x.wide / (float)block->step_event_count.wide) > axis_steps_per_sqr_second[X_AXIS])
|
||||
|
@ -1041,6 +1126,47 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
|
||||
block->acceleration_rate = (long)((float)block->acceleration_st * (16777216.0 / (F_CPU / 8.0)));
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
if (block->use_advance_lead) {
|
||||
// the nominal speed doesn't change past this point: calculate the compression ratio for the
|
||||
// segment and the required advance steps
|
||||
block->adv_comp = extruder_advance_K * e_D_ratio * cs.axis_steps_per_unit[E_AXIS];
|
||||
block->max_adv_steps = block->nominal_speed * block->adv_comp;
|
||||
|
||||
// to save more space we avoid another copy of calc_timer and go through slow division, but we
|
||||
// still need to replicate the *exact* same step grouping policy (see below)
|
||||
float advance_speed = (extruder_advance_K * e_D_ratio * block->acceleration * cs.axis_steps_per_unit[E_AXIS]);
|
||||
if (advance_speed > MAX_STEP_FREQUENCY) advance_speed = MAX_STEP_FREQUENCY;
|
||||
float advance_rate = (F_CPU / 8.0) / advance_speed;
|
||||
if (advance_speed > 20000) {
|
||||
block->advance_rate = advance_rate * 4;
|
||||
block->advance_step_loops = 4;
|
||||
}
|
||||
else if (advance_speed > 10000) {
|
||||
block->advance_rate = advance_rate * 2;
|
||||
block->advance_step_loops = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// never overflow the internal accumulator with very low rates
|
||||
if (advance_rate < UINT16_MAX)
|
||||
block->advance_rate = advance_rate;
|
||||
else
|
||||
block->advance_rate = UINT16_MAX;
|
||||
block->advance_step_loops = 1;
|
||||
}
|
||||
|
||||
#ifdef LA_DEBUG
|
||||
if (block->advance_step_loops > 2)
|
||||
// @wavexx: we should really check for the difference between step_loops and
|
||||
// advance_step_loops instead. A difference of more than 1 will lead
|
||||
// to uneven speed and *should* be adjusted here by furthermore
|
||||
// reducing the speed.
|
||||
SERIAL_ECHOLNPGM("LA: More than 2 steps per eISR loop executed.");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
// Start with a safe speed.
|
||||
// Safe speed is the speed, from which the machine may halt to stop immediately.
|
||||
float safe_speed = block->nominal_speed;
|
||||
|
@ -1069,6 +1195,13 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
// Reset the block flag.
|
||||
block->flag = 0;
|
||||
|
||||
if (plan_reset_next_e_sched)
|
||||
{
|
||||
// finally propagate a pending reset
|
||||
block->flag |= BLOCK_FLAG_E_RESET;
|
||||
plan_reset_next_e_sched = false;
|
||||
}
|
||||
|
||||
// Initial limit on the segment entry velocity.
|
||||
float vmax_junction;
|
||||
|
||||
|
@ -1157,37 +1290,6 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
previous_nominal_speed = block->nominal_speed;
|
||||
previous_safe_speed = safe_speed;
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
|
||||
//
|
||||
// Use LIN_ADVANCE for blocks if all these are true:
|
||||
//
|
||||
// esteps : We have E steps todo (a printing move)
|
||||
//
|
||||
// block->steps[X_AXIS] || block->steps[Y_AXIS] : We have a movement in XY direction (i.e., not retract / prime).
|
||||
//
|
||||
// extruder_advance_k : There is an advance factor set.
|
||||
//
|
||||
// block->steps[E_AXIS] != block->step_event_count : A problem occurs if the move before a retract is too small.
|
||||
// In that case, the retract and move will be executed together.
|
||||
// This leads to too many advance steps due to a huge e_acceleration.
|
||||
// The math is good, but we must avoid retract moves with advance!
|
||||
// de_float > 0.0 : Extruder is running forward (e.g., for "Wipe while retracting" (Slic3r) or "Combing" (Cura) moves)
|
||||
//
|
||||
block->use_advance_lead = block->steps_e.wide
|
||||
&& (block->steps_x.wide || block->steps_y.wide)
|
||||
&& extruder_advance_k
|
||||
&& (uint32_t)block->steps_e.wide != block->step_event_count.wide
|
||||
&& de_float > 0.0;
|
||||
if (block->use_advance_lead)
|
||||
block->abs_adv_steps_multiplier8 = lround(
|
||||
extruder_advance_k
|
||||
* ((advance_ed_ratio < 0.000001) ? de_float / mm_D_float : advance_ed_ratio) // Use the fixed ratio, if set
|
||||
* (block->nominal_speed / (float)block->nominal_rate)
|
||||
* cs.axis_steps_per_unit[E_AXIS] * 256.0
|
||||
);
|
||||
#endif
|
||||
|
||||
// Precalculate the division, so when all the trapezoids in the planner queue get recalculated, the division is not repeated.
|
||||
block->speed_factor = block->nominal_rate / block->nominal_speed;
|
||||
calculate_trapezoid_for_block(block, block->entry_speed, safe_speed);
|
||||
|
@ -1201,12 +1303,12 @@ Having the real displacement of the head, we can calculate the total movement le
|
|||
// Update position
|
||||
memcpy(position, target, sizeof(target)); // position[] = target[]
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[X_AXIS] = x;
|
||||
position_float[Y_AXIS] = y;
|
||||
position_float[Z_AXIS] = z;
|
||||
position_float[E_AXIS] = e;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Recalculate the trapezoids to maximize speed at the segment transitions while respecting
|
||||
// the machine limits (maximum acceleration and maximum jerk).
|
||||
|
@ -1250,14 +1352,7 @@ void plan_set_position(float x, float y, float z, const float &e)
|
|||
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
|
||||
#endif // ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
// Apply the machine correction matrix.
|
||||
if (world2machine_correction_mode != WORLD2MACHINE_CORRECTION_NONE)
|
||||
{
|
||||
float tmpx = x;
|
||||
float tmpy = y;
|
||||
x = world2machine_rotation_and_skew[0][0] * tmpx + world2machine_rotation_and_skew[0][1] * tmpy + world2machine_shift[0];
|
||||
y = world2machine_rotation_and_skew[1][0] * tmpx + world2machine_rotation_and_skew[1][1] * tmpy + world2machine_shift[1];
|
||||
}
|
||||
world2machine(x, y);
|
||||
|
||||
position[X_AXIS] = lround(x*cs.axis_steps_per_unit[X_AXIS]);
|
||||
position[Y_AXIS] = lround(y*cs.axis_steps_per_unit[Y_AXIS]);
|
||||
|
@ -1269,12 +1364,12 @@ void plan_set_position(float x, float y, float z, const float &e)
|
|||
position[Z_AXIS] = lround(z*cs.axis_steps_per_unit[Z_AXIS]);
|
||||
#endif // ENABLE_MESH_BED_LEVELING
|
||||
position[E_AXIS] = lround(e*cs.axis_steps_per_unit[E_AXIS]);
|
||||
#ifdef LIN_ADVANCE
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[X_AXIS] = x;
|
||||
position_float[Y_AXIS] = y;
|
||||
position_float[Z_AXIS] = z;
|
||||
position_float[E_AXIS] = e;
|
||||
#endif
|
||||
#endif
|
||||
st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]);
|
||||
previous_nominal_speed = 0.0; // Resets planner junction speeds. Assumes start from rest.
|
||||
previous_speed[0] = 0.0;
|
||||
|
@ -1286,11 +1381,11 @@ void plan_set_position(float x, float y, float z, const float &e)
|
|||
// Only useful in the bed leveling routine, when the mesh bed leveling is off.
|
||||
void plan_set_z_position(const float &z)
|
||||
{
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[Z_AXIS] = z;
|
||||
#endif
|
||||
position[Z_AXIS] = lround(z*cs.axis_steps_per_unit[Z_AXIS]);
|
||||
st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]);
|
||||
#ifdef LIN_ADVANCE
|
||||
position_float[Z_AXIS] = z;
|
||||
#endif
|
||||
position[Z_AXIS] = lround(z*cs.axis_steps_per_unit[Z_AXIS]);
|
||||
st_set_position(position[X_AXIS], position[Y_AXIS], position[Z_AXIS], position[E_AXIS]);
|
||||
}
|
||||
|
||||
void plan_set_e_position(const float &e)
|
||||
|
@ -1302,6 +1397,11 @@ void plan_set_e_position(const float &e)
|
|||
st_set_e_position(position[E_AXIS]);
|
||||
}
|
||||
|
||||
void plan_reset_next_e()
|
||||
{
|
||||
plan_reset_next_e_queue = true;
|
||||
}
|
||||
|
||||
#ifdef PREVENT_DANGEROUS_EXTRUDE
|
||||
void set_extrude_min_temp(float temp)
|
||||
{
|
||||
|
|
|
@ -44,6 +44,8 @@ enum BlockFlag {
|
|||
// than 32767, therefore the DDA algorithm may run with 16bit resolution only.
|
||||
// In addition, the stepper routine will not do any end stop checking for higher performance.
|
||||
BLOCK_FLAG_DDA_LOWRES = 8,
|
||||
// Block starts with Zeroed E counter
|
||||
BLOCK_FLAG_E_RESET = 16,
|
||||
};
|
||||
|
||||
union dda_isteps_t
|
||||
|
@ -110,17 +112,24 @@ typedef struct {
|
|||
|
||||
// Pre-calculated division for the calculate_trapezoid_for_block() routine to run faster.
|
||||
float speed_factor;
|
||||
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
bool use_advance_lead;
|
||||
unsigned long abs_adv_steps_multiplier8; // Factorised by 2^8 to avoid float
|
||||
bool use_advance_lead; // Whether the current block uses LA
|
||||
uint16_t advance_rate, // Step-rate for extruder speed
|
||||
max_adv_steps, // max. advance steps to get cruising speed pressure (not always nominal_speed!)
|
||||
final_adv_steps; // advance steps due to exit speed
|
||||
uint8_t advance_step_loops; // Number of stepper ticks for each advance isr
|
||||
float adv_comp; // Precomputed E compression factor
|
||||
#endif
|
||||
|
||||
uint16_t sdlen;
|
||||
// Save/recovery state data
|
||||
float gcode_target[NUM_AXIS]; // Target (abs mm) of the original Gcode instruction
|
||||
uint16_t gcode_feedrate; // Default and/or move feedrate
|
||||
uint16_t sdlen; // Length of the Gcode instruction
|
||||
} block_t;
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
extern float extruder_advance_k, advance_ed_ratio;
|
||||
extern float extruder_advance_K; // Linear-advance K factor
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_AUTO_BED_LEVELING
|
||||
|
@ -147,7 +156,7 @@ vector_3 plan_get_position();
|
|||
/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder.
|
||||
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder);
|
||||
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder);
|
||||
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, uint8_t extruder, const float* gcode_target = NULL);
|
||||
//void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
|
||||
#endif // ENABLE_AUTO_BED_LEVELING
|
||||
|
||||
|
@ -161,6 +170,9 @@ void plan_set_position(float x, float y, float z, const float &e);
|
|||
void plan_set_z_position(const float &z);
|
||||
void plan_set_e_position(const float &e);
|
||||
|
||||
// Reset the E position to zero at the start of the next segment
|
||||
void plan_reset_next_e();
|
||||
|
||||
extern bool e_active();
|
||||
|
||||
void check_axes_activity();
|
||||
|
@ -238,6 +250,7 @@ FORCE_INLINE bool planner_queue_full() {
|
|||
// wait for the steppers to stop,
|
||||
// update planner's current position and the current_position of the front end.
|
||||
extern void planner_abort_hard();
|
||||
extern bool waiting_inside_plan_buffer_line_print_aborted;
|
||||
|
||||
#ifdef PREVENT_DANGEROUS_EXTRUDE
|
||||
void set_extrude_min_temp(float temp);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
//#include <inttypes.h>
|
||||
//#include <avr/eeprom.h>
|
||||
//#include "eeprom.h"
|
||||
#include "backlight.h"
|
||||
|
||||
|
||||
//eSOUND_MODE eSoundMode=e_SOUND_MODE_LOUD;
|
||||
|
@ -63,6 +64,7 @@ Sound_SaveMode();
|
|||
|
||||
//if critical is true then silend and once mode is ignored
|
||||
void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){
|
||||
backlight_wake();
|
||||
if (!critical){
|
||||
if (eSoundMode != e_SOUND_MODE_SILENT){
|
||||
if(!tone_){
|
||||
|
@ -135,6 +137,7 @@ switch(eSoundMode)
|
|||
|
||||
static void Sound_DoSound_Blind_Alert(void)
|
||||
{
|
||||
backlight_wake(1);
|
||||
uint8_t nI;
|
||||
|
||||
for(nI=0; nI<20; nI++)
|
||||
|
@ -148,6 +151,7 @@ static void Sound_DoSound_Blind_Alert(void)
|
|||
|
||||
static void Sound_DoSound_Encoder_Move(void)
|
||||
{
|
||||
backlight_wake();
|
||||
uint8_t nI;
|
||||
|
||||
for(nI=0;nI<5;nI++)
|
||||
|
@ -161,6 +165,7 @@ uint8_t nI;
|
|||
|
||||
static void Sound_DoSound_Echo(void)
|
||||
{
|
||||
backlight_wake();
|
||||
uint8_t nI;
|
||||
|
||||
for(nI=0;nI<10;nI++)
|
||||
|
@ -174,6 +179,7 @@ for(nI=0;nI<10;nI++)
|
|||
|
||||
static void Sound_DoSound_Prompt(void)
|
||||
{
|
||||
backlight_wake(2);
|
||||
WRITE(BEEPER,HIGH);
|
||||
_delay_ms(500);
|
||||
WRITE(BEEPER,LOW);
|
||||
|
@ -181,6 +187,7 @@ WRITE(BEEPER,LOW);
|
|||
|
||||
static void Sound_DoSound_Alert(bool bOnce)
|
||||
{
|
||||
backlight_wake();
|
||||
uint8_t nI,nMax;
|
||||
|
||||
nMax=bOnce?1:3;
|
||||
|
|
|
@ -3,12 +3,6 @@
|
|||
#define SOUND_H
|
||||
|
||||
|
||||
#define MSG_SOUND_MODE_LOUD "Sound [loud]"
|
||||
#define MSG_SOUND_MODE_ONCE "Sound [once]"
|
||||
#define MSG_SOUND_MODE_SILENT "Sound [silent]"
|
||||
#define MSG_SOUND_MODE_BLIND "Sound [assist]"
|
||||
|
||||
|
||||
#define e_SOUND_MODE_NULL 0xFF
|
||||
typedef enum
|
||||
{e_SOUND_MODE_LOUD,e_SOUND_MODE_ONCE,e_SOUND_MODE_SILENT,e_SOUND_MODE_BLIND} eSOUND_MODE;
|
||||
|
|
147
Firmware/speed_lookuptable.cpp
Normal file
147
Firmware/speed_lookuptable.cpp
Normal file
|
@ -0,0 +1,147 @@
|
|||
#include "speed_lookuptable.h"
|
||||
|
||||
#if F_CPU == 16000000
|
||||
|
||||
const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\
|
||||
{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135},
|
||||
{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32},
|
||||
{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14},
|
||||
{ 323, 13}, { 310, 11}, { 299, 11}, { 288, 11}, { 277, 9}, { 268, 9}, { 259, 8}, { 251, 8},
|
||||
{ 243, 8}, { 235, 7}, { 228, 6}, { 222, 6}, { 216, 6}, { 210, 6}, { 204, 5}, { 199, 5},
|
||||
{ 194, 5}, { 189, 4}, { 185, 4}, { 181, 4}, { 177, 4}, { 173, 4}, { 169, 4}, { 165, 3},
|
||||
{ 162, 3}, { 159, 4}, { 155, 3}, { 152, 3}, { 149, 2}, { 147, 3}, { 144, 3}, { 141, 2},
|
||||
{ 139, 3}, { 136, 2}, { 134, 2}, { 132, 3}, { 129, 2}, { 127, 2}, { 125, 2}, { 123, 2},
|
||||
{ 121, 2}, { 119, 1}, { 118, 2}, { 116, 2}, { 114, 1}, { 113, 2}, { 111, 2}, { 109, 1},
|
||||
{ 108, 2}, { 106, 1}, { 105, 2}, { 103, 1}, { 102, 1}, { 101, 1}, { 100, 2}, { 98, 1},
|
||||
{ 97, 1}, { 96, 1}, { 95, 2}, { 93, 1}, { 92, 1}, { 91, 1}, { 90, 1}, { 89, 1},
|
||||
{ 88, 1}, { 87, 1}, { 86, 1}, { 85, 1}, { 84, 1}, { 83, 0}, { 83, 1}, { 82, 1},
|
||||
{ 81, 1}, { 80, 1}, { 79, 1}, { 78, 0}, { 78, 1}, { 77, 1}, { 76, 1}, { 75, 0},
|
||||
{ 75, 1}, { 74, 1}, { 73, 1}, { 72, 0}, { 72, 1}, { 71, 1}, { 70, 0}, { 70, 1},
|
||||
{ 69, 0}, { 69, 1}, { 68, 1}, { 67, 0}, { 67, 1}, { 66, 0}, { 66, 1}, { 65, 0},
|
||||
{ 65, 1}, { 64, 1}, { 63, 0}, { 63, 1}, { 62, 0}, { 62, 1}, { 61, 0}, { 61, 1},
|
||||
{ 60, 0}, { 60, 0}, { 60, 1}, { 59, 0}, { 59, 1}, { 58, 0}, { 58, 1}, { 57, 0},
|
||||
{ 57, 1}, { 56, 0}, { 56, 0}, { 56, 1}, { 55, 0}, { 55, 1}, { 54, 0}, { 54, 0},
|
||||
{ 54, 1}, { 53, 0}, { 53, 0}, { 53, 1}, { 52, 0}, { 52, 0}, { 52, 1}, { 51, 0},
|
||||
{ 51, 0}, { 51, 1}, { 50, 0}, { 50, 0}, { 50, 1}, { 49, 0}, { 49, 0}, { 49, 1},
|
||||
{ 48, 0}, { 48, 0}, { 48, 1}, { 47, 0}, { 47, 0}, { 47, 0}, { 47, 1}, { 46, 0},
|
||||
{ 46, 0}, { 46, 1}, { 45, 0}, { 45, 0}, { 45, 0}, { 45, 1}, { 44, 0}, { 44, 0},
|
||||
{ 44, 0}, { 44, 1}, { 43, 0}, { 43, 0}, { 43, 0}, { 43, 1}, { 42, 0}, { 42, 0},
|
||||
{ 42, 0}, { 42, 1}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 1}, { 40, 0},
|
||||
{ 40, 0}, { 40, 0}, { 40, 0}, { 40, 1}, { 39, 0}, { 39, 0}, { 39, 0}, { 39, 0},
|
||||
{ 39, 1}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 1}, { 37, 0}, { 37, 0},
|
||||
{ 37, 0}, { 37, 0}, { 37, 0}, { 37, 1}, { 36, 0}, { 36, 0}, { 36, 0}, { 36, 0},
|
||||
{ 36, 1}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 1},
|
||||
{ 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 1}, { 33, 0}, { 33, 0},
|
||||
{ 33, 0}, { 33, 0}, { 33, 0}, { 33, 0}, { 33, 1}, { 32, 0}, { 32, 0}, { 32, 0},
|
||||
{ 32, 0}, { 32, 0}, { 32, 0}, { 32, 0}, { 32, 1}, { 31, 0}, { 31, 0}, { 31, 0},
|
||||
{ 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0}
|
||||
};
|
||||
|
||||
const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\
|
||||
{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894},
|
||||
{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657},
|
||||
{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331},
|
||||
{ 8928, 308}, { 8620, 287}, { 8333, 269}, { 8064, 252}, { 7812, 237}, { 7575, 223}, { 7352, 210}, { 7142, 198},
|
||||
{ 6944, 188}, { 6756, 178}, { 6578, 168}, { 6410, 160}, { 6250, 153}, { 6097, 145}, { 5952, 139}, { 5813, 132},
|
||||
{ 5681, 126}, { 5555, 121}, { 5434, 115}, { 5319, 111}, { 5208, 106}, { 5102, 102}, { 5000, 99}, { 4901, 94},
|
||||
{ 4807, 91}, { 4716, 87}, { 4629, 84}, { 4545, 81}, { 4464, 79}, { 4385, 75}, { 4310, 73}, { 4237, 71},
|
||||
{ 4166, 68}, { 4098, 66}, { 4032, 64}, { 3968, 62}, { 3906, 60}, { 3846, 59}, { 3787, 56}, { 3731, 55},
|
||||
{ 3676, 53}, { 3623, 52}, { 3571, 50}, { 3521, 49}, { 3472, 48}, { 3424, 46}, { 3378, 45}, { 3333, 44},
|
||||
{ 3289, 43}, { 3246, 41}, { 3205, 41}, { 3164, 39}, { 3125, 39}, { 3086, 38}, { 3048, 36}, { 3012, 36},
|
||||
{ 2976, 35}, { 2941, 35}, { 2906, 33}, { 2873, 33}, { 2840, 32}, { 2808, 31}, { 2777, 30}, { 2747, 30},
|
||||
{ 2717, 29}, { 2688, 29}, { 2659, 28}, { 2631, 27}, { 2604, 27}, { 2577, 26}, { 2551, 26}, { 2525, 25},
|
||||
{ 2500, 25}, { 2475, 25}, { 2450, 23}, { 2427, 24}, { 2403, 23}, { 2380, 22}, { 2358, 22}, { 2336, 22},
|
||||
{ 2314, 21}, { 2293, 21}, { 2272, 20}, { 2252, 20}, { 2232, 20}, { 2212, 20}, { 2192, 19}, { 2173, 18},
|
||||
{ 2155, 19}, { 2136, 18}, { 2118, 18}, { 2100, 17}, { 2083, 17}, { 2066, 17}, { 2049, 17}, { 2032, 16},
|
||||
{ 2016, 16}, { 2000, 16}, { 1984, 16}, { 1968, 15}, { 1953, 16}, { 1937, 14}, { 1923, 15}, { 1908, 15},
|
||||
{ 1893, 14}, { 1879, 14}, { 1865, 14}, { 1851, 13}, { 1838, 14}, { 1824, 13}, { 1811, 13}, { 1798, 13},
|
||||
{ 1785, 12}, { 1773, 13}, { 1760, 12}, { 1748, 12}, { 1736, 12}, { 1724, 12}, { 1712, 12}, { 1700, 11},
|
||||
{ 1689, 12}, { 1677, 11}, { 1666, 11}, { 1655, 11}, { 1644, 11}, { 1633, 10}, { 1623, 11}, { 1612, 10},
|
||||
{ 1602, 10}, { 1592, 10}, { 1582, 10}, { 1572, 10}, { 1562, 10}, { 1552, 9}, { 1543, 10}, { 1533, 9},
|
||||
{ 1524, 9}, { 1515, 9}, { 1506, 9}, { 1497, 9}, { 1488, 9}, { 1479, 9}, { 1470, 9}, { 1461, 8},
|
||||
{ 1453, 8}, { 1445, 9}, { 1436, 8}, { 1428, 8}, { 1420, 8}, { 1412, 8}, { 1404, 8}, { 1396, 8},
|
||||
{ 1388, 7}, { 1381, 8}, { 1373, 7}, { 1366, 8}, { 1358, 7}, { 1351, 7}, { 1344, 8}, { 1336, 7},
|
||||
{ 1329, 7}, { 1322, 7}, { 1315, 7}, { 1308, 6}, { 1302, 7}, { 1295, 7}, { 1288, 6}, { 1282, 7},
|
||||
{ 1275, 6}, { 1269, 7}, { 1262, 6}, { 1256, 6}, { 1250, 7}, { 1243, 6}, { 1237, 6}, { 1231, 6},
|
||||
{ 1225, 6}, { 1219, 6}, { 1213, 6}, { 1207, 6}, { 1201, 5}, { 1196, 6}, { 1190, 6}, { 1184, 5},
|
||||
{ 1179, 6}, { 1173, 5}, { 1168, 6}, { 1162, 5}, { 1157, 5}, { 1152, 6}, { 1146, 5}, { 1141, 5},
|
||||
{ 1136, 5}, { 1131, 5}, { 1126, 5}, { 1121, 5}, { 1116, 5}, { 1111, 5}, { 1106, 5}, { 1101, 5},
|
||||
{ 1096, 5}, { 1091, 5}, { 1086, 4}, { 1082, 5}, { 1077, 5}, { 1072, 4}, { 1068, 5}, { 1063, 4},
|
||||
{ 1059, 5}, { 1054, 4}, { 1050, 4}, { 1046, 5}, { 1041, 4}, { 1037, 4}, { 1033, 5}, { 1028, 4},
|
||||
{ 1024, 4}, { 1020, 4}, { 1016, 4}, { 1012, 4}, { 1008, 4}, { 1004, 4}, { 1000, 4}, { 996, 4},
|
||||
{ 992, 4}, { 988, 4}, { 984, 4}, { 980, 4}, { 976, 4}, { 972, 4}, { 968, 3}, { 965, 3}
|
||||
};
|
||||
|
||||
#elif F_CPU == 20000000
|
||||
|
||||
const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {
|
||||
{62500, 54055}, {8445, 3917}, {4528, 1434}, {3094, 745}, {2349, 456}, {1893, 307}, {1586, 222}, {1364, 167},
|
||||
{1197, 131}, {1066, 105}, {961, 86}, {875, 72}, {803, 61}, {742, 53}, {689, 45}, {644, 40},
|
||||
{604, 35}, {569, 32}, {537, 28}, {509, 25}, {484, 23}, {461, 21}, {440, 19}, {421, 17},
|
||||
{404, 16}, {388, 15}, {373, 14}, {359, 13}, {346, 12}, {334, 11}, {323, 10}, {313, 10},
|
||||
{303, 9}, {294, 9}, {285, 8}, {277, 7}, {270, 8}, {262, 7}, {255, 6}, {249, 6},
|
||||
{243, 6}, {237, 6}, {231, 5}, {226, 5}, {221, 5}, {216, 5}, {211, 4}, {207, 5},
|
||||
{202, 4}, {198, 4}, {194, 4}, {190, 3}, {187, 4}, {183, 3}, {180, 3}, {177, 4},
|
||||
{173, 3}, {170, 3}, {167, 2}, {165, 3}, {162, 3}, {159, 2}, {157, 3}, {154, 2},
|
||||
{152, 3}, {149, 2}, {147, 2}, {145, 2}, {143, 2}, {141, 2}, {139, 2}, {137, 2},
|
||||
{135, 2}, {133, 2}, {131, 2}, {129, 1}, {128, 2}, {126, 2}, {124, 1}, {123, 2},
|
||||
{121, 1}, {120, 2}, {118, 1}, {117, 1}, {116, 2}, {114, 1}, {113, 1}, {112, 2},
|
||||
{110, 1}, {109, 1}, {108, 1}, {107, 2}, {105, 1}, {104, 1}, {103, 1}, {102, 1},
|
||||
{101, 1}, {100, 1}, {99, 1}, {98, 1}, {97, 1}, {96, 1}, {95, 1}, {94, 1},
|
||||
{93, 1}, {92, 1}, {91, 0}, {91, 1}, {90, 1}, {89, 1}, {88, 1}, {87, 0},
|
||||
{87, 1}, {86, 1}, {85, 1}, {84, 0}, {84, 1}, {83, 1}, {82, 1}, {81, 0},
|
||||
{81, 1}, {80, 1}, {79, 0}, {79, 1}, {78, 0}, {78, 1}, {77, 1}, {76, 0},
|
||||
{76, 1}, {75, 0}, {75, 1}, {74, 1}, {73, 0}, {73, 1}, {72, 0}, {72, 1},
|
||||
{71, 0}, {71, 1}, {70, 0}, {70, 1}, {69, 0}, {69, 1}, {68, 0}, {68, 1},
|
||||
{67, 0}, {67, 1}, {66, 0}, {66, 1}, {65, 0}, {65, 0}, {65, 1}, {64, 0},
|
||||
{64, 1}, {63, 0}, {63, 1}, {62, 0}, {62, 0}, {62, 1}, {61, 0}, {61, 1},
|
||||
{60, 0}, {60, 0}, {60, 1}, {59, 0}, {59, 0}, {59, 1}, {58, 0}, {58, 0},
|
||||
{58, 1}, {57, 0}, {57, 0}, {57, 1}, {56, 0}, {56, 0}, {56, 1}, {55, 0},
|
||||
{55, 0}, {55, 1}, {54, 0}, {54, 0}, {54, 1}, {53, 0}, {53, 0}, {53, 0},
|
||||
{53, 1}, {52, 0}, {52, 0}, {52, 1}, {51, 0}, {51, 0}, {51, 0}, {51, 1},
|
||||
{50, 0}, {50, 0}, {50, 0}, {50, 1}, {49, 0}, {49, 0}, {49, 0}, {49, 1},
|
||||
{48, 0}, {48, 0}, {48, 0}, {48, 1}, {47, 0}, {47, 0}, {47, 0}, {47, 1},
|
||||
{46, 0}, {46, 0}, {46, 0}, {46, 0}, {46, 1}, {45, 0}, {45, 0}, {45, 0},
|
||||
{45, 1}, {44, 0}, {44, 0}, {44, 0}, {44, 0}, {44, 1}, {43, 0}, {43, 0},
|
||||
{43, 0}, {43, 0}, {43, 1}, {42, 0}, {42, 0}, {42, 0}, {42, 0}, {42, 0},
|
||||
{42, 1}, {41, 0}, {41, 0}, {41, 0}, {41, 0}, {41, 0}, {41, 1}, {40, 0},
|
||||
{40, 0}, {40, 0}, {40, 0}, {40, 1}, {39, 0}, {39, 0}, {39, 0}, {39, 0},
|
||||
{39, 0}, {39, 0}, {39, 1}, {38, 0}, {38, 0}, {38, 0}, {38, 0}, {38, 0},
|
||||
};
|
||||
|
||||
const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {
|
||||
{62500, 10417}, {52083, 7441}, {44642, 5580}, {39062, 4340}, {34722, 3472}, {31250, 2841}, {28409, 2368}, {26041, 2003},
|
||||
{24038, 1717}, {22321, 1488}, {20833, 1302}, {19531, 1149}, {18382, 1021}, {17361, 914}, {16447, 822}, {15625, 745},
|
||||
{14880, 676}, {14204, 618}, {13586, 566}, {13020, 520}, {12500, 481}, {12019, 445}, {11574, 414}, {11160, 385},
|
||||
{10775, 359}, {10416, 336}, {10080, 315}, {9765, 296}, {9469, 278}, {9191, 263}, {8928, 248}, {8680, 235},
|
||||
{8445, 222}, {8223, 211}, {8012, 200}, {7812, 191}, {7621, 181}, {7440, 173}, {7267, 165}, {7102, 158},
|
||||
{6944, 151}, {6793, 145}, {6648, 138}, {6510, 133}, {6377, 127}, {6250, 123}, {6127, 118}, {6009, 113},
|
||||
{5896, 109}, {5787, 106}, {5681, 101}, {5580, 98}, {5482, 95}, {5387, 91}, {5296, 88}, {5208, 86},
|
||||
{5122, 82}, {5040, 80}, {4960, 78}, {4882, 75}, {4807, 73}, {4734, 70}, {4664, 69}, {4595, 67},
|
||||
{4528, 64}, {4464, 63}, {4401, 61}, {4340, 60}, {4280, 58}, {4222, 56}, {4166, 55}, {4111, 53},
|
||||
{4058, 52}, {4006, 51}, {3955, 49}, {3906, 48}, {3858, 48}, {3810, 45}, {3765, 45}, {3720, 44},
|
||||
{3676, 43}, {3633, 42}, {3591, 40}, {3551, 40}, {3511, 39}, {3472, 38}, {3434, 38}, {3396, 36},
|
||||
{3360, 36}, {3324, 35}, {3289, 34}, {3255, 34}, {3221, 33}, {3188, 32}, {3156, 31}, {3125, 31},
|
||||
{3094, 31}, {3063, 30}, {3033, 29}, {3004, 28}, {2976, 28}, {2948, 28}, {2920, 27}, {2893, 27},
|
||||
{2866, 26}, {2840, 25}, {2815, 25}, {2790, 25}, {2765, 24}, {2741, 24}, {2717, 24}, {2693, 23},
|
||||
{2670, 22}, {2648, 22}, {2626, 22}, {2604, 22}, {2582, 21}, {2561, 21}, {2540, 20}, {2520, 20},
|
||||
{2500, 20}, {2480, 20}, {2460, 19}, {2441, 19}, {2422, 19}, {2403, 18}, {2385, 18}, {2367, 18},
|
||||
{2349, 17}, {2332, 18}, {2314, 17}, {2297, 16}, {2281, 17}, {2264, 16}, {2248, 16}, {2232, 16},
|
||||
{2216, 16}, {2200, 15}, {2185, 15}, {2170, 15}, {2155, 15}, {2140, 15}, {2125, 14}, {2111, 14},
|
||||
{2097, 14}, {2083, 14}, {2069, 14}, {2055, 13}, {2042, 13}, {2029, 13}, {2016, 13}, {2003, 13},
|
||||
{1990, 13}, {1977, 12}, {1965, 12}, {1953, 13}, {1940, 11}, {1929, 12}, {1917, 12}, {1905, 12},
|
||||
{1893, 11}, {1882, 11}, {1871, 11}, {1860, 11}, {1849, 11}, {1838, 11}, {1827, 11}, {1816, 10},
|
||||
{1806, 11}, {1795, 10}, {1785, 10}, {1775, 10}, {1765, 10}, {1755, 10}, {1745, 9}, {1736, 10},
|
||||
{1726, 9}, {1717, 10}, {1707, 9}, {1698, 9}, {1689, 9}, {1680, 9}, {1671, 9}, {1662, 9},
|
||||
{1653, 9}, {1644, 8}, {1636, 9}, {1627, 8}, {1619, 9}, {1610, 8}, {1602, 8}, {1594, 8},
|
||||
{1586, 8}, {1578, 8}, {1570, 8}, {1562, 8}, {1554, 7}, {1547, 8}, {1539, 8}, {1531, 7},
|
||||
{1524, 8}, {1516, 7}, {1509, 7}, {1502, 7}, {1495, 7}, {1488, 7}, {1481, 7}, {1474, 7},
|
||||
{1467, 7}, {1460, 7}, {1453, 7}, {1446, 6}, {1440, 7}, {1433, 7}, {1426, 6}, {1420, 6},
|
||||
{1414, 7}, {1407, 6}, {1401, 6}, {1395, 7}, {1388, 6}, {1382, 6}, {1376, 6}, {1370, 6},
|
||||
{1364, 6}, {1358, 6}, {1352, 6}, {1346, 5}, {1341, 6}, {1335, 6}, {1329, 5}, {1324, 6},
|
||||
{1318, 5}, {1313, 6}, {1307, 5}, {1302, 6}, {1296, 5}, {1291, 5}, {1286, 6}, {1280, 5},
|
||||
{1275, 5}, {1270, 5}, {1265, 5}, {1260, 5}, {1255, 5}, {1250, 5}, {1245, 5}, {1240, 5},
|
||||
{1235, 5}, {1230, 5}, {1225, 5}, {1220, 5}, {1215, 4}, {1211, 5}, {1206, 5}, {1201, 5},
|
||||
};
|
||||
|
||||
#endif
|
|
@ -3,150 +3,123 @@
|
|||
|
||||
#include "Marlin.h"
|
||||
|
||||
#if F_CPU == 16000000
|
||||
extern const uint16_t speed_lookuptable_fast[256][2] PROGMEM;
|
||||
extern const uint16_t speed_lookuptable_slow[256][2] PROGMEM;
|
||||
|
||||
const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {\
|
||||
{ 62500, 55556}, { 6944, 3268}, { 3676, 1176}, { 2500, 607}, { 1893, 369}, { 1524, 249}, { 1275, 179}, { 1096, 135},
|
||||
{ 961, 105}, { 856, 85}, { 771, 69}, { 702, 58}, { 644, 49}, { 595, 42}, { 553, 37}, { 516, 32},
|
||||
{ 484, 28}, { 456, 25}, { 431, 23}, { 408, 20}, { 388, 19}, { 369, 16}, { 353, 16}, { 337, 14},
|
||||
{ 323, 13}, { 310, 11}, { 299, 11}, { 288, 11}, { 277, 9}, { 268, 9}, { 259, 8}, { 251, 8},
|
||||
{ 243, 8}, { 235, 7}, { 228, 6}, { 222, 6}, { 216, 6}, { 210, 6}, { 204, 5}, { 199, 5},
|
||||
{ 194, 5}, { 189, 4}, { 185, 4}, { 181, 4}, { 177, 4}, { 173, 4}, { 169, 4}, { 165, 3},
|
||||
{ 162, 3}, { 159, 4}, { 155, 3}, { 152, 3}, { 149, 2}, { 147, 3}, { 144, 3}, { 141, 2},
|
||||
{ 139, 3}, { 136, 2}, { 134, 2}, { 132, 3}, { 129, 2}, { 127, 2}, { 125, 2}, { 123, 2},
|
||||
{ 121, 2}, { 119, 1}, { 118, 2}, { 116, 2}, { 114, 1}, { 113, 2}, { 111, 2}, { 109, 1},
|
||||
{ 108, 2}, { 106, 1}, { 105, 2}, { 103, 1}, { 102, 1}, { 101, 1}, { 100, 2}, { 98, 1},
|
||||
{ 97, 1}, { 96, 1}, { 95, 2}, { 93, 1}, { 92, 1}, { 91, 1}, { 90, 1}, { 89, 1},
|
||||
{ 88, 1}, { 87, 1}, { 86, 1}, { 85, 1}, { 84, 1}, { 83, 0}, { 83, 1}, { 82, 1},
|
||||
{ 81, 1}, { 80, 1}, { 79, 1}, { 78, 0}, { 78, 1}, { 77, 1}, { 76, 1}, { 75, 0},
|
||||
{ 75, 1}, { 74, 1}, { 73, 1}, { 72, 0}, { 72, 1}, { 71, 1}, { 70, 0}, { 70, 1},
|
||||
{ 69, 0}, { 69, 1}, { 68, 1}, { 67, 0}, { 67, 1}, { 66, 0}, { 66, 1}, { 65, 0},
|
||||
{ 65, 1}, { 64, 1}, { 63, 0}, { 63, 1}, { 62, 0}, { 62, 1}, { 61, 0}, { 61, 1},
|
||||
{ 60, 0}, { 60, 0}, { 60, 1}, { 59, 0}, { 59, 1}, { 58, 0}, { 58, 1}, { 57, 0},
|
||||
{ 57, 1}, { 56, 0}, { 56, 0}, { 56, 1}, { 55, 0}, { 55, 1}, { 54, 0}, { 54, 0},
|
||||
{ 54, 1}, { 53, 0}, { 53, 0}, { 53, 1}, { 52, 0}, { 52, 0}, { 52, 1}, { 51, 0},
|
||||
{ 51, 0}, { 51, 1}, { 50, 0}, { 50, 0}, { 50, 1}, { 49, 0}, { 49, 0}, { 49, 1},
|
||||
{ 48, 0}, { 48, 0}, { 48, 1}, { 47, 0}, { 47, 0}, { 47, 0}, { 47, 1}, { 46, 0},
|
||||
{ 46, 0}, { 46, 1}, { 45, 0}, { 45, 0}, { 45, 0}, { 45, 1}, { 44, 0}, { 44, 0},
|
||||
{ 44, 0}, { 44, 1}, { 43, 0}, { 43, 0}, { 43, 0}, { 43, 1}, { 42, 0}, { 42, 0},
|
||||
{ 42, 0}, { 42, 1}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 0}, { 41, 1}, { 40, 0},
|
||||
{ 40, 0}, { 40, 0}, { 40, 0}, { 40, 1}, { 39, 0}, { 39, 0}, { 39, 0}, { 39, 0},
|
||||
{ 39, 1}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 0}, { 38, 1}, { 37, 0}, { 37, 0},
|
||||
{ 37, 0}, { 37, 0}, { 37, 0}, { 37, 1}, { 36, 0}, { 36, 0}, { 36, 0}, { 36, 0},
|
||||
{ 36, 1}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 0}, { 35, 1},
|
||||
{ 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 0}, { 34, 1}, { 33, 0}, { 33, 0},
|
||||
{ 33, 0}, { 33, 0}, { 33, 0}, { 33, 0}, { 33, 1}, { 32, 0}, { 32, 0}, { 32, 0},
|
||||
{ 32, 0}, { 32, 0}, { 32, 0}, { 32, 0}, { 32, 1}, { 31, 0}, { 31, 0}, { 31, 0},
|
||||
{ 31, 0}, { 31, 0}, { 31, 0}, { 31, 1}, { 30, 0}, { 30, 0}, { 30, 0}, { 30, 0}
|
||||
};
|
||||
#ifndef _NO_ASM
|
||||
|
||||
const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {\
|
||||
{ 62500, 12500}, { 50000, 8334}, { 41666, 5952}, { 35714, 4464}, { 31250, 3473}, { 27777, 2777}, { 25000, 2273}, { 22727, 1894},
|
||||
{ 20833, 1603}, { 19230, 1373}, { 17857, 1191}, { 16666, 1041}, { 15625, 920}, { 14705, 817}, { 13888, 731}, { 13157, 657},
|
||||
{ 12500, 596}, { 11904, 541}, { 11363, 494}, { 10869, 453}, { 10416, 416}, { 10000, 385}, { 9615, 356}, { 9259, 331},
|
||||
{ 8928, 308}, { 8620, 287}, { 8333, 269}, { 8064, 252}, { 7812, 237}, { 7575, 223}, { 7352, 210}, { 7142, 198},
|
||||
{ 6944, 188}, { 6756, 178}, { 6578, 168}, { 6410, 160}, { 6250, 153}, { 6097, 145}, { 5952, 139}, { 5813, 132},
|
||||
{ 5681, 126}, { 5555, 121}, { 5434, 115}, { 5319, 111}, { 5208, 106}, { 5102, 102}, { 5000, 99}, { 4901, 94},
|
||||
{ 4807, 91}, { 4716, 87}, { 4629, 84}, { 4545, 81}, { 4464, 79}, { 4385, 75}, { 4310, 73}, { 4237, 71},
|
||||
{ 4166, 68}, { 4098, 66}, { 4032, 64}, { 3968, 62}, { 3906, 60}, { 3846, 59}, { 3787, 56}, { 3731, 55},
|
||||
{ 3676, 53}, { 3623, 52}, { 3571, 50}, { 3521, 49}, { 3472, 48}, { 3424, 46}, { 3378, 45}, { 3333, 44},
|
||||
{ 3289, 43}, { 3246, 41}, { 3205, 41}, { 3164, 39}, { 3125, 39}, { 3086, 38}, { 3048, 36}, { 3012, 36},
|
||||
{ 2976, 35}, { 2941, 35}, { 2906, 33}, { 2873, 33}, { 2840, 32}, { 2808, 31}, { 2777, 30}, { 2747, 30},
|
||||
{ 2717, 29}, { 2688, 29}, { 2659, 28}, { 2631, 27}, { 2604, 27}, { 2577, 26}, { 2551, 26}, { 2525, 25},
|
||||
{ 2500, 25}, { 2475, 25}, { 2450, 23}, { 2427, 24}, { 2403, 23}, { 2380, 22}, { 2358, 22}, { 2336, 22},
|
||||
{ 2314, 21}, { 2293, 21}, { 2272, 20}, { 2252, 20}, { 2232, 20}, { 2212, 20}, { 2192, 19}, { 2173, 18},
|
||||
{ 2155, 19}, { 2136, 18}, { 2118, 18}, { 2100, 17}, { 2083, 17}, { 2066, 17}, { 2049, 17}, { 2032, 16},
|
||||
{ 2016, 16}, { 2000, 16}, { 1984, 16}, { 1968, 15}, { 1953, 16}, { 1937, 14}, { 1923, 15}, { 1908, 15},
|
||||
{ 1893, 14}, { 1879, 14}, { 1865, 14}, { 1851, 13}, { 1838, 14}, { 1824, 13}, { 1811, 13}, { 1798, 13},
|
||||
{ 1785, 12}, { 1773, 13}, { 1760, 12}, { 1748, 12}, { 1736, 12}, { 1724, 12}, { 1712, 12}, { 1700, 11},
|
||||
{ 1689, 12}, { 1677, 11}, { 1666, 11}, { 1655, 11}, { 1644, 11}, { 1633, 10}, { 1623, 11}, { 1612, 10},
|
||||
{ 1602, 10}, { 1592, 10}, { 1582, 10}, { 1572, 10}, { 1562, 10}, { 1552, 9}, { 1543, 10}, { 1533, 9},
|
||||
{ 1524, 9}, { 1515, 9}, { 1506, 9}, { 1497, 9}, { 1488, 9}, { 1479, 9}, { 1470, 9}, { 1461, 8},
|
||||
{ 1453, 8}, { 1445, 9}, { 1436, 8}, { 1428, 8}, { 1420, 8}, { 1412, 8}, { 1404, 8}, { 1396, 8},
|
||||
{ 1388, 7}, { 1381, 8}, { 1373, 7}, { 1366, 8}, { 1358, 7}, { 1351, 7}, { 1344, 8}, { 1336, 7},
|
||||
{ 1329, 7}, { 1322, 7}, { 1315, 7}, { 1308, 6}, { 1302, 7}, { 1295, 7}, { 1288, 6}, { 1282, 7},
|
||||
{ 1275, 6}, { 1269, 7}, { 1262, 6}, { 1256, 6}, { 1250, 7}, { 1243, 6}, { 1237, 6}, { 1231, 6},
|
||||
{ 1225, 6}, { 1219, 6}, { 1213, 6}, { 1207, 6}, { 1201, 5}, { 1196, 6}, { 1190, 6}, { 1184, 5},
|
||||
{ 1179, 6}, { 1173, 5}, { 1168, 6}, { 1162, 5}, { 1157, 5}, { 1152, 6}, { 1146, 5}, { 1141, 5},
|
||||
{ 1136, 5}, { 1131, 5}, { 1126, 5}, { 1121, 5}, { 1116, 5}, { 1111, 5}, { 1106, 5}, { 1101, 5},
|
||||
{ 1096, 5}, { 1091, 5}, { 1086, 4}, { 1082, 5}, { 1077, 5}, { 1072, 4}, { 1068, 5}, { 1063, 4},
|
||||
{ 1059, 5}, { 1054, 4}, { 1050, 4}, { 1046, 5}, { 1041, 4}, { 1037, 4}, { 1033, 5}, { 1028, 4},
|
||||
{ 1024, 4}, { 1020, 4}, { 1016, 4}, { 1012, 4}, { 1008, 4}, { 1004, 4}, { 1000, 4}, { 996, 4},
|
||||
{ 992, 4}, { 988, 4}, { 984, 4}, { 980, 4}, { 976, 4}, { 972, 4}, { 968, 3}, { 965, 3}
|
||||
};
|
||||
// intRes = intIn1 * intIn2 >> 16
|
||||
// uses:
|
||||
// r26 to store 0
|
||||
// r27 to store the byte 1 of the 24 bit result
|
||||
#define MultiU16X8toH16(intRes, charIn1, intIn2) \
|
||||
asm volatile ( \
|
||||
"clr r26 \n\t" \
|
||||
"mul %A1, %B2 \n\t" \
|
||||
"movw %A0, r0 \n\t" \
|
||||
"mul %A1, %A2 \n\t" \
|
||||
"add %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"lsr r0 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"clr r1 \n\t" \
|
||||
: \
|
||||
"=&r" (intRes) \
|
||||
: \
|
||||
"d" (charIn1), \
|
||||
"d" (intIn2) \
|
||||
: \
|
||||
"r26" \
|
||||
)
|
||||
|
||||
#elif F_CPU == 20000000
|
||||
// intRes = longIn1 * longIn2 >> 24
|
||||
// uses:
|
||||
// r26 to store 0
|
||||
// r27 to store the byte 1 of the 48bit result
|
||||
#define MultiU24X24toH16(intRes, longIn1, longIn2) \
|
||||
asm volatile ( \
|
||||
"clr r26 \n\t" \
|
||||
"mul %A1, %B2 \n\t" \
|
||||
"mov r27, r1 \n\t" \
|
||||
"mul %B1, %C2 \n\t" \
|
||||
"movw %A0, r0 \n\t" \
|
||||
"mul %C1, %C2 \n\t" \
|
||||
"add %B0, r0 \n\t" \
|
||||
"mul %C1, %B2 \n\t" \
|
||||
"add %A0, r0 \n\t" \
|
||||
"adc %B0, r1 \n\t" \
|
||||
"mul %A1, %C2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %B1, %B2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %C1, %A2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %B1, %A2 \n\t" \
|
||||
"add r27, r1 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"lsr r27 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"clr r1 \n\t" \
|
||||
: \
|
||||
"=&r" (intRes) \
|
||||
: \
|
||||
"d" (longIn1), \
|
||||
"d" (longIn2) \
|
||||
: \
|
||||
"r26" , "r27" \
|
||||
)
|
||||
|
||||
const uint16_t speed_lookuptable_fast[256][2] PROGMEM = {
|
||||
{62500, 54055}, {8445, 3917}, {4528, 1434}, {3094, 745}, {2349, 456}, {1893, 307}, {1586, 222}, {1364, 167},
|
||||
{1197, 131}, {1066, 105}, {961, 86}, {875, 72}, {803, 61}, {742, 53}, {689, 45}, {644, 40},
|
||||
{604, 35}, {569, 32}, {537, 28}, {509, 25}, {484, 23}, {461, 21}, {440, 19}, {421, 17},
|
||||
{404, 16}, {388, 15}, {373, 14}, {359, 13}, {346, 12}, {334, 11}, {323, 10}, {313, 10},
|
||||
{303, 9}, {294, 9}, {285, 8}, {277, 7}, {270, 8}, {262, 7}, {255, 6}, {249, 6},
|
||||
{243, 6}, {237, 6}, {231, 5}, {226, 5}, {221, 5}, {216, 5}, {211, 4}, {207, 5},
|
||||
{202, 4}, {198, 4}, {194, 4}, {190, 3}, {187, 4}, {183, 3}, {180, 3}, {177, 4},
|
||||
{173, 3}, {170, 3}, {167, 2}, {165, 3}, {162, 3}, {159, 2}, {157, 3}, {154, 2},
|
||||
{152, 3}, {149, 2}, {147, 2}, {145, 2}, {143, 2}, {141, 2}, {139, 2}, {137, 2},
|
||||
{135, 2}, {133, 2}, {131, 2}, {129, 1}, {128, 2}, {126, 2}, {124, 1}, {123, 2},
|
||||
{121, 1}, {120, 2}, {118, 1}, {117, 1}, {116, 2}, {114, 1}, {113, 1}, {112, 2},
|
||||
{110, 1}, {109, 1}, {108, 1}, {107, 2}, {105, 1}, {104, 1}, {103, 1}, {102, 1},
|
||||
{101, 1}, {100, 1}, {99, 1}, {98, 1}, {97, 1}, {96, 1}, {95, 1}, {94, 1},
|
||||
{93, 1}, {92, 1}, {91, 0}, {91, 1}, {90, 1}, {89, 1}, {88, 1}, {87, 0},
|
||||
{87, 1}, {86, 1}, {85, 1}, {84, 0}, {84, 1}, {83, 1}, {82, 1}, {81, 0},
|
||||
{81, 1}, {80, 1}, {79, 0}, {79, 1}, {78, 0}, {78, 1}, {77, 1}, {76, 0},
|
||||
{76, 1}, {75, 0}, {75, 1}, {74, 1}, {73, 0}, {73, 1}, {72, 0}, {72, 1},
|
||||
{71, 0}, {71, 1}, {70, 0}, {70, 1}, {69, 0}, {69, 1}, {68, 0}, {68, 1},
|
||||
{67, 0}, {67, 1}, {66, 0}, {66, 1}, {65, 0}, {65, 0}, {65, 1}, {64, 0},
|
||||
{64, 1}, {63, 0}, {63, 1}, {62, 0}, {62, 0}, {62, 1}, {61, 0}, {61, 1},
|
||||
{60, 0}, {60, 0}, {60, 1}, {59, 0}, {59, 0}, {59, 1}, {58, 0}, {58, 0},
|
||||
{58, 1}, {57, 0}, {57, 0}, {57, 1}, {56, 0}, {56, 0}, {56, 1}, {55, 0},
|
||||
{55, 0}, {55, 1}, {54, 0}, {54, 0}, {54, 1}, {53, 0}, {53, 0}, {53, 0},
|
||||
{53, 1}, {52, 0}, {52, 0}, {52, 1}, {51, 0}, {51, 0}, {51, 0}, {51, 1},
|
||||
{50, 0}, {50, 0}, {50, 0}, {50, 1}, {49, 0}, {49, 0}, {49, 0}, {49, 1},
|
||||
{48, 0}, {48, 0}, {48, 0}, {48, 1}, {47, 0}, {47, 0}, {47, 0}, {47, 1},
|
||||
{46, 0}, {46, 0}, {46, 0}, {46, 0}, {46, 1}, {45, 0}, {45, 0}, {45, 0},
|
||||
{45, 1}, {44, 0}, {44, 0}, {44, 0}, {44, 0}, {44, 1}, {43, 0}, {43, 0},
|
||||
{43, 0}, {43, 0}, {43, 1}, {42, 0}, {42, 0}, {42, 0}, {42, 0}, {42, 0},
|
||||
{42, 1}, {41, 0}, {41, 0}, {41, 0}, {41, 0}, {41, 0}, {41, 1}, {40, 0},
|
||||
{40, 0}, {40, 0}, {40, 0}, {40, 1}, {39, 0}, {39, 0}, {39, 0}, {39, 0},
|
||||
{39, 0}, {39, 0}, {39, 1}, {38, 0}, {38, 0}, {38, 0}, {38, 0}, {38, 0},
|
||||
};
|
||||
#else //_NO_ASM
|
||||
|
||||
const uint16_t speed_lookuptable_slow[256][2] PROGMEM = {
|
||||
{62500, 10417}, {52083, 7441}, {44642, 5580}, {39062, 4340}, {34722, 3472}, {31250, 2841}, {28409, 2368}, {26041, 2003},
|
||||
{24038, 1717}, {22321, 1488}, {20833, 1302}, {19531, 1149}, {18382, 1021}, {17361, 914}, {16447, 822}, {15625, 745},
|
||||
{14880, 676}, {14204, 618}, {13586, 566}, {13020, 520}, {12500, 481}, {12019, 445}, {11574, 414}, {11160, 385},
|
||||
{10775, 359}, {10416, 336}, {10080, 315}, {9765, 296}, {9469, 278}, {9191, 263}, {8928, 248}, {8680, 235},
|
||||
{8445, 222}, {8223, 211}, {8012, 200}, {7812, 191}, {7621, 181}, {7440, 173}, {7267, 165}, {7102, 158},
|
||||
{6944, 151}, {6793, 145}, {6648, 138}, {6510, 133}, {6377, 127}, {6250, 123}, {6127, 118}, {6009, 113},
|
||||
{5896, 109}, {5787, 106}, {5681, 101}, {5580, 98}, {5482, 95}, {5387, 91}, {5296, 88}, {5208, 86},
|
||||
{5122, 82}, {5040, 80}, {4960, 78}, {4882, 75}, {4807, 73}, {4734, 70}, {4664, 69}, {4595, 67},
|
||||
{4528, 64}, {4464, 63}, {4401, 61}, {4340, 60}, {4280, 58}, {4222, 56}, {4166, 55}, {4111, 53},
|
||||
{4058, 52}, {4006, 51}, {3955, 49}, {3906, 48}, {3858, 48}, {3810, 45}, {3765, 45}, {3720, 44},
|
||||
{3676, 43}, {3633, 42}, {3591, 40}, {3551, 40}, {3511, 39}, {3472, 38}, {3434, 38}, {3396, 36},
|
||||
{3360, 36}, {3324, 35}, {3289, 34}, {3255, 34}, {3221, 33}, {3188, 32}, {3156, 31}, {3125, 31},
|
||||
{3094, 31}, {3063, 30}, {3033, 29}, {3004, 28}, {2976, 28}, {2948, 28}, {2920, 27}, {2893, 27},
|
||||
{2866, 26}, {2840, 25}, {2815, 25}, {2790, 25}, {2765, 24}, {2741, 24}, {2717, 24}, {2693, 23},
|
||||
{2670, 22}, {2648, 22}, {2626, 22}, {2604, 22}, {2582, 21}, {2561, 21}, {2540, 20}, {2520, 20},
|
||||
{2500, 20}, {2480, 20}, {2460, 19}, {2441, 19}, {2422, 19}, {2403, 18}, {2385, 18}, {2367, 18},
|
||||
{2349, 17}, {2332, 18}, {2314, 17}, {2297, 16}, {2281, 17}, {2264, 16}, {2248, 16}, {2232, 16},
|
||||
{2216, 16}, {2200, 15}, {2185, 15}, {2170, 15}, {2155, 15}, {2140, 15}, {2125, 14}, {2111, 14},
|
||||
{2097, 14}, {2083, 14}, {2069, 14}, {2055, 13}, {2042, 13}, {2029, 13}, {2016, 13}, {2003, 13},
|
||||
{1990, 13}, {1977, 12}, {1965, 12}, {1953, 13}, {1940, 11}, {1929, 12}, {1917, 12}, {1905, 12},
|
||||
{1893, 11}, {1882, 11}, {1871, 11}, {1860, 11}, {1849, 11}, {1838, 11}, {1827, 11}, {1816, 10},
|
||||
{1806, 11}, {1795, 10}, {1785, 10}, {1775, 10}, {1765, 10}, {1755, 10}, {1745, 9}, {1736, 10},
|
||||
{1726, 9}, {1717, 10}, {1707, 9}, {1698, 9}, {1689, 9}, {1680, 9}, {1671, 9}, {1662, 9},
|
||||
{1653, 9}, {1644, 8}, {1636, 9}, {1627, 8}, {1619, 9}, {1610, 8}, {1602, 8}, {1594, 8},
|
||||
{1586, 8}, {1578, 8}, {1570, 8}, {1562, 8}, {1554, 7}, {1547, 8}, {1539, 8}, {1531, 7},
|
||||
{1524, 8}, {1516, 7}, {1509, 7}, {1502, 7}, {1495, 7}, {1488, 7}, {1481, 7}, {1474, 7},
|
||||
{1467, 7}, {1460, 7}, {1453, 7}, {1446, 6}, {1440, 7}, {1433, 7}, {1426, 6}, {1420, 6},
|
||||
{1414, 7}, {1407, 6}, {1401, 6}, {1395, 7}, {1388, 6}, {1382, 6}, {1376, 6}, {1370, 6},
|
||||
{1364, 6}, {1358, 6}, {1352, 6}, {1346, 5}, {1341, 6}, {1335, 6}, {1329, 5}, {1324, 6},
|
||||
{1318, 5}, {1313, 6}, {1307, 5}, {1302, 6}, {1296, 5}, {1291, 5}, {1286, 6}, {1280, 5},
|
||||
{1275, 5}, {1270, 5}, {1265, 5}, {1260, 5}, {1255, 5}, {1250, 5}, {1245, 5}, {1240, 5},
|
||||
{1235, 5}, {1230, 5}, {1225, 5}, {1220, 5}, {1215, 4}, {1211, 5}, {1206, 5}, {1201, 5},
|
||||
};
|
||||
|
||||
#endif
|
||||
// NOTE: currently not implemented
|
||||
void MultiU16X8toH16(unsigned short& intRes, unsigned char& charIn1, unsigned short& intIn2);
|
||||
void MultiU24X24toH16(uint16_t& intRes, int32_t& longIn1, long& longIn2);
|
||||
|
||||
#endif //_NO_ASM
|
||||
|
||||
|
||||
FORCE_INLINE unsigned short calc_timer(uint16_t step_rate, uint8_t& step_loops) {
|
||||
unsigned short timer;
|
||||
if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY;
|
||||
|
||||
if(step_rate > 20000) { // If steprate > 20kHz >> step 4 times
|
||||
step_rate = (step_rate >> 2)&0x3fff;
|
||||
step_loops = 4;
|
||||
}
|
||||
else if(step_rate > 10000) { // If steprate > 10kHz >> step 2 times
|
||||
step_rate = (step_rate >> 1)&0x7fff;
|
||||
step_loops = 2;
|
||||
}
|
||||
else {
|
||||
step_loops = 1;
|
||||
}
|
||||
|
||||
if(step_rate < (F_CPU/500000)) step_rate = (F_CPU/500000);
|
||||
step_rate -= (F_CPU/500000); // Correct for minimal speed
|
||||
if(step_rate >= (8*256)){ // higher step rate
|
||||
unsigned short table_address = (unsigned short)&speed_lookuptable_fast[(unsigned char)(step_rate>>8)][0];
|
||||
unsigned char tmp_step_rate = (step_rate & 0x00ff);
|
||||
unsigned short gain = (unsigned short)pgm_read_word_near(table_address+2);
|
||||
MultiU16X8toH16(timer, tmp_step_rate, gain);
|
||||
timer = (unsigned short)pgm_read_word_near(table_address) - timer;
|
||||
}
|
||||
else { // lower step rates
|
||||
unsigned short table_address = (unsigned short)&speed_lookuptable_slow[0][0];
|
||||
table_address += ((step_rate)>>1) & 0xfffc;
|
||||
timer = (unsigned short)pgm_read_word_near(table_address);
|
||||
timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3);
|
||||
}
|
||||
if(timer < 100) { timer = 100; }//(20kHz this should never happen)////MSG_STEPPER_TOO_HIGH c=0 r=0
|
||||
return timer;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -113,23 +113,30 @@ volatile long count_position[NUM_AXIS] = { 0, 0, 0, 0};
|
|||
volatile signed char count_direction[NUM_AXIS] = { 1, 1, 1, 1};
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
void advance_isr_scheduler();
|
||||
void advance_isr();
|
||||
|
||||
static uint16_t nextMainISR = 0;
|
||||
static const uint16_t ADV_NEVER = 0xFFFF;
|
||||
static const uint8_t ADV_INIT = 0b01;
|
||||
static const uint8_t ADV_DECELERATE = 0b10;
|
||||
|
||||
static uint16_t nextMainISR;
|
||||
static uint16_t nextAdvanceISR;
|
||||
|
||||
static uint16_t main_Rate;
|
||||
static uint16_t eISR_Rate;
|
||||
static uint16_t eISR_Err;
|
||||
|
||||
// Extrusion steps to be executed by the stepper.
|
||||
// If set to non zero, the timer ISR routine will tick the Linear Advance extruder ticks first.
|
||||
// If e_steps is zero, then the timer ISR routine will perform the usual DDA step.
|
||||
static volatile int16_t e_steps = 0;
|
||||
// How many extruder steps shall be ticked at a single ISR invocation?
|
||||
static uint8_t estep_loops;
|
||||
// The current speed of the extruder, scaled by the linear advance constant, so it has the same measure
|
||||
// as current_adv_steps.
|
||||
static int current_estep_rate;
|
||||
// The current pretension of filament expressed in extruder micro steps.
|
||||
static int current_adv_steps;
|
||||
static uint16_t current_adv_steps;
|
||||
static uint16_t final_adv_steps;
|
||||
static uint16_t max_adv_steps;
|
||||
static uint32_t LA_decelerate_after;
|
||||
|
||||
#define _NEXT_ISR(T) nextMainISR = T
|
||||
static int8_t e_steps;
|
||||
static uint8_t e_step_loops;
|
||||
static int8_t LA_phase;
|
||||
|
||||
#define _NEXT_ISR(T) main_Rate = nextMainISR = T
|
||||
#else
|
||||
#define _NEXT_ISR(T) OCR1A = T
|
||||
#endif
|
||||
|
@ -143,92 +150,6 @@ extern uint16_t stepper_timer_overflow_last;
|
|||
//=============================functions ============================
|
||||
//===========================================================================
|
||||
|
||||
#ifndef _NO_ASM
|
||||
|
||||
// intRes = intIn1 * intIn2 >> 16
|
||||
// uses:
|
||||
// r26 to store 0
|
||||
// r27 to store the byte 1 of the 24 bit result
|
||||
#define MultiU16X8toH16(intRes, charIn1, intIn2) \
|
||||
asm volatile ( \
|
||||
"clr r26 \n\t" \
|
||||
"mul %A1, %B2 \n\t" \
|
||||
"movw %A0, r0 \n\t" \
|
||||
"mul %A1, %A2 \n\t" \
|
||||
"add %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"lsr r0 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"clr r1 \n\t" \
|
||||
: \
|
||||
"=&r" (intRes) \
|
||||
: \
|
||||
"d" (charIn1), \
|
||||
"d" (intIn2) \
|
||||
: \
|
||||
"r26" \
|
||||
)
|
||||
|
||||
// intRes = longIn1 * longIn2 >> 24
|
||||
// uses:
|
||||
// r26 to store 0
|
||||
// r27 to store the byte 1 of the 48bit result
|
||||
#define MultiU24X24toH16(intRes, longIn1, longIn2) \
|
||||
asm volatile ( \
|
||||
"clr r26 \n\t" \
|
||||
"mul %A1, %B2 \n\t" \
|
||||
"mov r27, r1 \n\t" \
|
||||
"mul %B1, %C2 \n\t" \
|
||||
"movw %A0, r0 \n\t" \
|
||||
"mul %C1, %C2 \n\t" \
|
||||
"add %B0, r0 \n\t" \
|
||||
"mul %C1, %B2 \n\t" \
|
||||
"add %A0, r0 \n\t" \
|
||||
"adc %B0, r1 \n\t" \
|
||||
"mul %A1, %C2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %B1, %B2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %C1, %A2 \n\t" \
|
||||
"add r27, r0 \n\t" \
|
||||
"adc %A0, r1 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"mul %B1, %A2 \n\t" \
|
||||
"add r27, r1 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"lsr r27 \n\t" \
|
||||
"adc %A0, r26 \n\t" \
|
||||
"adc %B0, r26 \n\t" \
|
||||
"clr r1 \n\t" \
|
||||
: \
|
||||
"=&r" (intRes) \
|
||||
: \
|
||||
"d" (longIn1), \
|
||||
"d" (longIn2) \
|
||||
: \
|
||||
"r26" , "r27" \
|
||||
)
|
||||
|
||||
#else //_NO_ASM
|
||||
|
||||
void MultiU16X8toH16(unsigned short& intRes, unsigned char& charIn1, unsigned short& intIn2)
|
||||
{
|
||||
}
|
||||
|
||||
void MultiU24X24toH16(uint16_t& intRes, int32_t& longIn1, long& longIn2)
|
||||
{
|
||||
}
|
||||
|
||||
#endif //_NO_ASM
|
||||
|
||||
// Some useful constants
|
||||
|
||||
void checkHitEndstops()
|
||||
{
|
||||
if( endstop_x_hit || endstop_y_hit || endstop_z_hit) {
|
||||
|
@ -316,42 +237,6 @@ void invert_z_endstop(bool endstop_invert)
|
|||
// step_events_completed reaches block->decelerate_after after which it decelerates until the trapezoid generator is reset.
|
||||
// The slope of acceleration is calculated with the leib ramp alghorithm.
|
||||
|
||||
FORCE_INLINE unsigned short calc_timer(uint16_t step_rate) {
|
||||
unsigned short timer;
|
||||
if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY;
|
||||
|
||||
if(step_rate > 20000) { // If steprate > 20kHz >> step 4 times
|
||||
step_rate = (step_rate >> 2)&0x3fff;
|
||||
step_loops = 4;
|
||||
}
|
||||
else if(step_rate > 10000) { // If steprate > 10kHz >> step 2 times
|
||||
step_rate = (step_rate >> 1)&0x7fff;
|
||||
step_loops = 2;
|
||||
}
|
||||
else {
|
||||
step_loops = 1;
|
||||
}
|
||||
// step_loops = 1;
|
||||
|
||||
if(step_rate < (F_CPU/500000)) step_rate = (F_CPU/500000);
|
||||
step_rate -= (F_CPU/500000); // Correct for minimal speed
|
||||
if(step_rate >= (8*256)){ // higher step rate
|
||||
unsigned short table_address = (unsigned short)&speed_lookuptable_fast[(unsigned char)(step_rate>>8)][0];
|
||||
unsigned char tmp_step_rate = (step_rate & 0x00ff);
|
||||
unsigned short gain = (unsigned short)pgm_read_word_near(table_address+2);
|
||||
MultiU16X8toH16(timer, tmp_step_rate, gain);
|
||||
timer = (unsigned short)pgm_read_word_near(table_address) - timer;
|
||||
}
|
||||
else { // lower step rates
|
||||
unsigned short table_address = (unsigned short)&speed_lookuptable_slow[0][0];
|
||||
table_address += ((step_rate)>>1) & 0xfffc;
|
||||
timer = (unsigned short)pgm_read_word_near(table_address);
|
||||
timer -= (((unsigned short)pgm_read_word_near(table_address+2) * (unsigned char)(step_rate & 0x0007))>>3);
|
||||
}
|
||||
if(timer < 100) { timer = 100; MYSERIAL.print(_N("Steprate too high: ")); MYSERIAL.println(step_rate); }//(20kHz this should never happen)////MSG_STEPPER_TOO_HIGH
|
||||
return timer;
|
||||
}
|
||||
|
||||
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse.
|
||||
// It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
|
||||
ISR(TIMER1_COMPA_vect) {
|
||||
|
@ -361,53 +246,10 @@ ISR(TIMER1_COMPA_vect) {
|
|||
#endif //DEBUG_STACK_MONITOR
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
// If there are any e_steps planned, tick them.
|
||||
bool run_main_isr = false;
|
||||
if (e_steps) {
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, true);
|
||||
uint8_t cnt = 0;
|
||||
for (uint8_t i = estep_loops; e_steps && i --;) {
|
||||
WRITE_NC(E0_STEP_PIN, !INVERT_E_STEP_PIN);
|
||||
-- e_steps;
|
||||
cnt++;
|
||||
WRITE_NC(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
}
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (READ(E0_DIR_PIN) == INVERT_E0_DIR)
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter -= cnt;
|
||||
else
|
||||
fsensor_counter += cnt;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter += cnt;
|
||||
else
|
||||
fsensor_counter -= cnt;
|
||||
}
|
||||
#endif //FILAMENT_SENSOR
|
||||
if (e_steps) {
|
||||
// Plan another Linear Advance tick.
|
||||
OCR1A = eISR_Rate;
|
||||
nextMainISR -= eISR_Rate;
|
||||
} else if (! (nextMainISR & 0x8000) || nextMainISR < 16) {
|
||||
// The timer did not overflow and it is big enough, so it makes sense to plan it.
|
||||
OCR1A = nextMainISR;
|
||||
} else {
|
||||
// The timer has overflown, or it is too small. Run the main ISR just after the Linear Advance routine
|
||||
// in the current interrupt tick.
|
||||
run_main_isr = true;
|
||||
//FIXME pick the serial line.
|
||||
}
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, false);
|
||||
} else
|
||||
run_main_isr = true;
|
||||
|
||||
if (run_main_isr)
|
||||
#endif
|
||||
advance_isr_scheduler();
|
||||
#else
|
||||
isr();
|
||||
#endif
|
||||
|
||||
// Don't run the ISR faster than possible
|
||||
// Is there a 8us time left before the next interrupt triggers?
|
||||
|
@ -493,10 +335,6 @@ FORCE_INLINE void stepper_next_block()
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_counter = 0;
|
||||
fsensor_st_block_begin(current_block);
|
||||
#endif //FILAMENT_SENSOR
|
||||
// The busy flag is set by the plan_get_current_block() call.
|
||||
// current_block->busy = true;
|
||||
// Initializes the trapezoid generator from the current block. Called whenever a new
|
||||
|
@ -507,10 +345,26 @@ FORCE_INLINE void stepper_next_block()
|
|||
// state is reached.
|
||||
step_loops_nominal = 0;
|
||||
acc_step_rate = uint16_t(current_block->initial_rate);
|
||||
acceleration_time = calc_timer(acc_step_rate);
|
||||
acceleration_time = calc_timer(acc_step_rate, step_loops);
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
current_estep_rate = ((unsigned long)acc_step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
||||
#endif /* LIN_ADVANCE */
|
||||
if (current_block->use_advance_lead) {
|
||||
LA_decelerate_after = current_block->decelerate_after;
|
||||
final_adv_steps = current_block->final_adv_steps;
|
||||
max_adv_steps = current_block->max_adv_steps;
|
||||
e_step_loops = current_block->advance_step_loops;
|
||||
} else {
|
||||
e_steps = 0;
|
||||
e_step_loops = 1;
|
||||
current_adv_steps = 0;
|
||||
}
|
||||
nextAdvanceISR = ADV_NEVER;
|
||||
LA_phase = -1;
|
||||
#endif
|
||||
|
||||
if (current_block->flag & BLOCK_FLAG_E_RESET) {
|
||||
count_position[E_AXIS] = 0;
|
||||
}
|
||||
|
||||
if (current_block->flag & BLOCK_FLAG_DDA_LOWRES) {
|
||||
counter_x.lo = -(current_block->step_event_count.lo >> 1);
|
||||
|
@ -567,9 +421,24 @@ FORCE_INLINE void stepper_next_block()
|
|||
#endif /* LIN_ADVANCE */
|
||||
count_direction[E_AXIS] = 1;
|
||||
}
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_counter = 0;
|
||||
fsensor_st_block_begin(count_direction[E_AXIS] < 0);
|
||||
#endif //FILAMENT_SENSOR
|
||||
}
|
||||
else {
|
||||
OCR1A = 2000; // 1kHz.
|
||||
_NEXT_ISR(2000); // 1kHz.
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
// reset LA state when there's no block
|
||||
nextAdvanceISR = ADV_NEVER;
|
||||
e_steps = 0;
|
||||
|
||||
// incrementally lose pressure to give a chance for
|
||||
// a new LA block to be scheduled and recover
|
||||
if(current_adv_steps)
|
||||
--current_adv_steps;
|
||||
#endif
|
||||
}
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH2, false);
|
||||
}
|
||||
|
@ -779,10 +648,10 @@ FORCE_INLINE void stepper_tick_lowres()
|
|||
counter_e.lo -= current_block->step_event_count.lo;
|
||||
count_position[E_AXIS] += count_direction[E_AXIS];
|
||||
#ifdef LIN_ADVANCE
|
||||
++ e_steps;
|
||||
e_steps += count_direction[E_AXIS];
|
||||
#else
|
||||
#ifdef FILAMENT_SENSOR
|
||||
++ fsensor_counter;
|
||||
fsensor_counter += count_direction[E_AXIS];
|
||||
#endif //FILAMENT_SENSOR
|
||||
WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
#endif
|
||||
|
@ -841,11 +710,11 @@ FORCE_INLINE void stepper_tick_highres()
|
|||
counter_e.wide -= current_block->step_event_count.wide;
|
||||
count_position[E_AXIS]+=count_direction[E_AXIS];
|
||||
#ifdef LIN_ADVANCE
|
||||
++ e_steps;
|
||||
e_steps += count_direction[E_AXIS];
|
||||
#else
|
||||
#ifdef FILAMENT_SENSOR
|
||||
++ fsensor_counter;
|
||||
#endif //FILAMENT_SENSOR
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_counter += count_direction[E_AXIS];
|
||||
#endif //FILAMENT_SENSOR
|
||||
WRITE(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
#endif
|
||||
}
|
||||
|
@ -854,8 +723,53 @@ FORCE_INLINE void stepper_tick_highres()
|
|||
}
|
||||
}
|
||||
|
||||
// 50us delay
|
||||
#define LIN_ADV_FIRST_TICK_DELAY 100
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
// @wavexx: fast uint16_t division for small dividends<5
|
||||
// q/3 based on "Hacker's delight" formula
|
||||
FORCE_INLINE uint16_t fastdiv(uint16_t q, uint8_t d)
|
||||
{
|
||||
if(d != 3) return q >> (d / 2);
|
||||
else return ((uint32_t)0xAAAB * q) >> 17;
|
||||
}
|
||||
|
||||
FORCE_INLINE void advance_spread(uint16_t timer)
|
||||
{
|
||||
if(eISR_Err > timer)
|
||||
{
|
||||
// advance-step skipped
|
||||
eISR_Err -= timer;
|
||||
eISR_Rate = timer;
|
||||
nextAdvanceISR = timer;
|
||||
return;
|
||||
}
|
||||
|
||||
// at least one step
|
||||
uint8_t ticks = 1;
|
||||
uint32_t block = current_block->advance_rate;
|
||||
uint16_t max_t = timer - eISR_Err;
|
||||
while (block < max_t)
|
||||
{
|
||||
++ticks;
|
||||
block += current_block->advance_rate;
|
||||
}
|
||||
if (block > timer)
|
||||
eISR_Err += block - timer;
|
||||
else
|
||||
eISR_Err -= timer - block;
|
||||
|
||||
if (ticks <= 4)
|
||||
eISR_Rate = fastdiv(timer, ticks);
|
||||
else
|
||||
{
|
||||
// >4 ticks are still possible on slow moves
|
||||
eISR_Rate = timer / ticks;
|
||||
}
|
||||
|
||||
nextAdvanceISR = eISR_Rate / 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
FORCE_INLINE void isr() {
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH0, true);
|
||||
|
@ -868,81 +782,18 @@ FORCE_INLINE void isr() {
|
|||
if (current_block != NULL)
|
||||
{
|
||||
stepper_check_endstops();
|
||||
#ifdef LIN_ADVANCE
|
||||
e_steps = 0;
|
||||
#endif /* LIN_ADVANCE */
|
||||
if (current_block->flag & BLOCK_FLAG_DDA_LOWRES)
|
||||
stepper_tick_lowres();
|
||||
else
|
||||
stepper_tick_highres();
|
||||
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
if (out_bits&(1<<E_AXIS))
|
||||
// Move in negative direction.
|
||||
e_steps = - e_steps;
|
||||
if (current_block->use_advance_lead) {
|
||||
//int esteps_inc = 0;
|
||||
//esteps_inc = current_estep_rate - current_adv_steps;
|
||||
//e_steps += esteps_inc;
|
||||
e_steps += current_estep_rate - current_adv_steps;
|
||||
#if 0
|
||||
if (abs(esteps_inc) > 4) {
|
||||
LOGIC_ANALYZER_SERIAL_TX_WRITE(esteps_inc);
|
||||
if (esteps_inc < -511 || esteps_inc > 511)
|
||||
LOGIC_ANALYZER_SERIAL_TX_WRITE(esteps_inc >> 9);
|
||||
}
|
||||
#endif
|
||||
current_adv_steps = current_estep_rate;
|
||||
}
|
||||
// If we have esteps to execute, step some of them now.
|
||||
if (e_steps) {
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, true);
|
||||
// Set the step direction.
|
||||
bool neg = e_steps < 0;
|
||||
{
|
||||
bool dir =
|
||||
#ifdef SNMM
|
||||
(neg == (mmu_extruder & 1))
|
||||
#else
|
||||
neg
|
||||
#endif
|
||||
? INVERT_E0_DIR : !INVERT_E0_DIR; //If we have SNMM, reverse every second extruder.
|
||||
WRITE_NC(E0_DIR_PIN, dir);
|
||||
if (neg)
|
||||
// Flip the e_steps counter to be always positive.
|
||||
e_steps = - e_steps;
|
||||
}
|
||||
// Tick min(step_loops, abs(e_steps)).
|
||||
estep_loops = (e_steps & 0x0ff00) ? 4 : e_steps;
|
||||
if (step_loops < estep_loops)
|
||||
estep_loops = step_loops;
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (READ(E0_DIR_PIN) == INVERT_E0_DIR)
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter -= estep_loops;
|
||||
else
|
||||
fsensor_counter += estep_loops;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter += estep_loops;
|
||||
else
|
||||
fsensor_counter -= estep_loops;
|
||||
}
|
||||
#endif //FILAMENT_SENSOR
|
||||
do {
|
||||
WRITE_NC(E0_STEP_PIN, !INVERT_E_STEP_PIN);
|
||||
-- e_steps;
|
||||
WRITE_NC(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
} while (-- estep_loops != 0);
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, false);
|
||||
MSerial.checkRx(); // Check for serial chars.
|
||||
}
|
||||
if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR);
|
||||
uint8_t la_state = 0;
|
||||
#endif
|
||||
|
||||
// Calculare new timer value
|
||||
// Calculate new timer value
|
||||
// 13.38-14.63us for steady state,
|
||||
// 25.12us for acceleration / deceleration.
|
||||
{
|
||||
|
@ -955,14 +806,15 @@ FORCE_INLINE void isr() {
|
|||
if(acc_step_rate > uint16_t(current_block->nominal_rate))
|
||||
acc_step_rate = current_block->nominal_rate;
|
||||
// step_rate to timer interval
|
||||
uint16_t timer = calc_timer(acc_step_rate);
|
||||
uint16_t timer = calc_timer(acc_step_rate, step_loops);
|
||||
_NEXT_ISR(timer);
|
||||
acceleration_time += timer;
|
||||
#ifdef LIN_ADVANCE
|
||||
if (current_block->use_advance_lead)
|
||||
// int32_t = (uint16_t * uint32_t) >> 17
|
||||
current_estep_rate = ((uint32_t)acc_step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
||||
#endif
|
||||
#ifdef LIN_ADVANCE
|
||||
if (current_block->use_advance_lead) {
|
||||
if (step_events_completed.wide <= (unsigned long int)step_loops)
|
||||
la_state = ADV_INIT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (step_events_completed.wide > (unsigned long int)current_block->decelerate_after) {
|
||||
uint16_t step_rate;
|
||||
|
@ -973,24 +825,23 @@ FORCE_INLINE void isr() {
|
|||
step_rate = uint16_t(current_block->final_rate);
|
||||
}
|
||||
// Step_rate to timer interval.
|
||||
uint16_t timer = calc_timer(step_rate);
|
||||
uint16_t timer = calc_timer(step_rate, step_loops);
|
||||
_NEXT_ISR(timer);
|
||||
deceleration_time += timer;
|
||||
#ifdef LIN_ADVANCE
|
||||
if (current_block->use_advance_lead)
|
||||
current_estep_rate = ((uint32_t)step_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
||||
#endif
|
||||
#ifdef LIN_ADVANCE
|
||||
if (current_block->use_advance_lead) {
|
||||
la_state = ADV_DECELERATE;
|
||||
if (step_events_completed.wide <= (unsigned long int)current_block->decelerate_after + step_loops)
|
||||
la_state |= ADV_INIT;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
if (! step_loops_nominal) {
|
||||
// Calculation of the steady state timer rate has been delayed to the 1st tick of the steady state to lower
|
||||
// the initial interrupt blocking.
|
||||
OCR1A_nominal = calc_timer(uint16_t(current_block->nominal_rate));
|
||||
OCR1A_nominal = calc_timer(uint16_t(current_block->nominal_rate), step_loops);
|
||||
step_loops_nominal = step_loops;
|
||||
#ifdef LIN_ADVANCE
|
||||
if (current_block->use_advance_lead)
|
||||
current_estep_rate = (current_block->nominal_rate * current_block->abs_adv_steps_multiplier8) >> 17;
|
||||
#endif
|
||||
}
|
||||
_NEXT_ISR(OCR1A_nominal);
|
||||
}
|
||||
|
@ -998,110 +849,40 @@ FORCE_INLINE void isr() {
|
|||
}
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
if (e_steps && current_block->use_advance_lead) {
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, true);
|
||||
MSerial.checkRx(); // Check for serial chars.
|
||||
// Some of the E steps were not ticked yet. Plan additional interrupts.
|
||||
uint16_t now = TCNT1;
|
||||
// Plan the first linear advance interrupt after 50us from now.
|
||||
uint16_t to_go = nextMainISR - now - LIN_ADV_FIRST_TICK_DELAY;
|
||||
eISR_Rate = 0;
|
||||
if ((to_go & 0x8000) == 0) {
|
||||
// The to_go number is not negative.
|
||||
// Count the number of 7812,5 ticks, that fit into to_go 2MHz ticks.
|
||||
uint8_t ticks = to_go >> 8;
|
||||
if (ticks == 1) {
|
||||
// Avoid running the following loop for a very short interval.
|
||||
estep_loops = 255;
|
||||
eISR_Rate = 1;
|
||||
} else if ((e_steps & 0x0ff00) == 0) {
|
||||
// e_steps <= 0x0ff
|
||||
if (uint8_t(e_steps) <= ticks) {
|
||||
// Spread the e_steps along the whole go_to interval.
|
||||
eISR_Rate = to_go / uint8_t(e_steps);
|
||||
estep_loops = 1;
|
||||
} else if (ticks != 0) {
|
||||
// At least one tick fits into the to_go interval. Calculate the e-step grouping.
|
||||
uint8_t e = uint8_t(e_steps) >> 1;
|
||||
estep_loops = 2;
|
||||
while (e > ticks) {
|
||||
e >>= 1;
|
||||
estep_loops <<= 1;
|
||||
// avoid multiple instances or function calls to advance_spread
|
||||
if (la_state & ADV_INIT) eISR_Err = current_block->advance_rate / 4;
|
||||
if (la_state & ADV_INIT || nextAdvanceISR != ADV_NEVER) {
|
||||
advance_spread(main_Rate);
|
||||
if (la_state & ADV_DECELERATE) {
|
||||
if (step_loops == e_step_loops)
|
||||
LA_phase = (eISR_Rate > main_Rate);
|
||||
else {
|
||||
// avoid overflow through division. warning: we need to _guarantee_ step_loops
|
||||
// and e_step_loops are <= 4 due to fastdiv's limit
|
||||
LA_phase = (fastdiv(eISR_Rate, step_loops) > fastdiv(main_Rate, e_step_loops));
|
||||
}
|
||||
// Now the estep_loops contains the number of loops of power of 2, that will be sufficient
|
||||
// to squeeze enough of Linear Advance ticks until nextMainISR.
|
||||
// Calculate the tick rate.
|
||||
eISR_Rate = to_go / ticks;
|
||||
}
|
||||
} else {
|
||||
// This is an exterme case with too many e_steps inserted by the linear advance.
|
||||
// At least one tick fits into the to_go interval. Calculate the e-step grouping.
|
||||
estep_loops = 2;
|
||||
uint16_t e = e_steps >> 1;
|
||||
while (e & 0x0ff00) {
|
||||
e >>= 1;
|
||||
estep_loops <<= 1;
|
||||
}
|
||||
while (uint8_t(e) > ticks) {
|
||||
e >>= 1;
|
||||
estep_loops <<= 1;
|
||||
}
|
||||
// Now the estep_loops contains the number of loops of power of 2, that will be sufficient
|
||||
// to squeeze enough of Linear Advance ticks until nextMainISR.
|
||||
// Calculate the tick rate.
|
||||
eISR_Rate = to_go / ticks;
|
||||
}
|
||||
}
|
||||
if (eISR_Rate == 0) {
|
||||
// There is not enough time to fit even a single additional tick.
|
||||
// Tick all the extruder ticks now.
|
||||
MSerial.checkRx(); // Check for serial chars.
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (READ(E0_DIR_PIN) == INVERT_E0_DIR)
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter -= e_steps;
|
||||
else
|
||||
fsensor_counter += e_steps;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (count_direction[E_AXIS] == 1)
|
||||
fsensor_counter += e_steps;
|
||||
else
|
||||
fsensor_counter -= e_steps;
|
||||
}
|
||||
#endif //FILAMENT_SENSOR
|
||||
do {
|
||||
WRITE_NC(E0_STEP_PIN, !INVERT_E_STEP_PIN);
|
||||
-- e_steps;
|
||||
WRITE_NC(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
} while (e_steps);
|
||||
OCR1A = nextMainISR;
|
||||
} else {
|
||||
// Tick the 1st Linear Advance interrupt after 50us from now.
|
||||
nextMainISR -= LIN_ADV_FIRST_TICK_DELAY;
|
||||
OCR1A = now + LIN_ADV_FIRST_TICK_DELAY;
|
||||
}
|
||||
//WRITE_NC(LOGIC_ANALYZER_CH7, false);
|
||||
} else
|
||||
OCR1A = nextMainISR;
|
||||
}
|
||||
|
||||
// Check for serial chars. This executes roughtly inbetween 50-60% of the total runtime of the
|
||||
// entire isr, making this spot a much better choice than checking during esteps
|
||||
MSerial.checkRx();
|
||||
#endif
|
||||
|
||||
// If current block is finished, reset pointer
|
||||
if (step_events_completed.wide >= current_block->step_event_count.wide) {
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_st_block_chunk(current_block, fsensor_counter);
|
||||
#if !defined(LIN_ADVANCE) && defined(FILAMENT_SENSOR)
|
||||
fsensor_st_block_chunk(fsensor_counter);
|
||||
fsensor_counter = 0;
|
||||
#endif //FILAMENT_SENSOR
|
||||
|
||||
current_block = NULL;
|
||||
plan_discard_current_block();
|
||||
}
|
||||
#ifdef FILAMENT_SENSOR
|
||||
else if ((fsensor_counter >= fsensor_chunk_len))
|
||||
#if !defined(LIN_ADVANCE) && defined(FILAMENT_SENSOR)
|
||||
else if ((abs(fsensor_counter) >= fsensor_chunk_len))
|
||||
{
|
||||
fsensor_st_block_chunk(current_block, fsensor_counter);
|
||||
fsensor_st_block_chunk(fsensor_counter);
|
||||
fsensor_counter = 0;
|
||||
}
|
||||
#endif //FILAMENT_SENSOR
|
||||
|
@ -1115,12 +896,105 @@ FORCE_INLINE void isr() {
|
|||
}
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
// Timer interrupt for E. e_steps is set in the main routine.
|
||||
|
||||
void clear_current_adv_vars() {
|
||||
e_steps = 0; //Should be already 0 at an filament change event, but just to be sure..
|
||||
current_adv_steps = 0;
|
||||
FORCE_INLINE void advance_isr() {
|
||||
if (step_events_completed.wide > LA_decelerate_after && current_adv_steps > final_adv_steps) {
|
||||
// decompression
|
||||
e_steps -= e_step_loops;
|
||||
if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR);
|
||||
if(current_adv_steps > e_step_loops)
|
||||
current_adv_steps -= e_step_loops;
|
||||
else
|
||||
current_adv_steps = 0;
|
||||
nextAdvanceISR = eISR_Rate;
|
||||
}
|
||||
else if (step_events_completed.wide < LA_decelerate_after && current_adv_steps < max_adv_steps) {
|
||||
// compression
|
||||
e_steps += e_step_loops;
|
||||
if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR);
|
||||
current_adv_steps += e_step_loops;
|
||||
nextAdvanceISR = eISR_Rate;
|
||||
}
|
||||
else {
|
||||
// advance steps completed
|
||||
nextAdvanceISR = ADV_NEVER;
|
||||
LA_phase = -1;
|
||||
e_step_loops = 1;
|
||||
}
|
||||
}
|
||||
|
||||
FORCE_INLINE void advance_isr_scheduler() {
|
||||
// Integrate the final timer value, accounting for scheduling adjustments
|
||||
if(nextAdvanceISR && nextAdvanceISR != ADV_NEVER)
|
||||
{
|
||||
if(nextAdvanceISR > OCR1A)
|
||||
nextAdvanceISR -= OCR1A;
|
||||
else
|
||||
nextAdvanceISR = 0;
|
||||
}
|
||||
if(nextMainISR > OCR1A)
|
||||
nextMainISR -= OCR1A;
|
||||
else
|
||||
nextMainISR = 0;
|
||||
|
||||
// Run main stepping ISR if flagged
|
||||
if (!nextMainISR)
|
||||
{
|
||||
#ifdef LA_DEBUG_LOGIC
|
||||
WRITE_NC(LOGIC_ANALYZER_CH0, true);
|
||||
#endif
|
||||
isr();
|
||||
#ifdef LA_DEBUG_LOGIC
|
||||
WRITE_NC(LOGIC_ANALYZER_CH0, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Run the next advance isr if triggered
|
||||
bool eisr = !nextAdvanceISR;
|
||||
if (eisr)
|
||||
{
|
||||
#ifdef LA_DEBUG_LOGIC
|
||||
WRITE_NC(LOGIC_ANALYZER_CH1, true);
|
||||
#endif
|
||||
advance_isr();
|
||||
#ifdef LA_DEBUG_LOGIC
|
||||
WRITE_NC(LOGIC_ANALYZER_CH1, false);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Tick E steps if any
|
||||
if (e_steps && (LA_phase < 0 || LA_phase == eisr)) {
|
||||
uint8_t max_ticks = (eisr? e_step_loops: step_loops);
|
||||
max_ticks = min(abs(e_steps), max_ticks);
|
||||
bool rev = (e_steps < 0);
|
||||
do
|
||||
{
|
||||
WRITE_NC(E0_STEP_PIN, !INVERT_E_STEP_PIN);
|
||||
e_steps += (rev? 1: -1);
|
||||
WRITE_NC(E0_STEP_PIN, INVERT_E_STEP_PIN);
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_counter += (rev? -1: 1);
|
||||
#endif
|
||||
}
|
||||
while(--max_ticks);
|
||||
|
||||
#ifdef FILAMENT_SENSOR
|
||||
if (abs(fsensor_counter) >= fsensor_chunk_len)
|
||||
{
|
||||
fsensor_st_block_chunk(fsensor_counter);
|
||||
fsensor_counter = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Schedule the next closest tick, ignoring advance if scheduled too
|
||||
// soon in order to avoid skewing the regular stepper acceleration
|
||||
if (nextAdvanceISR != ADV_NEVER && (nextAdvanceISR + TCNT1 + 40) < nextMainISR)
|
||||
OCR1A = nextAdvanceISR;
|
||||
else
|
||||
OCR1A = nextMainISR;
|
||||
}
|
||||
#endif // LIN_ADVANCE
|
||||
|
||||
void st_init()
|
||||
|
@ -1347,18 +1221,49 @@ void st_init()
|
|||
// Plan the first interrupt after 8ms from now.
|
||||
OCR1A = 0x4000;
|
||||
TCNT1 = 0;
|
||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
e_steps = 0;
|
||||
current_adv_steps = 0;
|
||||
#ifdef LA_DEBUG_LOGIC
|
||||
LOGIC_ANALYZER_CH0_ENABLE;
|
||||
LOGIC_ANALYZER_CH1_ENABLE;
|
||||
WRITE_NC(LOGIC_ANALYZER_CH0, false);
|
||||
WRITE_NC(LOGIC_ANALYZER_CH1, false);
|
||||
#endif
|
||||
|
||||
|
||||
// Initialize state for the linear advance scheduler
|
||||
nextMainISR = 0;
|
||||
nextAdvanceISR = ADV_NEVER;
|
||||
main_Rate = ADV_NEVER;
|
||||
e_steps = 0;
|
||||
e_step_loops = 1;
|
||||
LA_phase = -1;
|
||||
current_adv_steps = 0;
|
||||
#endif
|
||||
|
||||
enable_endstops(true); // Start with endstops active. After homing they can be disabled
|
||||
|
||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
sei();
|
||||
}
|
||||
|
||||
|
||||
void st_reset_timer()
|
||||
{
|
||||
// Clear a possible pending interrupt on OCR1A overflow.
|
||||
TIFR1 |= 1 << OCF1A;
|
||||
// Reset the counter.
|
||||
TCNT1 = 0;
|
||||
// Wake up after 1ms from now.
|
||||
OCR1A = 2000;
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
nextMainISR = 0;
|
||||
if(nextAdvanceISR && nextAdvanceISR != ADV_NEVER)
|
||||
nextAdvanceISR = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Block until all buffered steps are executed
|
||||
void st_synchronize()
|
||||
{
|
||||
|
@ -1443,6 +1348,10 @@ void quickStop()
|
|||
DISABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
while (blocks_queued()) plan_discard_current_block();
|
||||
current_block = NULL;
|
||||
#ifdef LIN_ADVANCE
|
||||
nextAdvanceISR = ADV_NEVER;
|
||||
current_adv_steps = 0;
|
||||
#endif
|
||||
st_reset_timer();
|
||||
ENABLE_STEPPER_DRIVER_INTERRUPT();
|
||||
}
|
||||
|
|
|
@ -37,12 +37,6 @@ void st_init();
|
|||
|
||||
void isr();
|
||||
|
||||
#ifdef LIN_ADVANCE
|
||||
void advance_isr();
|
||||
void advance_isr_scheduler();
|
||||
void clear_current_adv_vars(); //Used to reset the built up pretension and remaining esteps on filament change.
|
||||
#endif
|
||||
|
||||
// Block until all buffered steps are executed
|
||||
void st_synchronize();
|
||||
|
||||
|
@ -62,15 +56,7 @@ float st_get_position_mm(uint8_t axis);
|
|||
|
||||
// Call this function just before re-enabling the stepper driver interrupt and the global interrupts
|
||||
// to avoid a stepper timer overflow.
|
||||
FORCE_INLINE void st_reset_timer()
|
||||
{
|
||||
// Clear a possible pending interrupt on OCR1A overflow.
|
||||
TIFR1 |= 1 << OCF1A;
|
||||
// Reset the counter.
|
||||
TCNT1 = 0;
|
||||
// Wake up after 1ms from now.
|
||||
OCR1A = 2000;
|
||||
}
|
||||
void st_reset_timer();
|
||||
|
||||
void checkHitEndstops(); //call from somewhere to create an serial error message with the locations the endstops where hit, in case they were triggered
|
||||
bool endstops_hit_on_purpose(); //avoid creation of the message, i.e. after homing and before a routine call of checkHitEndstops();
|
||||
|
|
|
@ -11,8 +11,8 @@
|
|||
#define _millis millis2
|
||||
#define _micros micros2
|
||||
#define _delay delay2
|
||||
#define _tone tone2
|
||||
#define _noTone noTone2
|
||||
#define _tone tone
|
||||
#define _noTone noTone
|
||||
|
||||
#define timer02_set_pwm0(pwm0)
|
||||
|
||||
|
@ -20,8 +20,8 @@
|
|||
#define _millis millis
|
||||
#define _micros micros
|
||||
#define _delay delay
|
||||
#define _tone(x, y) /*tone*/
|
||||
#define _noTone(x) /*noTone*/
|
||||
#define _tone tone
|
||||
#define _noTone noTone
|
||||
#define timer02_set_pwm0(pwm0)
|
||||
#endif //SYSTEM_TIMER_2
|
||||
|
||||
|
|
|
@ -44,6 +44,8 @@
|
|||
#include "Timer.h"
|
||||
#include "Configuration_prusa.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
//===========================================================================
|
||||
//=============================public variables============================
|
||||
//===========================================================================
|
||||
|
@ -71,6 +73,10 @@ int current_voltage_raw_pwr = 0;
|
|||
int current_voltage_raw_bed = 0;
|
||||
#endif
|
||||
|
||||
#if IR_SENSOR_ANALOG
|
||||
int current_voltage_raw_IR = 0;
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
||||
int current_temperature_bed_raw = 0;
|
||||
float current_temperature_bed = 0.0;
|
||||
|
||||
|
@ -873,7 +879,7 @@ static float analog2temp(int raw, uint8_t e) {
|
|||
SERIAL_ERROR_START;
|
||||
SERIAL_ERROR((int)e);
|
||||
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
|
||||
kill(PSTR(""), 6);
|
||||
kill(NULL, 6);
|
||||
return 0.0;
|
||||
}
|
||||
#ifdef HEATER_0_USES_MAX6675
|
||||
|
@ -1397,6 +1403,7 @@ void disable_heater()
|
|||
target_temperature_bed=0;
|
||||
soft_pwm_bed=0;
|
||||
timer02_set_pwm0(soft_pwm_bed << 1);
|
||||
bedPWMDisabled = 0;
|
||||
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
|
||||
//WRITE(HEATER_BED_PIN,LOW);
|
||||
#endif
|
||||
|
@ -1576,11 +1583,14 @@ void adc_ready(void) //callback from adc when sampling finished
|
|||
current_voltage_raw_pwr = adc_values[ADC_PIN_IDX(VOLT_PWR_PIN)];
|
||||
#endif
|
||||
#ifdef AMBIENT_THERMISTOR
|
||||
current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)];
|
||||
current_temperature_raw_ambient = adc_values[ADC_PIN_IDX(TEMP_AMBIENT_PIN)]; // 5->6
|
||||
#endif //AMBIENT_THERMISTOR
|
||||
#ifdef VOLT_BED_PIN
|
||||
current_voltage_raw_bed = adc_values[ADC_PIN_IDX(VOLT_BED_PIN)]; // 6->9
|
||||
#endif
|
||||
#if IR_SENSOR_ANALOG
|
||||
current_voltage_raw_IR = adc_values[ADC_PIN_IDX(VOLT_IR_PIN)];
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
temp_meas_ready = true;
|
||||
}
|
||||
|
||||
|
@ -1993,6 +2003,8 @@ void check_max_temp()
|
|||
//! number of repeating the same state with consecutive step() calls
|
||||
//! used to slow down text switching
|
||||
struct alert_automaton_mintemp {
|
||||
const char *m2;
|
||||
alert_automaton_mintemp(const char *m2):m2(m2){}
|
||||
private:
|
||||
enum { ALERT_AUTOMATON_SPEED_DIV = 5 };
|
||||
enum class States : uint8_t { Init = 0, TempAboveMintemp, ShowPleaseRestart, ShowMintemp };
|
||||
|
@ -2012,7 +2024,6 @@ public:
|
|||
//! @param current_temp current hotend/bed temperature (for computing simple hysteresis)
|
||||
//! @param mintemp minimal temperature including hysteresis to check current_temp against
|
||||
void step(float current_temp, float mintemp){
|
||||
static const char m2[] PROGMEM = "MINTEMP fixed";
|
||||
static const char m1[] PROGMEM = "Please restart";
|
||||
switch(state){
|
||||
case States::Init: // initial state - check hysteresis
|
||||
|
@ -2040,8 +2051,9 @@ public:
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
static alert_automaton_mintemp alert_automaton_hotend, alert_automaton_bed;
|
||||
static const char m2hotend[] PROGMEM = "MINTEMP HOTEND fixed";
|
||||
static const char m2bed[] PROGMEM = "MINTEMP BED fixed";
|
||||
static alert_automaton_mintemp alert_automaton_hotend(m2hotend), alert_automaton_bed(m2bed);
|
||||
|
||||
void check_min_temp_heater0()
|
||||
{
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
#include "stepper.h"
|
||||
#endif
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
||||
#ifdef SYSTEM_TIMER_2
|
||||
|
||||
|
@ -74,11 +76,16 @@ extern int current_voltage_raw_pwr;
|
|||
extern int current_voltage_raw_bed;
|
||||
#endif
|
||||
|
||||
#if IR_SENSOR_ANALOG
|
||||
extern int current_voltage_raw_IR;
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
||||
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
|
||||
extern unsigned char soft_pwm_bed;
|
||||
#endif
|
||||
|
||||
extern bool bedPWMDisabled;
|
||||
|
||||
#ifdef PIDTEMP
|
||||
extern int pid_cycle, pid_number_of_cycles;
|
||||
extern float Kc,_Kp,_Ki,_Kd;
|
||||
|
|
|
@ -136,14 +136,4 @@ void delay2(unsigned long ms)
|
|||
}
|
||||
}
|
||||
|
||||
void tone2(__attribute__((unused)) uint8_t _pin, __attribute__((unused)) unsigned int frequency/*, unsigned long duration*/)
|
||||
{
|
||||
PIN_SET(BEEPER);
|
||||
}
|
||||
|
||||
void noTone2(__attribute__((unused)) uint8_t _pin)
|
||||
{
|
||||
PIN_CLR(BEEPER);
|
||||
}
|
||||
|
||||
#endif //SYSTEM_TIMER_2
|
||||
|
|
|
@ -23,13 +23,6 @@ extern unsigned long micros2(void);
|
|||
///! Reimplemented original delay() using timer2
|
||||
extern void delay2(unsigned long ms);
|
||||
|
||||
///! Reimplemented original tone() using timer2
|
||||
///! Does not perform any PWM tone generation, it just sets the beeper pin to 1
|
||||
extern void tone2(uint8_t _pin, unsigned int frequency/*, unsigned long duration*/);
|
||||
|
||||
///! Turn off beeping - set beeper pin to 0
|
||||
extern void noTone2(uint8_t _pin);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif //defined(__cplusplus)
|
||||
|
|
|
@ -24,7 +24,7 @@ uint8_t tmc2130_current_h[4] = TMC2130_CURRENTS_H;
|
|||
uint8_t tmc2130_current_r[4] = TMC2130_CURRENTS_R;
|
||||
|
||||
//running currents for homing
|
||||
uint8_t tmc2130_current_r_home[4] = {8, 10, 20, 18};
|
||||
uint8_t tmc2130_current_r_home[4] = TMC2130_CURRENTS_R_HOME;
|
||||
|
||||
|
||||
//pwm_ampl
|
||||
|
@ -40,7 +40,7 @@ uint8_t tmc2130_mres[4] = {0, 0, 0, 0}; //will be filed at begin of init
|
|||
|
||||
|
||||
uint8_t tmc2130_sg_thr[4] = {TMC2130_SG_THRS_X, TMC2130_SG_THRS_Y, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
|
||||
uint8_t tmc2130_sg_thr_home[4] = {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E};
|
||||
uint8_t tmc2130_sg_thr_home[4] = TMC2130_SG_THRS_HOME;
|
||||
|
||||
|
||||
uint8_t tmc2130_sg_homing_axes_mask = 0x00;
|
||||
|
@ -427,7 +427,7 @@ void tmc2130_check_overtemp()
|
|||
|
||||
void tmc2130_setup_chopper(uint8_t axis, uint8_t mres, uint8_t current_h, uint8_t current_r)
|
||||
{
|
||||
uint8_t intpol = 1;
|
||||
uint8_t intpol = (mres != 0); // intpol to 256 only if microsteps aren't 256
|
||||
uint8_t toff = tmc2130_chopper_config[axis].toff; // toff = 3 (fchop = 27.778kHz)
|
||||
uint8_t hstrt = tmc2130_chopper_config[axis].hstr; //initial 4, modified to 5
|
||||
uint8_t hend = tmc2130_chopper_config[axis].hend; //original value = 1
|
||||
|
@ -600,7 +600,7 @@ void tmc2130_wr_THIGH(uint8_t axis, uint32_t val32)
|
|||
|
||||
uint8_t tmc2130_usteps2mres(uint16_t usteps)
|
||||
{
|
||||
uint8_t mres = 8; while (mres && (usteps >>= 1)) mres--;
|
||||
uint8_t mres = 8; while (usteps >>= 1) mres--;
|
||||
return mres;
|
||||
}
|
||||
|
||||
|
@ -807,15 +807,15 @@ void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_u
|
|||
{
|
||||
dir = tmc2130_get_inv(axis)?0:1;
|
||||
int steps = (int)step - (int)(mscnt >> shift);
|
||||
if (steps < 0)
|
||||
{
|
||||
dir ^= 1;
|
||||
steps = -steps;
|
||||
}
|
||||
if (steps > static_cast<int>(cnt / 2))
|
||||
{
|
||||
dir ^= 1;
|
||||
steps = cnt - steps;
|
||||
steps = cnt - steps; // This can create a negative step value
|
||||
}
|
||||
if (steps < 0)
|
||||
{
|
||||
dir ^= 1;
|
||||
steps = -steps;
|
||||
}
|
||||
cnt = steps;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -6,6 +6,9 @@
|
|||
#include "conv2str.h"
|
||||
#include "menu.h"
|
||||
#include "mesh_bed_calibration.h"
|
||||
#include "config.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
extern void menu_lcd_longpress_func(void);
|
||||
extern void menu_lcd_charsetup_func(void);
|
||||
|
@ -47,6 +50,7 @@ unsigned char lcd_choose_color();
|
|||
void lcd_load_filament_color_check();
|
||||
//void lcd_mylang();
|
||||
|
||||
extern void lcd_belttest();
|
||||
extern bool lcd_selftest();
|
||||
|
||||
void lcd_menu_statistics();
|
||||
|
@ -217,7 +221,9 @@ void lcd_set_degree();
|
|||
void lcd_set_progress();
|
||||
#endif
|
||||
|
||||
#if (LANG_MODE != 0)
|
||||
void lcd_language();
|
||||
#endif
|
||||
|
||||
void lcd_wizard();
|
||||
bool lcd_autoDepleteEnabled();
|
||||
|
@ -244,4 +250,12 @@ enum class WizState : uint8_t
|
|||
|
||||
void lcd_wizard(WizState state);
|
||||
|
||||
#define VOLT_DIV_REF 5
|
||||
#if IR_SENSOR_ANALOG
|
||||
#define IRsensor_Hmin_TRESHOLD (3.0*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~3.0V (0.6*Vcc)
|
||||
#define IRsensor_Lmax_TRESHOLD (1.5*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~1.5V (0.3*Vcc)
|
||||
#define IRsensor_Hopen_TRESHOLD (4.6*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k)
|
||||
#define IRsensor_Ldiode_TRESHOLD (0.3*1023*OVERSAMPLENR/VOLT_DIV_REF) // ~0.3V
|
||||
#endif //IR_SENSOR_ANALOG
|
||||
|
||||
#endif //ULTRALCD_H
|
||||
|
|
|
@ -504,7 +504,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 132
|
||||
#define MMU_FORCE_STEALTH_MODE
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
|
||||
#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning
|
||||
|
||||
|
|
|
@ -505,7 +505,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 132
|
||||
#define MMU_FORCE_STEALTH_MODE
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
|
||||
#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning
|
||||
|
||||
|
|
|
@ -504,7 +504,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 132
|
||||
#define MMU_FORCE_STEALTH_MODE
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
|
||||
// This is experimental feature requested by our test department.
|
||||
// There is no known use for ordinary user. If enabled by this macro
|
||||
|
|
|
@ -505,7 +505,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 132
|
||||
#define MMU_FORCE_STEALTH_MODE
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
|
||||
// This is experimental feature requested by our test department.
|
||||
// There is no known use for ordinary user. If enabled by this macro
|
||||
|
|
|
@ -260,11 +260,13 @@
|
|||
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
|
||||
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
|
||||
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
|
||||
#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
|
||||
|
||||
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
|
||||
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
|
||||
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
|
||||
#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
|
||||
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
|
||||
// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
|
||||
|
||||
#define TMC2130_STEALTH_Z
|
||||
|
||||
|
@ -616,6 +618,10 @@
|
|||
// The following example, 12 * (4 * 16 / 400) = 12 * 0.16mm = 1.92mm.
|
||||
//#define UVLO_Z_AXIS_SHIFT 1.92
|
||||
#define UVLO_Z_AXIS_SHIFT 0.64
|
||||
// When powered off during PP recovery, the Z axis position can still be re-adjusted. In this case
|
||||
// we just need to shift to the nearest fullstep, but we need a move which is at least
|
||||
// "dropsegments" steps long. All the above rules still need to apply.
|
||||
#define UVLO_TINY_Z_AXIS_SHIFT 0.16
|
||||
// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically.
|
||||
#define AUTOMATIC_UVLO_BED_TEMP_OFFSET 5
|
||||
|
||||
|
@ -628,7 +634,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 83
|
||||
#define MMU_HWRESET
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
#define MMU_IDLER_SENSOR_ATTEMPTS_NR 21 //max. number of attempts to load filament if first load failed; value for max bowden length and case when loading fails right at the beginning
|
||||
|
||||
#endif //__CONFIGURATION_PRUSA_H
|
||||
|
|
|
@ -262,11 +262,13 @@
|
|||
#define TMC2130_SG_THRS_Y 3 // stallguard sensitivity for Y axis
|
||||
#define TMC2130_SG_THRS_Z 4 // stallguard sensitivity for Z axis
|
||||
#define TMC2130_SG_THRS_E 3 // stallguard sensitivity for E axis
|
||||
#define TMC2130_SG_THRS_HOME {3, 3, TMC2130_SG_THRS_Z, TMC2130_SG_THRS_E}
|
||||
|
||||
//new settings is possible for vsense = 1, running current value > 31 set vsense to zero and shift both currents by 1 bit right (Z axis only)
|
||||
#define TMC2130_CURRENTS_H {16, 20, 35, 30} // default holding currents for all axes
|
||||
#define TMC2130_CURRENTS_R {16, 20, 35, 30} // default running currents for all axes
|
||||
#define TMC2130_UNLOAD_CURRENT_R 12 // lowe current for M600 to protect filament sensor
|
||||
#define TMC2130_CURRENTS_R_HOME {8, 10, 20, 18} // homing running currents for all axes
|
||||
// #define TMC2130_UNLOAD_CURRENT_R 12 // lower current for M600 to protect filament sensor - Unused
|
||||
|
||||
#define TMC2130_STEALTH_Z
|
||||
|
||||
|
@ -618,7 +620,11 @@
|
|||
// The following example, 12 * (4 * 16 / 400) = 12 * 0.16mm = 1.92mm.
|
||||
//#define UVLO_Z_AXIS_SHIFT 1.92
|
||||
#define UVLO_Z_AXIS_SHIFT 0.64
|
||||
// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically.
|
||||
// When powered off during PP recovery, the Z axis position can still be re-adjusted. In this case
|
||||
// we just need to shift to the nearest fullstep, but we need a move which is at least
|
||||
// "dropsegments" steps long. All the above rules still need to apply.
|
||||
#define UVLO_TINY_Z_AXIS_SHIFT 0.16
|
||||
// If power panic occured, and the current temperature is higher then target temperature before interrupt minus this offset, print will be recovered automatically.
|
||||
#define AUTOMATIC_UVLO_BED_TEMP_OFFSET 5
|
||||
|
||||
#define HEATBED_V2
|
||||
|
@ -630,7 +636,7 @@
|
|||
#define MMU_REQUIRED_FW_BUILDNR 83
|
||||
#define MMU_HWRESET
|
||||
#define MMU_DEBUG //print communication between MMU2 and printer on serial
|
||||
//#define MMU_HAS_CUTTER
|
||||
#define MMU_HAS_CUTTER
|
||||
|
||||
// This is experimental feature requested by our test department.
|
||||
// There is no known use for ordinary user. If enabled by this macro
|
||||
|
|
136
PF-build.sh
136
PF-build.sh
|
@ -56,7 +56,7 @@
|
|||
# Some may argue that this is only used by a script, BUT as soon someone accidentally or on purpose starts Arduino IDE
|
||||
# it will use the default Arduino IDE folders and so can corrupt the build environment.
|
||||
#
|
||||
# Version: 1.0.6-Build_9
|
||||
# Version: 1.0.6-Build_13
|
||||
# Change log:
|
||||
# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt'
|
||||
# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
|
||||
|
@ -112,7 +112,12 @@
|
|||
# Changed Hex-files folder to PF-build-hex as requested in PR
|
||||
# 23 Jul 2019, 3d-gussner, Added Finding OS version routine so supporting new OS should get easier
|
||||
# 26 Jul 2019, 3d-gussner, Change JSON repository to prusa3d after PR https://github.com/prusa3d/Arduino_Boards/pull/1 was merged
|
||||
|
||||
# 23 Sep 2019, 3d-gussner, Prepare PF-build.sh for comming Prusa3d/Arduino_Boards version 1.0.2 Pull Request
|
||||
# 17 Oct 2019, 3d-gussner, Changed folder and check file names to have seperated build enviroments depening on Arduino IDE version and
|
||||
# board-versions.
|
||||
# 15 Dec 2019, 3d-gussner, Prepare for switch to Prusa3d/PF-build-env repository
|
||||
# 15 Dec 2019, 3d-gussner, Fix Audrino user preferences for the chosen board.
|
||||
# 17 Dec 2019, 3d-gussner, Fix "timer0_fract = 0" warning by using Arduino_boards v1.0.3
|
||||
#### Start check if OSTYPE is supported
|
||||
OS_FOUND=$( command -v uname)
|
||||
|
||||
|
@ -205,18 +210,22 @@ if ! type python > /dev/null; then
|
|||
fi
|
||||
fi
|
||||
|
||||
#### End prepare bash environment
|
||||
#### End prepare bash / Linux environment
|
||||
|
||||
|
||||
#### Set build environment
|
||||
ARDUINO_ENV="1.8.5"
|
||||
BUILD_ENV="1.0.6"
|
||||
BOARD="PrusaResearchRambo"
|
||||
BOARD_VERSION="1.0.1"
|
||||
BOARD="prusa_einsy_rambo"
|
||||
BOARD_PACKAGE_NAME="PrusaResearch"
|
||||
BOARD_VERSION="1.0.3"
|
||||
#BOARD_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/Prusa_Merge_v1.0.3/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
BOARD_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json"
|
||||
BOARD_FILENAME="prusa3drambo"
|
||||
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3drambo-1.0.1.tar.bz2"
|
||||
PF_BUILD_FILE_URL="https://github.com/3d-gussner/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-$BUILD_ENV.zip"
|
||||
BOARD_FILENAME="prusa3dboards"
|
||||
#BOARD_FILE_URL="https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/Prusa_Merge_v1.0.3/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2"
|
||||
BOARD_FILE_URL="https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.3.tar.bz2"
|
||||
#PF_BUILD_FILE_URL="https://github.com/3d-gussner/PF-build-env-1/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip"
|
||||
PF_BUILD_FILE_URL="https://github.com/prusa3d/PF-build-env/releases/download/$BUILD_ENV-WinLin/PF-build-env-WinLin-$BUILD_ENV.zip"
|
||||
LIB="PrusaLibrary"
|
||||
SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||
|
||||
|
@ -229,6 +238,8 @@ echo ""
|
|||
echo "Ardunio IDE :" $ARDUINO_ENV
|
||||
echo "Build env :" $BUILD_ENV
|
||||
echo "Board :" $BOARD
|
||||
echo "Package name:" $BOARD_PACKAGE_NAME
|
||||
echo "Board v. :" $BOARD_VERSION
|
||||
echo "Specific Lib:" $LIB
|
||||
echo ""
|
||||
|
||||
|
@ -259,12 +270,12 @@ if [ $TARGET_OS == "windows" ]; then
|
|||
wget https://downloads.arduino.cc/arduino-$ARDUINO_ENV-windows.zip || exit 7
|
||||
echo "$(tput sgr 0)"
|
||||
fi
|
||||
if [ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" ]; then
|
||||
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
|
||||
echo "$(tput setaf 6)Unzipping Windows 32/64-bit Arduino IDE portable...$(tput setaf 2)"
|
||||
sleep 2
|
||||
unzip arduino-$ARDUINO_ENV-windows.zip -d ../PF-build-env-$BUILD_ENV || exit 7
|
||||
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
|
||||
echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor
|
||||
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
|
||||
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
echo "$(tput sgr0)"
|
||||
fi
|
||||
fi
|
||||
|
@ -277,55 +288,55 @@ if [ $TARGET_OS == "linux" ]; then
|
|||
wget --no-check-certificate https://downloads.arduino.cc/arduino-$ARDUINO_ENV-linux$Processor.tar.xz || exit 8
|
||||
echo "$(tput sgr 0)"
|
||||
fi
|
||||
if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt" ]]; then
|
||||
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" && ! -e "../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
|
||||
echo "$(tput setaf 6)Unzipping Linux $Processor Arduino IDE portable...$(tput setaf 2)"
|
||||
sleep 2
|
||||
tar -xvf arduino-$ARDUINO_ENV-linux$Processor.tar.xz -C ../PF-build-env-$BUILD_ENV/ || exit 8
|
||||
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor
|
||||
echo "# arduino-$ARDUINO_ENV-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$TARGET_OS-$Processor.txt
|
||||
mv ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor
|
||||
echo "# arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/arduino-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
echo "$(tput sgr0)"
|
||||
fi
|
||||
fi
|
||||
# Make Arduino IDE portable
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/
|
||||
fi
|
||||
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/output
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/output
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/sketchbook/libraries
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/sketchbook/libraries
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/staging
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging/ ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/staging
|
||||
fi
|
||||
|
||||
# Change Arduino IDE preferences
|
||||
if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt ]; then
|
||||
echo "$(tput setaf 6)Setting $TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
|
||||
if [ ! -e ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt ]; then
|
||||
echo "$(tput setaf 6)Setting $ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor Arduino IDE preferences for portable GUI usage...$(tput setaf 2)"
|
||||
sleep 2
|
||||
echo "update.check"
|
||||
sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
sed -i 's/update.check = true/update.check = false/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "board"
|
||||
sed -i 's/board = uno/board = rambo/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
sed -i "s/board = uno/board = $BOARD/g" ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "editor.linenumbers"
|
||||
sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
sed -i 's/editor.linenumbers = false/editor.linenumbers = true/g' ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "boardsmanager.additional.urls"
|
||||
echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "# Preferences-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$TARGET_OS-$Processor.txt
|
||||
echo "boardsmanager.additional.urls=$BOARD_URL" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "build.verbose=true" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "compiler.cache_core=false" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "compiler.warning_level=all" >>../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/lib/preferences.txt
|
||||
echo "# Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor" >> ../PF-build-env-$BUILD_ENV/Preferences-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
echo "$(tput sgr0)"
|
||||
fi
|
||||
|
||||
|
@ -336,59 +347,60 @@ if [ ! -f "$BOARD_FILENAME-$BOARD_VERSION.tar.bz2" ]; then
|
|||
sleep 2
|
||||
wget $BOARD_FILE_URL || exit 9
|
||||
fi
|
||||
if [[ ! -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
|
||||
echo "$(tput setaf 6)Unzipping $BOARD Arduino IDE portable...$(tput setaf 2)"
|
||||
if [[ ! -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION" || ! -e "../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]]; then
|
||||
echo "$(tput setaf 6)Unzipping $BOARD_PACKAGE_NAME Arduino IDE portable...$(tput setaf 2)"
|
||||
sleep 2
|
||||
tar -xvf $BOARD_FILENAME-$BOARD_VERSION.tar.bz2 -C ../PF-build-env-$BUILD_ENV/ || exit 10
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware
|
||||
fi
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr
|
||||
if [ ! -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr ]; then
|
||||
mkdir ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr
|
||||
fi
|
||||
|
||||
mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/$BOARD/hardware/avr/$BOARD_VERSION
|
||||
echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
mv ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$BOARD_VERSION ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/$BOARD_PACKAGE_NAME/hardware/avr/$BOARD_VERSION
|
||||
echo "# $BOARD_FILENAME-$BOARD_VERSION" >> ../PF-build-env-$BUILD_ENV/$BOARD_FILENAME-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
|
||||
echo "$(tput sgr 0)"
|
||||
fi
|
||||
|
||||
# Download and extract Prusa Firmware specific library files
|
||||
if [ ! -f "PF-build-env-$BUILD_ENV.zip" ]; then
|
||||
if [ ! -f "PF-build-env-WinLin-$BUILD_ENV.zip" ]; then
|
||||
echo "$(tput setaf 6)Downloading Prusa Firmware build environment...$(tput setaf 2)"
|
||||
sleep 2
|
||||
wget $PF_BUILD_FILE_URL || exit 11
|
||||
echo "$(tput sgr 0)"
|
||||
fi
|
||||
if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt" ]; then
|
||||
if [ ! -e "../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt" ]; then
|
||||
echo "$(tput setaf 6)Unzipping Prusa Firmware build environment...$(tput setaf 2)"
|
||||
sleep 2
|
||||
unzip -o PF-build-env-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 12
|
||||
echo "# PF-build-env-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$TARGET_OS-$Processor.txt
|
||||
unzip -o PF-build-env-WinLin-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 12
|
||||
echo "# PF-build-env-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
echo "$(tput sgr0)"
|
||||
fi
|
||||
|
||||
# Check if User updated Arduino IDE 1.8.5 boardsmanager and tools
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools" ]; then
|
||||
echo "$(tput setaf 6)Arduino IDE boards / tools have been manually updated...$"
|
||||
echo "Please don't update the 'Arduino AVR boards' as this will prevent running this script (tput setaf 2)"
|
||||
sleep 2
|
||||
fi
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2" ]; then
|
||||
echo "$(tput setaf 6)PrusaReasearch compatible tools have been manually updated...$(tput setaf 2)"
|
||||
sleep 2
|
||||
echo "$(tput setaf 6)Copying Prusa Firmware build environment to manually updated boards / tools...$(tput setaf 2)"
|
||||
sleep 2
|
||||
cp -f ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
|
||||
echo "# PF-build-env-portable-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$TARGET_OS-$Processor.txt
|
||||
cp -f ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/hardware/tools/avr/avr/lib/ldscripts/avr6.xn ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/avr/lib/ldscripts/avr6.xn
|
||||
echo "# PF-build-env-portable-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor-$BUILD_ENV" >> ../PF-build-env-$BUILD_ENV/PF-build-env-portable-$BUILD_ENV-$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor.txt
|
||||
echo "$(tput sgr0)"
|
||||
fi
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
|
||||
if [ -d "../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor/portable/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2" ]; then
|
||||
echo "$(tput setaf 1)Arduino IDE tools have been updated manually to a non supported version!!!"
|
||||
echo "Delete ../PF-build-env-$BUILD_ENV and start the script again"
|
||||
echo "Script will not continue until this have been fixed $(tput setaf 2)"
|
||||
|
@ -489,7 +501,7 @@ if [ ! -z "$3" ] ; then
|
|||
fi
|
||||
|
||||
#Set BUILD_ENV_PATH
|
||||
cd ../PF-build-env-$BUILD_ENV/$TARGET_OS-$Processor || exit 24
|
||||
cd ../PF-build-env-$BUILD_ENV/$ARDUINO_ENV-$BOARD_VERSION-$TARGET_OS-$Processor || exit 24
|
||||
BUILD_ENV_PATH="$( pwd -P )"
|
||||
|
||||
cd ../..
|
||||
|
@ -634,8 +646,8 @@ do
|
|||
echo "Start to build Prusa Firmware ..."
|
||||
echo "Using variant $VARIANT$(tput setaf 3)"
|
||||
sleep 2
|
||||
#$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
|
||||
$BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
|
||||
#$BUILD_ENV_PATH/arduino-builder -dump-prefs -debug-level 10 -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
|
||||
$BUILD_ENV_PATH/arduino-builder -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=$BOARD_PACKAGE_NAME:avr:$BOARD -build-path=$BUILD_PATH -warnings=all $SCRIPT_PATH/Firmware/Firmware.ino || exit 14
|
||||
echo "$(tput sgr 0)"
|
||||
|
||||
if [ $LANGUAGES == "ALL" ]; then
|
||||
|
|
|
@ -46,7 +46,7 @@ _Note: Multi language build is not supported._
|
|||
|
||||
* Open Arduino and navigate to File -> Preferences -> Settings
|
||||
* To the text field `"Additional Boards Manager URLSs"` add `https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/package_prusa3d_index.json`
|
||||
* Open Board manager (`Tools->Board->Board manager`), and install `Prusa Research AVR MK3 RAMBo EINSy board`
|
||||
* Open Board manager (`Tools->Board->Board manager`), and install `Prusa Research AVR Boards by Prusa Research`
|
||||
|
||||
**c.** Modify compiler flags in `platform.txt` file
|
||||
|
||||
|
@ -178,6 +178,7 @@ Example:
|
|||
|
||||
# 4. Documentation
|
||||
run [doxygen](http://www.doxygen.nl/) in Firmware folder
|
||||
or visit https://prusa3d.github.io/Prusa-Firmware-Doc for doxygen generated output
|
||||
|
||||
# 5. FAQ
|
||||
Q:I built firmware using Arduino and I see "?" instead of numbers in printer user interface.
|
||||
|
|
|
@ -198,7 +198,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
|
|||
SERIAL_ECHOLN("}");
|
||||
status_number = 15;
|
||||
}
|
||||
else if (isPrintPaused || card.paused)
|
||||
else if (isPrintPaused)
|
||||
{
|
||||
SERIAL_ECHO("{");
|
||||
prusa_stat_printerstatus(14);
|
||||
|
@ -490,7 +490,7 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
|
|||
{
|
||||
prusa_statistics_case0(15);
|
||||
}
|
||||
else if (isPrintPaused || card.paused)
|
||||
else if (isPrintPaused)
|
||||
{
|
||||
prusa_statistics_case0(14);
|
||||
}
|
||||
|
@ -753,7 +753,6 @@ TEST_CASE("Prusa_statistics test", "[prusa_stats]")
|
|||
SERIALS_RESET();
|
||||
|
||||
isPrintPaused = 0;
|
||||
card.paused = 0;
|
||||
IS_SD_PRINTING = 1;
|
||||
old_code::prusa_statistics(test_codes[i],0);
|
||||
new_code::prusa_statistics(test_codes[i],0);
|
||||
|
|
5
build.sh
5
build.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
BUILD_ENV="1.0.6"
|
||||
BUILD_ENV="1.0.6.1"
|
||||
SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
||||
|
||||
if [ ! -d "build-env" ]; then
|
||||
|
@ -8,7 +8,8 @@ fi
|
|||
cd build-env || exit 2
|
||||
|
||||
if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then
|
||||
wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3
|
||||
#wget https://github.com/3d-gussner/PF-build-env-1/releases/download/$BUILD_ENV-Linux64/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3
|
||||
wget https://github.com/prusa3d/PF-build-env/releases/download/$BUILD_ENV-Linux64/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3
|
||||
fi
|
||||
|
||||
if [ ! -d "../../PF-build-env-$BUILD_ENV" ]; then
|
||||
|
|
212
lang/lang_en.txt
212
lang/lang_en.txt
|
@ -37,14 +37,8 @@
|
|||
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
|
||||
"Are left and right Z~carriages all up?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
"Auto home"
|
||||
|
@ -130,18 +124,11 @@
|
|||
#
|
||||
"Copy selected language?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
|
||||
|
@ -205,14 +192,8 @@
|
|||
#
|
||||
"Fail stats MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -223,20 +204,11 @@
|
|||
#MSG_SELFTEST_FAN c=20
|
||||
"Fan test"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
|
||||
#
|
||||
"Filam. runouts"
|
||||
|
@ -433,11 +405,14 @@
|
|||
#MSG_MMU_OK_RESUMING c=20 r=4
|
||||
"MMU OK. Resuming..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -445,14 +420,14 @@
|
|||
#
|
||||
"MMU power fails"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -478,7 +453,7 @@
|
|||
#MSG_NO_CARD
|
||||
"No SD card"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
|
||||
#MSG_NO
|
||||
|
@ -658,20 +633,17 @@
|
|||
#MSG_BED_CORRECTION_RIGHT c=14 r=1
|
||||
"Right side[um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -718,38 +690,38 @@
|
|||
#MSG_FILE_CNT c=20 r=4
|
||||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
|
@ -778,18 +750,12 @@
|
|||
#
|
||||
"Select filament:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
|
||||
|
@ -929,7 +895,10 @@
|
|||
"Y-correct:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
"Off"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -943,14 +912,14 @@
|
|||
#
|
||||
"FINDA:"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -958,20 +927,11 @@
|
|||
#
|
||||
"IR:"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -979,41 +939,17 @@
|
|||
#
|
||||
"MK3S firmware detected on MK3 printer"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1060,8 +996,8 @@
|
|||
#
|
||||
"Sheet"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1069,11 +1005,5 @@
|
|||
#
|
||||
"Z-correct:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
|
|
|
@ -50,18 +50,10 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"Dojely oba Z voziky k~hornimu dorazu?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"SpoolJoin [zap]"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
"SpoolJoin [vyp]"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
"Auto home"
|
||||
"\x00"
|
||||
|
@ -174,21 +166,13 @@
|
|||
"Copy selected language?"
|
||||
"Kopirovat vybrany jazyk?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Crash det. [zap]"
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
"\x00"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Crash det. [vyp]"
|
||||
#
|
||||
"Zvolte filament pro kalibraci prvni vrstvy z nasledujiciho menu"
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
|
@ -274,17 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"Selhani MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"F. autozav. [zap]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"F. autozav. [N/A]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"F. autozav. [vyp]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"F. autozav."
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -298,25 +274,13 @@
|
|||
"Fan test"
|
||||
"Test ventilatoru"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Kontr. vent.[zap]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Kontr. vent."
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Kontr. vent.[vyp]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Fil. senzor [zap]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Fil. senzor [N/A]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Fil. senzor [vyp]"
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"Fil. senzor"
|
||||
|
||||
#
|
||||
"Filam. runouts"
|
||||
|
@ -578,13 +542,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Pokracuji..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
"Mod [Normal]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"Mod"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Mod [tichy]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Tichy"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +562,17 @@
|
|||
"MMU power fails"
|
||||
"MMU vypadky proudu"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Mod [tichy]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"Tichy"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Mod [automaticky]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"Automaticky"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Mod [vys. vykon]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Vys. vykon"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,7 +606,7 @@
|
|||
"No SD card"
|
||||
"Zadna SD karta"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"\x00"
|
||||
|
||||
|
@ -878,25 +846,21 @@
|
|||
"Right side[um]"
|
||||
"Vpravo [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"RPi port [zap]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"RPi port [vyp]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"\x00"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Spusteni Pruvodce vymaze ulozene vysledky vsech kalibraci a spusti kalibracni proces od zacatku. Pokracovat?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"\x00"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"SD card [FlshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,49 +922,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Nektere soubory nebudou setrideny. Maximalni pocet souboru ve slozce pro setrideni je 100."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Trideni [Zadne]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Trideni"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Trideni [cas]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Zadne"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Cas"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Tezke zkoseni:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Trideni [Abeceda]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"Abeceda"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Trideni souboru"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Zvuk [hlasity]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Hlasity"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Lehke zkoseni:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Zvuk [vypnuto]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"Zvuk"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Vyskytl se problem, srovnavam osu Z ..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Zvuk [jednou]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Zvuk [tichy]"
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"Jednou"
|
||||
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
|
@ -1038,22 +1002,14 @@
|
|||
"Select filament:"
|
||||
"Zvolte filament:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
"Tepl. kal. "
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Tepl. kal. [zap]"
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Tepl. kal."
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Zvolte teplotu, ktera odpovida vasemu materialu."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Tepl. kal. [vyp]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Teplot. kalibrace"
|
||||
|
@ -1232,15 +1188,19 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)."
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Korekce Y:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
" [vyp]"
|
||||
"Off"
|
||||
"Vyp"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"Zap"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -1258,17 +1218,17 @@
|
|||
"FINDA:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware [Zadne]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware [Prisne]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Prisne"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware[Varovat]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Varovat"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,25 +1238,13 @@
|
|||
"IR:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Komp. magnetu[N/A]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Komp. magnetu"
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Komp. magnetu[Vyp]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Komp. magnetu[Zap]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"Mesh [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
"Mesh [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -1306,53 +1254,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"MK3S firmware detekovan na tiskarne MK3"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"MMU mod [Normal]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"MMU Mod [Tichy]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"MMU mod"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Probiha zmena modu..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Model [Zadne]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Model [Prisne]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Model [Varovat]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Tryska [0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Tryska [0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Tryska [0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Tryska [Zadne]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Tryska [Prisne]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Tryska [Varovat]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Tryska"
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1330,9 @@
|
|||
"Sheet"
|
||||
"Plat"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Zvuk [Asist.]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"Asist."
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,14 +1342,6 @@
|
|||
"Z-correct:"
|
||||
"Korekce Z:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Pocet mereni Z [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Pocet mereni Z [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Pocet mereni Z [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"Pocet mereni Z"
|
||||
|
|
|
@ -50,17 +50,9 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"Sind linke+rechte Z- Schlitten ganz oben?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"SpoolJoin [an]"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
"SpoolJoin [N/V]"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
"SpoolJoin [aus]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
"Auto home"
|
||||
|
@ -174,22 +166,14 @@
|
|||
"Copy selected language?"
|
||||
"Gewaehlte Sprache kopieren?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Crash Erk. [an]"
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
"Crash Erk."
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Waehlen Sie ein Filament fuer Erste Schichtkalibrierung aus und waehlen Sie es im On-Screen-Menu aus."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
"Crash Erk. [nv]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Crash Erk. [aus]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
"Crash erkannt."
|
||||
|
@ -274,17 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"MMU-Fehler"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"F.Autoladen [an]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"F. Autoload [nv]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"F. Autoload [aus]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"F. autoladen"
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -298,25 +274,13 @@
|
|||
"Fan test"
|
||||
"Lueftertest"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Luefter Chk. [an]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Luefter Chk."
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Luefter Chk.[aus]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Fil. Sensor [an]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Fil. Sensor [nv]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Fil. Sensor [aus]"
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Filam. runouts"
|
||||
|
@ -578,13 +542,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Weiterdrucken..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
"Modus [Normal]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"Modus"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Modus [leise]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Leise"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +562,17 @@
|
|||
"MMU power fails"
|
||||
"MMU Netzfehler"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Modus [Stealth]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Modus[Auto Power]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Modus[Hohe Leist]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Hohe leist"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,9 +606,9 @@
|
|||
"No SD card"
|
||||
"Keine SD Karte"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"N.V."
|
||||
"N/V"
|
||||
|
||||
#MSG_NO
|
||||
"No"
|
||||
|
@ -878,25 +846,21 @@
|
|||
"Right side[um]"
|
||||
"Rechts [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"RPi Port [an]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"RPi Port [aus]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"\x00"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Der Assistent wird die aktuellen Kalibrierungsdaten loeschen und von vorne beginnen. Weiterfahren?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
"SD Karte [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"SD Karte"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"SD Karte[flshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,49 +922,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Einige Dateien wur- den nicht sortiert. Max. Dateien pro Verzeichnis = 100."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Sort. [ohne]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Sort."
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Sort. [Zeit]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Ohne"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Zeit"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Schwer.Schr:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Sort. [Alphabet]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"\x00"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Sortiere Dateien"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Sound [laut]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Laut"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Leicht.Schr:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Sound [stumm]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Fehler aufgetreten, Z-Kalibrierung erforderlich..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Sound [einmal]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Sound [leise]"
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"Einmal"
|
||||
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
|
@ -1038,22 +1002,14 @@
|
|||
"Select filament:"
|
||||
"Filament auswaehlen:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
"Temp Kalib. "
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Temp. Kal. [an]"
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Temp Kalib."
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Waehlen Sie die Temperatur, die zu Ihrem Material passt."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Temp. Kal. [aus]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Temp. kalibrieren"
|
||||
|
@ -1232,15 +1188,19 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)."
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Y-Korrektur:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
" [aus]"
|
||||
"Off"
|
||||
"Aus"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"An"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -1258,17 +1218,17 @@
|
|||
"FINDA:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware [ohne]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware [strikt]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Strikt"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware [warnen]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Warnen"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,25 +1238,13 @@
|
|||
"IR:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Magnet Komp. [nv]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Magnet Komp."
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Magnet Komp. [Aus]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Magnet Komp. [An]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"Gitter [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
"Gitter [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"Gitter"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -1306,53 +1254,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"MK3S-Firmware auf MK3-Drucker erkannt"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"MMU Modus[Normal]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"MMU Mod.[Stealth]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"MMU Modus"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Moduswechsel erfolgt..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Modell [ohne]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"Modell"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Modell [strikt]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Modell [warnen]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Duese D. [0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Duese D. [0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Duese D. [0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Duese [ohne]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Duese [strikt]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Duese [warnen]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Duese D."
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1330,9 @@
|
|||
"Sheet"
|
||||
"Blech"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Sound [Assist]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,14 +1342,6 @@
|
|||
"Z-correct:"
|
||||
"Z-Korrektur:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Z-Probe Nr. [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Z-Probe Nr. [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Z-Probe Nr. [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"\x00"
|
||||
|
|
|
@ -50,16 +50,8 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"Carros Z izq./der. estan arriba maximo?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
|
@ -174,22 +166,14 @@
|
|||
"Copy selected language?"
|
||||
"Copiar idioma seleccionado?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Det. choque [act]"
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
"Det. choque"
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Escoge un filamento para la Calibracion de la Primera Capa y seleccionalo en el menu en pantalla."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
"Dec. choque [N/D]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Det. choque [ina]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
"Choque detectado."
|
||||
|
@ -274,17 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"Estadistica de fallos MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"Autocarg.Fil[act]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"Autocarg.Fil[N/D]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"Autocarg.Fil[ina]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"Autocarg.fil."
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -298,25 +274,13 @@
|
|||
"Fan test"
|
||||
"Test ventiladores"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Comprob.vent[act]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Comprob.vent"
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Comprob.vent[ina]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Sensor Fil. [act]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Sensor Fil. [N/D]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Sensor Fil. [ina]"
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"Sensor Fil."
|
||||
|
||||
#
|
||||
"Filam. runouts"
|
||||
|
@ -578,13 +542,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Resumiendo..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
"Modo [Normal]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"Modo"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Modo [silencio]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Silencio"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +562,17 @@
|
|||
"MMU power fails"
|
||||
"Fallo de energia en MMU"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Modo [Silencio]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"Silencio"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Modo[fuerza auto]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"Fuerza auto"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Modo [rend.pleno]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Rend.pleno"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,7 +606,7 @@
|
|||
"No SD card"
|
||||
"No hay tarjeta SD"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"N/A"
|
||||
|
||||
|
@ -878,25 +846,21 @@
|
|||
"Right side[um]"
|
||||
"Derecha [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"Puerto RPi [act]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"Puerto RPi [ina]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"Puerto RPi"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Ejecutar el Wizard borrara los valores de calibracion actuales y comenzara de nuevo. Continuar?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
"Tarj. SD [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"Tarj. SD"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"Tarj. SD[FlshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,49 +922,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Algunos archivos no se ordenaran. Maximo 100 archivos por carpeta para ordenar. "
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Ordenar [ninguno]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Ordenar"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Ordenar [fecha]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Ninguno"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Fecha"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Incl.severa:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Ordenar [alfabet]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"Alfabet"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Ordenando archivos"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Sonido [alto]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Alto"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Liger.incl.:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Sonido[silenciad]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"Sonido"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Problema encontrado, nivelacion Z forzosa ..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Sonido [una vez]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Sonido[silencios]"
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"Una vez"
|
||||
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
|
@ -1038,22 +1002,14 @@
|
|||
"Select filament:"
|
||||
"Selecciona filamento:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
"Cal. temp. "
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Cal. temp. [on]"
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Cal. temp."
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Selecciona la temperatura adecuada a tu material."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Cal. temp. [off]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Calibracion temp."
|
||||
|
@ -1232,15 +1188,19 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"La impresora comenzara a imprimir una linea en zig-zag. Gira el dial hasta que la linea alcance la altura optima. Mira las fotos del manual (Capitulo de calibracion)."
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Corregir-Y:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
"[apag]"
|
||||
"Off"
|
||||
"Ina"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"Act"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -1258,17 +1218,17 @@
|
|||
"FINDA:"
|
||||
"FINDA:"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware[ninguno]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware[estrict]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Estrict"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware [aviso]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Aviso"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,25 +1238,13 @@
|
|||
"IR:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Comp. imanes [N/A]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Comp. imanes"
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Comp. imanes [Off]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Comp. imanes [On]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"Malla [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
"Malla [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"Malla"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -1306,53 +1254,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"Firmware MK3S detectado en impresora MK3"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"Modo MMU [Normal]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"Modo MMU[Silenci]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"Modo MMU"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Cambio de modo progresando ..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Modelo [ninguno]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"Modelo"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Modelo [estricto]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Modelo [aviso]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Diam. nozzl[0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Diam. nozzl[0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Diam. nozzl[0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Nozzle [ninguno]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Nozzle [estricto]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Nozzle [aviso]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Diam. nozzl"
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1330,9 @@
|
|||
"Sheet"
|
||||
"Lamina"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Sonido [asistido]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"Asistido"
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,14 +1342,6 @@
|
|||
"Z-correct:"
|
||||
"Corregir-Z:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Z-sensor nr. [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Z-sensor nr. [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Z-sensor nr. [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"Z-sensor nr."
|
||||
|
|
|
@ -50,16 +50,8 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"Z~carriages gauche + droite tout en haut?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
|
@ -174,22 +166,14 @@
|
|||
"Copy selected language?"
|
||||
"Copier la langue selectionne?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Detect.crash [on]"
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
"Detect.crash"
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Choisissez un filament pour la Calibration de la Premiere Couche et selectionnez-le depuis le menu a l'ecran."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
"Detect.crash[N/A]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Detect.crash[off]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
"Crash detecte."
|
||||
|
@ -274,18 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"Stat. d'echec MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"Autochargeur [on]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"Autochargeur[N/A]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"Autochargeur[off]"
|
||||
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"Autochargeur"
|
||||
#
|
||||
"Fail stats"
|
||||
"Stat. d'echec"
|
||||
|
@ -298,26 +273,13 @@
|
|||
"Fan test"
|
||||
"Test du ventilateur"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Verif vent. [on]"
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Verif vent. [off]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Capteur Fil. [on]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Capteur Fil.[N/A]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Capteur Fil.[off]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Verif vent."
|
||||
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"Capteur Fil."
|
||||
#
|
||||
"Filam. runouts"
|
||||
"Fins de filament"
|
||||
|
@ -578,13 +540,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Reprise ..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Mode [feutre]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"\x00"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Feutre"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +560,17 @@
|
|||
"MMU power fails"
|
||||
"Echecs alim. MMU"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Mode [furtif]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"Furtif"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Mode [puiss.auto]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"Puiss.auto"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Mode[haute puiss]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Haute puiss"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,7 +604,7 @@
|
|||
"No SD card"
|
||||
"Pas de carte SD"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"\x00"
|
||||
|
||||
|
@ -878,25 +844,21 @@
|
|||
"Right side[um]"
|
||||
"Droite [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"Port RPi [on]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"Port RPi [off]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"Port RPi"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Lancement de l'Assistant supprimera les resultats actuels de calibration et commencera du debut. Continuer?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
"Carte SD [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"Carte SD"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"Carte SD[flshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"FlshAir"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,50 +920,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Certains fichiers ne seront pas tries. Max 100 fichiers tries par dossier."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Tri [aucun]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Tri"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Tri [heure]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Aucun"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Heure"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Deviat.sev.:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Tri [alphabet]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"\x00"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Tri des fichiers"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Son [fort]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Fort"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Deviat.leg.:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Son [muet]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"Son"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Son [une fois]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Son [feutre]"
|
||||
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"Une fois"
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
"Vitesse"
|
||||
|
@ -1038,22 +999,14 @@
|
|||
"Select filament:"
|
||||
"Selectionnez le filament:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Calib. Temp."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Calib. Temp. [on]"
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Selectionnez la temperature qui correspond a votre materiau."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Calib. Temp.[off]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Calibration temp."
|
||||
|
@ -1232,15 +1185,19 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"L'imprimante commencera a imprimer une ligne en zig-zag. Tournez le bouton jusqu'a atteindre la hauteur optimale. Consultez les photos dans le manuel (chapitre Calibration)."
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Correct-Y:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
" [off]"
|
||||
"Off"
|
||||
"\x00"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -1258,17 +1215,17 @@
|
|||
"FINDA:"
|
||||
"FINDA:"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware [aucune]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware[stricte]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Stricte"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware [avert]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Avert"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,24 +1235,12 @@
|
|||
"IR:"
|
||||
"IR:"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Compens. aim.[N/A]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Compens. aim."
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Compens. aim.[off]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Compens. aim. [on]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
|
@ -1306,53 +1251,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"Firmware MK3S detecte sur imprimante MK3"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"Mode MMU [normal]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"Mode MMU [feutre]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"Mode MMU"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Changement de mode en cours..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Modele [aucune]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"Modele"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Modele [stricte]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Modele [avert]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Diam. buse [0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Diam. buse [0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Diam. buse [0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Buse [aucune]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Buse [stricte]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Buse [avert]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Diam. buse"
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1327,9 @@
|
|||
"Sheet"
|
||||
"Plaque"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Son [assist]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,15 +1339,6 @@
|
|||
"Z-correct:"
|
||||
"Correct-Z:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Mesurer x-fois [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Mesurer x-fois [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Mesurer x-fois [5]"
|
||||
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"Mesurer x-fois"
|
||||
|
|
|
@ -50,16 +50,8 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"I carrelli Z sin/des sono altezza max?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
|
@ -174,22 +166,14 @@
|
|||
"Copy selected language?"
|
||||
"Copiare la lingua selezionata?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Rileva.crash [on]"
|
||||
#MSG_CRASHDETECT
|
||||
"Crash det."
|
||||
"Rileva.crash"
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Scegli un filamento per la calibrazione del primo strato e selezionalo nel menu sullo schermo."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
"Rileva.crash[N/A]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Rileva.crash[off]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
"Rilevato impatto."
|
||||
|
@ -274,17 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"Stat.fall. MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"Autocar.fil. [on]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"Autocar.fil.[N/A]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"Autocar.fil.[off]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"Autocar.fil."
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -298,26 +274,13 @@
|
|||
"Fan test"
|
||||
"Test ventola"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Control.vent [on]"
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Control.vent[off]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Sensore fil. [on]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Sensore fil.[N/A]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Sensore fil.[off]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Control.vent"
|
||||
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"Sensore fil."
|
||||
#
|
||||
"Filam. runouts"
|
||||
"Filam. esauriti"
|
||||
|
@ -578,13 +541,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Riprendendo... "
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
"Mod. [normale]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"Mod."
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Mod. [silenziosa]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"Normale"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Silenzioso"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +561,17 @@
|
|||
"MMU power fails"
|
||||
"Manc. corr. MMU"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Mod. [silenziosa]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"Silenziosa"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Mod. [auto]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"Auto"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Mod. [forte]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Forte"
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,7 +605,7 @@
|
|||
"No SD card"
|
||||
"Nessuna SD"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"\x00"
|
||||
|
||||
|
@ -878,25 +845,21 @@
|
|||
"Right side[um]"
|
||||
"Destra [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"Porta RPi [on]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"Porta RPi [off]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"Porta RPi"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Se avvi il Wizard perderai la calibrazione preesistente e dovrai ricominciare dall'inizio. Continuare?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
"Mem. SD [normale]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"Mem. SD"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"Mem. SD [flshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,49 +921,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Alcuni file non saranno ordinati. Il numero massimo di file in una cartella e 100 perche siano ordinati."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Ordina [nessuno]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Ordina"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Ordina [cron.]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Nessuno"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Cron."
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Devia.grave:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Ordine [alfabeti]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"Alfabeti"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Ordinando i file"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Suono [forte]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Forte"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Devia.lieve:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Suono [mute]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"Suono"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Sono stati rilevati problemi, avviato livellamento Z ..."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Suono [singolo]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Suono[silenzioso]"
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"Singolo"
|
||||
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
|
@ -1038,22 +1001,14 @@
|
|||
"Select filament:"
|
||||
"Seleziona il filamento:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
"Calib. temp. "
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Calib. temp. [on]"
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Calib. temp."
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Seleziona la temperatura appropriata per il tuo materiale."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Calib. temp.[off]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Calib. Temp."
|
||||
|
@ -1232,14 +1187,18 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"La stampante iniziera a stampare una linea a zig-zag. Gira la manopola fino a che non hai raggiungo l'altezza ottimale. Verifica con le immagini nel manuale (capitolo sulla calibrazione):"
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Correzione-Y:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
"Off"
|
||||
"\x00"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
|
@ -1258,17 +1217,17 @@
|
|||
"FINDA:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware[nessuno]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware [esatto]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Esatto"
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware [avviso]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Avviso"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,25 +1237,13 @@
|
|||
"IR:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Comp. Magneti[N/A]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Comp. Magneti"
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Comp. Magneti[off]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Comp. Magneti [on]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"Griglia [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
"Griglia [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"Griglia"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -1306,53 +1253,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"Firmware MK3S rilevato su stampante MK3"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"Modalita MMU [Normale]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"Modalita MMU [Silenziosa]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"Mod. MMU"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Cambio modalita in corso ..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Modello [nessuno]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"Modello"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Modello [esatto]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Modello [avviso]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Diam.Ugello[0.25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Diam.Ugello[0.40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Diam.Ugello[0.60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Ugello [nessuno]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Ugello [esatto]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Ugello [avviso]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Diam.Ugello"
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1329,9 @@
|
|||
"Sheet"
|
||||
"Piano"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Suono [assist.]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"Assist."
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,14 +1341,6 @@
|
|||
"Z-correct:"
|
||||
"Correzione-Z:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Z-probe nr. [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Z-probe nr. [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Z-probe nr. [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"\x00"
|
||||
|
|
|
@ -50,17 +50,9 @@
|
|||
"Are left and right Z~carriages all up?"
|
||||
"Obydwa konce osi sa na szczycie?"
|
||||
|
||||
#MSG_AUTO_DEPLETE_ON c=17 r=1
|
||||
"SpoolJoin [on]"
|
||||
"SpoolJoin [wl]"
|
||||
|
||||
#
|
||||
"SpoolJoin [N/A]"
|
||||
"SpoolJoin [N/D]"
|
||||
|
||||
#MSG_AUTO_DEPLETE_OFF c=17 r=1
|
||||
"SpoolJoin [off]"
|
||||
"SpoolJoin [wyl]"
|
||||
#MSG_AUTO_DEPLETE c=17 r=1
|
||||
"SpoolJoin"
|
||||
"\x00"
|
||||
|
||||
#MSG_AUTO_HOME
|
||||
"Auto home"
|
||||
|
@ -175,21 +167,13 @@
|
|||
"Skopiowac wybrany jezyk?"
|
||||
|
||||
#MSG_CRASHDETECT_ON
|
||||
"Crash det. [on]"
|
||||
"Wykr.zderzen [wl]"
|
||||
"Crash det."
|
||||
"Wykr.zderzen"
|
||||
|
||||
#
|
||||
"Choose a filament for the First Layer Calibration and select it in the on-screen menu."
|
||||
"Wybierz filament do Kalibracji Pierwszej Warstwy i potwierdz w menu ekranowym."
|
||||
|
||||
#MSG_CRASHDETECT_NA
|
||||
"Crash det. [N/A]"
|
||||
"Wykr.zderzen[N/D]"
|
||||
|
||||
#MSG_CRASHDETECT_OFF
|
||||
"Crash det. [off]"
|
||||
"Wykr.zderzen[wyl]"
|
||||
|
||||
#MSG_CRASH_DETECTED c=20 r=1
|
||||
"Crash detected."
|
||||
"Zderzenie wykryte"
|
||||
|
@ -274,17 +258,9 @@
|
|||
"Fail stats MMU"
|
||||
"Bledy MMU"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_ON c=17 r=1
|
||||
"F. autoload [on]"
|
||||
"Autolad.fil. [wl]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_NA c=17 r=1
|
||||
"F. autoload [N/A]"
|
||||
"Autolad.fil.[N/D]"
|
||||
|
||||
#MSG_FSENS_AUTOLOAD_OFF c=17 r=1
|
||||
"F. autoload [off]"
|
||||
"Autolad.fil.[wyl]"
|
||||
#MSG_FSENSOR_AUTOLOAD
|
||||
"F. autoload"
|
||||
"Autolad. fil."
|
||||
|
||||
#
|
||||
"Fail stats"
|
||||
|
@ -298,25 +274,13 @@
|
|||
"Fan test"
|
||||
"Test wentylatora"
|
||||
|
||||
#MSG_FANS_CHECK_ON c=17 r=1
|
||||
"Fans check [on]"
|
||||
"Sprawd.went. [wl]"
|
||||
#MSG_FANS_CHECK
|
||||
"Fans check"
|
||||
"Sprawd.went."
|
||||
|
||||
#MSG_FANS_CHECK_OFF c=17 r=1
|
||||
"Fans check [off]"
|
||||
"Sprawd.went.[wyl]"
|
||||
|
||||
#MSG_FSENSOR_ON
|
||||
"Fil. sensor [on]"
|
||||
"Czuj. filam. [wl]"
|
||||
|
||||
#MSG_FSENSOR_NA
|
||||
"Fil. sensor [N/A]"
|
||||
"Czuj. filam.[N/D]"
|
||||
|
||||
#MSG_FSENSOR_OFF
|
||||
"Fil. sensor [off]"
|
||||
"Czuj. filam.[wyl]"
|
||||
#MSG_FSENSOR
|
||||
"Fil. sensor"
|
||||
"Czuj. filam."
|
||||
|
||||
#
|
||||
"Filam. runouts"
|
||||
|
@ -578,13 +542,17 @@
|
|||
"MMU OK. Resuming..."
|
||||
"MMU OK. Wznawianie..."
|
||||
|
||||
#MSG_STEALTH_MODE_OFF
|
||||
"Mode [Normal]"
|
||||
"Tryb [normalny]"
|
||||
#MSG_MODE
|
||||
"Mode"
|
||||
"Tryb"
|
||||
|
||||
#MSG_SILENT_MODE_ON
|
||||
"Mode [silent]"
|
||||
"Tryb [cichy]"
|
||||
#MSG_NORMAL
|
||||
"Normal"
|
||||
"Normalny"
|
||||
|
||||
#MSG_SILENT
|
||||
"Silent"
|
||||
"Cichy"
|
||||
|
||||
#
|
||||
"MMU needs user attention."
|
||||
|
@ -594,17 +562,17 @@
|
|||
"MMU power fails"
|
||||
"Zaniki zasil. MMU"
|
||||
|
||||
#MSG_STEALTH_MODE_ON
|
||||
"Mode [Stealth]"
|
||||
"Tryb [cichy]"
|
||||
#MSG_STEALTH
|
||||
"Stealth"
|
||||
"Cichy"
|
||||
|
||||
#MSG_AUTO_MODE_ON
|
||||
"Mode [auto power]"
|
||||
"Tryb [automatycz]"
|
||||
#MSG_AUTO_POWER
|
||||
"Auto power"
|
||||
"Automatycz"
|
||||
|
||||
#MSG_SILENT_MODE_OFF
|
||||
"Mode [high power]"
|
||||
"Tryb[wysoka wyd.]"
|
||||
#MSG_HIGH_POWER
|
||||
"High power"
|
||||
"Wysoka wyd."
|
||||
|
||||
#
|
||||
"MMU2 connected"
|
||||
|
@ -638,7 +606,7 @@
|
|||
"No SD card"
|
||||
"Brak karty SD"
|
||||
|
||||
#
|
||||
#MSG_NA
|
||||
"N/A"
|
||||
"N/D"
|
||||
|
||||
|
@ -878,25 +846,21 @@
|
|||
"Right side[um]"
|
||||
"Prawo [um]"
|
||||
|
||||
#MSG_SECOND_SERIAL_ON c=17 r=1
|
||||
"RPi port [on]"
|
||||
"Port RPi [wl]"
|
||||
|
||||
#MSG_SECOND_SERIAL_OFF c=17 r=1
|
||||
"RPi port [off]"
|
||||
"Port RPi [wyl]"
|
||||
#MSG_RPI_PORT
|
||||
"RPi port"
|
||||
"Port RPi"
|
||||
|
||||
#MSG_WIZARD_RERUN c=20 r=7
|
||||
"Running Wizard will delete current calibration results and start from the beginning. Continue?"
|
||||
"Wlaczenie Asystenta usunie obecne dane kalibracyjne i zacznie od poczatku. Kontynuowac?"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_OFF c=19 r=1
|
||||
"SD card [normal]"
|
||||
"Karta SD [normal]"
|
||||
#MSG_SD_CARD
|
||||
"SD card"
|
||||
"Karta SD"
|
||||
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY_ON c=19 r=1
|
||||
"SD card [flshAir]"
|
||||
"Karta SD[FlshAir]"
|
||||
#MSG_TOSHIBA_FLASH_AIR_COMPATIBILITY
|
||||
"FlashAir"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Right"
|
||||
|
@ -958,50 +922,49 @@
|
|||
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
|
||||
"Niektore pliki nie zostana posortowane. Max. liczba plikow w 1 folderze = 100."
|
||||
|
||||
#MSG_SORT_NONE c=17 r=1
|
||||
"Sort [none]"
|
||||
"Sortowanie [brak]"
|
||||
#MSG_SORT
|
||||
"Sort"
|
||||
"Sortowanie"
|
||||
|
||||
#MSG_SORT_TIME c=17 r=1
|
||||
"Sort [time]"
|
||||
"Sortowanie [czas]"
|
||||
#MSG_NONE
|
||||
"None"
|
||||
"Brak"
|
||||
|
||||
#MSG_SORT_TIME
|
||||
"Time"
|
||||
"Czas"
|
||||
|
||||
#
|
||||
"Severe skew:"
|
||||
"Znaczny skos:"
|
||||
|
||||
#MSG_SORT_ALPHA c=17 r=1
|
||||
"Sort [alphabet]"
|
||||
"Sortowanie[alfab]"
|
||||
#MSG_SORT_ALPHA
|
||||
"Alphabet"
|
||||
"Alfab"
|
||||
|
||||
#MSG_SORTING c=20 r=1
|
||||
"Sorting files"
|
||||
"Sortowanie plikow"
|
||||
|
||||
#MSG_SOUND_LOUD c=17 r=1
|
||||
"Sound [loud]"
|
||||
"Dzwiek [glosny]"
|
||||
#MSG_SOUND_LOUD
|
||||
"Loud"
|
||||
"Glosny"
|
||||
|
||||
#
|
||||
"Slight skew:"
|
||||
"Lekki skos:"
|
||||
|
||||
#MSG_SOUND_MUTE c=17 r=1
|
||||
"Sound [mute]"
|
||||
"Dzwiek[wylaczony]"
|
||||
#MSG_SOUND
|
||||
"Sound"
|
||||
"Dzwiek"
|
||||
|
||||
#
|
||||
"Some problem encountered, Z-leveling enforced ..."
|
||||
"Wykryto problem, wymuszono poziomowanie osi Z."
|
||||
|
||||
#MSG_SOUND_ONCE c=17 r=1
|
||||
"Sound [once]"
|
||||
"Dzwiek [1-raz]"
|
||||
|
||||
#MSG_SOUND_SILENT c=17 r=1
|
||||
"Sound [silent]"
|
||||
"Dzwiek [cichy]"
|
||||
|
||||
#MSG_SOUND_ONCE
|
||||
"Once"
|
||||
"1-raz"
|
||||
#MSG_SPEED
|
||||
"Speed"
|
||||
"Predkosc"
|
||||
|
@ -1038,22 +1001,14 @@
|
|||
"Select filament:"
|
||||
"Wybierz filament:"
|
||||
|
||||
#MSG_TEMP_CALIBRATION c=20 r=1
|
||||
"Temp. cal. "
|
||||
#MSG_TEMP_CALIBRATION c=12 r=1
|
||||
"Temp. cal."
|
||||
"Kalibracja temp."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_ON c=20 r=1
|
||||
"Temp. cal. [on]"
|
||||
"Kalibr.temp. [wl]"
|
||||
|
||||
#
|
||||
"Select temperature which matches your material."
|
||||
"Wybierz temperature, ktora odpowiada Twojemu filamentowi."
|
||||
|
||||
#MSG_TEMP_CALIBRATION_OFF c=20 r=1
|
||||
"Temp. cal. [off]"
|
||||
"Kalibr.temp.[wyl]"
|
||||
|
||||
#MSG_CALIBRATION_PINDA_MENU c=17 r=1
|
||||
"Temp. calibration"
|
||||
"Kalibracja temp."
|
||||
|
@ -1232,15 +1187,19 @@
|
|||
|
||||
#
|
||||
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
|
||||
"\x00"
|
||||
"Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)."
|
||||
|
||||
#
|
||||
"Y-correct:"
|
||||
"Korekcja-Y:"
|
||||
|
||||
#MSG_OFF
|
||||
" [off]"
|
||||
" [wyl]"
|
||||
"Off"
|
||||
"Wyl"
|
||||
|
||||
#MSG_ON
|
||||
"On"
|
||||
"Wl"
|
||||
|
||||
#
|
||||
"Back"
|
||||
|
@ -1258,17 +1217,17 @@
|
|||
"FINDA:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [none]"
|
||||
"Firmware [brak]"
|
||||
#MSG_FIRMWARE
|
||||
"Firmware"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Firmware [strict]"
|
||||
"Firmware [restr.]"
|
||||
#MSG_STRICT
|
||||
"Strict"
|
||||
"Restr."
|
||||
|
||||
#
|
||||
"Firmware [warn]"
|
||||
"Firmware[ostrzez]"
|
||||
#MSG_WARN
|
||||
"Warn"
|
||||
"Ostrzez"
|
||||
|
||||
#
|
||||
"HW Setup"
|
||||
|
@ -1278,25 +1237,13 @@
|
|||
"IR:"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Magnets comp.[N/A]"
|
||||
"Kor. magnesow[N/D]"
|
||||
#MSG_MAGNETS_COMP
|
||||
"Magnets comp."
|
||||
"Kor. magnesow"
|
||||
|
||||
#
|
||||
"Magnets comp.[Off]"
|
||||
"Kor. magnesow[wyl]"
|
||||
|
||||
#
|
||||
"Magnets comp. [On]"
|
||||
"Kor. magnesow [wl]"
|
||||
|
||||
#
|
||||
"Mesh [3x3]"
|
||||
"Siatka [3x3]"
|
||||
|
||||
#
|
||||
"Mesh [7x7]"
|
||||
"Siatka [7x7]"
|
||||
#MSG_MESH
|
||||
"Mesh"
|
||||
"Siatka"
|
||||
|
||||
#
|
||||
"Mesh bed leveling"
|
||||
|
@ -1306,53 +1253,21 @@
|
|||
"MK3S firmware detected on MK3 printer"
|
||||
"Wykryto firmware MK3S w drukarce MK3"
|
||||
|
||||
#
|
||||
"MMU Mode [Normal]"
|
||||
"Tryb MMU[Normaln]"
|
||||
|
||||
#
|
||||
"MMU Mode[Stealth]"
|
||||
"Tryb MMU[Stealth]"
|
||||
#MSG_MMU_MODE
|
||||
"MMU Mode"
|
||||
"Tryb MMU"
|
||||
|
||||
#
|
||||
"Mode change in progress ..."
|
||||
"Trwa zmiana trybu..."
|
||||
|
||||
#
|
||||
"Model [none]"
|
||||
"Model [brak]"
|
||||
#MSG_MODEL
|
||||
"Model"
|
||||
"\x00"
|
||||
|
||||
#
|
||||
"Model [strict]"
|
||||
"Model [restrykc.]"
|
||||
|
||||
#
|
||||
"Model [warn]"
|
||||
"Model [ostrzez.]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.25]"
|
||||
"Sr. dyszy [0,25]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.40]"
|
||||
"Sr. dyszy [0,40]"
|
||||
|
||||
#
|
||||
"Nozzle d. [0.60]"
|
||||
"Sr. dyszy [0,60]"
|
||||
|
||||
#
|
||||
"Nozzle [none]"
|
||||
"Dysza [brak]"
|
||||
|
||||
#
|
||||
"Nozzle [strict]"
|
||||
"Dysza [restrykc.]"
|
||||
|
||||
#
|
||||
"Nozzle [warn]"
|
||||
"Dysza [ostrzez.]"
|
||||
#MSG_NOZZLE_DIAMETER
|
||||
"Nozzle d."
|
||||
"Sr. dyszy"
|
||||
|
||||
#
|
||||
"G-code sliced for a different level. Continue?"
|
||||
|
@ -1414,9 +1329,9 @@
|
|||
"Sheet"
|
||||
"Plyta"
|
||||
|
||||
#
|
||||
"Sound [assist]"
|
||||
"Dzwiek [asyst.]"
|
||||
#MSG_SOUND_BLIND
|
||||
"Assist"
|
||||
"Asyst."
|
||||
|
||||
#
|
||||
"Steel sheets"
|
||||
|
@ -1426,14 +1341,6 @@
|
|||
"Z-correct:"
|
||||
"Korekcja-Z:"
|
||||
|
||||
#
|
||||
"Z-probe nr. [1]"
|
||||
"Ilosc Pomiarow [1]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [3]"
|
||||
"Ilosc Pomiarow [3]"
|
||||
|
||||
#
|
||||
"Z-probe nr. [5]"
|
||||
"Ilosc Pomiarow [5]"
|
||||
#MSG_Z_PROBE_NR
|
||||
"Z-probe nr."
|
||||
"Ilosc Pomiarow"
|
||||
|
|
Loading…
Reference in a new issue