Merge branch 'MK3' into MK3_filecheck_progress_bar

This commit is contained in:
Alex Voinea 2020-11-12 15:53:33 +02:00
commit 5ad125cbed
No known key found for this signature in database
GPG Key ID: F5034E7CFCF2F973
83 changed files with 19720 additions and 17761 deletions

View File

@ -12,3 +12,7 @@ indent_style = space
indent_size = 4 indent_size = 4
tab_width = 4 tab_width = 4
max_line_length = 100 max_line_length = 100
[lang/po/*.po]
end_of_line = crlf
trim_trailing_whitespace = false

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
lang/po/*.po text eol=crlf

View File

@ -15,6 +15,9 @@ Please, before you create a new bug report, please make sure you searched in ope
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1] **MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...] **MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...]
**SD card or USB/Octoprint**
Please let us know if you print via SD card or USB/Octoprint
**Describe the bug** **Describe the bug**
A clear and concise description of what the bug is. A clear and concise description of what the bug is.

4
.gitignore vendored
View File

@ -40,8 +40,8 @@ Firmware/Doc
/lang/*.dat /lang/*.dat
/lang/*.tmp /lang/*.tmp
/lang/*.out /lang/*.out
/lang/not_tran.txt /lang/not_tran*.txt
/lang/not_used.txt /lang/not_used*.txt
/lang/progmem1.chr /lang/progmem1.chr
/lang/progmem1.lss /lang/progmem1.lss
/lang/progmem1.txt /lang/progmem1.txt

View File

@ -16,8 +16,8 @@ extern uint16_t nPrinterType;
extern PGM_P sPrinterName; extern PGM_P sPrinterName;
// Firmware version // Firmware version
#define FW_VERSION "3.9.0-RC1" #define FW_VERSION "3.9.1"
#define FW_COMMIT_NR 3272 #define FW_COMMIT_NR 3518
// FW_VERSION_UNKNOWN means this is an unofficial build. // FW_VERSION_UNKNOWN means this is an unofficial build.
// The firmware should only be checked into github with this symbol. // The firmware should only be checked into github with this symbol.
#define FW_DEV_VERSION FW_VERSION_UNKNOWN #define FW_DEV_VERSION FW_VERSION_UNKNOWN

View File

@ -62,6 +62,11 @@
// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) // before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
#define FAN_KICKSTART_TIME 800 #define FAN_KICKSTART_TIME 800
/**
* Auto-report temperatures with M155 S<seconds>
*/
#define AUTO_REPORT_TEMPERATURES
@ -285,11 +290,14 @@
#define LIN_ADVANCE #define LIN_ADVANCE
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
#define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed #define LA_K_DEF 0 // Default K factor (Unit: mm compression per 1mm/s extruder speed)
//#define LA_NOCOMPAT // Disable Linear Advance 1.0 compatibility #define LA_K_MAX 10 // Maximum acceptable K factor (exclusive, see notes in planner.cpp:plan_buffer_line)
//#define LA_LIVE_K // Allow adjusting K in the Tune menu #define LA_LA10_MIN LA_K_MAX // Lin. Advance 1.0 threshold value (inclusive)
//#define LA_DEBUG // If enabled, this will generate debug information output over USB. //#define LA_FLOWADJ // Adjust LA along with flow/M221 for uniform width
//#define LA_DEBUG_LOGIC // @wavexx: setup logic channels for isr debugging //#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 #endif
// Arc interpretation settings: // Arc interpretation settings:
@ -373,6 +381,11 @@ const unsigned int dropsegments=5; //everything with less than this number of st
#endif #endif
#endif #endif
/**
* Include capabilities in M115 output
*/
#define EXTENDED_CAPABILITIES_REPORT
//=========================================================================== //===========================================================================
//============================= Define Defines ============================ //============================= Define Defines ============================
//=========================================================================== //===========================================================================
@ -434,6 +447,10 @@ const unsigned int dropsegments=5; //everything with less than this number of st
#undef BED_MINTEMP #undef BED_MINTEMP
#undef BED_MAXTEMP #undef BED_MAXTEMP
#endif #endif
#if TEMP_SENSOR_AMBIENT == 0
#undef AMBIENT_MINTEMP
#undef AMBIENT_MAXTEMP
#endif
#endif //__CONFIGURATION_ADV_H #endif //__CONFIGURATION_ADV_H

View File

@ -1,5 +1,5 @@
#include "Dcodes.h" #include "Dcodes.h"
//#include "Marlin.h" #include "Marlin.h"
#include "Configuration.h" #include "Configuration.h"
#include "language.h" #include "language.h"
#include "cmdqueue.h" #include "cmdqueue.h"
@ -98,7 +98,7 @@ void print_mem(uint32_t address, uint16_t count, uint8_t type, uint8_t countperl
} }
} }
#ifdef DEBUG_DCODE3 #if defined DEBUG_DCODE3 || defined DEBUG_DCODES
#define EEPROM_SIZE 0x1000 #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> ### D3 - Read/Write EEPROM <a href="https://reprap.org/wiki/G-code#D3:_Read.2FWrite_EEPROM">D3: Read/Write EEPROM</a>
@ -226,9 +226,7 @@ void dcode_0()
LOG("D0 - Reset\n"); LOG("D0 - Reset\n");
if (code_seen('B')) //bootloader if (code_seen('B')) //bootloader
{ {
cli(); softReset();
wdt_enable(WDTO_15MS);
while(1);
} }
else //reset else //reset
{ {
@ -252,8 +250,7 @@ void dcode_1()
cli(); cli();
for (int i = 0; i < 8192; i++) for (int i = 0; i < 8192; i++)
eeprom_write_byte((unsigned char*)i, (unsigned char)0xff); eeprom_write_byte((unsigned char*)i, (unsigned char)0xff);
wdt_enable(WDTO_15MS); softReset();
while(1);
} }
/*! /*!
@ -360,7 +357,7 @@ void dcode_4()
} }
#endif //DEBUG_DCODES #endif //DEBUG_DCODES
#ifdef DEBUG_DCODE5 #if defined DEBUG_DCODE5 || defined DEBUG_DCODES
/*! /*!
### D5 - Read/Write FLASH <a href="https://reprap.org/wiki/G-code#D5:_Read.2FWrite_FLASH">D5: Read/Write Flash</a> ### D5 - Read/Write FLASH <a href="https://reprap.org/wiki/G-code#D5:_Read.2FWrite_FLASH">D5: Read/Write Flash</a>
@ -372,7 +369,7 @@ void dcode_4()
#### Parameters #### Parameters
- `A` - Address (x00000-x3ffff) - `A` - Address (x00000-x3ffff)
- `C` - Count (1-8192) - `C` - Count (1-8192)
- `X` - Data - `X` - Data (hex)
- `E` - Erase - `E` - Erase
#### Notes #### Notes
@ -420,8 +417,7 @@ void dcode_5()
boot_dst_addr = (uint32_t)address; boot_dst_addr = (uint32_t)address;
boot_src_addr = (uint32_t)(&data); boot_src_addr = (uint32_t)(&data);
bootapp_print_vars(); bootapp_print_vars();
wdt_enable(WDTO_15MS); softReset();
while(1);
} }
while (count) while (count)
{ {
@ -467,8 +463,7 @@ void dcode_7()
boot_copy_size = (uint16_t)0xc00; boot_copy_size = (uint16_t)0xc00;
boot_src_addr = (uint32_t)0x0003e400; boot_src_addr = (uint32_t)0x0003e400;
boot_dst_addr = (uint32_t)0x0003f400; boot_dst_addr = (uint32_t)0x0003f400;
wdt_enable(WDTO_15MS); softReset();
while(1);
*/ */
} }
@ -635,6 +630,98 @@ void dcode_12()
} }
#ifdef HEATBED_ANALYSIS
/*!
### D80 - Bed check <a href="https://reprap.org/wiki/G-code#D80:_Bed_check">D80: Bed check</a>
This command will log data to SD card file "mesh.txt".
#### Usage
D80 [ E | F | G | H | I | J ]
#### Parameters
- `E` - Dimension X (default 40)
- `F` - Dimention Y (default 40)
- `G` - Points X (default 40)
- `H` - Points Y (default 40)
- `I` - Offset X (default 74)
- `J` - Offset Y (default 34)
*/
void dcode_80()
{
float dimension_x = 40;
float dimension_y = 40;
int points_x = 40;
int points_y = 40;
float offset_x = 74;
float offset_y = 33;
if (code_seen('E')) dimension_x = code_value();
if (code_seen('F')) dimension_y = code_value();
if (code_seen('G')) {points_x = code_value(); }
if (code_seen('H')) {points_y = code_value(); }
if (code_seen('I')) {offset_x = code_value(); }
if (code_seen('J')) {offset_y = code_value(); }
printf_P(PSTR("DIM X: %f\n"), dimension_x);
printf_P(PSTR("DIM Y: %f\n"), dimension_y);
printf_P(PSTR("POINTS X: %d\n"), points_x);
printf_P(PSTR("POINTS Y: %d\n"), points_y);
printf_P(PSTR("OFFSET X: %f\n"), offset_x);
printf_P(PSTR("OFFSET Y: %f\n"), offset_y);
bed_check(dimension_x,dimension_y,points_x,points_y,offset_x,offset_y);
}
/*!
### D81 - Bed analysis <a href="https://reprap.org/wiki/G-code#D81:_Bed_analysis">D80: Bed analysis</a>
This command will log data to SD card file "wldsd.txt".
#### Usage
D81 [ E | F | G | H | I | J ]
#### Parameters
- `E` - Dimension X (default 40)
- `F` - Dimention Y (default 40)
- `G` - Points X (default 40)
- `H` - Points Y (default 40)
- `I` - Offset X (default 74)
- `J` - Offset Y (default 34)
*/
void dcode_81()
{
float dimension_x = 40;
float dimension_y = 40;
int points_x = 40;
int points_y = 40;
float offset_x = 74;
float offset_y = 33;
if (code_seen('E')) dimension_x = code_value();
if (code_seen('F')) dimension_y = code_value();
if (code_seen("G")) { strchr_pointer+=1; points_x = code_value(); }
if (code_seen("H")) { strchr_pointer+=1; points_y = code_value(); }
if (code_seen("I")) { strchr_pointer+=1; offset_x = code_value(); }
if (code_seen("J")) { strchr_pointer+=1; offset_y = code_value(); }
bed_analysis(dimension_x,dimension_y,points_x,points_y,offset_x,offset_y);
}
#endif //HEATBED_ANALYSIS
/*!
### D106 - Print measured fan speed for different pwm values <a href="https://reprap.org/wiki/G-code#D106:_Print_measured_fan_speed_for_different_pwm_values">D106: Print measured fan speed for different pwm values</a>
*/
void dcode_106()
{
for (int i = 255; i > 0; i = i - 5) {
fanSpeed = i;
//delay_keep_alive(2000);
for (int j = 0; j < 100; j++) {
delay_keep_alive(100);
}
printf_P(_N("%d: %d\n"), i, fan_speed[1]);
}
}
#ifdef TMC2130 #ifdef TMC2130
#include "planner.h" #include "planner.h"

View File

@ -2,26 +2,40 @@
#define DCODES_H #define DCODES_H
extern void dcode__1(); //D-1 - Endless loop (to simulate deadlock) extern void dcode__1(); //D-1 - Endless loop (to simulate deadlock)
extern void dcode_0(); //D0 - Reset extern void dcode_0(); //D0 - Reset
extern void dcode_1(); //D1 - Clear EEPROM extern void dcode_1(); //D1 - Clear EEPROM
extern void dcode_2(); //D2 - Read/Write RAM extern void dcode_2(); //D2 - Read/Write RAM
#if defined DEBUG_DCODE3 || defined DEBUG_DCODES
extern void dcode_3(); //D3 - Read/Write EEPROM extern void dcode_3(); //D3 - Read/Write EEPROM
#endif //DEBUG_DCODE3
extern void dcode_4(); //D4 - Read/Write PIN extern void dcode_4(); //D4 - Read/Write PIN
#if defined DEBUG_DCODE5 || defined DEBUG_DCODES
extern void dcode_5(); //D5 - Read/Write FLASH extern void dcode_5(); //D5 - Read/Write FLASH
#endif //DEBUG_DCODE5
extern void dcode_6(); //D6 - Read/Write external FLASH extern void dcode_6(); //D6 - Read/Write external FLASH
extern void dcode_7(); //D7 - Read/Write Bootloader extern void dcode_7(); //D7 - Read/Write Bootloader
extern void dcode_8(); //D8 - Read/Write PINDA extern void dcode_8(); //D8 - Read/Write PINDA
extern void dcode_9(); //D9 - Read/Write ADC (Write=enable simulated, Read=disable simulated) extern void dcode_9(); //D9 - Read/Write ADC (Write=enable simulated, Read=disable simulated)
extern void dcode_10(); //D10 - XYZ calibration = OK extern void dcode_10(); //D10 - XYZ calibration = OK
extern void dcode_12(); //D12 - Log time. Writes the current time in the log file.
#ifdef HEATBED_ANALYSIS
extern void dcode_80(); //D80 - Bed check. This command will log data to SD card file "mesh.txt".
extern void dcode_81(); //D81 - Bed analysis. This command will log data to SD card file "wldsd.txt".
#endif //HEATBED_ANALYSIS
extern void dcode_106(); //D106 - Print measured fan speed for different pwm values
#ifdef TMC2130 #ifdef TMC2130
extern void dcode_2130(); //D2130 - TMC2130 extern void dcode_2130(); //D2130 - TMC2130
#endif //TMC2130 #endif //TMC2130
#ifdef PAT9125 #ifdef PAT9125
extern void dcode_9125(); //D9125 - PAT9125 extern void dcode_9125(); //D9125 - PAT9125
#endif //PAT9125 #endif //PAT9125

View File

@ -4,7 +4,7 @@
#ifndef MARLIN_H #ifndef MARLIN_H
#define MARLIN_H #define MARLIN_H
#define FORCE_INLINE __attribute__((always_inline)) inline #include "macros.h"
#include <math.h> #include <math.h>
#include <stdio.h> #include <stdio.h>
@ -238,8 +238,8 @@ void get_coordinates();
void prepare_move(); void prepare_move();
void kill(const char *full_screen_message = NULL, unsigned char id = 0); void kill(const char *full_screen_message = NULL, unsigned char id = 0);
void Stop(); void Stop();
bool IsStopped(); bool IsStopped();
void finishAndDisableSteppers();
//put an ASCII command at the end of the current buffer. //put an ASCII command at the end of the current buffer.
void enquecommand(const char *cmd, bool from_progmem = false); void enquecommand(const char *cmd, bool from_progmem = false);
@ -287,11 +287,6 @@ FORCE_INLINE unsigned long millis_nc() {
void setPwmFrequency(uint8_t pin, int val); void setPwmFrequency(uint8_t pin, int val);
#endif #endif
#ifndef CRITICAL_SECTION_START
#define CRITICAL_SECTION_START unsigned char _sreg = SREG; cli();
#define CRITICAL_SECTION_END SREG = _sreg;
#endif //CRITICAL_SECTION_START
extern bool fans_check_enabled; extern bool fans_check_enabled;
extern float homing_feedrate[]; extern float homing_feedrate[];
extern uint8_t axis_relative_modes; extern uint8_t axis_relative_modes;
@ -299,7 +294,7 @@ extern float feedrate;
extern int feedmultiply; extern int feedmultiply;
extern int extrudemultiply; // Sets extrude multiply factor (in percent) for all extruders 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 extern int extruder_multiply[EXTRUDERS]; // sets extrude multiply factor (in percent) for each extruder individually
extern float volumetric_multiplier[EXTRUDERS]; // reciprocal of cross-sectional area of filament (in square millimeters), stored this way to reduce computational burden in planner extern float extruder_multiplier[EXTRUDERS]; // reciprocal of cross-sectional area of filament (in square millimeters), stored this way to reduce computational burden in planner
extern float current_position[NUM_AXIS] ; extern float current_position[NUM_AXIS] ;
extern float destination[NUM_AXIS] ; extern float destination[NUM_AXIS] ;
extern float min_pos[3]; extern float min_pos[3];
@ -310,9 +305,9 @@ extern int8_t lcd_change_fil_state;
extern float default_retraction; extern float default_retraction;
#ifdef TMC2130 #ifdef TMC2130
bool homeaxis(int axis, bool doError = true, uint8_t cnt = 1, uint8_t* pstep = 0); void homeaxis(int axis, uint8_t cnt = 1, uint8_t* pstep = 0);
#else #else
bool homeaxis(int axis, bool doError = true, uint8_t cnt = 1); void homeaxis(int axis, uint8_t cnt = 1);
#endif //TMC2130 #endif //TMC2130
@ -334,7 +329,6 @@ extern unsigned long stoptime;
extern int bowden_length[4]; extern int bowden_length[4];
extern bool is_usb_printing; extern bool is_usb_printing;
extern bool homing_flag; extern bool homing_flag;
extern bool temp_cal_active;
extern bool loading_flag; extern bool loading_flag;
extern unsigned int usb_printing_counter; extern unsigned int usb_printing_counter;
@ -513,4 +507,6 @@ void load_filament_final_feed();
void marlin_wait_for_click(); void marlin_wait_for_click();
void raise_z_above(float target, bool plan=true); void raise_z_above(float target, bool plan=true);
extern "C" void softReset();
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
//backlight.cpp //backlight.cpp
#include "backlight.h" #include "backlight.h"
#include "macros.h"
#include <avr/eeprom.h> #include <avr/eeprom.h>
#include <Arduino.h> #include <Arduino.h>
#include "eeprom.h" #include "eeprom.h"
#include "Marlin.h"
#include "pins.h" #include "pins.h"
#include "fastio.h" #include "fastio.h"
#include "Timer.h" #include "Timer.h"
@ -111,10 +111,10 @@ void backlight_init()
#else //LCD_BL_PIN #else //LCD_BL_PIN
void force_bl_on(__attribute__((unused)) bool section_start) {} void force_bl_on(bool) {}
void backlight_update() {} void backlight_update() {}
void backlight_init() {} void backlight_init() {}
void backlight_save() {} void backlight_save() {}
void backlight_wake(__attribute__((unused)) const uint8_t flashNo) {} void backlight_wake(const uint8_t) {}
#endif //LCD_BL_PIN #endif //LCD_BL_PIN

View File

@ -9,6 +9,8 @@
extern FILE _uartout; extern FILE _uartout;
#define uartout (&_uartout) #define uartout (&_uartout)
extern void softReset();
void bootapp_print_vars(void) void bootapp_print_vars(void)
{ {
fprintf_P(uartout, PSTR("boot_src_addr =0x%08lx\n"), boot_src_addr); fprintf_P(uartout, PSTR("boot_src_addr =0x%08lx\n"), boot_src_addr);
@ -39,8 +41,7 @@ void bootapp_ram2flash(uint16_t rptr, uint16_t fptr, uint16_t size)
boot_src_addr = (uint32_t)rptr; boot_src_addr = (uint32_t)rptr;
boot_dst_addr = (uint32_t)fptr; boot_dst_addr = (uint32_t)fptr;
bootapp_print_vars(); bootapp_print_vars();
wdt_enable(WDTO_15MS); softReset();
while(1);
} }
void bootapp_reboot_user0(uint8_t reserved) void bootapp_reboot_user0(uint8_t reserved)
@ -50,6 +51,5 @@ void bootapp_reboot_user0(uint8_t reserved)
boot_app_flags = BOOT_APP_FLG_USER0; boot_app_flags = BOOT_APP_FLG_USER0;
boot_reserved = reserved; boot_reserved = reserved;
bootapp_print_vars(); bootapp_print_vars();
wdt_enable(WDTO_15MS); softReset();
while(1);
} }

View File

@ -243,6 +243,8 @@ void CardReader::release()
{ {
sdprinting = false; sdprinting = false;
cardOK = false; cardOK = false;
SERIAL_ECHO_START;
SERIAL_ECHOLNRPGM(_n("SD card released"));////MSG_SD_CARD_RELEASED
} }
void CardReader::startFileprint() void CardReader::startFileprint()
@ -331,7 +333,7 @@ void CardReader::diveSubfolder (const char *fileName, SdFile& dir)
{ {
SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL); SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
SERIAL_PROTOCOL(subdirname); SERIAL_PROTOCOL(subdirname);
SERIAL_PROTOCOLLNPGM("."); SERIAL_PROTOCOLLN('.');
return; return;
} }
else else
@ -430,7 +432,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
{ {
SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL); SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
SERIAL_PROTOCOL(fname); SERIAL_PROTOCOL(fname);
SERIAL_PROTOCOLLNPGM("."); SERIAL_PROTOCOLLN('.');
} }
} }
else else
@ -439,7 +441,7 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
{ {
SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL); SERIAL_PROTOCOLRPGM(MSG_SD_OPEN_FILE_FAIL);
SERIAL_PROTOCOL(fname); SERIAL_PROTOCOL(fname);
SERIAL_PROTOCOLLNPGM("."); SERIAL_PROTOCOLLN('.');
} }
else else
{ {
@ -496,17 +498,15 @@ void CardReader::getStatus()
SERIAL_PROTOCOLLNPGM("Print saved"); SERIAL_PROTOCOLLNPGM("Print saved");
} }
else { else {
SERIAL_PROTOCOL(longFilename); SERIAL_PROTOCOLLN(longFilename);
SERIAL_PROTOCOLPGM("\n");
SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE SERIAL_PROTOCOLRPGM(_N("SD printing byte "));////MSG_SD_PRINTING_BYTE
SERIAL_PROTOCOL(sdpos); SERIAL_PROTOCOL(sdpos);
SERIAL_PROTOCOLPGM("/"); SERIAL_PROTOCOL('/');
SERIAL_PROTOCOLLN(filesize); SERIAL_PROTOCOLLN(filesize);
uint16_t time = _millis()/60000 - starttime/60000; uint16_t time = ( _millis() - starttime ) / 60000U;
SERIAL_PROTOCOL(itostr2(time/60)); SERIAL_PROTOCOL(itostr2(time/60));
SERIAL_PROTOCOL(':'); SERIAL_PROTOCOL(':');
SERIAL_PROTOCOL(itostr2(time%60)); SERIAL_PROTOCOLLN(itostr2(time%60));
SERIAL_PROTOCOLPGM("\n");
} }
} }
else { else {
@ -735,7 +735,7 @@ void CardReader::presort() {
// Never sort more than the max allowed // Never sort more than the max allowed
// If you use folders to organize, 20 may be enough // If you use folders to organize, 20 may be enough
if (fileCnt > SDSORT_LIMIT) { if (fileCnt > SDSORT_LIMIT) {
lcd_show_fullscreen_message_and_wait_P(_i("Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."));////MSG_FILE_CNT c=20 r=4 lcd_show_fullscreen_message_and_wait_P(_i("Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."));////MSG_FILE_CNT c=20 r=6
fileCnt = SDSORT_LIMIT; fileCnt = SDSORT_LIMIT;
} }
lcd_clear(); lcd_clear();

View File

@ -81,6 +81,7 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
| :-- | :-- | :-- | :--: | :--: | :-- | :--: | :--: | :-- | :-- | :-- | :--: | :--: | :-- | :--: | :--:
| 0x0FFFh 4095 | uchar | EEPROM_SILENT | 00h 0 | ffh 255 | TMC Stealth mode: __off__ / miniRambo Power mode | LCD menu | D3 Ax0fff C1 | 0x0FFFh 4095 | uchar | EEPROM_SILENT | 00h 0 | ffh 255 | TMC Stealth mode: __off__ / miniRambo Power mode | LCD menu | D3 Ax0fff C1
| ^ | ^ | ^ | 01h 1 | ^ | TMC Stealth mode: __on__ / miniRambo Silent mode | ^ | ^ | ^ | ^ | ^ | 01h 1 | ^ | TMC Stealth mode: __on__ / miniRambo Silent mode | ^ | ^
| ^ | ^ | ^ | 02h 2 | ^ | miniRambo Auto mode | ^ | ^
| 0x0FFEh 4094 | uchar | EEPROM_LANG | 00h 0 | ffh 255 __L__ | English / LANG_ID_PRI | LCD menu | D3 Ax0ffe C1 | 0x0FFEh 4094 | uchar | EEPROM_LANG | 00h 0 | ffh 255 __L__ | English / LANG_ID_PRI | LCD menu | D3 Ax0ffe C1
| ^ | ^ | ^ | 01h 1 | ^ | Other language LANG_ID_SEC | ^ | ^ | ^ | ^ | ^ | 01h 1 | ^ | Other language LANG_ID_SEC | ^ | ^
| 0x0FFCh 4092 | uint16 | EEPROM_BABYSTEP_X | ??? | ff ffh 65535 | Babystep for X axis _unsued_ | ??? | D3 Ax0ffc C2 | 0x0FFCh 4092 | uint16 | EEPROM_BABYSTEP_X | ??? | ff ffh 65535 | Babystep for X axis _unsued_ | ??? | D3 Ax0ffc C2
@ -340,8 +341,9 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
| 0x0D9F 3487 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - bed temp | ^ | D3 Ax0d9f C1 | 0x0D9F 3487 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - bed temp | ^ | D3 Ax0d9f C1
| 0x0DA0 3488 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - PINDA temp | ^ | D3 Ax0da0 C1 | 0x0DA0 3488 | uint8 | ^ | 00h 0 | ffh 255 | 8th sheet - PINDA temp | ^ | D3 Ax0da0 C1
| 0x0DA1 3489 | uint8 | ??? | 00h 0 | ffh 255 | ??? | ??? | D3 Ax0da1 C1 | 0x0DA1 3489 | uint8 | ??? | 00h 0 | ffh 255 | ??? | ??? | D3 Ax0da1 C1
| 0x0D48 3400 | uint8 | EEPROM_FSENSOR_PCB | ??? | ffh 255 | Filament Sensor type old vs new | ??? | D3 Ax0d48 C1 | 0x0D48 3400 | uint8 | EEPROM_FSENSOR_PCB | ffh 255 | ffh 255 | Filament Sensor type IR unknown | LCD Support | D3 Ax0d48 C1
| ^ | ^ | ^ | ??? | ^ | Filament Sensor type ??? | ^ | ^ | ^ | ^ | ^ | 00h 0 | ^ | Filament Sensor type IR 0.3 or older | ^ | ^
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor type IR 0.4 or newer | ^ | ^
| 0x0D47 3399 | uint8 | EEPROM_FSENSOR_ACTION_NA | 00h 0 | ffh 255 | Filament Sensor action: __Continue__ | LCD menu | D3 Ax0d47 C1 | 0x0D47 3399 | uint8 | EEPROM_FSENSOR_ACTION_NA | 00h 0 | ffh 255 | Filament Sensor action: __Continue__ | LCD menu | D3 Ax0d47 C1
| ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor action: __Pause__ | ^ | ^ | ^ | ^ | ^ | 01h 1 | ^ | Filament Sensor action: __Pause__ | ^ | ^
| 0x0D37 3383 | float | EEPROM_UVLO_SAVED_TARGET | ??? | ff ff ff ffh | Power panic saved target all-axis | ??? | D3 Ax0d37 C16 | 0x0D37 3383 | float | EEPROM_UVLO_SAVED_TARGET | ??? | ff ff ff ffh | Power panic saved target all-axis | ??? | D3 Ax0d37 C16
@ -357,6 +359,12 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP
| ^ | ^ | ^ | 00h 0 | ^ | LCD backlight mode: __Dim__ | ^ | ^ | ^ | ^ | ^ | 00h 0 | ^ | LCD backlight mode: __Dim__ | ^ | ^
| 0x0D30 3376 | uint16 | EEPROM_BACKLIGHT_TIMEOUT | 01 00 - ff ff | 0a 00h 65535 | LCD backlight timeout: __10__ seconds | LCD menu | D3 Ax0d30 C2 | 0x0D30 3376 | uint16 | EEPROM_BACKLIGHT_TIMEOUT | 01 00 - ff ff | 0a 00h 65535 | LCD backlight timeout: __10__ seconds | LCD menu | D3 Ax0d30 C2
| 0x0D2C 3372 | float | EEPROM_UVLO_LA_K | ??? | ff ff ff ffh | Power panic saved Linear Advanced K value | ??? | D3 Ax0d2c C4 | 0x0D2C 3372 | float | EEPROM_UVLO_LA_K | ??? | ff ff ff ffh | Power panic saved Linear Advanced K value | ??? | D3 Ax0d2c C4
| 0x0D2B 3371 | uint8 | EEPROM_ALTFAN_OVERRIDE | ffh 255 | ffh 255 | ALTFAN override unknown state | LCD menu | D3 Ax0d2b C1
| ^ | ^ | ^ | 00h 0 | ^ | ALTFAN override deactivated | ^ | ^
| ^ | ^ | ^ | 01h 1 | ^ | ALTFAN override activated | ^ | ^
| 0x0D2A 3370 | uint8 | EEPROM_EXPERIMENTAL_VISIBILITY | ffh 255 | ffh 255 | Experimental menu visibility unknown state | LCD menu | D3 Ax0d2a C1
| ^ | ^ | ^ | 00h 0 | ^ | Experimental menu visibility hidden | ^ | ^
| ^ | ^ | ^ | 01h 1 | ^ | Experimental menu visibility visible | ^ | ^
| Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code | Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code
@ -559,8 +567,11 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
#define EEPROM_UVLO_LA_K (EEPROM_BACKLIGHT_TIMEOUT-4) // float #define EEPROM_UVLO_LA_K (EEPROM_BACKLIGHT_TIMEOUT-4) // float
#define EEPROM_ALTFAN_OVERRIDE (EEPROM_UVLO_LA_K-1) //uint8
#define EEPROM_EXPERIMENTAL_VISIBILITY (EEPROM_ALTFAN_OVERRIDE-1) //uint8
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items. //This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
#define EEPROM_LAST_ITEM EEPROM_UVLO_LA_K #define EEPROM_LAST_ITEM EEPROM_EXPERIMENTAL_VISIBILITY
// !!!!! // !!!!!
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!! // !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
// !!!!! // !!!!!

View File

@ -7,15 +7,7 @@
#define _FASTIO_ARDUINO_H #define _FASTIO_ARDUINO_H
#include <avr/io.h> #include <avr/io.h>
#include "macros.h"
/*
utility functions
*/
#ifndef MASK
/// MASKING- returns \f$2^PIN\f$
#define MASK(PIN) (1 << PIN)
#endif
/* /*
magic I/O routines magic I/O routines
@ -23,20 +15,20 @@
*/ */
/// Read a pin /// Read a pin
#define _READ(IO) ((bool)(DIO ## IO ## _RPORT & MASK(DIO ## IO ## _PIN))) #define _READ(IO) ((bool)(DIO ## IO ## _RPORT & _BV(DIO ## IO ## _PIN)))
/// write to a pin /// write to a pin
// On some boards pins > 0x100 are used. These are not converted to atomic actions. An critical section is needed. // On some boards pins > 0x100 are used. These are not converted to atomic actions. An critical section is needed.
#define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0) #define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= _BV(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~_BV(DIO ## IO ## _PIN); }; } while (0)
#define _WRITE_C(IO, v) do { if (v) { \ #define _WRITE_C(IO, v) do { if (v) { \
CRITICAL_SECTION_START; \ CRITICAL_SECTION_START; \
{DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); }\ {DIO ## IO ## _WPORT |= _BV(DIO ## IO ## _PIN); }\
CRITICAL_SECTION_END; \ CRITICAL_SECTION_END; \
}\ }\
else {\ else {\
CRITICAL_SECTION_START; \ CRITICAL_SECTION_START; \
{DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }\ {DIO ## IO ## _WPORT &= ~_BV(DIO ## IO ## _PIN); }\
CRITICAL_SECTION_END; \ CRITICAL_SECTION_END; \
}\ }\
}\ }\
@ -45,20 +37,20 @@
#define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0) #define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0)
/// toggle a pin /// toggle a pin
#define _TOGGLE(IO) do {DIO ## IO ## _RPORT = MASK(DIO ## IO ## _PIN); } while (0) #define _TOGGLE(IO) do {DIO ## IO ## _RPORT = _BV(DIO ## IO ## _PIN); } while (0)
/// set pin as input /// set pin as input
#define _SET_INPUT(IO) do {DIO ## IO ## _DDR &= ~MASK(DIO ## IO ## _PIN); } while (0) #define _SET_INPUT(IO) do {DIO ## IO ## _DDR &= ~_BV(DIO ## IO ## _PIN); } while (0)
/// set pin as output /// set pin as output
#define _SET_OUTPUT(IO) do {DIO ## IO ## _DDR |= MASK(DIO ## IO ## _PIN); } while (0) #define _SET_OUTPUT(IO) do {DIO ## IO ## _DDR |= _BV(DIO ## IO ## _PIN); } while (0)
/// check if pin is an input /// check if pin is an input
#define _GET_INPUT(IO) ((DIO ## IO ## _DDR & MASK(DIO ## IO ## _PIN)) == 0) #define _GET_INPUT(IO) ((DIO ## IO ## _DDR & _BV(DIO ## IO ## _PIN)) == 0)
/// check if pin is an output /// check if pin is an output
#define _GET_OUTPUT(IO) ((DIO ## IO ## _DDR & MASK(DIO ## IO ## _PIN)) != 0) #define _GET_OUTPUT(IO) ((DIO ## IO ## _DDR & _BV(DIO ## IO ## _PIN)) != 0)
/// check if pin is an timer /// check if pin is an timer
#define _GET_TIMER(IO) ((DIO ## IO ## _PWM) #define _GET_TIMER(IO) (DIO ## IO ## _PWM)
// why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html // why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html

View File

@ -6,7 +6,6 @@
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "pat9125.h" #include "pat9125.h"
#include "stepper.h" #include "stepper.h"
#include "io_atmega2560.h"
#include "cmdqueue.h" #include "cmdqueue.h"
#include "ultralcd.h" #include "ultralcd.h"
#include "mmu.h" #include "mmu.h"
@ -170,43 +169,65 @@ void fsensor_checkpoint_print(void)
restore_print_from_ram_and_continue(0); restore_print_from_ram_and_continue(0);
} }
#ifdef IR_SENSOR_ANALOG
const char* FsensorIRVersionText()
{
switch(oFsensorPCB)
{
case ClFsensorPCB::_Old:
return _T(MSG_IR_03_OR_OLDER);
case ClFsensorPCB::_Rev04:
return _T(MSG_IR_04_OR_NEWER);
default:
return _T(MSG_IR_UNKNOWN);
}
}
#endif //IR_SENSOR_ANALOG
void fsensor_init(void) void fsensor_init(void)
{ {
#ifdef PAT9125 #ifdef PAT9125
uint8_t pat9125 = pat9125_init(); uint8_t pat9125 = pat9125_init();
printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125); printf_P(PSTR("PAT9125_init:%hhu\n"), pat9125);
#endif //PAT9125 #endif //PAT9125
uint8_t fsensor = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR); uint8_t fsensor_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENSOR);
fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED); fsensor_autoload_enabled=eeprom_read_byte((uint8_t*)EEPROM_FSENS_AUTOLOAD_ENABLED);
fsensor_not_responding = false; fsensor_not_responding = false;
#ifdef PAT9125 #ifdef PAT9125
uint8_t oq_meassure_enabled = eeprom_read_byte((uint8_t*)EEPROM_FSENS_OQ_MEASS_ENABLED); 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; fsensor_oq_meassure_enabled = (oq_meassure_enabled == 1)?true:false;
fsensor_set_axis_steps_per_unit(cs.axis_steps_per_unit[E_AXIS]); fsensor_set_axis_steps_per_unit(cs.axis_steps_per_unit[E_AXIS]);
if (!pat9125) if (!pat9125){
{ fsensor_enabled = 0; //disable sensor
fsensor = 0; //disable sensor
fsensor_not_responding = true; fsensor_not_responding = true;
} }
#endif //PAT9125 #endif //PAT9125
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
bIRsensorStateFlag=false; bIRsensorStateFlag=false;
oFsensorPCB=(ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB); oFsensorPCB = (ClFsensorPCB)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_PCB);
oFsensorActionNA=(ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA); oFsensorActionNA = (ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA);
// If the fsensor is not responding even at the start of the printer,
// set this flag accordingly to show N/A in Settings->Filament sensor.
// This is even valid for both fsensor board revisions (0.3 or older and 0.4).
// Must be done after reading what type of fsensor board we have
fsensor_not_responding = ! fsensor_IR_check();
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
if (fsensor) if (fsensor_enabled){
fsensor_enable(false); // (in this case) EEPROM update is not necessary fsensor_enable(false); // (in this case) EEPROM update is not necessary
else } else {
fsensor_disable(false); // (in this case) EEPROM update is not necessary fsensor_disable(false); // (in this case) EEPROM update is not necessary
}
printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED"))); printf_P(PSTR("FSensor %S"), (fsensor_enabled?PSTR("ENABLED"):PSTR("DISABLED")));
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
printf_P(PSTR(" (sensor board revision: %S)\n"),(oFsensorPCB==ClFsensorPCB::_Rev03b)?PSTR("03b or newer"):PSTR("03 or older")); printf_P(PSTR(" (sensor board revision:%S)\n"), FsensorIRVersionText());
#else //IR_SENSOR_ANALOG #else //IR_SENSOR_ANALOG
printf_P(PSTR("\n")); MYSERIAL.println();
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
if (check_for_ir_sensor()) ir_sensor_detected = true; if (check_for_ir_sensor()){
ir_sensor_detected = true;
}
} }
bool fsensor_enable(bool bUpdateEEPROM) bool fsensor_enable(bool bUpdateEEPROM)
@ -456,22 +477,8 @@ bool fsensor_oq_result(void)
} }
#endif //FSENSOR_QUALITY #endif //FSENSOR_QUALITY
ISR(FSENSOR_INT_PIN_VECT) FORCE_INLINE static void fsensor_isr(int st_cnt)
{ {
if (mmu_enabled || ir_sensor_detected) return;
if (!((fsensor_int_pin_old ^ FSENSOR_INT_PIN_PIN_REG) & FSENSOR_INT_PIN_MASK)) return;
fsensor_int_pin_old = FSENSOR_INT_PIN_PIN_REG;
// prevent isr re-entry
static bool _lock = false;
if (_lock) return;
_lock = true;
// fetch fsensor_st_cnt atomically
int st_cnt = fsensor_st_cnt;
fsensor_st_cnt = 0;
sei();
uint8_t old_err_cnt = fsensor_err_cnt; uint8_t old_err_cnt = fsensor_err_cnt;
uint8_t pat9125_res = fsensor_oq_meassure?pat9125_update():pat9125_update_y(); uint8_t pat9125_res = fsensor_oq_meassure?pat9125_update():pat9125_update_y();
if (!pat9125_res) if (!pat9125_res)
@ -556,8 +563,28 @@ ISR(FSENSOR_INT_PIN_VECT)
#endif //DEBUG_FSENSOR_LOG #endif //DEBUG_FSENSOR_LOG
pat9125_y = 0; pat9125_y = 0;
_lock = false; }
return;
ISR(FSENSOR_INT_PIN_VECT)
{
if (mmu_enabled || ir_sensor_detected) return;
if (!((fsensor_int_pin_old ^ FSENSOR_INT_PIN_PIN_REG) & FSENSOR_INT_PIN_MASK)) return;
fsensor_int_pin_old = FSENSOR_INT_PIN_PIN_REG;
// prevent isr re-entry
static bool _lock = false;
if (!_lock)
{
// fetch fsensor_st_cnt atomically
int st_cnt = fsensor_st_cnt;
fsensor_st_cnt = 0;
_lock = true;
sei();
fsensor_isr(st_cnt);
cli();
_lock = false;
}
} }
void fsensor_setup_interrupt(void) void fsensor_setup_interrupt(void)
@ -580,9 +607,8 @@ void fsensor_st_block_chunk(int cnt)
if (!fsensor_enabled) return; if (!fsensor_enabled) return;
fsensor_st_cnt += cnt; fsensor_st_cnt += cnt;
// !!! bit toggling (PINxn <- 1) (for PinChangeInterrupt) does not work for some MCU pins // !!! 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);} WRITE(FSENSOR_INT_PIN, !READ(FSENSOR_INT_PIN));
else {PIN_VAL(FSENSOR_INT_PIN, HIGH);}
} }
#endif //PAT9125 #endif //PAT9125
@ -604,42 +630,41 @@ void fsensor_enque_M600(){
void fsensor_update(void) void fsensor_update(void)
{ {
#ifdef PAT9125 #ifdef PAT9125
if (fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX)) if (fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX))
{ {
fsensor_stop_and_save_print(); fsensor_stop_and_save_print();
KEEPALIVE_STATE(IN_HANDLER); KEEPALIVE_STATE(IN_HANDLER);
bool autoload_enabled_tmp = fsensor_autoload_enabled; bool autoload_enabled_tmp = fsensor_autoload_enabled;
fsensor_autoload_enabled = false; fsensor_autoload_enabled = false;
bool oq_meassure_enabled_tmp = fsensor_oq_meassure_enabled; bool oq_meassure_enabled_tmp = fsensor_oq_meassure_enabled;
fsensor_oq_meassure_enabled = true; fsensor_oq_meassure_enabled = true;
// move the nozzle away while checking the filament // move the nozzle away while checking the filament
current_position[Z_AXIS] += 0.8; current_position[Z_AXIS] += 0.8;
if(current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; 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); plan_buffer_line_curposXYZE(max_feedrate[Z_AXIS]);
st_synchronize(); st_synchronize();
// check the filament in isolation // check the filament in isolation
fsensor_reset_err_cnt(); fsensor_reset_err_cnt();
fsensor_oq_meassure_start(0); fsensor_oq_meassure_start(0);
float e_tmp = current_position[E_AXIS]; float e_tmp = current_position[E_AXIS];
current_position[E_AXIS] -= 3; current_position[E_AXIS] -= 3;
plan_buffer_line_curposXYZE(250/60, active_extruder); plan_buffer_line_curposXYZE(250/60);
current_position[E_AXIS] = e_tmp; current_position[E_AXIS] = e_tmp;
plan_buffer_line_curposXYZE(200/60, active_extruder); plan_buffer_line_curposXYZE(200/60);
st_synchronize(); st_synchronize();
fsensor_oq_meassure_stop(); fsensor_oq_meassure_stop();
bool err = false; bool err = false;
err |= (fsensor_err_cnt > 0); // final error count is non-zero err |= (fsensor_err_cnt > 0); // final error count is non-zero
err |= (fsensor_oq_er_sum > FSENSOR_OQ_MAX_ES); // total error count is above limit err |= (fsensor_oq_er_sum > FSENSOR_OQ_MAX_ES); // total error count is above limit
err |= (fsensor_oq_yd_sum < FSENSOR_OQ_MIN_YD); // total measured distance is below limit err |= (fsensor_oq_yd_sum < FSENSOR_OQ_MIN_YD); // total measured distance is below limit
fsensor_restore_print_and_continue(); fsensor_restore_print_and_continue();
fsensor_autoload_enabled = autoload_enabled_tmp; fsensor_autoload_enabled = autoload_enabled_tmp;
fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp; fsensor_oq_meassure_enabled = oq_meassure_enabled_tmp;
unsigned long now = _millis(); unsigned long now = _millis();
if (!err && (now - fsensor_softfail_last) > FSENSOR_SOFTERR_DELTA) if (!err && (now - fsensor_softfail_last) > FSENSOR_SOFTERR_DELTA)
fsensor_softfail_ccnt = 0; fsensor_softfail_ccnt = 0;
@ -656,78 +681,107 @@ void fsensor_update(void)
fsensor_softfail_last = 0; fsensor_softfail_last = 0;
fsensor_enque_M600(); fsensor_enque_M600();
} }
} }
#else //PAT9125 #else //PAT9125
if (CHECK_FSENSOR && ir_sensor_detected) if (CHECK_FSENSOR && ir_sensor_detected)
{ {
if(digitalRead(IR_SENSOR_PIN)) if(digitalRead(IR_SENSOR_PIN))
{ // IR_SENSOR_PIN ~ H { // IR_SENSOR_PIN ~ H
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
if(!bIRsensorStateFlag) if(!bIRsensorStateFlag)
{
bIRsensorStateFlag=true;
nIRsensorLastTime=_millis();
}
else
{
if((_millis()-nIRsensorLastTime)>IR_SENSOR_STEADY)
{ {
bIRsensorStateFlag=true; uint8_t nMUX1,nMUX2;
nIRsensorLastTime=_millis(); uint16_t nADC;
} bIRsensorStateFlag=false;
else // sequence for direct data reading from AD converter
{ DISABLE_TEMPERATURE_INTERRUPT();
if((_millis()-nIRsensorLastTime)>IR_SENSOR_STEADY) nMUX1=ADMUX; // ADMUX saving
{ nMUX2=ADCSRB;
uint8_t nMUX1,nMUX2; adc_setmux(VOLT_IR_PIN);
uint16_t nADC; ADCSRA|=(1<<ADSC); // first conversion after ADMUX change discarded (preventively)
bIRsensorStateFlag=false; while(ADCSRA&(1<<ADSC))
// sequence for direct data reading from AD converter ;
DISABLE_TEMPERATURE_INTERRUPT(); ADCSRA|=(1<<ADSC); // second conversion used
nMUX1=ADMUX; // ADMUX saving while(ADCSRA&(1<<ADSC))
nMUX2=ADCSRB; ;
adc_setmux(VOLT_IR_PIN); nADC=ADC;
ADCSRA|=(1<<ADSC); // first conversion after ADMUX change discarded (preventively) ADMUX=nMUX1; // ADMUX restoring
while(ADCSRA&(1<<ADSC)) ADCSRB=nMUX2;
; ENABLE_TEMPERATURE_INTERRUPT();
ADCSRA|=(1<<ADSC); // second conversion used // end of sequence for ...
while(ADCSRA&(1<<ADSC)) // Detection of correct function of fsensor v04 - it must NOT read >4.6V
; // If it does, it means a disconnected cables or faulty board
nADC=ADC; if( (oFsensorPCB == ClFsensorPCB::_Rev04) && ( (nADC*OVERSAMPLENR) > IRsensor_Hopen_TRESHOLD ) )
ADMUX=nMUX1; // ADMUX restoring {
ADCSRB=nMUX2; fsensor_disable();
ENABLE_TEMPERATURE_INTERRUPT(); fsensor_not_responding = true;
// end of sequence for ... printf_P(PSTR("IR sensor not responding (%d)!\n"),1);
if((oFsensorPCB==ClFsensorPCB::_Rev03b)&&((nADC*OVERSAMPLENR)>((int)IRsensor_Hopen_TRESHOLD))) if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause)
{
fsensor_disable(); // if we are printing and FS action is set to "Pause", force pause the print
fsensor_not_responding = true; if(oFsensorActionNA==ClFsensorActionNA::_Pause)
printf_P(PSTR("IR sensor not responding (%d)!\n"),1); lcd_pause_print();
if((ClFsensorActionNA)eeprom_read_byte((uint8_t*)EEPROM_FSENSOR_ACTION_NA)==ClFsensorActionNA::_Pause) }
if(oFsensorActionNA==ClFsensorActionNA::_Pause) else
lcd_pause_print(); {
}
else
{
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
fsensor_checkpoint_print(); fsensor_checkpoint_print();
fsensor_enque_M600(); fsensor_enque_M600();
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
} }
}
} }
} }
else }
{ // IR_SENSOR_PIN ~ L else
bIRsensorStateFlag=false; { // IR_SENSOR_PIN ~ L
bIRsensorStateFlag=false;
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
} }
} }
#endif //PAT9125 #endif //PAT9125
} }
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
bool fsensor_IR_check() /// This is called only upon start of the printer or when switching the fsensor ON in the menu
{ /// We cannot do temporal window checks here (aka the voltage has been in some range for a period of time)
uint16_t volt_IR_int; bool fsensor_IR_check(){
bool bCheckResult; if( IRsensor_Lmax_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_Hmin_TRESHOLD ){
/// If the voltage is in forbidden range, the fsensor is ok, but the lever is mounted improperly.
volt_IR_int=current_voltage_raw_IR; /// Or the user is so creative so that he can hold a piece of fillament in the hole in such a genius way,
bCheckResult=(volt_IR_int<((int)IRsensor_Lmax_TRESHOLD))||(volt_IR_int>((int)IRsensor_Hmin_TRESHOLD)); /// that the IR fsensor reading is within 1.5 and 3V ... this would have been highly unusual
bCheckResult=bCheckResult&&(!((oFsensorPCB==ClFsensorPCB::_Rev03b)&&(volt_IR_int>((int)IRsensor_Hopen_TRESHOLD)))); /// and would have been considered more like a sabotage than normal printer operation
return(bCheckResult); printf_P(PSTR("fsensor in forbidden range 1.5-3V - check sensor\n"));
return false;
}
if( oFsensorPCB == ClFsensorPCB::_Rev04 ){
/// newer IR sensor cannot normally produce 4.6-5V, this is considered a failure/bad mount
if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){
printf_P(PSTR("fsensor v0.4 in fault range 4.6-5V - unconnected\n"));
return false;
}
/// newer IR sensor cannot normally produce 0-0.3V, this is considered a failure
#if 0 //Disabled as it has to be decided if we gonna use this or not.
if( IRsensor_Hopen_TRESHOLD <= current_voltage_raw_IR && current_voltage_raw_IR <= IRsensor_VMax_TRESHOLD ){
printf_P(PSTR("fsensor v0.4 in fault range 0.0-0.3V - wrong IR sensor\n"));
return false;
}
#endif
}
/// If IR sensor is "uknown state" and filament is not loaded > 1.5V return false
#if 0
if( (oFsensorPCB == ClFsensorPCB::_Undef) && ( current_voltage_raw_IR > IRsensor_Lmax_TRESHOLD ) ){
printf_P(PSTR("Unknown IR sensor version and no filament loaded detected.\n"));
return false;
}
#endif
// otherwise the IR fsensor is considered working correctly
return true;
} }
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG

View File

@ -83,6 +83,7 @@ extern uint8_t fsensor_log;
//! @} //! @}
#endif //PAT9125 #endif //PAT9125
#define VOLT_DIV_REF 5
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
#define IR_SENSOR_STEADY 10 // [ms] #define IR_SENSOR_STEADY 10 // [ms]
@ -90,7 +91,7 @@ extern uint8_t fsensor_log;
enum class ClFsensorPCB:uint_least8_t enum class ClFsensorPCB:uint_least8_t
{ {
_Old=0, _Old=0,
_Rev03b=1, _Rev04=1,
_Undef=EEPROM_EMPTY_VALUE _Undef=EEPROM_EMPTY_VALUE
}; };
@ -103,8 +104,21 @@ enum class ClFsensorActionNA:uint_least8_t
extern ClFsensorPCB oFsensorPCB; extern ClFsensorPCB oFsensorPCB;
extern ClFsensorActionNA oFsensorActionNA; extern ClFsensorActionNA oFsensorActionNA;
extern const char* FsensorIRVersionText();
extern bool fsensor_IR_check(); extern bool fsensor_IR_check();
constexpr uint16_t Voltage2Raw(float V){
return ( V * 1023 * OVERSAMPLENR / VOLT_DIV_REF ) + 0.5F;
}
constexpr float Raw2Voltage(uint16_t raw){
return VOLT_DIV_REF*(raw / (1023.F * OVERSAMPLENR) );
}
constexpr uint16_t IRsensor_Ldiode_TRESHOLD = Voltage2Raw(0.3F); // ~0.3V, raw value=982
constexpr uint16_t IRsensor_Lmax_TRESHOLD = Voltage2Raw(1.5F); // ~1.5V (0.3*Vcc), raw value=4910
constexpr uint16_t IRsensor_Hmin_TRESHOLD = Voltage2Raw(3.0F); // ~3.0V (0.6*Vcc), raw value=9821
constexpr uint16_t IRsensor_Hopen_TRESHOLD = Voltage2Raw(4.6F); // ~4.6V (N.C. @ Ru~20-50k, Rd'=56k, Ru'=10k), raw value=15059
constexpr uint16_t IRsensor_VMax_TRESHOLD = Voltage2Raw(5.F); // ~5V, raw value=16368
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
#endif //FSENSOR_H #endif //FSENSOR_H

View File

@ -1,6 +1,5 @@
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include "io_atmega2560.h"
// All this is about silencing the heat bed, as it behaves like a loudspeaker. // All this is about silencing the heat bed, as it behaves like a loudspeaker.
// Basically, we want the PWM heating switched at 30Hz (or so) which is a well ballanced // Basically, we want the PWM heating switched at 30Hz (or so) which is a well ballanced
@ -59,7 +58,6 @@ enum class States : uint8_t {
RISE, ///< 16 fast PWM cycles with increasing duty up to steady ON RISE, ///< 16 fast PWM cycles with increasing duty up to steady ON
RISE_TO_ONE, ///< metastate allowing the timer change its state atomically without artefacts on the output pin RISE_TO_ONE, ///< metastate allowing the timer change its state atomically without artefacts on the output pin
ONE, ///< steady 1 (ON), no change for the whole period ONE, ///< steady 1 (ON), no change for the whole period
ONE_TO_FALL, ///< metastate allowing the timer change its state atomically without artefacts on the output pin
FALL, ///< 16 fast PWM cycles with decreasing duty down to steady OFF FALL, ///< 16 fast PWM cycles with decreasing duty down to steady OFF
FALL_TO_ZERO ///< metastate allowing the timer change its state atomically without artefacts on the output pin FALL_TO_ZERO ///< metastate allowing the timer change its state atomically without artefacts on the output pin
}; };
@ -155,12 +153,7 @@ ISR(TIMER0_OVF_vect) // timer compare interrupt service routine
return; // want full duty for the next ONE cycle again - so keep on heating and just wait for the next timer ovf return; // want full duty for the next ONE cycle again - so keep on heating and just wait for the next timer ovf
} }
// otherwise moving towards FALL // otherwise moving towards FALL
// @@TODO it looks like ONE_TO_FALL isn't necessary, there are no artefacts at all
state = States::ONE;//_TO_FALL; state = States::ONE;//_TO_FALL;
// TCCR0B = (1 << CS00); // change prescaler to 1, i.e. 62.5kHz
// break;
// case States::ONE_TO_FALL:
// OCR0B = 255; // zero duty
state=States::FALL; state=States::FALL;
fastCounter = fastMax - 1;// we'll do 16-1 cycles of RISE fastCounter = fastMax - 1;// we'll do 16-1 cycles of RISE
TCNT0 = 255; // force overflow on the next clock cycle TCNT0 = 255; // force overflow on the next clock cycle

View File

@ -1,374 +0,0 @@
//io_atmega2560.h
#ifndef _IO_ATMEGA2560
#define _IO_ATMEGA2560
#define __PIN_P0 PINE
#define __PIN_P1 PINE
#define __PIN_P2 PINE
#define __PIN_P3 PINE
#define __PIN_P4 PING
#define __PIN_P5 PINE
#define __PIN_P6 PINH
#define __PIN_P7 PINH
#define __PIN_P8 PINH
#define __PIN_P9 PINH
#define __PIN_P10 PINB
#define __PIN_P11 PINB
#define __PIN_P12 PINB
#define __PIN_P13 PINB
#define __PIN_P14 PINJ
#define __PIN_P15 PINJ
#define __PIN_P16 PINH
#define __PIN_P17 PINH
#define __PIN_P18 PIND
#define __PIN_P19 PIND
#define __PIN_P20 PIND
#define __PIN_P21 PIND
#define __PIN_P22 PINA
#define __PIN_P23 PINA
#define __PIN_P24 PINA
#define __PIN_P25 PINA
#define __PIN_P26 PINA
#define __PIN_P27 PINA
#define __PIN_P28 PINA
#define __PIN_P29 PINA
#define __PIN_P30 PINC
#define __PIN_P31 PINC
#define __PIN_P32 PINC
#define __PIN_P33 PINC
#define __PIN_P34 PINC
#define __PIN_P35 PINC
#define __PIN_P36 PINC
#define __PIN_P37 PINC
#define __PIN_P38 PIND
#define __PIN_P39 PING
#define __PIN_P40 PING
#define __PIN_P41 PING
#define __PIN_P42 PINL
#define __PIN_P43 PINL
#define __PIN_P44 PINL
#define __PIN_P45 PINL
#define __PIN_P46 PINL
#define __PIN_P47 PINL
#define __PIN_P48 PINL
#define __PIN_P49 PINL
#define __PIN_P50 PINB
#define __PIN_P51 PINB
#define __PIN_P52 PINB
#define __PIN_P53 PINB
#define __PIN_P54 PINF
#define __PIN_P55 PINF
#define __PIN_P56 PINF
#define __PIN_P57 PINF
#define __PIN_P58 PINF
#define __PIN_P59 PINF
#define __PIN_P60 PINF
#define __PIN_P61 PINF
#define __PIN_P62 PINK
#define __PIN_P63 PINK
#define __PIN_P64 PINK
#define __PIN_P65 PINK
#define __PIN_P66 PINK
#define __PIN_P67 PINK
#define __PIN_P68 PINK
#define __PIN_P69 PINK
#define __PIN_P70 PING
#define __PIN_P71 PING
#define __PIN_P72 PINJ
#define __PIN_P73 PINJ
#define __PIN_P74 PINJ
#define __PIN_P75 PINJ
#define __PIN_P76 PINJ
#define __PIN_P77 PINJ
#define __PIN_P78 PINE
#define __PIN_P79 PINE
#define __PIN_P80 PINE
#define __PIN_P81 PIND
#define __PIN_P82 PIND
#define __PIN_P83 PIND
#define __PIN_P84 PINH
#define __PIN_P85 PINH
#define __PORT_P0 PORTE
#define __PORT_P1 PORTE
#define __PORT_P2 PORTE
#define __PORT_P3 PORTE
#define __PORT_P4 PORTG
#define __PORT_P5 PORTE
#define __PORT_P6 PORTH
#define __PORT_P7 PORTH
#define __PORT_P8 PORTH
#define __PORT_P9 PORTH
#define __PORT_P10 PORTB
#define __PORT_P11 PORTB
#define __PORT_P12 PORTB
#define __PORT_P13 PORTB
#define __PORT_P14 PORTJ
#define __PORT_P15 PORTJ
#define __PORT_P16 PORTH
#define __PORT_P17 PORTH
#define __PORT_P18 PORTD
#define __PORT_P19 PORTD
#define __PORT_P20 PORTD
#define __PORT_P21 PORTD
#define __PORT_P22 PORTA
#define __PORT_P23 PORTA
#define __PORT_P24 PORTA
#define __PORT_P25 PORTA
#define __PORT_P26 PORTA
#define __PORT_P27 PORTA
#define __PORT_P28 PORTA
#define __PORT_P29 PORTA
#define __PORT_P30 PORTC
#define __PORT_P31 PORTC
#define __PORT_P32 PORTC
#define __PORT_P33 PORTC
#define __PORT_P34 PORTC
#define __PORT_P35 PORTC
#define __PORT_P36 PORTC
#define __PORT_P37 PORTC
#define __PORT_P38 PORTD
#define __PORT_P39 PORTG
#define __PORT_P40 PORTG
#define __PORT_P41 PORTG
#define __PORT_P42 PORTL
#define __PORT_P43 PORTL
#define __PORT_P44 PORTL
#define __PORT_P45 PORTL
#define __PORT_P46 PORTL
#define __PORT_P47 PORTL
#define __PORT_P48 PORTL
#define __PORT_P49 PORTL
#define __PORT_P50 PORTB
#define __PORT_P51 PORTB
#define __PORT_P52 PORTB
#define __PORT_P53 PORTB
#define __PORT_P54 PORTF
#define __PORT_P55 PORTF
#define __PORT_P56 PORTF
#define __PORT_P57 PORTF
#define __PORT_P58 PORTF
#define __PORT_P59 PORTF
#define __PORT_P60 PORTF
#define __PORT_P61 PORTF
#define __PORT_P62 PORTK
#define __PORT_P63 PORTK
#define __PORT_P64 PORTK
#define __PORT_P65 PORTK
#define __PORT_P66 PORTK
#define __PORT_P67 PORTK
#define __PORT_P68 PORTK
#define __PORT_P69 PORTK
#define __PORT_P70 PORTG
#define __PORT_P71 PORTG
#define __PORT_P72 PORTJ
#define __PORT_P73 PORTJ
#define __PORT_P74 PORTJ
#define __PORT_P75 PORTJ
#define __PORT_P76 PORTJ
#define __PORT_P77 PORTJ
#define __PORT_P78 PORTE
#define __PORT_P79 PORTE
#define __PORT_P80 PORTE
#define __PORT_P81 PORTD
#define __PORT_P82 PORTD
#define __PORT_P83 PORTD
#define __PORT_P84 PORTH
#define __PORT_P85 PORTH
#define __DDR_P0 DDRE
#define __DDR_P1 DDRE
#define __DDR_P2 DDRE
#define __DDR_P3 DDRE
#define __DDR_P4 DDRG
#define __DDR_P5 DDRE
#define __DDR_P6 DDRH
#define __DDR_P7 DDRH
#define __DDR_P8 DDRH
#define __DDR_P9 DDRH
#define __DDR_P10 DDRB
#define __DDR_P11 DDRB
#define __DDR_P12 DDRB
#define __DDR_P13 DDRB
#define __DDR_P14 DDRJ
#define __DDR_P15 DDRJ
#define __DDR_P16 DDRH
#define __DDR_P17 DDRH
#define __DDR_P18 DDRD
#define __DDR_P19 DDRD
#define __DDR_P20 DDRD
#define __DDR_P21 DDRD
#define __DDR_P22 DDRA
#define __DDR_P23 DDRA
#define __DDR_P24 DDRA
#define __DDR_P25 DDRA
#define __DDR_P26 DDRA
#define __DDR_P27 DDRA
#define __DDR_P28 DDRA
#define __DDR_P29 DDRA
#define __DDR_P30 DDRC
#define __DDR_P31 DDRC
#define __DDR_P32 DDRC
#define __DDR_P33 DDRC
#define __DDR_P34 DDRC
#define __DDR_P35 DDRC
#define __DDR_P36 DDRC
#define __DDR_P37 DDRC
#define __DDR_P38 DDRD
#define __DDR_P39 DDRG
#define __DDR_P40 DDRG
#define __DDR_P41 DDRG
#define __DDR_P42 DDRL
#define __DDR_P43 DDRL
#define __DDR_P44 DDRL
#define __DDR_P45 DDRL
#define __DDR_P46 DDRL
#define __DDR_P47 DDRL
#define __DDR_P48 DDRL
#define __DDR_P49 DDRL
#define __DDR_P50 DDRB
#define __DDR_P51 DDRB
#define __DDR_P52 DDRB
#define __DDR_P53 DDRB
#define __DDR_P54 DDRF
#define __DDR_P55 DDRF
#define __DDR_P56 DDRF
#define __DDR_P57 DDRF
#define __DDR_P58 DDRF
#define __DDR_P59 DDRF
#define __DDR_P60 DDRF
#define __DDR_P61 DDRF
#define __DDR_P62 DDRK
#define __DDR_P63 DDRK
#define __DDR_P64 DDRK
#define __DDR_P65 DDRK
#define __DDR_P66 DDRK
#define __DDR_P67 DDRK
#define __DDR_P68 DDRK
#define __DDR_P69 DDRK
#define __DDR_P70 DDRG
#define __DDR_P71 DDRG
#define __DDR_P72 DDRJ
#define __DDR_P73 DDRJ
#define __DDR_P74 DDRJ
#define __DDR_P75 DDRJ
#define __DDR_P76 DDRJ
#define __DDR_P77 DDRJ
#define __DDR_P78 DDRE
#define __DDR_P79 DDRE
#define __DDR_P80 DDRE
#define __DDR_P81 DDRD
#define __DDR_P82 DDRD
#define __DDR_P83 DDRD
#define __DDR_P84 DDRH
#define __DDR_P85 DDRH
#define __BIT_P0 0
#define __BIT_P1 1
#define __BIT_P2 4
#define __BIT_P3 5
#define __BIT_P4 5
#define __BIT_P5 3
#define __BIT_P6 3
#define __BIT_P7 4
#define __BIT_P8 5
#define __BIT_P9 6
#define __BIT_P10 4
#define __BIT_P11 5
#define __BIT_P12 6
#define __BIT_P13 7
#define __BIT_P14 1
#define __BIT_P15 0
#define __BIT_P16 0
#define __BIT_P17 1
#define __BIT_P18 3
#define __BIT_P19 2
#define __BIT_P20 1
#define __BIT_P21 0
#define __BIT_P22 0
#define __BIT_P23 1
#define __BIT_P24 2
#define __BIT_P25 3
#define __BIT_P26 4
#define __BIT_P27 5
#define __BIT_P28 6
#define __BIT_P29 7
#define __BIT_P30 7
#define __BIT_P31 6
#define __BIT_P32 5
#define __BIT_P33 4
#define __BIT_P34 3
#define __BIT_P35 2
#define __BIT_P36 1
#define __BIT_P37 0
#define __BIT_P38 7
#define __BIT_P39 2
#define __BIT_P40 1
#define __BIT_P41 0
#define __BIT_P42 7
#define __BIT_P43 6
#define __BIT_P44 5
#define __BIT_P45 4
#define __BIT_P46 3
#define __BIT_P47 2
#define __BIT_P48 1
#define __BIT_P49 0
#define __BIT_P50 3
#define __BIT_P51 2
#define __BIT_P52 1
#define __BIT_P53 0
#define __BIT_P54 0
#define __BIT_P55 1
#define __BIT_P56 2
#define __BIT_P57 3
#define __BIT_P58 4
#define __BIT_P59 5
#define __BIT_P60 6
#define __BIT_P61 7
#define __BIT_P62 0
#define __BIT_P63 1
#define __BIT_P64 2
#define __BIT_P65 3
#define __BIT_P66 4
#define __BIT_P67 5
#define __BIT_P68 6
#define __BIT_P69 7
#define __BIT_P70 4
#define __BIT_P71 3
#define __BIT_P72 2
#define __BIT_P73 3
#define __BIT_P74 7
#define __BIT_P75 4
#define __BIT_P76 5
#define __BIT_P77 6
#define __BIT_P78 2
#define __BIT_P79 6
#define __BIT_P80 7
#define __BIT_P81 4
#define __BIT_P82 5
#define __BIT_P83 6
#define __BIT_P84 2
#define __BIT_P85 7
#define __BIT(pin) __BIT_P##pin
#define __MSK(pin) (1 << __BIT(pin))
#define __PIN(pin) __PIN_P##pin
#define __PORT(pin) __PORT_P##pin
#define __DDR(pin) __DDR_P##pin
#define PIN(pin) __PIN(pin)
#define PORT(pin) __PORT(pin)
#define DDR(pin) __DDR(pin)
#define PIN_INP(pin) DDR(pin) &= ~__MSK(pin)
#define PIN_OUT(pin) DDR(pin) |= __MSK(pin)
#define PIN_CLR(pin) PORT(pin) &= ~__MSK(pin)
#define PIN_SET(pin) PORT(pin) |= __MSK(pin)
#define PIN_VAL(pin, val) if (val) PIN_SET(pin); else PIN_CLR(pin);
#define PIN_GET(pin) (PIN(pin) & __MSK(pin))
#define PIN_INQ(pin) (PORT(pin) & __MSK(pin))
#endif //_IO_ATMEGA2560

View File

@ -1,5 +1,6 @@
#include "la10compat.h" #include "la10compat.h"
#include "Marlin.h" #include "Marlin.h"
#include <float.h>
static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode static LA10C_MODE la10c_mode = LA10C_UNKNOWN; // Current LA compatibility mode
@ -37,8 +38,10 @@ void la10c_mode_change(LA10C_MODE mode)
// Approximate a LA10 value to a LA15 equivalent. // Approximate a LA10 value to a LA15 equivalent.
static float la10c_convert(float k) static float la10c_convert(float k)
{ {
float new_K = k * 0.004 - 0.06; float new_K = k * 0.002 - 0.01;
return (new_K < 0? 0: new_K); return new_K < 0? 0:
new_K > (LA_K_MAX - FLT_EPSILON)? (LA_K_MAX - FLT_EPSILON):
new_K;
} }
@ -52,11 +55,11 @@ float la10c_value(float k)
else if(k < 0) else if(k < 0)
return -1; return -1;
la10c_mode_change(k < 10? LA10C_LA15: LA10C_LA10); la10c_mode_change(k < LA_LA10_MIN? LA10C_LA15: LA10C_LA10);
} }
if(la10c_mode == LA10C_LA15) if(la10c_mode == LA10C_LA15)
return (k >= 0 && k < 10? k: -1); return (k >= 0 && k < LA_K_MAX? k: -1);
else else
return (k >= 0? la10c_convert(k): -1); return (k >= 0? la10c_convert(k): -1);
} }
@ -75,10 +78,10 @@ float la10c_jerk(float j)
return j; return j;
// bring low E-jerk values into equivalent LA 1.5 values by // bring low E-jerk values into equivalent LA 1.5 values by
// flattening the response in the (1-4.5) range using a piecewise // flattening the response in the (0.3-4.5) range using a piecewise
// function. Is it truly worth to preserve the difference between // 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. // 1.5/2.5 E-jerk for LA1.0? Probably not, but we try nonetheless.
j = j < 1.0? j * 3.625: j = j < 0.3? j * 11.5:
j < 4.5? j * 0.25 + 3.375: j < 4.5? j * 0.25 + 3.375:
j; j;

View File

@ -17,10 +17,10 @@ uint8_t lang_selected = 0;
#if (LANG_MODE == 0) //primary language only #if (LANG_MODE == 0) //primary language only
uint8_t lang_select(__attribute__((unused)) uint8_t lang) { return 0; } uint8_t lang_select(_UNUSED uint8_t lang) { return 0; }
uint8_t lang_get_count() { return 1; } uint8_t lang_get_count() { return 1; }
uint16_t lang_get_code(__attribute__((unused)) uint8_t lang) { return LANG_CODE_EN; } uint16_t lang_get_code(_UNUSED uint8_t lang) { return LANG_CODE_EN; }
const char* lang_get_name_by_code(__attribute__((unused)) uint16_t code) { return _n("English"); } const char* lang_get_name_by_code(_UNUSED uint16_t code) { return _n("English"); }
void lang_reset(void) { } void lang_reset(void) { }
uint8_t lang_is_selected(void) { return 1; } uint8_t lang_is_selected(void) { return 1; }

View File

@ -5,6 +5,7 @@
#include "config.h" #include "config.h"
#include "macros.h"
#include <inttypes.h> #include <inttypes.h>
#ifdef DEBUG_SEC_LANG #ifdef DEBUG_SEC_LANG
#include <stdio.h> #include <stdio.h>
@ -22,9 +23,6 @@
#define MSG_FW_VERSION "Firmware" #define MSG_FW_VERSION "Firmware"
#define STRINGIFY_(n) #n
#define STRINGIFY(n) STRINGIFY_(n)
#if (LANG_MODE == 0) //primary language only #if (LANG_MODE == 0) //primary language only
#define PROGMEM_I2 __attribute__((section(".progmem0"))) #define PROGMEM_I2 __attribute__((section(".progmem0")))
#define PROGMEM_I1 __attribute__((section(".progmem1"))) #define PROGMEM_I1 __attribute__((section(".progmem1")))

90
Firmware/macros.h Normal file
View File

@ -0,0 +1,90 @@
#ifndef MACROS_H
#define MACROS_H
#include <avr/interrupt.h> //for cli() and sei()
#define FORCE_INLINE __attribute__((always_inline)) inline
#define _UNUSED __attribute__((unused))
#ifndef CRITICAL_SECTION_START
#define CRITICAL_SECTION_START unsigned char _sreg = SREG; cli();
#define CRITICAL_SECTION_END SREG = _sreg;
#endif //CRITICAL_SECTION_START
// Macros to make a string from a macro
#define STRINGIFY_(M) #M
#define STRINGIFY(M) STRINGIFY_(M)
// Macros for bit masks
#undef _BV
#define _BV(n) (1<<(n))
#define TEST(n,b) (!!((n)&_BV(b)))
#define SET_BIT_TO(N,B,TF) do{ if (TF) SBI(N,B); else CBI(N,B); }while(0)
#ifndef SBI
#define SBI(A,B) (A |= (1 << (B)))
#endif
#ifndef CBI
#define CBI(A,B) (A &= ~(1 << (B)))
#endif
#define TBI(N,B) (N ^= _BV(B))
// Macros to chain up to 12 conditions
#define _DO_1(W,C,A) (_##W##_1(A))
#define _DO_2(W,C,A,B) (_##W##_1(A) C _##W##_1(B))
#define _DO_3(W,C,A,V...) (_##W##_1(A) C _DO_2(W,C,V))
#define _DO_4(W,C,A,V...) (_##W##_1(A) C _DO_3(W,C,V))
#define _DO_5(W,C,A,V...) (_##W##_1(A) C _DO_4(W,C,V))
#define _DO_6(W,C,A,V...) (_##W##_1(A) C _DO_5(W,C,V))
#define _DO_7(W,C,A,V...) (_##W##_1(A) C _DO_6(W,C,V))
#define _DO_8(W,C,A,V...) (_##W##_1(A) C _DO_7(W,C,V))
#define _DO_9(W,C,A,V...) (_##W##_1(A) C _DO_8(W,C,V))
#define _DO_10(W,C,A,V...) (_##W##_1(A) C _DO_9(W,C,V))
#define _DO_11(W,C,A,V...) (_##W##_1(A) C _DO_10(W,C,V))
#define _DO_12(W,C,A,V...) (_##W##_1(A) C _DO_11(W,C,V))
#define __DO_N(W,C,N,V...) _DO_##N(W,C,V)
#define _DO_N(W,C,N,V...) __DO_N(W,C,N,V)
#define DO(W,C,V...) _DO_N(W,C,NUM_ARGS(V),V)
// Macros to support option testing
#define _CAT(a,V...) a##V
#define CAT(a,V...) _CAT(a,V)
#define _ISENA_ ~,1
#define _ISENA_1 ~,1
#define _ISENA_0x1 ~,1
#define _ISENA_true ~,1
#define _ISENA(V...) IS_PROBE(V)
#define _ENA_1(O) _ISENA(CAT(_IS,CAT(ENA_, O)))
#define _DIS_1(O) NOT(_ENA_1(O))
#define ENABLED(V...) DO(ENA,&&,V)
#define DISABLED(V...) DO(DIS,&&,V)
#define TERN(O,A,B) _TERN(_ENA_1(O),B,A) // OPTION converted to '0' or '1'
#define TERN0(O,A) _TERN(_ENA_1(O),0,A) // OPTION converted to A or '0'
#define TERN1(O,A) _TERN(_ENA_1(O),1,A) // OPTION converted to A or '1'
#define TERN_(O,A) _TERN(_ENA_1(O),,A) // OPTION converted to A or '<nul>'
#define _TERN(E,V...) __TERN(_CAT(T_,E),V) // Prepend 'T_' to get 'T_0' or 'T_1'
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
// Use NUM_ARGS(__VA_ARGS__) to get the number of variadic arguments
#define _NUM_ARGS(_,Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A,OUT,...) OUT
#define NUM_ARGS(V...) _NUM_ARGS(0,V,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
//
// Primitives supporting precompiler REPEAT
//
#define FIRST(a,...) a
#define SECOND(a,b,...) b
#define THIRD(a,b,c,...) c
#define IS_PROBE(V...) SECOND(V, 0) // Get the second item passed, or 0
#define NOT(x) IS_PROBE(_CAT(_NOT_, x)) // NOT('0') gets '1'. Anything else gets '0'.
#endif //MACROS_H

View File

@ -48,6 +48,7 @@ void menu_goto(menu_func_t menu, const uint32_t encoder, const bool feedback, bo
{ {
menu_menu = menu; menu_menu = menu;
lcd_encoder = encoder; lcd_encoder = encoder;
menu_top = 0; //reset menu view. Needed if menu_back() is called from deep inside a menu, such as Support
asm("sei"); asm("sei");
if (reset_menu_state) if (reset_menu_state)
{ {

View File

@ -920,7 +920,7 @@ static inline void go_xy(float x, float y, float fr)
static inline void go_to_current(float fr) static inline void go_to_current(float fr)
{ {
plan_buffer_line_curposXYZE(fr, active_extruder); plan_buffer_line_curposXYZE(fr);
st_synchronize(); st_synchronize();
} }
@ -929,7 +929,7 @@ static inline void update_current_position_xyz()
current_position[X_AXIS] = st_get_position_mm(X_AXIS); current_position[X_AXIS] = st_get_position_mm(X_AXIS);
current_position[Y_AXIS] = st_get_position_mm(Y_AXIS); current_position[Y_AXIS] = st_get_position_mm(Y_AXIS);
current_position[Z_AXIS] = st_get_position_mm(Z_AXIS); current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); plan_set_position_curposXYZE();
} }
static inline void update_current_position_z() static inline void update_current_position_z()

View File

@ -14,14 +14,14 @@ const char MSG_BABYSTEP_Z_NOT_SET[] PROGMEM_I1 = ISTR("Distance between tip of t
const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); //// const char MSG_BED[] PROGMEM_I1 = ISTR("Bed"); ////
const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); //// const char MSG_BED_DONE[] PROGMEM_I1 = ISTR("Bed done"); ////
const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); //// const char MSG_BED_HEATING[] PROGMEM_I1 = ISTR("Bed Heating"); ////
const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=4 const char MSG_BED_LEVELING_FAILED_POINT_LOW[] PROGMEM_I1 = ISTR("Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."); ////c=20 r=5
const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8 const char MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED[] PROGMEM_I1 = ISTR("XYZ calibration failed. Please consult the manual."); ////c=20 r=8
const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2 const char MSG_CALIBRATE_Z_AUTO[] PROGMEM_I1 = ISTR("Calibrating Z"); ////c=20 r=2
const char MSG_CARD_MENU[] PROGMEM_I1 = ISTR("Print from SD"); //// 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_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_COOLDOWN[] PROGMEM_I1 = ISTR("Cooldown"); ////
const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1 const char MSG_CRASH_DETECTED[] PROGMEM_I1 = ISTR("Crash detected."); ////c=20 r=1
const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); //// const char MSG_CRASHDETECT[] PROGMEM_I1 = ISTR("Crash det."); ////c=13
const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); //// const char MSG_ERROR[] PROGMEM_I1 = ISTR("ERROR:"); ////
const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1 const char MSG_EXTRUDER[] PROGMEM_I1 = ISTR("Extruder"); ////c=17 r=1
const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1 const char MSG_FILAMENT[] PROGMEM_I1 = ISTR("Filament"); ////c=17 r=1
@ -34,10 +34,10 @@ const char MSG_FILAMENT_LOADING_T3[] PROGMEM_I1 = ISTR("Insert filament into ext
const char MSG_FILAMENTCHANGE[] PROGMEM_I1 = ISTR("Change filament"); //// const char MSG_FILAMENTCHANGE[] PROGMEM_I1 = ISTR("Change filament"); ////
const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed calibration point"); ////c=60 const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE1[] PROGMEM_I1 = ISTR("Searching bed calibration point"); ////c=60
const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////c=14 const char MSG_FIND_BED_OFFSET_AND_SKEW_LINE2[] PROGMEM_I1 = ISTR(" of 4"); ////c=14
const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20 r=1 const char MSG_FINISHING_MOVEMENTS[] PROGMEM_I1 = ISTR("Finishing movements"); ////c=20
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_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_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=9
const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=17 r=1 const char MSG_FSENSOR_AUTOLOAD[] PROGMEM_I1 = ISTR("F. autoload"); ////c=13
const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); //// const char MSG_FSENSOR[] PROGMEM_I1 = ISTR("Fil. sensor"); ////
const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); //// const char MSG_HEATING[] PROGMEM_I1 = ISTR("Heating"); ////
const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20 const char MSG_HEATING_COMPLETE[] PROGMEM_I1 = ISTR("Heating done."); ////c=20
@ -48,7 +48,7 @@ const char MSG_LOAD_FILAMENT[] PROGMEM_I1 = ISTR("Load filament"); //// Number 1
const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20 const char MSG_LOADING_FILAMENT[] PROGMEM_I1 = ISTR("Loading filament"); ////c=20
const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16 const char MSG_EJECT_FILAMENT[] PROGMEM_I1 = ISTR("Eject filament"); //// Number 1 to 5 is added behind text e.g. "Eject filament 1" c=16
const char MSG_CUT_FILAMENT[] PROGMEM_I1 = ISTR("Cut filament"); //// Number 1 to 5 is added behind text e.g. "Cut filament 1" c=16 const char MSG_CUT_FILAMENT[] PROGMEM_I1 = ISTR("Cut filament"); //// Number 1 to 5 is added behind text e.g. "Cut filament 1" c=16
const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25 r=1 const char MSG_M117_V2_CALIBRATION[] PROGMEM_I1 = ISTR("M117 First layer cal."); ////c=25
const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); //// const char MSG_MAIN[] PROGMEM_I1 = ISTR("Main"); ////
const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); //// const char MSG_BACK[] PROGMEM_I1 = ISTR("Back"); ////
const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10 const char MSG_SHEET[] PROGMEM_I1 = ISTR("Sheet"); ////c=10
@ -57,7 +57,7 @@ const char MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE2[] PROGMEM_I1 = ISTR(" of 9");
const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); //// const char MSG_MENU_CALIBRATION[] PROGMEM_I1 = ISTR("Calibration"); ////
const char MSG_NO[] PROGMEM_I1 = ISTR("No"); //// const char MSG_NO[] PROGMEM_I1 = ISTR("No"); ////
const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); //// const char MSG_NOZZLE[] PROGMEM_I1 = ISTR("Nozzle"); ////
const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=8 const char MSG_PAPER[] PROGMEM_I1 = ISTR("Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."); ////c=20 r=10
const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4 const char MSG_PLACE_STEEL_SHEET[] PROGMEM_I1 = ISTR("Please place steel sheet on heatbed."); ////c=20 r=4
const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20 const char MSG_PLEASE_WAIT[] PROGMEM_I1 = ISTR("Please wait"); ////c=20
const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20 const char MSG_PREHEAT_NOZZLE[] PROGMEM_I1 = ISTR("Preheat the nozzle!"); ////c=20
@ -90,7 +90,7 @@ 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_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_STOP_PRINT[] PROGMEM_I1 = ISTR("Stop print"); ////
const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); //// const char MSG_STOPPED[] PROGMEM_I1 = ISTR("STOPPED. "); ////
const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=12 r=1 const char MSG_TEMP_CALIBRATION[] PROGMEM_I1 = ISTR("Temp. cal."); ////c=14
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_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_UNLOAD_FILAMENT[] PROGMEM_I1 = ISTR("Unload filament"); ////c=17
const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1 const char MSG_UNLOADING_FILAMENT[] PROGMEM_I1 = ISTR("Unloading filament"); ////c=20 r=1
@ -100,13 +100,13 @@ const char MSG_WIZARD_DONE[] PROGMEM_I1 = ISTR("All is done. Happy printing!");
const char MSG_WIZARD_HEATING[] PROGMEM_I1 = ISTR("Preheating nozzle. Please wait."); ////c=20 r=3 const char MSG_WIZARD_HEATING[] PROGMEM_I1 = ISTR("Preheating nozzle. Please wait."); ////c=20 r=3
const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard from Calibration -> Wizard."); ////c=20 r=8 const char MSG_WIZARD_QUIT[] PROGMEM_I1 = ISTR("You can always resume the Wizard from Calibration -> Wizard."); ////c=20 r=8
const char MSG_YES[] PROGMEM_I1 = ISTR("Yes"); //// 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 MSG_V2_CALIBRATION[] PROGMEM_I1 = ISTR("First layer cal."); ////c=18
const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20 const char WELCOME_MSG[] PROGMEM_I1 = ISTR(CUSTOM_MENDEL_NAME " OK."); ////c=20
const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); //// const char MSG_OFF[] PROGMEM_I1 = ISTR("Off"); ////
const char MSG_ON[] PROGMEM_I1 = ISTR("On"); //// const char MSG_ON[] PROGMEM_I1 = ISTR("On"); ////
const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); //// const char MSG_NA[] PROGMEM_I1 = ISTR("N/A"); ////
const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); //// const char MSG_AUTO_DEPLETE[] PROGMEM_I1 = ISTR("SpoolJoin"); ////
const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); //// const char MSG_CUTTER[] PROGMEM_I1 = ISTR("Cutter"); ////c=9
const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); //// const char MSG_NONE[] PROGMEM_I1 = ISTR("None"); ////
const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); //// const char MSG_WARN[] PROGMEM_I1 = ISTR("Warn"); ////
const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); //// const char MSG_STRICT[] PROGMEM_I1 = ISTR("Strict"); ////
@ -128,16 +128,22 @@ const char MSG_SOUND_BLIND[] PROGMEM_I1 = ISTR("Assist"); ////
const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); //// const char MSG_MESH[] PROGMEM_I1 = ISTR("Mesh"); ////
const char MSG_Z_PROBE_NR[] PROGMEM_I1 = ISTR("Z-probe nr."); //// 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_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); //// const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////c=10
const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); //// const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////c=5
const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); //// const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////c=5
const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); //// const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); ////c=18
const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); //// const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); ////c=12
const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); //// const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); ////c=12
const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); //// const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); ////c=12
const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); //// const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); ////c=6
const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); //// const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); ////c=6
const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); //// const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); ////c=6
#ifdef IR_SENSOR_ANALOG
// Beware - the space at the beginning is necessary since it is reused in LCD menu items which are to be with a space
const char MSG_IR_04_OR_NEWER[] PROGMEM_I1 = ISTR(" 0.4 or newer");////c=18
const char MSG_IR_03_OR_OLDER[] PROGMEM_I1 = ISTR(" 0.3 or older");////c=18
const char MSG_IR_UNKNOWN[] PROGMEM_I1 = ISTR("unknown state");////c=18
#endif
//not internationalized messages //not internationalized messages
const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; //// const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
@ -170,3 +176,4 @@ 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_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20
const char MSG_ADVANCE_K[] PROGMEM_N1 = "Advance K:"; ////c=13 const char MSG_ADVANCE_K[] PROGMEM_N1 = "Advance K:"; ////c=13
const char MSG_POWERPANIC_DETECTED[] PROGMEM_N1 = "POWER PANIC DETECTED"; ////c=20 const char MSG_POWERPANIC_DETECTED[] PROGMEM_N1 = "POWER PANIC DETECTED"; ////c=20
const char MSG_LCD_STATUS_CHANGED[] PROGMEM_N1 = "LCD status changed";

View File

@ -138,6 +138,11 @@ extern const char MSG_TIMEOUT[];
extern const char MSG_BRIGHT[]; extern const char MSG_BRIGHT[];
extern const char MSG_DIM[]; extern const char MSG_DIM[];
extern const char MSG_AUTO[]; extern const char MSG_AUTO[];
#ifdef IR_SENSOR_ANALOG
extern const char MSG_IR_04_OR_NEWER[];
extern const char MSG_IR_03_OR_OLDER[];
extern const char MSG_IR_UNKNOWN[];
#endif
//not internationalized messages //not internationalized messages
extern const char MSG_BROWNOUT_RESET[]; extern const char MSG_BROWNOUT_RESET[];
@ -171,6 +176,7 @@ extern const char MSG_FANCHECK_PRINT[];
extern const char MSG_M112_KILL[]; extern const char MSG_M112_KILL[];
extern const char MSG_ADVANCE_K[]; extern const char MSG_ADVANCE_K[];
extern const char MSG_POWERPANIC_DETECTED[]; extern const char MSG_POWERPANIC_DETECTED[];
extern const char MSG_LCD_STATUS_CHANGED[];
#if defined(__cplusplus) #if defined(__cplusplus)
} }

View File

@ -13,8 +13,9 @@
#include "sound.h" #include "sound.h"
#include "printers.h" #include "printers.h"
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "io_atmega2560.h"
#include "AutoDeplete.h" #include "AutoDeplete.h"
#include "fastio.h"
#include "pins.h"
//-// //-//
#include "util.h" #include "util.h"
@ -28,9 +29,6 @@
#define MMU_P0_TIMEOUT 3000ul //timeout for P0 command: 3seconds #define MMU_P0_TIMEOUT 3000ul //timeout for P0 command: 3seconds
#define MMU_MAX_RESEND_ATTEMPTS 2 #define MMU_MAX_RESEND_ATTEMPTS 2
#ifdef MMU_HWRESET
#define MMU_RST_PIN 76
#endif //MMU_HWRESET
namespace namespace
{ {
@ -156,8 +154,8 @@ void mmu_init(void)
_delay_ms(10); //wait 10ms for sure _delay_ms(10); //wait 10ms for sure
mmu_reset(); //reset mmu (HW or SW), do not wait for response mmu_reset(); //reset mmu (HW or SW), do not wait for response
mmu_state = S::Init; mmu_state = S::Init;
PIN_INP(IR_SENSOR_PIN); //input mode SET_INPUT(IR_SENSOR_PIN); //input mode
PIN_SET(IR_SENSOR_PIN); //pullup WRITE(IR_SENSOR_PIN, 1); //pullup
} }
//if IR_SENSOR defined, always returns true //if IR_SENSOR defined, always returns true
@ -170,7 +168,7 @@ bool check_for_ir_sensor()
bool detected = false; bool detected = false;
//if IR_SENSOR_PIN input is low and pat9125sensor is not present we detected idler sensor //if IR_SENSOR_PIN input is low and pat9125sensor is not present we detected idler sensor
if ((PIN_GET(IR_SENSOR_PIN) == 0) if ((READ(IR_SENSOR_PIN) == 0)
#ifdef PAT9125 #ifdef PAT9125
&& fsensor_not_responding && fsensor_not_responding
#endif //PAT9125 #endif //PAT9125
@ -363,7 +361,7 @@ void mmu_loop(void)
case S::GetFinda: //response to command P0 case S::GetFinda: //response to command P0
if (mmu_idl_sens) if (mmu_idl_sens)
{ {
if (PIN_GET(IR_SENSOR_PIN) == 0 && mmu_loading_flag) if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
{ {
#ifdef MMU_DEBUG #ifdef MMU_DEBUG
printf_P(PSTR("MMU <= 'A'\n")); printf_P(PSTR("MMU <= 'A'\n"));
@ -406,7 +404,7 @@ void mmu_loop(void)
case S::WaitCmd: //response to mmu commands case S::WaitCmd: //response to mmu commands
if (mmu_idl_sens) if (mmu_idl_sens)
{ {
if (PIN_GET(IR_SENSOR_PIN) == 0 && mmu_loading_flag) if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
{ {
DEBUG_PRINTF_P(PSTR("MMU <= 'A'\n")); DEBUG_PRINTF_P(PSTR("MMU <= 'A'\n"));
mmu_puts_P(PSTR("A\n")); //send 'abort' request mmu_puts_P(PSTR("A\n")); //send 'abort' request
@ -540,7 +538,7 @@ void mmu_command(MmuCmd cmd)
void mmu_load_step(bool synchronize) void mmu_load_step(bool synchronize)
{ {
current_position[E_AXIS] = current_position[E_AXIS] + MMU_LOAD_FEEDRATE * 0.1; current_position[E_AXIS] = current_position[E_AXIS] + MMU_LOAD_FEEDRATE * 0.1;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
if (synchronize) st_synchronize(); if (synchronize) st_synchronize();
} }
@ -596,16 +594,16 @@ bool mmu_get_response(uint8_t move)
mmu_loading_flag = true; mmu_loading_flag = true;
if (can_extrude()) mmu_load_step(); if (can_extrude()) mmu_load_step();
//don't rely on "ok" signal from mmu unit; if filament detected by idler sensor during loading stop loading movements to prevent infinite loading //don't rely on "ok" signal from mmu unit; if filament detected by idler sensor during loading stop loading movements to prevent infinite loading
if (PIN_GET(IR_SENSOR_PIN) == 0) move = MMU_NO_MOVE; if (READ(IR_SENSOR_PIN) == 0) move = MMU_NO_MOVE;
break; break;
case MMU_UNLOAD_MOVE: case MMU_UNLOAD_MOVE:
if (PIN_GET(IR_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading if (READ(IR_SENSOR_PIN) == 0) //filament is still detected by idler sensor, printer helps with unlading
{ {
if (can_extrude()) if (can_extrude())
{ {
printf_P(PSTR("Unload 1\n")); printf_P(PSTR("Unload 1\n"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
} }
} }
@ -617,13 +615,13 @@ bool mmu_get_response(uint8_t move)
} }
break; break;
case MMU_TCODE_MOVE: //first do unload and then continue with infinite loading movements case MMU_TCODE_MOVE: //first do unload and then continue with infinite loading movements
if (PIN_GET(IR_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first if (READ(IR_SENSOR_PIN) == 0) //filament detected by idler sensor, we must unload first
{ {
if (can_extrude()) if (can_extrude())
{ {
printf_P(PSTR("Unload 2\n")); printf_P(PSTR("Unload 2\n"));
current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001; current_position[E_AXIS] = current_position[E_AXIS] - MMU_LOAD_FEEDRATE * MMU_LOAD_TIME_MS*0.001;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
} }
} }
@ -701,13 +699,13 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
//lift z //lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT; current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS; if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line_curposXYZE(15, active_extruder); plan_buffer_line_curposXYZE(15);
st_synchronize(); st_synchronize();
//Move XY to side //Move XY to side
current_position[X_AXIS] = X_PAUSE_POS; current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS; current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line_curposXYZE(50, active_extruder); plan_buffer_line_curposXYZE(50);
st_synchronize(); st_synchronize();
} }
if (turn_off_nozzle) { if (turn_off_nozzle) {
@ -758,17 +756,17 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
lcd_display_message_fullscreen_P(_i("MMU OK. Resuming temperature...")); lcd_display_message_fullscreen_P(_i("MMU OK. Resuming temperature..."));
delay_keep_alive(3000); delay_keep_alive(3000);
} }
mmu_wait_for_heater_blocking(); mmu_wait_for_heater_blocking();
} }
if (move_axes) { if (move_axes) {
lcd_clear(); lcd_clear();
lcd_display_message_fullscreen_P(_i("MMU OK. Resuming position...")); lcd_display_message_fullscreen_P(_i("MMU OK. Resuming position..."));
current_position[X_AXIS] = x_position_bckp; current_position[X_AXIS] = x_position_bckp;
current_position[Y_AXIS] = y_position_bckp; current_position[Y_AXIS] = y_position_bckp;
plan_buffer_line_curposXYZE(50, active_extruder); plan_buffer_line_curposXYZE(50);
st_synchronize(); st_synchronize();
current_position[Z_AXIS] = z_position_bckp; current_position[Z_AXIS] = z_position_bckp;
plan_buffer_line_curposXYZE(15, active_extruder); plan_buffer_line_curposXYZE(15);
st_synchronize(); st_synchronize();
} }
else { else {
@ -807,19 +805,19 @@ void mmu_load_to_nozzle()
current_position[E_AXIS] += 7.2f; current_position[E_AXIS] += 7.2f;
} }
float feedrate = 562; float feedrate = 562;
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize(); st_synchronize();
current_position[E_AXIS] += 14.4f; current_position[E_AXIS] += 14.4f;
feedrate = 871; feedrate = 871;
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize(); st_synchronize();
current_position[E_AXIS] += 36.0f; current_position[E_AXIS] += 36.0f;
feedrate = 1393; feedrate = 1393;
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize(); st_synchronize();
current_position[E_AXIS] += 14.4f; current_position[E_AXIS] += 14.4f;
feedrate = 871; feedrate = 871;
plan_buffer_line_curposXYZE(feedrate / 60, active_extruder); plan_buffer_line_curposXYZE(feedrate / 60);
st_synchronize(); st_synchronize();
if (!saved_e_relative_mode) axis_relative_modes &= ~E_AXIS_MASK; if (!saved_e_relative_mode) axis_relative_modes &= ~E_AXIS_MASK;
} }
@ -830,7 +828,7 @@ void mmu_M600_wait_and_beep() {
KEEPALIVE_STATE(PAUSED_FOR_USER); KEEPALIVE_STATE(PAUSED_FOR_USER);
int counterBeep = 0; int counterBeep = 0;
lcd_display_message_fullscreen_P(_i("Remove old filament and press the knob to start loading new filament.")); lcd_display_message_fullscreen_P(_i("Remove old filament and press the knob to start loading new filament.")); ////MSG_REMOVE_OLD_FILAMENT c=20 r=5
bool bFirst=true; bool bFirst=true;
while (!lcd_clicked()){ while (!lcd_clicked()){
@ -1072,7 +1070,7 @@ void mmu_filament_ramming()
for(uint8_t i = 0; i < (sizeof(ramming_sequence)/sizeof(E_step));++i) for(uint8_t i = 0; i < (sizeof(ramming_sequence)/sizeof(E_step));++i)
{ {
current_position[E_AXIS] += pgm_read_float(&(ramming_sequence[i].extrude)); current_position[E_AXIS] += pgm_read_float(&(ramming_sequence[i].extrude));
plan_buffer_line_curposXYZE(pgm_read_float(&(ramming_sequence[i].feed_rate)), active_extruder); plan_buffer_line_curposXYZE(pgm_read_float(&(ramming_sequence[i].feed_rate)));
st_synchronize(); st_synchronize();
} }
} }
@ -1385,7 +1383,7 @@ void mmu_cut_filament(uint8_t filament_nr)
{ {
LcdUpdateDisabler disableLcdUpdate; LcdUpdateDisabler disableLcdUpdate;
lcd_clear(); lcd_clear();
lcd_set_cursor(0, 1); lcd_puts_P(_i("Cutting filament")); //// c=18 r=1 lcd_set_cursor(0, 1); lcd_puts_P(_i("Cutting filament")); //// c=18
lcd_print(" "); lcd_print(" ");
lcd_print(filament_nr + 1); lcd_print(filament_nr + 1);
mmu_filament_ramming(); mmu_filament_ramming();
@ -1446,9 +1444,9 @@ bFilamentAction=false; // NOT in "mmu_fil_eject_menu(
static bool can_load() static bool can_load()
{ {
current_position[E_AXIS] += 60; current_position[E_AXIS] += 60;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
current_position[E_AXIS] -= 52; current_position[E_AXIS] -= 52;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
uint_least8_t filament_detected_count = 0; uint_least8_t filament_detected_count = 0;
@ -1458,9 +1456,9 @@ static bool can_load()
for(uint_least8_t i = 0; i < steps; ++i) for(uint_least8_t i = 0; i < steps; ++i)
{ {
current_position[E_AXIS] -= e_increment; current_position[E_AXIS] -= e_increment;
plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE, active_extruder); plan_buffer_line_curposXYZE(MMU_LOAD_FEEDRATE);
st_synchronize(); st_synchronize();
if(0 == PIN_GET(IR_SENSOR_PIN)) if(0 == READ(IR_SENSOR_PIN))
{ {
++filament_detected_count; ++filament_detected_count;
DEBUG_PUTCHAR('O'); DEBUG_PUTCHAR('O');
@ -1491,7 +1489,7 @@ static bool load_more()
{ {
for (uint8_t i = 0; i < MMU_IDLER_SENSOR_ATTEMPTS_NR; i++) for (uint8_t i = 0; i < MMU_IDLER_SENSOR_ATTEMPTS_NR; i++)
{ {
if (PIN_GET(IR_SENSOR_PIN) == 0) return true; if (READ(IR_SENSOR_PIN) == 0) return true;
DEBUG_PRINTF_P(PSTR("Additional load attempt nr. %d\n"), i); DEBUG_PRINTF_P(PSTR("Additional load attempt nr. %d\n"), i);
mmu_command(MmuCmd::C0); mmu_command(MmuCmd::C0);
manage_response(true, true, MMU_LOAD_MOVE); manage_response(true, true, MMU_LOAD_MOVE);

View File

@ -99,9 +99,11 @@ struct block_t;
extern struct block_t *block_buffer; extern struct block_t *block_buffer;
//! @brief Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory. //! @brief Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory.
void optiboot_w25x20cl_enter() //! @return 1 if "start\n" was not sent. Optiboot was skipped
//! @return 0 if "start\n" was sent. Optiboot ran normally. No need to send "start\n" in setup()
uint8_t optiboot_w25x20cl_enter()
{ {
if (boot_app_flags & BOOT_APP_FLG_USER0) return; if (boot_app_flags & BOOT_APP_FLG_USER0) return 1;
uint8_t ch; uint8_t ch;
uint8_t rampz = 0; uint8_t rampz = 0;
register uint16_t address = 0; register uint16_t address = 0;
@ -120,38 +122,46 @@ void optiboot_w25x20cl_enter()
unsigned long boot_timer = 0; unsigned long boot_timer = 0;
const char *ptr = entry_magic_send; const char *ptr = entry_magic_send;
const char *end = strlen_P(entry_magic_send) + ptr; const char *end = strlen_P(entry_magic_send) + ptr;
// Initialize the serial line. const uint8_t selectedSerialPort_bak = selectedSerialPort;
UCSR0A |= (1 << U2X0);
UBRR0L = (((float)(F_CPU))/(((float)(115200))*8.0)-1.0+0.5);
UCSR0B = (1 << RXEN0) | (1 << TXEN0);
// Flush the serial line. // Flush the serial line.
while (RECV_READY) { while (RECV_READY) {
watchdogReset(); watchdogReset();
// Dummy register read (discard) // Dummy register read (discard)
(void)(*(char *)UDR0); (void)(*(char *)UDR0);
} }
selectedSerialPort = 0; //switch to Serial0
MYSERIAL.flush(); //clear RX buffer
int SerialHead = rx_buffer.head;
// Send the initial magic string. // Send the initial magic string.
while (ptr != end) while (ptr != end)
putch(pgm_read_byte(ptr ++)); putch(pgm_read_byte(ptr ++));
watchdogReset(); watchdogReset();
// Wait for one second until a magic string (constant entry_magic) is received // Wait for two seconds until a magic string (constant entry_magic) is received
// from the serial line. // from the serial line.
ptr = entry_magic_receive; ptr = entry_magic_receive;
end = strlen_P(entry_magic_receive) + ptr; end = strlen_P(entry_magic_receive) + ptr;
while (ptr != end) { while (ptr != end) {
while (! RECV_READY) { while (rx_buffer.head == SerialHead) {
watchdogReset(); watchdogReset();
delayMicroseconds(1); delayMicroseconds(1);
if (++ boot_timer > boot_timeout) if (++ boot_timer > boot_timeout)
{
// Timeout expired, continue with the application. // Timeout expired, continue with the application.
return; selectedSerialPort = selectedSerialPort_bak; //revert Serial setting
return 0;
}
} }
ch = UDR0; ch = rx_buffer.buffer[SerialHead];
SerialHead = (unsigned int)(SerialHead + 1) % RX_BUFFER_SIZE;
if (pgm_read_byte(ptr ++) != ch) if (pgm_read_byte(ptr ++) != ch)
{
// Magic was not received correctly, continue with the application // Magic was not received correctly, continue with the application
return; selectedSerialPort = selectedSerialPort_bak; //revert Serial setting
return 0;
}
watchdogReset(); watchdogReset();
} }
cbi(UCSR0B, RXCIE0); //disable the MarlinSerial0 interrupt
// Send the cfm magic string. // Send the cfm magic string.
ptr = entry_magic_cfm; ptr = entry_magic_cfm;
while (ptr != end) while (ptr != end)

View File

@ -1,6 +1,6 @@
#ifndef OPTIBOOT_W25X20CL_H #ifndef OPTIBOOT_W25X20CL_H
#define OPTIBOOT_W25X20CL_H #define OPTIBOOT_W25X20CL_H
extern void optiboot_w25x20cl_enter(); extern uint8_t optiboot_w25x20cl_enter();
#endif /* OPTIBOOT_W25X20CL_H */ #endif /* OPTIBOOT_W25X20CL_H */

View File

@ -121,6 +121,8 @@
#define IR_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8) #define IR_SENSOR_PIN 62 //idler sensor @PK0 (digital pin 62/A8)
#define MMU_RST_PIN 76
// Support for an 8 bit logic analyzer, for example the Saleae. // Support for an 8 bit logic analyzer, for example the Saleae.
// Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop. // Channels 0-2 are fast, they could generate 2.667Mhz waveform with a software loop.
#define LOGIC_ANALYZER_CH0 X_MIN_PIN // PB6 #define LOGIC_ANALYZER_CH0 X_MIN_PIN // PB6

View File

@ -126,7 +126,7 @@ float extrude_min_temp=EXTRUDE_MINTEMP;
#endif #endif
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
float extruder_advance_K = LIN_ADVANCE_K; float extruder_advance_K = LA_K_DEF;
float position_float[NUM_AXIS]; float position_float[NUM_AXIS];
#endif #endif
@ -226,11 +226,23 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
// Size of Plateau of Nominal Rate. // Size of Plateau of Nominal Rate.
uint32_t plateau_steps = 0; uint32_t plateau_steps = 0;
#ifdef LIN_ADVANCE
uint16_t final_adv_steps = 0;
uint16_t max_adv_steps = 0;
if (block->use_advance_lead) {
final_adv_steps = final_rate * block->adv_comp;
}
#endif
// Is the Plateau of Nominal Rate smaller than nothing? That means no cruising, and we will // Is the Plateau of Nominal Rate smaller than nothing? That means no cruising, and we will
// have to use intersection_distance() to calculate when to abort acceleration and start braking // have to use intersection_distance() to calculate when to abort acceleration and start braking
// in order to reach the final_rate exactly at the end of this block. // in order to reach the final_rate exactly at the end of this block.
if (accel_decel_steps < block->step_event_count.wide) { if (accel_decel_steps < block->step_event_count.wide) {
plateau_steps = block->step_event_count.wide - accel_decel_steps; plateau_steps = block->step_event_count.wide - accel_decel_steps;
#ifdef LIN_ADVANCE
if (block->use_advance_lead)
max_adv_steps = block->nominal_rate * block->adv_comp;
#endif
} else { } else {
uint32_t acceleration_x4 = acceleration << 2; uint32_t acceleration_x4 = acceleration << 2;
// Avoid negative numbers // Avoid negative numbers
@ -263,14 +275,20 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
decelerate_steps = block->step_event_count.wide; decelerate_steps = block->step_event_count.wide;
accelerate_steps = block->step_event_count.wide - decelerate_steps; accelerate_steps = block->step_event_count.wide - decelerate_steps;
} }
}
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
uint16_t final_adv_steps = 0; if (block->use_advance_lead) {
if (block->use_advance_lead) { if(!accelerate_steps || !decelerate_steps) {
final_adv_steps = exit_speed * block->adv_comp; // accelerate_steps=0: deceleration-only ramp, max_rate is effectively unused
} // decelerate_steps=0: acceleration-only ramp, max_rate _is_ final_rate
max_adv_steps = final_adv_steps;
} else {
float max_rate = sqrt(acceleration_x2 * accelerate_steps + initial_rate_sqr);
max_adv_steps = max_rate * block->adv_comp;
}
}
#endif #endif
}
CRITICAL_SECTION_START; // Fill variables used by the stepper in a critical section CRITICAL_SECTION_START; // Fill variables used by the stepper in a critical section
// This block locks the interrupts globally for 4.38 us, // This block locks the interrupts globally for 4.38 us,
@ -284,6 +302,7 @@ void calculate_trapezoid_for_block(block_t *block, float entry_speed, float exit
block->final_rate = final_rate; block->final_rate = final_rate;
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
block->final_adv_steps = final_adv_steps; block->final_adv_steps = final_adv_steps;
block->max_adv_steps = max_adv_steps;
#endif #endif
} }
CRITICAL_SECTION_END; CRITICAL_SECTION_END;
@ -671,8 +690,16 @@ void planner_abort_hard()
waiting_inside_plan_buffer_line_print_aborted = true; waiting_inside_plan_buffer_line_print_aborted = true;
} }
void plan_buffer_line_curposXYZE(float feed_rate, uint8_t extruder) { void plan_buffer_line_curposXYZE(float feed_rate) {
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, extruder ); plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feed_rate, active_extruder );
}
void plan_buffer_line_destinationXYZE(float feed_rate) {
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feed_rate, active_extruder);
}
void plan_set_position_curposXYZE(){
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
} }
float junction_deviation = 0.1; float junction_deviation = 0.1;
@ -1061,20 +1088,28 @@ Having the real displacement of the head, we can calculate the total movement le
/** /**
* Use LIN_ADVANCE within this block if all these are true: * 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. * 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[E_AXIS] >= 0 : Extruding or traveling, but _not_ retracting.
* |delta_mm[Z_AXIS]| < 0.5 : Z is only moved for leveling (_not_ for priming) * |delta_mm[Z_AXIS]| < 0.5 : Z is only moved for leveling (_not_ for priming)
*/ */
block->use_advance_lead = block->steps_e.wide block->use_advance_lead = extruder_advance_K > 0
&& extruder_advance_K && delta_mm[E_AXIS] >= 0
&& delta_mm[E_AXIS] > 0
&& abs(delta_mm[Z_AXIS]) < 0.5; && abs(delta_mm[Z_AXIS]) < 0.5;
if (block->use_advance_lead) { if (block->use_advance_lead) {
e_D_ratio = (e - position_float[E_AXIS]) / #ifdef LA_FLOWADJ
sqrt(sq(x - position_float[X_AXIS]) // M221/FLOW should change uniformly the extrusion thickness
+ sq(y - position_float[Y_AXIS]) float delta_e = (e - position_float[E_AXIS]) / extruder_multiplier[extruder];
+ sq(z - position_float[Z_AXIS])); #else
// M221/FLOW only adjusts for an incorrect source diameter
float delta_e = (e - position_float[E_AXIS]);
#endif
float delta_D = sqrt(sq(x - position_float[X_AXIS])
+ sq(y - position_float[Y_AXIS])
+ sq(z - position_float[Z_AXIS]));
// all extrusion moves with LA require a compression which is proportional to the
// extrusion_length to distance ratio (e/D)
e_D_ratio = delta_e / delta_D;
// Check for unusual high e_D ratio to detect if a retract move was combined with the last // 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 // print move due to min. steps per segment. Never execute this with advance! This assumes
@ -1082,10 +1117,10 @@ Having the real displacement of the head, we can calculate the total movement le
// 100mm wide lines using 3mm filament or 35mm wide lines using 1.75mm filament. // 100mm wide lines using 3mm filament or 35mm wide lines using 1.75mm filament.
if (e_D_ratio > 3.0) if (e_D_ratio > 3.0)
block->use_advance_lead = false; block->use_advance_lead = false;
else { else if (e_D_ratio > 0) {
const uint32_t max_accel_steps_per_s2 = cs.max_jerk[E_AXIS] / (extruder_advance_K * e_D_ratio) * steps_per_mm; const float max_accel_per_s2 = cs.max_jerk[E_AXIS] / (extruder_advance_K * e_D_ratio);
if (block->acceleration_st > max_accel_steps_per_s2) { if (cs.acceleration > max_accel_per_s2) {
block->acceleration_st = max_accel_steps_per_s2; block->acceleration_st = ceil(max_accel_per_s2 * steps_per_mm);
#ifdef LA_DEBUG #ifdef LA_DEBUG
SERIAL_ECHOLNPGM("LA: Block acceleration limited due to max E-jerk"); SERIAL_ECHOLNPGM("LA: Block acceleration limited due to max E-jerk");
#endif #endif
@ -1124,48 +1159,7 @@ Having the real displacement of the head, we can calculate the total movement le
block->acceleration_st = (block->acceleration_st + (bresenham_oversample >> 1)) / bresenham_oversample; block->acceleration_st = (block->acceleration_st + (bresenham_oversample >> 1)) / bresenham_oversample;
#endif #endif
block->acceleration_rate = (long)((float)block->acceleration_st * (16777216.0 / (F_CPU / 8.0))); block->acceleration_rate = ((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. // Start with a safe speed.
// Safe speed is the speed, from which the machine may halt to stop immediately. // Safe speed is the speed, from which the machine may halt to stop immediately.
@ -1292,6 +1286,53 @@ Having the real displacement of the head, we can calculate the total movement le
// Precalculate the division, so when all the trapezoids in the planner queue get recalculated, the division is not repeated. // 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; block->speed_factor = block->nominal_rate / block->nominal_speed;
#ifdef LIN_ADVANCE
if (block->use_advance_lead) {
// calculate the compression ratio for the segment (the required advance steps are computed
// during trapezoid planning)
float adv_comp = extruder_advance_K * e_D_ratio * cs.axis_steps_per_unit[E_AXIS]; // (step/(mm/s))
block->adv_comp = adv_comp / block->speed_factor; // step/(step/min)
float advance_speed;
if (e_D_ratio > 0)
advance_speed = (extruder_advance_K * e_D_ratio * block->acceleration * cs.axis_steps_per_unit[E_AXIS]);
else
advance_speed = cs.max_jerk[E_AXIS] * cs.axis_steps_per_unit[E_AXIS];
// 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)
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
calculate_trapezoid_for_block(block, block->entry_speed, safe_speed); calculate_trapezoid_for_block(block, block->entry_speed, safe_speed);
if (block->step_event_count.wide <= 32767) if (block->step_event_count.wide <= 32767)

View File

@ -73,12 +73,12 @@ typedef struct {
// steps_x.y,z, step_event_count, acceleration_rate, direction_bits and active_extruder are set by plan_buffer_line(). // steps_x.y,z, step_event_count, acceleration_rate, direction_bits and active_extruder are set by plan_buffer_line().
dda_isteps_t steps_x, steps_y, steps_z, steps_e; // Step count along each axis dda_isteps_t steps_x, steps_y, steps_z, steps_e; // Step count along each axis
dda_usteps_t step_event_count; // The number of step events required to complete this block dda_usteps_t step_event_count; // The number of step events required to complete this block
long acceleration_rate; // The acceleration rate used for acceleration calculation uint32_t acceleration_rate; // The acceleration rate used for acceleration calculation
unsigned char direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h) unsigned char direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
unsigned char active_extruder; // Selects the active extruder unsigned char active_extruder; // Selects the active extruder
// accelerate_until and decelerate_after are set by calculate_trapezoid_for_block() and they need to be synchronized with the stepper interrupt controller. // accelerate_until and decelerate_after are set by calculate_trapezoid_for_block() and they need to be synchronized with the stepper interrupt controller.
long accelerate_until; // The index of the step event on which to stop acceleration uint32_t accelerate_until; // The index of the step event on which to stop acceleration
long decelerate_after; // The index of the step event on which to start decelerating uint32_t decelerate_after; // The index of the step event on which to start decelerating
// Fields used by the motion planner to manage acceleration // Fields used by the motion planner to manage acceleration
// float speed_x, speed_y, speed_z, speed_e; // Nominal mm/sec for each axis // float speed_x, speed_y, speed_z, speed_e; // Nominal mm/sec for each axis
@ -100,13 +100,12 @@ typedef struct {
// Settings for the trapezoid generator (runs inside an interrupt handler). // Settings for the trapezoid generator (runs inside an interrupt handler).
// Changing the following values in the planner needs to be synchronized with the interrupt handler by disabling the interrupts. // Changing the following values in the planner needs to be synchronized with the interrupt handler by disabling the interrupts.
//FIXME nominal_rate, initial_rate and final_rate are limited to uint16_t by MultiU24X24toH16 in the stepper interrupt anyway!
unsigned long nominal_rate; // The nominal step rate for this block in step_events/sec unsigned long nominal_rate; // The nominal step rate for this block in step_events/sec
unsigned long initial_rate; // The jerk-adjusted step rate at start of block unsigned long initial_rate; // The jerk-adjusted step rate at start of block
unsigned long final_rate; // The minimal rate at exit unsigned long final_rate; // The minimal rate at exit
unsigned long acceleration_st; // acceleration steps/sec^2 unsigned long acceleration_st; // acceleration steps/sec^2
//FIXME does it have to be unsigned long? Probably uint8_t would be just fine. //FIXME does it have to be int? Probably uint8_t would be just fine. Need to change in other places as well
unsigned long fan_speed; int fan_speed;
volatile char busy; volatile char busy;
@ -154,7 +153,11 @@ vector_3 plan_get_position();
/// plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], ... /// plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[3], ...
/// saves almost 5KB. /// saves almost 5KB.
/// The performance penalty is negligible, since these planned lines are usually maintenance moves with the extruder. /// 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_curposXYZE(float feed_rate);
void plan_buffer_line_destinationXYZE(float feed_rate);
void plan_set_position_curposXYZE();
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(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); //void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);

View File

@ -80,15 +80,21 @@ asm volatile ( \
#else //_NO_ASM #else //_NO_ASM
// NOTE: currently not implemented static inline void MultiU16X8toH16(uint16_t& intRes, uint8_t& charIn1, uint16_t& intIn2)
void MultiU16X8toH16(unsigned short& intRes, unsigned char& charIn1, unsigned short& intIn2); {
void MultiU24X24toH16(uint16_t& intRes, int32_t& longIn1, long& longIn2); intRes = ((uint32_t)charIn1 * (uint32_t)intIn2) >> 16;
}
static inline void MultiU24X24toH16(uint16_t& intRes, uint32_t& longIn1, uint32_t& longIn2)
{
intRes = ((uint64_t)longIn1 * (uint64_t)longIn2) >> 24;
}
#endif //_NO_ASM #endif //_NO_ASM
FORCE_INLINE unsigned short calc_timer(uint16_t step_rate, uint8_t& step_loops) { FORCE_INLINE unsigned short calc_timer(uint16_t step_rate, uint8_t& step_loops) {
unsigned short timer; uint16_t timer;
if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY; if(step_rate > MAX_STEP_FREQUENCY) step_rate = MAX_STEP_FREQUENCY;
if(step_rate > 20000) { // If steprate > 20kHz >> step 4 times if(step_rate > 20000) { // If steprate > 20kHz >> step 4 times
@ -108,7 +114,7 @@ FORCE_INLINE unsigned short calc_timer(uint16_t step_rate, uint8_t& step_loops)
if(step_rate >= (8*256)){ // higher step rate if(step_rate >= (8*256)){ // higher step rate
unsigned short table_address = (unsigned short)&speed_lookuptable_fast[(unsigned char)(step_rate>>8)][0]; unsigned short table_address = (unsigned short)&speed_lookuptable_fast[(unsigned char)(step_rate>>8)][0];
unsigned char tmp_step_rate = (step_rate & 0x00ff); unsigned char tmp_step_rate = (step_rate & 0x00ff);
unsigned short gain = (unsigned short)pgm_read_word_near(table_address+2); uint16_t gain = (uint16_t)pgm_read_word_near(table_address+2);
MultiU16X8toH16(timer, tmp_step_rate, gain); MultiU16X8toH16(timer, tmp_step_rate, gain);
timer = (unsigned short)pgm_read_word_near(table_address) - timer; timer = (unsigned short)pgm_read_word_near(table_address) - timer;
} }

View File

@ -71,8 +71,7 @@ static dda_isteps_t
counter_z, counter_z,
counter_e; counter_e;
volatile dda_usteps_t step_events_completed; // The number of step events executed in the current block volatile dda_usteps_t step_events_completed; // The number of step events executed in the current block
static int32_t acceleration_time, deceleration_time; static uint32_t acceleration_time, deceleration_time;
//static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate;
static uint16_t acc_step_rate; // needed for deccelaration start point static uint16_t acc_step_rate; // needed for deccelaration start point
static uint8_t step_loops; static uint8_t step_loops;
static uint16_t OCR1A_nominal; static uint16_t OCR1A_nominal;
@ -117,24 +116,23 @@ volatile signed char count_direction[NUM_AXIS] = { 1, 1, 1, 1};
void advance_isr(); void advance_isr();
static const uint16_t ADV_NEVER = 0xFFFF; static const uint16_t ADV_NEVER = 0xFFFF;
static const uint8_t ADV_INIT = 0b01; static const uint8_t ADV_INIT = 0b01; // initialize LA
static const uint8_t ADV_DECELERATE = 0b10; static const uint8_t ADV_ACC_VARY = 0b10; // varying acceleration phase
static uint16_t nextMainISR; static uint16_t nextMainISR;
static uint16_t nextAdvanceISR; static uint16_t nextAdvanceISR;
static uint16_t main_Rate; static uint16_t main_Rate;
static uint16_t eISR_Rate; static uint16_t eISR_Rate;
static uint16_t eISR_Err; static uint32_t eISR_Err;
static uint16_t current_adv_steps; static uint16_t current_adv_steps;
static uint16_t final_adv_steps; static uint16_t target_adv_steps;
static uint16_t max_adv_steps;
static uint32_t LA_decelerate_after;
static int8_t e_steps; static int8_t e_steps; // scheduled e-steps during each isr loop
static uint8_t e_step_loops; static uint8_t e_step_loops; // e-steps to execute at most in each isr loop
static int8_t LA_phase; static uint8_t e_extruding; // current move is an extrusion move
static int8_t LA_phase; // LA compensation phase
#define _NEXT_ISR(T) main_Rate = nextMainISR = T #define _NEXT_ISR(T) main_Rate = nextMainISR = T
#else #else
@ -235,7 +233,7 @@ void invert_z_endstop(bool endstop_invert)
// The trapezoid is the shape the speed curve over time. It starts at block->initial_rate, accelerates // The trapezoid is the shape the speed curve over time. It starts at block->initial_rate, accelerates
// first block->accelerate_until step_events_completed, then keeps going at constant speed until // first block->accelerate_until step_events_completed, then keeps going at constant speed until
// step_events_completed reaches block->decelerate_after after which it decelerates until the trapezoid generator is reset. // 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. // The slope of acceleration is calculated using v = u + at where t is the accumulated timer values of the steps so far.
// "The Stepper Driver Interrupt" - This timer interrupt is the workhorse. // "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. // It pops blocks from the block_buffer and executes them by pulsing the stepper pins appropriately.
@ -349,15 +347,9 @@ FORCE_INLINE void stepper_next_block()
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
if (current_block->use_advance_lead) { if (current_block->use_advance_lead) {
LA_decelerate_after = current_block->decelerate_after; target_adv_steps = current_block->max_adv_steps;
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;
} }
e_steps = 0;
nextAdvanceISR = ADV_NEVER; nextAdvanceISR = ADV_NEVER;
LA_phase = -1; LA_phase = -1;
#endif #endif
@ -371,11 +363,17 @@ FORCE_INLINE void stepper_next_block()
counter_y.lo = counter_x.lo; counter_y.lo = counter_x.lo;
counter_z.lo = counter_x.lo; counter_z.lo = counter_x.lo;
counter_e.lo = counter_x.lo; counter_e.lo = counter_x.lo;
#ifdef LIN_ADVANCE
e_extruding = current_block->steps_e.lo != 0;
#endif
} else { } else {
counter_x.wide = -(current_block->step_event_count.wide >> 1); counter_x.wide = -(current_block->step_event_count.wide >> 1);
counter_y.wide = counter_x.wide; counter_y.wide = counter_x.wide;
counter_z.wide = counter_x.wide; counter_z.wide = counter_x.wide;
counter_e.wide = counter_x.wide; counter_e.wide = counter_x.wide;
#ifdef LIN_ADVANCE
e_extruding = current_block->steps_e.wide != 0;
#endif
} }
step_events_completed.wide = 0; step_events_completed.wide = 0;
// Set directions. // Set directions.
@ -734,38 +732,30 @@ FORCE_INLINE uint16_t fastdiv(uint16_t q, uint8_t d)
FORCE_INLINE void advance_spread(uint16_t timer) FORCE_INLINE void advance_spread(uint16_t timer)
{ {
if(eISR_Err > timer) eISR_Err += timer;
uint8_t ticks = 0;
while(eISR_Err >= current_block->advance_rate)
{
++ticks;
eISR_Err -= current_block->advance_rate;
}
if(!ticks)
{ {
// advance-step skipped
eISR_Err -= timer;
eISR_Rate = timer; eISR_Rate = timer;
nextAdvanceISR = timer; nextAdvanceISR = timer;
return; return;
} }
// at least one step if (ticks <= 3)
uint8_t ticks = 1; eISR_Rate = fastdiv(timer, 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 else
{ {
// >4 ticks are still possible on slow moves // >4 ticks are still possible on slow moves
eISR_Rate = timer / ticks; eISR_Rate = timer / (ticks + 1);
} }
nextAdvanceISR = eISR_Rate / 2; nextAdvanceISR = eISR_Rate;
} }
#endif #endif
@ -797,7 +787,7 @@ FORCE_INLINE void isr() {
// 25.12us for acceleration / deceleration. // 25.12us for acceleration / deceleration.
{ {
//WRITE_NC(LOGIC_ANALYZER_CH1, true); //WRITE_NC(LOGIC_ANALYZER_CH1, true);
if (step_events_completed.wide <= (unsigned long int)current_block->accelerate_until) { if (step_events_completed.wide <= current_block->accelerate_until) {
// v = t * a -> acc_step_rate = acceleration_time * current_block->acceleration_rate // v = t * a -> acc_step_rate = acceleration_time * current_block->acceleration_rate
MultiU24X24toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate); MultiU24X24toH16(acc_step_rate, acceleration_time, current_block->acceleration_rate);
acc_step_rate += uint16_t(current_block->initial_rate); acc_step_rate += uint16_t(current_block->initial_rate);
@ -810,28 +800,42 @@ FORCE_INLINE void isr() {
acceleration_time += timer; acceleration_time += timer;
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
if (current_block->use_advance_lead) { if (current_block->use_advance_lead) {
if (step_events_completed.wide <= (unsigned long int)step_loops) if (step_events_completed.wide <= (unsigned long int)step_loops) {
la_state = ADV_INIT; la_state = ADV_INIT | ADV_ACC_VARY;
if (e_extruding && current_adv_steps > target_adv_steps)
target_adv_steps = current_adv_steps;
}
} }
#endif #endif
} }
else if (step_events_completed.wide > (unsigned long int)current_block->decelerate_after) { else if (step_events_completed.wide > current_block->decelerate_after) {
uint16_t step_rate; uint16_t step_rate;
MultiU24X24toH16(step_rate, deceleration_time, current_block->acceleration_rate); MultiU24X24toH16(step_rate, deceleration_time, current_block->acceleration_rate);
step_rate = acc_step_rate - step_rate; // Decelerate from aceleration end point.
if ((step_rate & 0x8000) || step_rate < uint16_t(current_block->final_rate)) { if (step_rate > acc_step_rate) { // Check step_rate stays positive
// Result is negative or too small. step_rate = uint16_t(current_block->final_rate);
step_rate = uint16_t(current_block->final_rate);
} }
else {
step_rate = acc_step_rate - step_rate; // Decelerate from acceleration end point.
// lower limit
if (step_rate < current_block->final_rate)
step_rate = uint16_t(current_block->final_rate);
}
// Step_rate to timer interval. // Step_rate to timer interval.
uint16_t timer = calc_timer(step_rate, step_loops); uint16_t timer = calc_timer(step_rate, step_loops);
_NEXT_ISR(timer); _NEXT_ISR(timer);
deceleration_time += timer; deceleration_time += timer;
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
if (current_block->use_advance_lead) { if (current_block->use_advance_lead) {
la_state = ADV_DECELERATE; if (step_events_completed.wide <= current_block->decelerate_after + step_loops) {
if (step_events_completed.wide <= (unsigned long int)current_block->decelerate_after + step_loops) target_adv_steps = current_block->final_adv_steps;
la_state |= ADV_INIT; la_state = ADV_INIT | ADV_ACC_VARY;
if (e_extruding && current_adv_steps < target_adv_steps)
target_adv_steps = current_adv_steps;
}
} }
#endif #endif
} }
@ -841,6 +845,17 @@ FORCE_INLINE void isr() {
// the initial interrupt blocking. // the initial interrupt blocking.
OCR1A_nominal = calc_timer(uint16_t(current_block->nominal_rate), step_loops); OCR1A_nominal = calc_timer(uint16_t(current_block->nominal_rate), step_loops);
step_loops_nominal = step_loops; step_loops_nominal = step_loops;
#ifdef LIN_ADVANCE
if(current_block->use_advance_lead) {
// Due to E-jerk, there can be discontinuities in pressure state where an
// acceleration or deceleration can be skipped or joined with the previous block.
// If LA was not previously active, re-check the pressure level
la_state = ADV_INIT;
if (e_extruding)
target_adv_steps = current_adv_steps;
}
#endif
} }
_NEXT_ISR(OCR1A_nominal); _NEXT_ISR(OCR1A_nominal);
} }
@ -849,16 +864,38 @@ FORCE_INLINE void isr() {
#ifdef LIN_ADVANCE #ifdef LIN_ADVANCE
// avoid multiple instances or function calls to advance_spread // 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) {
LA_phase = -1;
if (current_adv_steps == target_adv_steps) {
// nothing to be done in this phase, cancel any pending eisr
la_state = 0;
nextAdvanceISR = ADV_NEVER;
}
else {
// reset error and iterations per loop for this phase
eISR_Err = current_block->advance_rate;
e_step_loops = current_block->advance_step_loops;
if ((la_state & ADV_ACC_VARY) && e_extruding && (current_adv_steps > target_adv_steps)) {
// LA could reverse the direction of extrusion in this phase
eISR_Err += current_block->advance_rate;
LA_phase = 0;
}
}
}
if (la_state & ADV_INIT || nextAdvanceISR != ADV_NEVER) { if (la_state & ADV_INIT || nextAdvanceISR != ADV_NEVER) {
// update timers & phase for the next iteration
advance_spread(main_Rate); advance_spread(main_Rate);
if (la_state & ADV_DECELERATE) { if (LA_phase >= 0) {
if (step_loops == e_step_loops) if (step_loops == e_step_loops)
LA_phase = (eISR_Rate > main_Rate); LA_phase = (current_block->advance_rate < main_Rate);
else { else {
// avoid overflow through division. warning: we need to _guarantee_ step_loops // avoid overflow through division. warning: we need to _guarantee_ step_loops
// and e_step_loops are <= 4 due to fastdiv's limit // and e_step_loops are <= 4 due to fastdiv's limit
LA_phase = (fastdiv(eISR_Rate, step_loops) > fastdiv(main_Rate, e_step_loops)); auto adv_rate_n = fastdiv(current_block->advance_rate, step_loops);
auto main_rate_n = fastdiv(main_Rate, e_step_loops);
LA_phase = (adv_rate_n < main_rate_n);
} }
} }
} }
@ -898,28 +935,36 @@ FORCE_INLINE void isr() {
// Timer interrupt for E. e_steps is set in the main routine. // Timer interrupt for E. e_steps is set in the main routine.
FORCE_INLINE void advance_isr() { FORCE_INLINE void advance_isr() {
if (step_events_completed.wide > LA_decelerate_after && current_adv_steps > final_adv_steps) { if (current_adv_steps > target_adv_steps) {
// decompression // decompression
if (e_step_loops != 1) {
uint16_t d_steps = current_adv_steps - target_adv_steps;
if (d_steps < e_step_loops)
e_step_loops = d_steps;
}
e_steps -= e_step_loops; e_steps -= e_step_loops;
if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR); 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;
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) { else if (current_adv_steps < target_adv_steps) {
// compression // compression
if (e_step_loops != 1) {
uint16_t d_steps = target_adv_steps - current_adv_steps;
if (d_steps < e_step_loops)
e_step_loops = d_steps;
}
e_steps += e_step_loops; e_steps += e_step_loops;
if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR); if (e_steps) WRITE_NC(E0_DIR_PIN, e_steps < 0? INVERT_E0_DIR: !INVERT_E0_DIR);
current_adv_steps += e_step_loops; current_adv_steps += e_step_loops;
nextAdvanceISR = eISR_Rate;
} }
else {
if (current_adv_steps == target_adv_steps) {
// advance steps completed // advance steps completed
nextAdvanceISR = ADV_NEVER; nextAdvanceISR = ADV_NEVER;
LA_phase = -1; }
e_step_loops = 1; else {
// schedule another tick
nextAdvanceISR = eISR_Rate;
} }
} }
@ -989,7 +1034,7 @@ FORCE_INLINE void advance_isr_scheduler() {
// Schedule the next closest tick, ignoring advance if scheduled too // Schedule the next closest tick, ignoring advance if scheduled too
// soon in order to avoid skewing the regular stepper acceleration // soon in order to avoid skewing the regular stepper acceleration
if (nextAdvanceISR != ADV_NEVER && (nextAdvanceISR + TCNT1 + 40) < nextMainISR) if (nextAdvanceISR != ADV_NEVER && (nextAdvanceISR + 40) < nextMainISR)
OCR1A = nextAdvanceISR; OCR1A = nextAdvanceISR;
else else
OCR1A = nextMainISR; OCR1A = nextMainISR;
@ -1233,9 +1278,6 @@ void st_init()
nextMainISR = 0; nextMainISR = 0;
nextAdvanceISR = ADV_NEVER; nextAdvanceISR = ADV_NEVER;
main_Rate = ADV_NEVER; main_Rate = ADV_NEVER;
e_steps = 0;
e_step_loops = 1;
LA_phase = -1;
current_adv_steps = 0; current_adv_steps = 0;
#endif #endif
@ -1331,17 +1373,6 @@ float st_get_position_mm(uint8_t axis)
} }
void finishAndDisableSteppers()
{
st_synchronize();
disable_x();
disable_y();
disable_z();
disable_e0();
disable_e1();
disable_e2();
}
void quickStop() void quickStop()
{ {
DISABLE_STEPPER_DRIVER_INTERRUPT(); DISABLE_STEPPER_DRIVER_INTERRUPT();

View File

@ -69,8 +69,6 @@ void invert_z_endstop(bool endstop_invert);
void checkStepperErrors(); //Print errors detected by the stepper void checkStepperErrors(); //Print errors detected by the stepper
void finishAndDisableSteppers();
extern block_t *current_block; // A pointer to the block currently being traced extern block_t *current_block; // A pointer to the block currently being traced
extern bool x_min_endstop; extern bool x_min_endstop;
extern bool x_max_endstop; extern bool x_max_endstop;

View File

@ -3,9 +3,10 @@
#include <avr/io.h> #include <avr/io.h>
#include <util/delay.h> #include <util/delay.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "stdbool.h"
#include "Configuration_prusa.h" #include "Configuration_prusa.h"
#include "pins.h" #include "pins.h"
#include "io_atmega2560.h" #include "fastio.h"
#define SWI2C_RMSK 0x01 //read mask (bit0 = 1) #define SWI2C_RMSK 0x01 //read mask (bit0 = 1)
@ -21,75 +22,75 @@ void __delay(void)
void swi2c_init(void) void swi2c_init(void)
{ {
PIN_OUT(SWI2C_SDA); WRITE(SWI2C_SDA, 1);
PIN_OUT(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
PIN_SET(SWI2C_SDA); SET_OUTPUT(SWI2C_SDA);
PIN_SET(SWI2C_SCL); SET_OUTPUT(SWI2C_SCL);
uint8_t i; for (i = 0; i < 100; i++) uint8_t i; for (i = 0; i < 100; i++)
__delay(); __delay();
} }
void swi2c_start(void) void swi2c_start(void)
{ {
PIN_CLR(SWI2C_SDA); WRITE(SWI2C_SDA, 0);
__delay(); __delay();
PIN_CLR(SWI2C_SCL); WRITE(SWI2C_SCL, 0);
__delay(); __delay();
} }
void swi2c_stop(void) void swi2c_stop(void)
{ {
PIN_SET(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
__delay(); __delay();
PIN_SET(SWI2C_SDA); WRITE(SWI2C_SDA, 1);
__delay(); __delay();
} }
void swi2c_ack(void) void swi2c_ack(void)
{ {
PIN_CLR(SWI2C_SDA); WRITE(SWI2C_SDA, 0);
__delay(); __delay();
PIN_SET(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
__delay(); __delay();
PIN_CLR(SWI2C_SCL); WRITE(SWI2C_SCL, 0);
__delay(); __delay();
} }
uint8_t swi2c_wait_ack() uint8_t swi2c_wait_ack()
{ {
PIN_INP(SWI2C_SDA); SET_INPUT(SWI2C_SDA);
__delay(); __delay();
// PIN_SET(SWI2C_SDA); // WRITE(SWI2C_SDA, 1);
__delay(); __delay();
PIN_SET(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
// __delay(); // __delay();
uint8_t ack = 0; uint8_t ack = 0;
uint16_t ackto = SWI2C_TMO; uint16_t ackto = SWI2C_TMO;
while (!(ack = (PIN_GET(SWI2C_SDA)?0:1)) && ackto--) __delay(); while (!(ack = (!READ(SWI2C_SDA))) && ackto--) __delay();
PIN_CLR(SWI2C_SCL); WRITE(SWI2C_SCL, 0);
__delay(); __delay();
PIN_OUT(SWI2C_SDA); SET_OUTPUT(SWI2C_SDA);
__delay(); __delay();
PIN_CLR(SWI2C_SDA); WRITE(SWI2C_SDA, 0);
__delay(); __delay();
return ack; return ack;
} }
uint8_t swi2c_read(void) uint8_t swi2c_read(void)
{ {
PIN_SET(SWI2C_SDA); WRITE(SWI2C_SDA, 1);
__delay(); __delay();
PIN_INP(SWI2C_SDA); SET_INPUT(SWI2C_SDA);
uint8_t data = 0; uint8_t data = 0;
int8_t bit; for (bit = 7; bit >= 0; bit--) int8_t bit; for (bit = 7; bit >= 0; bit--)
{ {
PIN_SET(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
__delay(); __delay();
data |= (PIN_GET(SWI2C_SDA)?1:0) << bit; data |= (READ(SWI2C_SDA)) << bit;
PIN_CLR(SWI2C_SCL); WRITE(SWI2C_SCL, 0);
__delay(); __delay();
} }
PIN_OUT(SWI2C_SDA); SET_OUTPUT(SWI2C_SDA);
return data; return data;
} }
@ -97,12 +98,11 @@ void swi2c_write(uint8_t data)
{ {
int8_t bit; for (bit = 7; bit >= 0; bit--) int8_t bit; for (bit = 7; bit >= 0; bit--)
{ {
if (data & (1 << bit)) PIN_SET(SWI2C_SDA); WRITE(SWI2C_SDA, data & _BV(bit));
else PIN_CLR(SWI2C_SDA);
__delay(); __delay();
PIN_SET(SWI2C_SCL); WRITE(SWI2C_SCL, 1);
__delay(); __delay();
PIN_CLR(SWI2C_SCL); WRITE(SWI2C_SCL, 0);
__delay(); __delay();
} }
} }

View File

@ -8,11 +8,12 @@
#ifdef SYSTEM_TIMER_2 #ifdef SYSTEM_TIMER_2
#include "timer02.h" #include "timer02.h"
#include "tone04.h"
#define _millis millis2 #define _millis millis2
#define _micros micros2 #define _micros micros2
#define _delay delay2 #define _delay delay2
#define _tone tone #define _tone tone4
#define _noTone noTone #define _noTone noTone4
#define timer02_set_pwm0(pwm0) #define timer02_set_pwm0(pwm0)

View File

@ -74,7 +74,7 @@ int current_voltage_raw_bed = 0;
#endif #endif
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
int current_voltage_raw_IR = 0; uint16_t current_voltage_raw_IR = 0;
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
int current_temperature_bed_raw = 0; int current_temperature_bed_raw = 0;
@ -143,13 +143,21 @@ static volatile bool temp_meas_ready = false;
#ifdef FAN_SOFT_PWM #ifdef FAN_SOFT_PWM
static unsigned char soft_pwm_fan; static unsigned char soft_pwm_fan;
#endif #endif
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
unsigned long extruder_autofan_last_check = _millis();
uint8_t fanSpeedBckp = 255;
bool fan_measuring = false;
uint8_t fanSpeedBckp = 255;
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
unsigned long extruder_autofan_last_check = _millis();
bool fan_measuring = false;
uint8_t fanState = 0;
#ifdef EXTRUDER_ALTFAN_DETECT
struct
{
uint8_t isAltfan : 1;
uint8_t altfanOverride : 1;
} altfanStatus;
#endif //EXTRUDER_ALTFAN_DETECT
#endif #endif
@ -176,6 +184,12 @@ static int bed_minttemp_raw = HEATER_BED_RAW_LO_TEMP;
#ifdef BED_MAXTEMP #ifdef BED_MAXTEMP
static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP; static int bed_maxttemp_raw = HEATER_BED_RAW_HI_TEMP;
#endif #endif
#ifdef AMBIENT_MINTEMP
static int ambient_minttemp_raw = AMBIENT_RAW_LO_TEMP;
#endif
#ifdef AMBIENT_MAXTEMP
static int ambient_maxttemp_raw = AMBIENT_RAW_HI_TEMP;
#endif
static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE ); static void *heater_ttbl_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( (void *)HEATER_0_TEMPTABLE, (void *)HEATER_1_TEMPTABLE, (void *)HEATER_2_TEMPTABLE );
static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN ); static uint8_t heater_ttbllen_map[EXTRUDERS] = ARRAY_BY_EXTRUDERS( HEATER_0_TEMPTABLE_LEN, HEATER_1_TEMPTABLE_LEN, HEATER_2_TEMPTABLE_LEN );
@ -210,6 +224,56 @@ static void temp_runaway_check(int _heater_id, float _target_temperature, float
static void temp_runaway_stop(bool isPreheat, bool isBed); static void temp_runaway_stop(bool isPreheat, bool isBed);
#endif #endif
#ifdef EXTRUDER_ALTFAN_DETECT
ISR(INT6_vect) {
fan_edge_counter[0]++;
}
bool extruder_altfan_detect()
{
setExtruderAutoFanState(3);
SET_INPUT(TACH_0);
uint8_t overrideVal = eeprom_read_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE);
if (overrideVal == EEPROM_EMPTY_VALUE)
{
overrideVal = (calibration_status() == CALIBRATION_STATUS_CALIBRATED) ? 1 : 0;
eeprom_update_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE, overrideVal);
}
altfanStatus.altfanOverride = overrideVal;
CRITICAL_SECTION_START;
EICRB &= ~(1 << ISC61);
EICRB |= (1 << ISC60);
EIMSK |= (1 << INT6);
fan_edge_counter[0] = 0;
CRITICAL_SECTION_END;
extruder_autofan_last_check = _millis();
_delay(1000);
EIMSK &= ~(1 << INT6);
countFanSpeed();
altfanStatus.isAltfan = fan_speed[0] > 100;
setExtruderAutoFanState(1);
return altfanStatus.isAltfan;
}
void altfanOverride_toggle()
{
altfanStatus.altfanOverride = !altfanStatus.altfanOverride;
eeprom_update_byte((uint8_t *)EEPROM_ALTFAN_OVERRIDE, altfanStatus.altfanOverride);
}
bool altfanOverride_get()
{
return altfanStatus.altfanOverride;
}
#endif //EXTRUDER_ALTFAN_DETECT
// return "false", if all extruder-heaters are 'off' (ie. "true", if any heater is 'on') // return "false", if all extruder-heaters are 'off' (ie. "true", if any heater is 'on')
bool checkAllHotends(void) bool checkAllHotends(void)
{ {
@ -239,9 +303,7 @@ bool checkAllHotends(void)
const uint8_t safety_check_cycles_count = (extruder < 0) ? 45 : 10; //10 cycles / 20s delay for extruder and 45 cycles / 90s for heatbed const uint8_t safety_check_cycles_count = (extruder < 0) ? 45 : 10; //10 cycles / 20s delay for extruder and 45 cycles / 90s for heatbed
float temp_ambient; float temp_ambient;
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
unsigned long extruder_autofan_last_check = _millis(); unsigned long extruder_autofan_last_check = _millis();
#endif #endif
@ -289,9 +351,7 @@ bool checkAllHotends(void)
max=max(max,input); max=max(max,input);
min=min(min,input); min=min(min,input);
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
if(_millis() - extruder_autofan_last_check > 2500) { if(_millis() - extruder_autofan_last_check > 2500) {
checkExtruderAutoFans(); checkExtruderAutoFans();
extruder_autofan_last_check = _millis(); extruder_autofan_last_check = _millis();
@ -447,29 +507,31 @@ int getHeaterPower(int heater) {
return soft_pwm[heater]; return soft_pwm[heater];
} }
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
#if defined(FAN_PIN) && FAN_PIN > -1 #if defined(FAN_PIN) && FAN_PIN > -1
#if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN #if EXTRUDER_0_AUTO_FAN_PIN == FAN_PIN
#error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN" #error "You cannot set EXTRUDER_0_AUTO_FAN_PIN equal to FAN_PIN"
#endif #endif
#if EXTRUDER_1_AUTO_FAN_PIN == FAN_PIN
#error "You cannot set EXTRUDER_1_AUTO_FAN_PIN equal to FAN_PIN"
#endif
#if EXTRUDER_2_AUTO_FAN_PIN == FAN_PIN
#error "You cannot set EXTRUDER_2_AUTO_FAN_PIN equal to FAN_PIN"
#endif
#endif #endif
void setExtruderAutoFanState(int pin, bool state) void setExtruderAutoFanState(uint8_t state)
{ {
unsigned char newFanSpeed = (state != 0) ? EXTRUDER_AUTO_FAN_SPEED : 0; //If bit 1 is set (0x02), then the extruder fan speed won't be adjusted according to temperature. Useful for forcing
// this idiom allows both digital and PWM fan outputs (see M42 handling). //the fan to either On or Off during certain tests/errors.
pinMode(pin, OUTPUT);
digitalWrite(pin, newFanSpeed); fanState = state;
//analogWrite(pin, newFanSpeed); uint8_t newFanSpeed = 0;
if (fanState & 0x01)
{
#ifdef EXTRUDER_ALTFAN_DETECT
if (altfanStatus.isAltfan && !altfanStatus.altfanOverride) newFanSpeed = EXTRUDER_ALTFAN_SPEED_SILENT;
else newFanSpeed = EXTRUDER_AUTO_FAN_SPEED;
#else //EXTRUDER_ALTFAN_DETECT
newFanSpeed = EXTRUDER_AUTO_FAN_SPEED;
#endif //EXTRUDER_ALTFAN_DETECT
}
timer4_set_fan0(newFanSpeed);
} }
#if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1))))) #if (defined(FANCHECK) && (((defined(TACH_0) && (TACH_0 >-1)) || (defined(TACH_1) && (TACH_1 > -1)))))
@ -503,7 +565,7 @@ void checkFanSpeed()
fans_check_enabled = (eeprom_read_byte((uint8_t*)EEPROM_FAN_CHECK_ENABLED) > 0); fans_check_enabled = (eeprom_read_byte((uint8_t*)EEPROM_FAN_CHECK_ENABLED) > 0);
static unsigned char fan_speed_errors[2] = { 0,0 }; static unsigned char fan_speed_errors[2] = { 0,0 };
#if (defined(FANCHECK) && defined(TACH_0) && (TACH_0 >-1)) #if (defined(FANCHECK) && defined(TACH_0) && (TACH_0 >-1))
if ((fan_speed[0] == 0) && (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE)){ fan_speed_errors[0]++;} if ((fan_speed[0] < 20) && (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE)){ fan_speed_errors[0]++;}
else{ else{
fan_speed_errors[0] = 0; fan_speed_errors[0] = 0;
host_keepalive(); host_keepalive();
@ -577,47 +639,14 @@ void fanSpeedError(unsigned char _fan) {
void checkExtruderAutoFans() void checkExtruderAutoFans()
{ {
uint8_t fanState = 0; #if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
if (!(fanState & 0x02))
// which fan pins need to be turned on? {
#if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1 fanState &= ~1;
if (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE) fanState |= current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE;
fanState |= 1; }
#endif setExtruderAutoFanState(fanState);
#if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1 #endif
if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE)
{
if (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
fanState |= 1;
else
fanState |= 2;
}
#endif
#if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1
if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE)
{
if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
fanState |= 1;
else if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN)
fanState |= 2;
else
fanState |= 4;
}
#endif
// update extruder auto fan states
#if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
setExtruderAutoFanState(EXTRUDER_0_AUTO_FAN_PIN, (fanState & 1) != 0);
#endif
#if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1
if (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN)
setExtruderAutoFanState(EXTRUDER_1_AUTO_FAN_PIN, (fanState & 2) != 0);
#endif
#if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1
if (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN
&& EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN)
setExtruderAutoFanState(EXTRUDER_2_AUTO_FAN_PIN, (fanState & 4) != 0);
#endif
} }
#endif // any extruder auto fan pins set #endif // any extruder auto fan pins set
@ -641,6 +670,7 @@ void manage_heater()
return; return;
// more precisely - this condition partially stabilizes time interval for regulation values evaluation (@ ~ 230ms) // more precisely - this condition partially stabilizes time interval for regulation values evaluation (@ ~ 230ms)
// ADC values need to be converted before checking: converted values are later used in MINTEMP
updateTemperaturesFromRawValues(); updateTemperaturesFromRawValues();
check_max_temp(); check_max_temp();
@ -737,9 +767,7 @@ void manage_heater()
#define FAN_CHECK_DURATION 100 //100ms #define FAN_CHECK_DURATION 100 //100ms
#ifndef DEBUG_DISABLE_FANCHECK #ifndef DEBUG_DISABLE_FANCHECK
#if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1) || \ #if (defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1)
(defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1) || \
(defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1)
#ifdef FAN_SOFT_PWM #ifdef FAN_SOFT_PWM
#ifdef FANCHECK #ifdef FANCHECK
@ -1100,6 +1128,8 @@ void tp_init()
OCR2B = 128; OCR2B = 128;
TIMSK2 |= (1<<OCIE2B); TIMSK2 |= (1<<OCIE2B);
timer4_init(); //for tone and Extruder fan PWM
// Wait for temperature measurement to settle // Wait for temperature measurement to settle
_delay(250); _delay(250);
@ -1167,7 +1197,6 @@ void tp_init()
#endif //MAXTEMP 2 #endif //MAXTEMP 2
#ifdef BED_MINTEMP #ifdef BED_MINTEMP
/* No bed MINTEMP error implemented?!? */
while(analog2tempBed(bed_minttemp_raw) < BED_MINTEMP) { while(analog2tempBed(bed_minttemp_raw) < BED_MINTEMP) {
#if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP #if HEATER_BED_RAW_LO_TEMP < HEATER_BED_RAW_HI_TEMP
bed_minttemp_raw += OVERSAMPLENR; bed_minttemp_raw += OVERSAMPLENR;
@ -1175,7 +1204,6 @@ void tp_init()
bed_minttemp_raw -= OVERSAMPLENR; bed_minttemp_raw -= OVERSAMPLENR;
#endif #endif
} }
#endif //BED_MINTEMP #endif //BED_MINTEMP
#ifdef BED_MAXTEMP #ifdef BED_MAXTEMP
while(analog2tempBed(bed_maxttemp_raw) > BED_MAXTEMP) { while(analog2tempBed(bed_maxttemp_raw) > BED_MAXTEMP) {
@ -1186,6 +1214,25 @@ void tp_init()
#endif #endif
} }
#endif //BED_MAXTEMP #endif //BED_MAXTEMP
#ifdef AMBIENT_MINTEMP
while(analog2tempAmbient(ambient_minttemp_raw) < AMBIENT_MINTEMP) {
#if HEATER_AMBIENT_RAW_LO_TEMP < HEATER_AMBIENT_RAW_HI_TEMP
ambient_minttemp_raw += OVERSAMPLENR;
#else
ambient_minttemp_raw -= OVERSAMPLENR;
#endif
}
#endif //AMBIENT_MINTEMP
#ifdef AMBIENT_MAXTEMP
while(analog2tempAmbient(ambient_maxttemp_raw) > AMBIENT_MAXTEMP) {
#if HEATER_AMBIENT_RAW_LO_TEMP < HEATER_AMBIENT_RAW_HI_TEMP
ambient_maxttemp_raw -= OVERSAMPLENR;
#else
ambient_maxttemp_raw += OVERSAMPLENR;
#endif
}
#endif //AMBIENT_MAXTEMP
} }
#if (defined (TEMP_RUNAWAY_BED_HYSTERESIS) && TEMP_RUNAWAY_BED_TIMEOUT > 0) || (defined (TEMP_RUNAWAY_EXTRUDER_HYSTERESIS) && TEMP_RUNAWAY_EXTRUDER_TIMEOUT > 0) #if (defined (TEMP_RUNAWAY_BED_HYSTERESIS) && TEMP_RUNAWAY_BED_TIMEOUT > 0) || (defined (TEMP_RUNAWAY_EXTRUDER_HYSTERESIS) && TEMP_RUNAWAY_EXTRUDER_TIMEOUT > 0)
@ -1357,9 +1404,11 @@ void temp_runaway_stop(bool isPreheat, bool isBed)
isBed ? LCD_ALERTMESSAGEPGM("BED PREHEAT ERROR") : LCD_ALERTMESSAGEPGM("PREHEAT ERROR"); isBed ? LCD_ALERTMESSAGEPGM("BED PREHEAT ERROR") : LCD_ALERTMESSAGEPGM("PREHEAT ERROR");
SERIAL_ERROR_START; SERIAL_ERROR_START;
isBed ? SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HEATBED)") : SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HOTEND)"); isBed ? SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HEATBED)") : SERIAL_ERRORLNPGM(" THERMAL RUNAWAY ( PREHEAT HOTEND)");
SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN); #ifdef EXTRUDER_ALTFAN_DETECT
altfanStatus.altfanOverride = 1; //full speed
#endif //EXTRUDER_ALTFAN_DETECT
setExtruderAutoFanState(3);
SET_OUTPUT(FAN_PIN); SET_OUTPUT(FAN_PIN);
WRITE(EXTRUDER_0_AUTO_FAN_PIN, 1);
#ifdef FAN_SOFT_PWM #ifdef FAN_SOFT_PWM
fanSpeedSoftPwm = 255; fanSpeedSoftPwm = 255;
#else //FAN_SOFT_PWM #else //FAN_SOFT_PWM
@ -1427,26 +1476,55 @@ enum { LCDALERT_NONE = 0, LCDALERT_HEATERMINTEMP, LCDALERT_BEDMINTEMP, LCDALERT_
//! to prevent flicker and improve speed //! to prevent flicker and improve speed
uint8_t last_alert_sent_to_lcd = LCDALERT_NONE; uint8_t last_alert_sent_to_lcd = LCDALERT_NONE;
//! update the current temperature error message
//! @param type short error abbreviation (PROGMEM)
//! @param func optional lcd update function (lcd_setalertstatus when first setting the error)
void temp_update_messagepgm(const char* PROGMEM type, void (*func)(const char*) = lcd_updatestatus)
{
char msg[LCD_WIDTH];
strcpy_P(msg, PSTR("Err: "));
strcat_P(msg, type);
(*func)(msg);
}
//! signal a temperature error on both the lcd and serial
//! @param type short error abbreviation (PROGMEM)
//! @param e optional extruder index for hotend errors
void temp_error_messagepgm(const char* PROGMEM type, uint8_t e = EXTRUDERS)
{
temp_update_messagepgm(type, lcd_setalertstatus);
SERIAL_ERROR_START;
if(e != EXTRUDERS) {
SERIAL_ERROR((int)e);
SERIAL_ERRORPGM(": ");
}
SERIAL_ERRORPGM("Heaters switched off. ");
SERIAL_ERRORRPGM(type);
SERIAL_ERRORLNPGM(" triggered!");
}
void max_temp_error(uint8_t e) { void max_temp_error(uint8_t e) {
disable_heater(); disable_heater();
if(IsStopped() == false) { if(IsStopped() == false) {
SERIAL_ERROR_START; temp_error_messagepgm(PSTR("MAXTEMP"), e);
SERIAL_ERRORLN((int)e);
SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
LCD_ALERTMESSAGEPGM("Err: MAXTEMP");
} }
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop(); Stop();
#endif #endif
SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN);
SET_OUTPUT(FAN_PIN); SET_OUTPUT(FAN_PIN);
SET_OUTPUT(BEEPER); SET_OUTPUT(BEEPER);
WRITE(FAN_PIN, 1); WRITE(FAN_PIN, 1);
WRITE(EXTRUDER_0_AUTO_FAN_PIN, 1);
WRITE(BEEPER, 1); WRITE(BEEPER, 1);
#ifdef EXTRUDER_ALTFAN_DETECT
altfanStatus.altfanOverride = 1; //full speed
#endif //EXTRUDER_ALTFAN_DETECT
setExtruderAutoFanState(3);
// fanSpeed will consumed by the check_axes_activity() routine. // fanSpeed will consumed by the check_axes_activity() routine.
fanSpeed=255; fanSpeed=255;
if (farm_mode) { prusa_statistics(93); } if (farm_mode) { prusa_statistics(93); }
@ -1456,18 +1534,15 @@ void min_temp_error(uint8_t e) {
#ifdef DEBUG_DISABLE_MINTEMP #ifdef DEBUG_DISABLE_MINTEMP
return; return;
#endif #endif
//if (current_temperature_ambient < MINTEMP_MINAMBIENT) return;
disable_heater(); disable_heater();
static const char err[] PROGMEM = "Err: MINTEMP"; //if (current_temperature_ambient < MINTEMP_MINAMBIENT) return;
static const char err[] PROGMEM = "MINTEMP";
if(IsStopped() == false) { if(IsStopped() == false) {
SERIAL_ERROR_START; temp_error_messagepgm(err, e);
SERIAL_ERRORLN((int)e);
SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
lcd_setalertstatuspgm(err);
last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP; last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP;
} else if( last_alert_sent_to_lcd != LCDALERT_HEATERMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time) } else if( last_alert_sent_to_lcd != LCDALERT_HEATERMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time)
// we are already stopped due to some error, only update the status message without flickering // we are already stopped due to some error, only update the status message without flickering
lcd_updatestatuspgm(err); temp_update_messagepgm(err);
last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP; last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP;
} }
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
@ -1482,37 +1557,27 @@ void min_temp_error(uint8_t e) {
} }
void bed_max_temp_error(void) { void bed_max_temp_error(void) {
#if HEATER_BED_PIN > -1 disable_heater();
//WRITE(HEATER_BED_PIN, 0);
#endif
if(IsStopped() == false) { if(IsStopped() == false) {
SERIAL_ERROR_START; temp_error_messagepgm(PSTR("MAXTEMP BED"));
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !");
LCD_ALERTMESSAGEPGM("Err: MAXTEMP BED");
} }
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop(); Stop();
#endif #endif
} }
void bed_min_temp_error(void) { void bed_min_temp_error(void) {
#ifdef DEBUG_DISABLE_MINTEMP #ifdef DEBUG_DISABLE_MINTEMP
return; return;
#endif #endif
//if (current_temperature_ambient < MINTEMP_MINAMBIENT) return; disable_heater();
#if HEATER_BED_PIN > -1 static const char err[] PROGMEM = "MINTEMP BED";
//WRITE(HEATER_BED_PIN, 0);
#endif
static const char err[] PROGMEM = "Err: MINTEMP BED";
if(IsStopped() == false) { if(IsStopped() == false) {
SERIAL_ERROR_START; temp_error_messagepgm(err);
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MINTEMP triggered !");
lcd_setalertstatuspgm(err);
last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP; last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP;
} else if( last_alert_sent_to_lcd != LCDALERT_BEDMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time) } else if( last_alert_sent_to_lcd != LCDALERT_BEDMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time)
// we are already stopped due to some error, only update the status message without flickering // we are already stopped due to some error, only update the status message without flickering
lcd_updatestatuspgm(err); temp_update_messagepgm(err);
last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP; last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP;
} }
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
@ -1520,6 +1585,33 @@ void bed_min_temp_error(void) {
#endif #endif
} }
#ifdef AMBIENT_THERMISTOR
void ambient_max_temp_error(void) {
disable_heater();
if(IsStopped() == false) {
temp_error_messagepgm(PSTR("MAXTEMP AMB"));
}
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop();
#endif
}
void ambient_min_temp_error(void) {
#ifdef DEBUG_DISABLE_MINTEMP
return;
#endif
disable_heater();
if(IsStopped() == false) {
temp_error_messagepgm(PSTR("MINTEMP AMB"));
}
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
Stop();
#endif
}
#endif
#ifdef HEATER_0_USES_MAX6675 #ifdef HEATER_0_USES_MAX6675
#define MAX6675_HEAT_INTERVAL 250 #define MAX6675_HEAT_INTERVAL 250
long max6675_previous_millis = MAX6675_HEAT_INTERVAL; long max6675_previous_millis = MAX6675_HEAT_INTERVAL;
@ -1604,18 +1696,8 @@ void adc_ready(void) //callback from adc when sampling finished
} // extern "C" } // extern "C"
// Timer2 (originaly timer0) is shared with millies FORCE_INLINE static void temperature_isr()
#ifdef SYSTEM_TIMER_2
ISR(TIMER2_COMPB_vect)
#else //SYSTEM_TIMER_2
ISR(TIMER0_COMPB_vect)
#endif //SYSTEM_TIMER_2
{ {
static bool _lock = false;
if (_lock) return;
_lock = true;
asm("sei");
if (!temp_meas_ready) adc_cycle(); if (!temp_meas_ready) adc_cycle();
lcd_buttons_update(); lcd_buttons_update();
@ -1981,8 +2063,24 @@ ISR(TIMER0_COMPB_vect)
#if (defined(FANCHECK) && defined(TACH_0) && (TACH_0 > -1)) #if (defined(FANCHECK) && defined(TACH_0) && (TACH_0 > -1))
check_fans(); check_fans();
#endif //(defined(TACH_0)) #endif //(defined(TACH_0))
}
_lock = false; // Timer2 (originaly timer0) is shared with millies
#ifdef SYSTEM_TIMER_2
ISR(TIMER2_COMPB_vect)
#else //SYSTEM_TIMER_2
ISR(TIMER0_COMPB_vect)
#endif //SYSTEM_TIMER_2
{
static bool _lock = false;
if (!_lock)
{
_lock = true;
sei();
temperature_isr();
cli();
_lock = false;
}
} }
void check_max_temp() void check_max_temp()
@ -2002,11 +2100,19 @@ void check_max_temp()
#else #else
if (current_temperature_bed_raw >= bed_maxttemp_raw) { if (current_temperature_bed_raw >= bed_maxttemp_raw) {
#endif #endif
target_temperature_bed = 0;
bed_max_temp_error(); bed_max_temp_error();
} }
#endif #endif
//ambient
#if defined(AMBIENT_MAXTEMP) && (TEMP_SENSOR_AMBIENT != 0)
#if AMBIENT_RAW_LO_TEMP > AMBIENT_RAW_HI_TEMP
if (current_temperature_raw_ambient <= ambient_maxttemp_raw) {
#else
if (current_temperature_raw_ambient >= ambient_maxttemp_raw) {
#endif
ambient_max_temp_error();
}
#endif
} }
//! number of repeating the same state with consecutive step() calls //! number of repeating the same state with consecutive step() calls
//! used to slow down text switching //! used to slow down text switching
@ -2101,12 +2207,32 @@ void check_min_temp_bed()
} }
} }
#ifdef AMBIENT_MINTEMP
void check_min_temp_ambient()
{
#if AMBIENT_RAW_LO_TEMP > AMBIENT_RAW_HI_TEMP
if (current_temperature_raw_ambient >= ambient_minttemp_raw) {
#else
if (current_temperature_raw_ambient <= ambient_minttemp_raw) {
#endif
ambient_min_temp_error();
}
}
#endif
void check_min_temp() void check_min_temp()
{ {
static bool bCheckingOnHeater=false; // state variable, which allows to short no-checking delay (is set, when temperature is (first time) over heaterMintemp) static bool bCheckingOnHeater=false; // state variable, which allows to short no-checking delay (is set, when temperature is (first time) over heaterMintemp)
static bool bCheckingOnBed=false; // state variable, which allows to short no-checking delay (is set, when temperature is (first time) over bedMintemp) static bool bCheckingOnBed=false; // state variable, which allows to short no-checking delay (is set, when temperature is (first time) over bedMintemp)
#ifdef AMBIENT_THERMISTOR #ifdef AMBIENT_THERMISTOR
if(current_temperature_raw_ambient>(OVERSAMPLENR*MINTEMP_MINAMBIENT_RAW)) // thermistor is NTC type, so operator is ">" ;-) #ifdef AMBIENT_MINTEMP
check_min_temp_ambient();
#endif
#if AMBIENT_RAW_LO_TEMP > AMBIENT_RAW_HI_TEMP
if(current_temperature_raw_ambient>(OVERSAMPLENR*MINTEMP_MINAMBIENT_RAW)) // thermistor is NTC type
#else
if(current_temperature_raw_ambient=<(OVERSAMPLENR*MINTEMP_MINAMBIENT_RAW))
#endif
{ // ambient temperature is low { // ambient temperature is low
#endif //AMBIENT_THERMISTOR #endif //AMBIENT_THERMISTOR
// *** 'common' part of code for MK2.5 & MK3 // *** 'common' part of code for MK2.5 & MK3
@ -2194,4 +2320,20 @@ float unscalePID_d(float d)
#endif //PIDTEMP #endif //PIDTEMP
#ifdef PINDA_THERMISTOR
//! @brief PINDA thermistor detected
//!
//! @retval true firmware should do temperature compensation and allow calibration
//! @retval false PINDA thermistor is not detected, disable temperature compensation and calibration
//!
bool has_temperature_compensation()
{
#ifdef DETECT_SUPERPINDA
return (current_temperature_pinda >= PINDA_MINTEMP) ? true : false;
#else
return true;
#endif
}
#endif //PINDA_THERMISTOR

View File

@ -63,6 +63,7 @@ extern float current_temperature_bed;
#ifdef PINDA_THERMISTOR #ifdef PINDA_THERMISTOR
extern uint16_t current_temperature_raw_pinda; extern uint16_t current_temperature_raw_pinda;
extern float current_temperature_pinda; extern float current_temperature_pinda;
bool has_temperature_compensation();
#endif #endif
#ifdef AMBIENT_THERMISTOR #ifdef AMBIENT_THERMISTOR
@ -79,7 +80,7 @@ extern int current_voltage_raw_bed;
#endif #endif
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
extern int current_voltage_raw_IR; extern uint16_t current_voltage_raw_IR;
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
#if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1 #if defined(CONTROLLERFAN_PIN) && CONTROLLERFAN_PIN > -1
@ -245,7 +246,7 @@ FORCE_INLINE void autotempShutdown(){
void PID_autotune(float temp, int extruder, int ncycles); void PID_autotune(float temp, int extruder, int ncycles);
void setExtruderAutoFanState(int pin, bool state); void setExtruderAutoFanState(uint8_t state);
void checkExtruderAutoFans(); void checkExtruderAutoFans();
@ -270,10 +271,14 @@ void check_fans();
void check_min_temp(); void check_min_temp();
void check_max_temp(); void check_max_temp();
#ifdef EXTRUDER_ALTFAN_DETECT
#endif extern bool extruder_altfan_detect();
extern void altfanOverride_toggle();
extern bool altfanOverride_get();
#endif //EXTRUDER_ALTFAN_DETECT
extern unsigned long extruder_autofan_last_check; extern unsigned long extruder_autofan_last_check;
extern uint8_t fanSpeedBckp; extern uint8_t fanSpeedBckp;
extern bool fan_measuring; extern bool fan_measuring;
#endif

View File

@ -1213,6 +1213,8 @@ const short temptable_1047[][2] PROGMEM = {
#endif #endif
#if (THERMISTORAMBIENT == 2000) //100k thermistor NTCG104LH104JT1 #if (THERMISTORAMBIENT == 2000) //100k thermistor NTCG104LH104JT1
# define AMBIENT_RAW_HI_TEMP 0
# define AMBIENT_RAW_LO_TEMP 16383
const short temptable_2000[][2] PROGMEM = { const short temptable_2000[][2] PROGMEM = {
// Source: https://product.tdk.com/info/en/catalog/datasheets/503021/tpd_ntc-thermistor_ntcg_en.pdf // Source: https://product.tdk.com/info/en/catalog/datasheets/503021/tpd_ntc-thermistor_ntcg_en.pdf
// Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance

View File

@ -9,9 +9,6 @@
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include "io_atmega2560.h"
#define BEEPER 84
void timer0_init(void) void timer0_init(void)
{ {

View File

@ -994,7 +994,7 @@ bool tmc2130_home_calibrate(uint8_t axis)
uint8_t step[16]; uint8_t step[16];
uint8_t cnt[16]; uint8_t cnt[16];
uint8_t val[16]; uint8_t val[16];
homeaxis(axis, true, 16, step); homeaxis(axis, 16, step);
bubblesort_uint8(step, 16, 0); bubblesort_uint8(step, 16, 0);
printf_P(PSTR("sorted samples:\n")); printf_P(PSTR("sorted samples:\n"));
for (uint8_t i = 0; i < 16; i++) for (uint8_t i = 0; i < 16; i++)

120
Firmware/tone04.c Normal file
View File

@ -0,0 +1,120 @@
//tone04.c
// use atmega timer4 as main tone timer instead of timer2
// timer2 is used for System timer.
#include "system_timer.h"
#include "Configuration_prusa.h"
#ifdef SYSTEM_TIMER_2
#include <avr/io.h>
#include <avr/interrupt.h>
#include "pins.h"
#include "fastio.h"
#include "macros.h"
void timer4_init(void)
{
CRITICAL_SECTION_START;
SET_OUTPUT(BEEPER);
WRITE(BEEPER, LOW);
SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN);
// Set timer mode 9 (PWM,Phase and Frequency Correct)
// Prescaler is CLK/1024
// Output compare is disabled on all timer pins
// Input capture is disabled
// All interrupts are disabled
TCCR4A = (1 << WGM40);
TCCR4B = (1 << WGM43) | (1 << CS42) | (1 << CS40);
OCR4A = 255;
OCR4B = 255;
OCR4C = 255;
TIMSK4 = 0;
CRITICAL_SECTION_END;
}
#ifdef EXTRUDER_0_AUTO_FAN_PIN
void timer4_set_fan0(uint8_t duty)
{
if (duty == 0 || duty == 255)
{
// We use digital logic if the duty cycle is 0% or 100%
TCCR4A &= ~(1 << COM4C1);
OCR4C = 0;
WRITE(EXTRUDER_0_AUTO_FAN_PIN, duty);
}
else
{
// Use the timer for fan speed. Enable the timer compare output and set the duty cycle.
// This function also handles the impossible scenario of a fan speed change during a Tone.
// Better be safe than sorry.
CRITICAL_SECTION_START;
// Enable the PWM output on the fan pin.
TCCR4A |= (1 << COM4C1);
OCR4C = (((uint32_t)duty) * ((uint32_t)((TIMSK4 & (1 << OCIE4A))?OCR4A:255))) / ((uint32_t)255);
CRITICAL_SECTION_END;
}
}
#endif //EXTRUDER_0_AUTO_FAN_PIN
// Because of the timer mode change, we need two interrupts. We could also try to assume that the frequency is x2
// and use a TOGGLE(), but this seems to work well enough so I left it as it is now.
ISR(TIMER4_COMPA_vect)
{
WRITE(BEEPER, 1);
}
ISR(TIMER4_OVF_vect)
{
WRITE(BEEPER, 0);
}
void tone4(_UNUSED uint8_t _pin, uint16_t frequency)
{
//this ocr and prescalarbits calculation is taken from the Arduino core and simplified for one type of timer only
uint8_t prescalarbits = 0b001;
uint32_t ocr = F_CPU / frequency / 2 - 1;
if (ocr > 0xffff)
{
ocr = F_CPU / frequency / 2 / 64 - 1;
prescalarbits = 0b011;
}
CRITICAL_SECTION_START;
// Set calcualted prescaler
TCCR4B = (TCCR4B & 0b11111000) | prescalarbits;
#ifdef EXTRUDER_0_AUTO_FAN_PIN
// Scale the fan PWM duty cycle so that it remains constant, but at the tone frequency
OCR4C = (((uint32_t)OCR4C) * ocr) / (uint32_t)((TIMSK4 & (1 << OCIE4A))?OCR4A:255);
#endif //EXTRUDER_0_AUTO_FAN_PIN
// Set calcualted ocr
OCR4A = ocr;
// Enable Output compare A interrupt and timer overflow interrupt
TIMSK4 |= (1 << OCIE4A) | (1 << TOIE4);
CRITICAL_SECTION_END;
}
void noTone4(_UNUSED uint8_t _pin)
{
CRITICAL_SECTION_START;
// Revert prescaler to CLK/1024
TCCR4B = (TCCR4B & 0b11111000) | (1 << CS42) | (1 << CS40);
#ifdef EXTRUDER_0_AUTO_FAN_PIN
// Scale the fan OCR back to the original value.
OCR4C = (((uint32_t)OCR4C) * (uint32_t)255) / (uint32_t)((TIMSK4 & (1 << OCIE4A))?OCR4A:255);
#endif //EXTRUDER_0_AUTO_FAN_PIN
OCR4A = 255;
// Disable Output compare A interrupt and timer overflow interrupt
TIMSK4 &= ~((1 << OCIE4A) | (1 << TOIE4));
CRITICAL_SECTION_END;
// Turn beeper off if it was on when noTone was called
WRITE(BEEPER, 0);
}
#endif //SYSTEM_TIMER_2

25
Firmware/tone04.h Normal file
View File

@ -0,0 +1,25 @@
//tone04.h
// use atmega timer4 as main tone timer instead of timer2
// timer2 is used for System timer.
#ifndef TIMER04_H
#define TIMER04_H
#include <inttypes.h>
#if defined(__cplusplus)
extern "C" {
#endif //defined(__cplusplus)
extern void timer4_init(void);
extern void timer4_set_fan0(uint8_t duty);
extern void tone4(uint8_t _pin, uint16_t frequency);
extern void noTone4(uint8_t _pin);
#if defined(__cplusplus)
}
#endif //defined(__cplusplus)
#endif //TIMER02_H

View File

@ -4,6 +4,7 @@
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "rbuf.h" #include "rbuf.h"
#include "macros.h"
#define UART2_BAUD 115200 #define UART2_BAUD 115200
#define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5) #define UART_BAUD_SELECT(baudRate,xtalCpu) (((float)(xtalCpu))/(((float)(baudRate))*8.0)-1.0+0.5)
@ -16,7 +17,7 @@ uint8_t uart2_ibuf[14] = {0, 0};
FILE _uart2io = {0}; FILE _uart2io = {0};
int uart2_putchar(char c, FILE *stream __attribute__((unused))) int uart2_putchar(char c, _UNUSED FILE *stream)
{ {
while (!uart2_txready); while (!uart2_txready);
UDR2 = c; // transmit byte UDR2 = c; // transmit byte
@ -25,7 +26,7 @@ int uart2_putchar(char c, FILE *stream __attribute__((unused)))
return 0; return 0;
} }
int uart2_getchar(FILE *stream __attribute__((unused))) int uart2_getchar(_UNUSED FILE *stream)
{ {
if (rbuf_empty(uart2_ibuf)) return -1; if (rbuf_empty(uart2_ibuf)) return -1;
return rbuf_get(uart2_ibuf); return rbuf_get(uart2_ibuf);

File diff suppressed because it is too large Load Diff

View File

@ -23,9 +23,11 @@ void lcd_setstatuspgm(const char* message);
//! - always returns the display to the main status screen //! - always returns the display to the main status screen
//! - always makes lcd_reset (which is slow and causes flicker) //! - always makes lcd_reset (which is slow and causes flicker)
//! - does not update the message if there is already one (i.e. lcd_status_message_level > 0) //! - does not update the message if there is already one (i.e. lcd_status_message_level > 0)
void lcd_setalertstatus(const char* message);
void lcd_setalertstatuspgm(const char* message); void lcd_setalertstatuspgm(const char* message);
//! only update the alert message on the main status screen //! only update the alert message on the main status screen
//! has no sideeffects, may be called multiple times //! has no sideeffects, may be called multiple times
void lcd_updatestatus(const char *message);
void lcd_updatestatuspgm(const char *message); void lcd_updatestatuspgm(const char *message);
void lcd_reset_alert_level(); void lcd_reset_alert_level();
@ -142,7 +144,7 @@ extern uint8_t farm_status;
#ifdef IR_SENSOR_ANALOG #ifdef IR_SENSOR_ANALOG
extern bool bMenuFSDetect; extern bool bMenuFSDetect;
void printf_IRSensorAnalogBoardChange(bool bPCBrev03b); void printf_IRSensorAnalogBoardChange();
#endif //IR_SENSOR_ANALOG #endif //IR_SENSOR_ANALOG
extern int8_t SilentModeMenu; extern int8_t SilentModeMenu;
@ -257,12 +259,7 @@ enum class WizState : uint8_t
void lcd_wizard(WizState state); void lcd_wizard(WizState state);
#define VOLT_DIV_REF 5 extern void lcd_experimental_toggle();
#ifdef IR_SENSOR_ANALOG extern void lcd_experimental_menu();
#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 #endif //ULTRALCD_H

View File

@ -330,6 +330,10 @@ PREHEAT SETTINGS
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define ASA_PREHEAT_FAN_SPEED 0 #define ASA_PREHEAT_FAN_SPEED 0
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_FAN_SPEED 0
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100
#define ABS_PREHEAT_FAN_SPEED 0 #define ABS_PREHEAT_FAN_SPEED 0

View File

@ -326,6 +326,9 @@ PREHEAT SETTINGS
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -384,6 +384,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -385,6 +385,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -384,6 +384,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -385,6 +385,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 105
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -294,6 +294,9 @@
#if BED_MINTEMP_DELAY>USHRT_MAX #if BED_MINTEMP_DELAY>USHRT_MAX
#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)"
#endif #endif
#define DETECT_SUPERPINDA
#define PINDA_MINTEMP BED_MINTEMP
#define AMBIENT_MINTEMP -30
// Maxtemps // Maxtemps
#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP)
@ -304,6 +307,7 @@
#define HEATER_1_MAXTEMP 305 #define HEATER_1_MAXTEMP 305
#define HEATER_2_MAXTEMP 305 #define HEATER_2_MAXTEMP 305
#define BED_MAXTEMP 125 #define BED_MAXTEMP 125
#define AMBIENT_MAXTEMP 100
#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP)
// Define PID constants for extruder with PT100 // Define PID constants for extruder with PT100
@ -496,6 +500,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 110
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -296,6 +296,9 @@
#if BED_MINTEMP_DELAY>USHRT_MAX #if BED_MINTEMP_DELAY>USHRT_MAX
#error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)" #error "Check maximal allowed value @ ShortTimer (see BED_MINTEMP_DELAY definition)"
#endif #endif
#define DETECT_SUPERPINDA
#define PINDA_MINTEMP BED_MINTEMP
#define AMBIENT_MINTEMP -30
// Maxtemps // Maxtemps
#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP)
@ -306,6 +309,7 @@
#define HEATER_1_MAXTEMP 305 #define HEATER_1_MAXTEMP 305
#define HEATER_2_MAXTEMP 305 #define HEATER_2_MAXTEMP 305
#define BED_MAXTEMP 125 #define BED_MAXTEMP 125
#define AMBIENT_MAXTEMP 100
#if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP) #if defined(E3D_PT100_EXTRUDER_WITH_AMP) || defined(E3D_PT100_EXTRUDER_NO_AMP)
// Define PID constants for extruder with PT100 // Define PID constants for extruder with PT100
@ -331,6 +335,8 @@
#define EXTRUDER_2_AUTO_FAN_PIN -1 #define EXTRUDER_2_AUTO_FAN_PIN -1
#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 #define EXTRUDER_AUTO_FAN_TEMPERATURE 50
#define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed #define EXTRUDER_AUTO_FAN_SPEED 255 // == full speed
#define EXTRUDER_ALTFAN_DETECT
#define EXTRUDER_ALTFAN_SPEED_SILENT 128
@ -498,6 +504,9 @@
#define ASA_PREHEAT_HOTEND_TEMP 260 #define ASA_PREHEAT_HOTEND_TEMP 260
#define ASA_PREHEAT_HPB_TEMP 105 #define ASA_PREHEAT_HPB_TEMP 105
#define PC_PREHEAT_HOTEND_TEMP 275
#define PC_PREHEAT_HPB_TEMP 110
#define ABS_PREHEAT_HOTEND_TEMP 255 #define ABS_PREHEAT_HOTEND_TEMP 255
#define ABS_PREHEAT_HPB_TEMP 100 #define ABS_PREHEAT_HPB_TEMP 100

View File

@ -3,8 +3,8 @@
#include "w25x20cl.h" #include "w25x20cl.h"
#include <avr/io.h> #include <avr/io.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include "io_atmega2560.h"
#include "spi.h" #include "spi.h"
#include "fastio.h"
#define _MFRID 0xEF #define _MFRID 0xEF
#define _DEVID 0x11 #define _DEVID 0x11
@ -31,8 +31,8 @@
#define _CMD_JEDEC_ID 0x9f #define _CMD_JEDEC_ID 0x9f
#define _CMD_RD_UID 0x4b #define _CMD_RD_UID 0x4b
#define _CS_LOW() PORT(W25X20CL_PIN_CS) &= ~__MSK(W25X20CL_PIN_CS) #define _CS_LOW() WRITE(W25X20CL_PIN_CS, 0)
#define _CS_HIGH() PORT(W25X20CL_PIN_CS) |= __MSK(W25X20CL_PIN_CS) #define _CS_HIGH() WRITE(W25X20CL_PIN_CS, 1)
//#define _SPI_TX swspi_tx //#define _SPI_TX swspi_tx
//#define _SPI_RX swspi_rx //#define _SPI_RX swspi_rx
@ -45,8 +45,8 @@ int w25x20cl_mfrid_devid(void);
int8_t w25x20cl_init(void) int8_t w25x20cl_init(void)
{ {
PIN_OUT(W25X20CL_PIN_CS);
_CS_HIGH(); _CS_HIGH();
SET_OUTPUT(W25X20CL_PIN_CS);
W25X20CL_SPI_ENTER(); W25X20CL_SPI_ENTER();
if (!w25x20cl_mfrid_devid()) return 0; if (!w25x20cl_mfrid_devid()) return 0;
return 1; return 1;

View File

@ -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 # 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. # it will use the default Arduino IDE folders and so can corrupt the build environment.
# #
# Version: 1.0.6-Build_13 # Version: 1.0.6-Build_18
# Change log: # 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' # 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 # 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is unknown
@ -118,6 +118,12 @@
# 15 Dec 2019, 3d-gussner, Prepare for switch to Prusa3d/PF-build-env repository # 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. # 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 # 17 Dec 2019, 3d-gussner, Fix "timer0_fract = 0" warning by using Arduino_boards v1.0.3
# 28 Apr 2020, 3d-gussner, Added RC3 detection
# 03 May 2020, deliopoulos, Accept all RCx as RC versions
# 05 May 2020, 3d-gussner, Make a copy of `not_tran.txt`and `not_used.txt` as `not_tran_$VARIANT.txt`and `not_used_$VARIANT.txt`
# After compiling All multilanguage vairants it makes it easier to find missing or unused transltions.
# 12 May 2020, DRracer , Cleanup double MK2/s MK25/s `not_tran` and `not_used` files
# 13 May 2020, leptun , If cleanup files do not exist don't try to.
#### Start check if OSTYPE is supported #### Start check if OSTYPE is supported
OS_FOUND=$( command -v uname) OS_FOUND=$( command -v uname)
@ -527,7 +533,7 @@ do
# Check development status # Check development status
DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2) DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2)
if [ -z "$DEV_STATUS_SELECTED" ] ; then if [ -z "$DEV_STATUS_SELECTED" ] ; then
if [[ "$DEV_CHECK" == "RC1" || "$DEV_CHECK" == "RC2" ]] ; then if [[ "$DEV_CHECK" == *"RC"* ]] ; then
DEV_STATUS="RC" DEV_STATUS="RC"
elif [[ "$DEV_CHECK" == "ALPHA" ]]; then elif [[ "$DEV_CHECK" == "ALPHA" ]]; then
DEV_STATUS="ALPHA" DEV_STATUS="ALPHA"
@ -682,6 +688,8 @@ do
./lang-build.sh || exit 32 ./lang-build.sh || exit 32
# Combine compiled firmware with languages # Combine compiled firmware with languages
./fw-build.sh || exit 33 ./fw-build.sh || exit 33
cp not_tran.txt not_tran_$VARIANT.txt
cp not_used.txt not_used_$VARIANT.txt
echo "$(tput sgr 0)" echo "$(tput sgr 0)"
# Check if the motherboard is an EINSY and if so only one hex file will generated # Check if the motherboard is an EINSY and if so only one hex file will generated
MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3)
@ -716,6 +724,22 @@ do
# Cleanup Firmware # Cleanup Firmware
rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 36 rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 36
if find $SCRIPT_PATH/lang/ -name '*RAMBo10a*.txt' -printf 1 -quit | grep -q 1
then
rm $SCRIPT_PATH/lang/*RAMBo10a*.txt
fi
if find $SCRIPT_PATH/lang/ -name '*MK2-RAMBo13a*' -printf 1 -quit | grep -q 1
then
rm $SCRIPT_PATH/lang/*MK2-RAMBo13a*.txt
fi
if find $SCRIPT_PATH/lang/ -name 'not_tran.txt' -printf 1 -quit | grep -q 1
then
rm $SCRIPT_PATH/lang/not_tran.txt
fi
if find $SCRIPT_PATH/lang/ -name 'not_used.txt' -printf 1 -quit | grep -q 1
then
rm $SCRIPT_PATH/lang/not_used.txt
fi
sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h
sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h
echo $MULTI_LANGUAGE_CHECK echo $MULTI_LANGUAGE_CHECK

View File

@ -1,3 +1,12 @@
# Prusa Firmware MK3
This repository contains the source code and the development versions of the firmware running on the [Original Prusa i3](https://prusa3d.com/) MK3S/MK3/MK2.5S/MK2.5 line of printers.
The latest official builds can be downloaded from [Prusa Drivers](https://www.prusa3d.com/drivers/). Pre-built development releases are also [available here](https://github.com/prusa3d/Prusa-Firmware/releases).
The firmware for the Original Prusa i3 printers is proudly based on [Marlin 1.0.x](https://github.com/MarlinFirmware/Marlin/) by Scott Lahteine (@thinkyhead) et al. and is distributed under the terms of the [GNU GPL 3 license](LICENSE).
# Table of contents # Table of contents
<!--ts--> <!--ts-->
@ -17,14 +26,28 @@
1. Clone this repository and checkout the correct branch for your desired release version. 1. Clone this repository and checkout the correct branch for your desired release version.
2. Set your printer model. 1. Set your printer model.
- For MK3 --> skip to step 3. - For MK3 --> skip to step 3.
- If you have a different printer model, follow step [2.b](#2b) from Windows build - If you have a different printer model, follow step [2.b](#2b) from Windows build
1. Install GNU AWK `sudo apt-get install gawk`
If you use mawk instead of gawk you get strange errors when multi language support is generated like:
`awk: line 2: function strtonum never defined
sed: couldn't write 4 items to stdout: Broken pipe
./lang-build.sh: 121: ./lang-build.sh: arithmetic expression: expecting EOF: "0x"awk: line 2: function strtonum never defined
sed: couldn't write 4 items to stdout: Broken pipe
tr: write error: Broken pipe
./lang-build.sh: 121: ./lang-build.sh: arithmetic expression: expecting EOF: "0x"awk: line 2: function strtonum never defined
sed: couldn't write 4 items to stdout: Broken pipe
tr: write error: Broken pipe
tr: write error
cut: write error: Broken pipeNG! - some texts not found in lang_en.txt! updating binary:
primary language ids...awk: line 2: function strtonum never defined
sed: couldn't flush stdout: Broken pipe`
3. Run `sudo ./build.sh` 1. Run `./build.sh`
- Output hex file is at `"PrusaFirmware/lang/firmware.hex"` . In the same folder you can hex files for other languages as well. - Output hex file is at `"PrusaFirmware/lang/firmware.hex"` . In the same folder you can hex files for other languages as well.
4. Connect your printer and flash with PrusaSlicer ( Configuration --> Flash printer firmware ) or Slic3r PE. 1. Connect your printer and flash with PrusaSlicer ( Configuration --> Flash printer firmware ) or Slic3r PE.
- If you wish to flash from Arduino, follow step [2.c](#2c) from Windows build first. - If you wish to flash from Arduino, follow step [2.c](#2c) from Windows build first.
@ -173,7 +196,7 @@ Example:
`ninja` `ninja`
## Runing ## Running
`./tests` `./tests`
# 4. Documentation # 4. Documentation

View File

@ -69,5 +69,5 @@ cat lang_add.txt | sed 's/^/"/;s/$/"/' | while read new_s; do
fi fi
done done
read x read -t 5
exit 0 exit 0

View File

@ -82,7 +82,7 @@ generate_binary()
rm -f lang_$1.dat rm -f lang_$1.dat
LNG=$1 LNG=$1
#check lang dictionary #check lang dictionary
/usr/bin/env python lang-check.py $1 --no-warning ./lang-check.py $1 --no-warning
#create lang_xx.tmp - different processing for 'en' language #create lang_xx.tmp - different processing for 'en' language
if [ "$1" = "en" ]; then if [ "$1" = "en" ]; then
#remove comments and empty lines #remove comments and empty lines

0
lang/lang-check.py Normal file → Executable file
View File

View File

@ -71,5 +71,5 @@ else
echo 'binary data NG!' echo 'binary data NG!'
fi fi
read read -t 5
exit exit

165
lang/lang_en.txt Executable file → Normal file
View File

@ -1,6 +1,21 @@
# #
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
# c=18
"FS v0.3 or older"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
# c=18
"FS v0.4 or newer"
#MSG_IR_UNKNOWN c=18
"unknown state"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
@ -31,7 +46,10 @@
# #
"Ambient" "Ambient"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2 #MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
@ -43,7 +61,7 @@
#MSG_AUTO_HOME #MSG_AUTO_HOME
"Auto home" "Auto home"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
@ -70,13 +88,22 @@
#MSG_BED_CORRECTION_MENU #MSG_BED_CORRECTION_MENU
"Bed level correct" "Bed level correct"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
#MSG_BRIGHT c=6
"Bright"
#MSG_BRIGHTNESS c=18
"Brightness"
#MSG_BED #MSG_BED
"Bed" "Bed"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
#MSG_RECOVER_PRINT c=20 r=2 #MSG_RECOVER_PRINT c=20 r=2
@ -124,8 +151,9 @@
# #
"Copy selected language?" "Copy selected language?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
# #
"Choose a filament for the First Layer Calibration and select it in the on-screen menu." "Choose a filament for the First Layer Calibration and select it in the on-screen menu."
@ -150,10 +178,13 @@
#MSG_BABYSTEP_Z_NOT_SET c=20 r=12 #MSG_BABYSTEP_Z_NOT_SET c=20 r=12
"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." "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."
#MSG_FS_CONTINUE c=5
"Cont."
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=17 r=1
@ -162,7 +193,7 @@
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
"Ejecting filament" "Ejecting filament"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
#MSG_SELFTEST_ENDSTOP #MSG_SELFTEST_ENDSTOP
@ -174,16 +205,28 @@
#MSG_STACK_ERROR c=20 r=4 #MSG_STACK_ERROR c=20 r=4
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
#MSG_CUT_FILAMENT c=16
"Cut filament"
#MSG_CUTTER c=9
"Cutter"
# c=18
"Cutting filament"
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
#MSG_DIM c=6
"Dim"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
#MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18 #MSG_SELFTEST_EXTRUDER_FAN_SPEED c=18
"Extruder fan:" "Extruder fan:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
#MSG_MOVE_E #MSG_MOVE_E
@ -192,7 +235,7 @@
# #
"Fail stats MMU" "Fail stats MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
# #
@ -210,7 +253,7 @@
#MSG_FSENSOR #MSG_FSENSOR
"Fil. sensor" "Fil. sensor"
# # c=14
"Filam. runouts" "Filam. runouts"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
@ -222,19 +265,22 @@
#MSG_FILAMENT_SENSOR c=20 #MSG_FILAMENT_SENSOR c=20
"Filament sensor" "Filament sensor"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
#MSG_PRINT_TIME c=19 r=1 #MSG_PRINT_TIME c=19 r=1
"Print time" "Print time"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
#MSG_WIZARD_SELFTEST c=20 r=8 #MSG_WIZARD_SELFTEST c=20 r=8
@ -357,6 +403,9 @@
#MSG_BABYSTEP_Z #MSG_BABYSTEP_Z
"Live adjust Z" "Live adjust Z"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
@ -372,12 +421,18 @@
# #
"Load to nozzle" "Load to nozzle"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
#MSG_MAIN #MSG_MAIN
"Main" "Main"
#MSG_BL_HIGH c=12
"Level Bright"
#MSG_BL_LOW c=12
"Level Dimmed"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
@ -408,6 +463,9 @@
#MSG_MODE #MSG_MODE
"Mode" "Mode"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
@ -477,7 +535,7 @@
#MSG_NOZZLE #MSG_NOZZLE
"Nozzle" "Nozzle"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
# #
@ -501,7 +559,7 @@
#MSG_PINDA_PREHEAT c=20 r=1 #MSG_PINDA_PREHEAT c=20 r=1
"PINDA Heating" "PINDA Heating"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
#MSG_WIZARD_CLEAN_HEATBED c=20 r=8 #MSG_WIZARD_CLEAN_HEATBED c=20 r=8
@ -555,22 +613,28 @@
#MSG_WIZARD_HEATING c=20 r=3 #MSG_WIZARD_HEATING c=20 r=3
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
# c=14
"PINDA"
# #
"Please upgrade." "Please upgrade."
#MSG_PRESS_TO_PREHEAT c=20 r=4 #MSG_PRESS_TO_PREHEAT c=20 r=4
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
#MSG_FS_PAUSE c=5
"Pause"
# #
"Power failures" "Power failures"
#MSG_PRINT_ABORTED c=20 #MSG_PRINT_ABORTED c=20
"Print aborted" "Print aborted"
# # c=20
"Preheating to load" "Preheating to load"
# # c=20
"Preheating to unload" "Preheating to unload"
#MSG_SELFTEST_PRINT_FAN_SPEED c=18 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
@ -609,13 +673,19 @@
#MSG_BED_CORRECTION_REAR c=14 r=1 #MSG_BED_CORRECTION_REAR c=14 r=1
"Rear side [um]" "Rear side [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Please unload the filament first, then repeat this action."
# c=20 r=4
"Please check the IR sensor connection, unload filament if present."
#MSG_RECOVERING_PRINT c=20
"Recovering print " "Recovering print "
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 #MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
#MSG_CALIBRATE_BED_RESET #MSG_CALIBRATE_BED_RESET
@ -627,7 +697,7 @@
#MSG_RESUME_PRINT #MSG_RESUME_PRINT
"Resume print" "Resume print"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
#MSG_BED_CORRECTION_RIGHT c=14 r=1 #MSG_BED_CORRECTION_RIGHT c=14 r=1
@ -678,16 +748,25 @@
#MSG_SET_TEMPERATURE c=19 r=1 #MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:" "Set temperature:"
# c=20
"Prusa i3 MK2.5 OK."
# c=20
"Prusa i3 MK2.5S OK."
# c=20
"Prusa i3 MK3 OK."
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
# #
"Sensor state" "Sensor state"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100."
#MSG_SORT #MSG_SORT
@ -717,6 +796,9 @@
#MSG_SOUND #MSG_SOUND
"Sound" "Sound"
# c=7
"Runouts"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
@ -750,7 +832,7 @@
# #
"Select filament:" "Select filament:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
# #
@ -765,13 +847,16 @@
#MSG_TEMP_CALIBRATION_DONE c=20 r=12 #MSG_TEMP_CALIBRATION_DONE c=20 r=12
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
# c=20 r=3
"Sensor verified, remove the filament now."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
#MSG_MENU_TEMPERATURES c=15 r=1 #MSG_MENU_TEMPERATURES c=15 r=1
"Temperatures" "Temperatures"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
# #
@ -843,7 +928,7 @@
#MSG_WIZARD c=17 r=1 #MSG_WIZARD c=17 r=1
"Wizard" "Wizard"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
#MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED c=20 r=8
@ -861,7 +946,10 @@
#MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_SKEW_MILD c=20 r=8
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
# #MSG_TIMEOUT c=12
"Timeout"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
#MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_PERFECT c=20 r=8
@ -891,7 +979,10 @@
# #
"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)." "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)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
#MSG_OFF #MSG_OFF
@ -972,10 +1063,10 @@
# #
"PINDA:" "PINDA:"
# # c=20
"Preheating to cut" "Preheating to cut"
# # c=20
"Preheating to eject" "Preheating to eject"
# #
@ -984,6 +1075,9 @@
# #
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
# c=20
"%s level expected"
# #
"Rename" "Rename"
@ -993,17 +1087,18 @@
# #
"Sensor info" "Sensor info"
# #MSG_SHEET c=10
"Sheet" "Sheet"
#MSG_SOUND_BLIND #MSG_SOUND_BLIND
"Assist" "Assist"
# # c=18
"Steel sheets" "Steel sheets"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."

207
lang/lang_en_cz.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Doladeni Z\x0auz nastaveno, pouzit\x0anebo reset od nuly?\x0a%cPokracovat%cReset" "[%.7s]Doladeni Z\x0auz nastaveno, pouzit\x0anebo reset od nuly?\x0a%cPokracovat%cReset"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 nebo starsi"
# c=18
"FS v0.3 or older"
"FS 0.3 nebo starsi"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 nebo novejsi"
# c=18
"FS v0.4 or newer"
"FS 0.4 a novejsi"
#MSG_IR_UNKNOWN c=18
"unknown state"
"neznamy stav"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" z 4" " z 4"
@ -42,7 +62,11 @@
"Ambient" "Ambient"
"Okoli" "Okoli"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"a stisknete tlacitko" "a stisknete tlacitko"
@ -58,7 +82,7 @@
"Auto home" "Auto home"
"\x00" "\x00"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"AutoZavedeni fil." "AutoZavedeni fil."
@ -94,15 +118,27 @@
"Bed level correct" "Bed level correct"
"Korekce podlozky" "Korekce podlozky"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Test remenu "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Kalibrace Z selhala. Sensor nesepnul. Znecistena tryska? Cekam na reset." "Kalibrace Z selhala. Sensor nesepnul. Znecistena tryska? Cekam na reset."
#MSG_BRIGHT c=6
"Bright"
"Jasny"
#MSG_BRIGHTNESS c=18
"Brightness"
"Podsviceni"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Podlozka" "Podlozka"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Stav remenu" "Stav remenu"
@ -166,13 +202,13 @@
"Copy selected language?" "Copy selected language?"
"Kopirovat vybrany jazyk?" "Kopirovat vybrany jazyk?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
"\x00" "\x00"
# #
"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." "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_CRASH_DETECTED c=20 r=1 #MSG_CRASH_DETECTED c=20 r=1
"Crash detected." "Crash detected."
@ -202,11 +238,15 @@
"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." "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."
"Neni zkalibrovana vzdalenost trysky od tiskove podlozky. Postupujte prosim podle manualu, kapitola Zaciname, odstavec Nastaveni prvni vrstvy." "Neni zkalibrovana vzdalenost trysky od tiskove podlozky. Postupujte prosim podle manualu, kapitola Zaciname, odstavec Nastaveni prvni vrstvy."
#MSG_FS_CONTINUE c=5
"Cont."
"Pokr."
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Chcete opakovat posledni krok a pozmenit vzdalenost mezi tryskou a podlozkou?" "Chcete opakovat posledni krok a pozmenit vzdalenost mezi tryskou a podlozkou?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"Korekce E:" "Korekce E:"
@ -218,7 +258,7 @@
"Ejecting filament" "Ejecting filament"
"Vysouvam filament" "Vysouvam filament"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Kon. spinac nesepnut" "Kon. spinac nesepnut"
@ -234,9 +274,25 @@
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Chyba - Doslo k prepisu staticke pameti!" "Chyba - Doslo k prepisu staticke pameti!"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Ustrihnout"
#MSG_CUTTER c=9
"Cutter"
"Strihani"
# c=18
"Cutting filament"
"Strihani filamentu"
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"CHYBA: Filament senzor nereaguje, zkontrolujte zapojeni." "CHYBA: Filament senzor nereaguje, zkontrolujte prosim zapojeni."
#MSG_DIM c=6
"Dim"
"Temny"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
@ -246,7 +302,7 @@
"Extruder fan:" "Extruder fan:"
"Levy vent.:" "Levy vent.:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"\x00" "\x00"
@ -258,7 +314,7 @@
"Fail stats MMU" "Fail stats MMU"
"Selhani MMU" "Selhani MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"F. autozav." "F. autozav."
@ -282,7 +338,7 @@
"Fil. sensor" "Fil. sensor"
"Fil. senzor" "Fil. senzor"
# # c=14
"Filam. runouts" "Filam. runouts"
"Vypadky filam." "Vypadky filam."
@ -298,23 +354,27 @@
"Filament sensor" "Filament sensor"
"Senzor filamentu" "Senzor filamentu"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Spotrebovano filamentu" "Spotrebovano filam."
#MSG_PRINT_TIME c=19 r=1 #MSG_PRINT_TIME c=19 r=1
"Print time" "Print time"
"Cas tisku" "Cas tisku"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"FS reakce"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Soubor nekompletni. Pokracovat?" "Soubor nekompletni. Pokracovat?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Dokoncovani pohybu" "Dokoncovani pohybu"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Kal. prvni vrstvy" "Kal. prvni vrstvy"
@ -478,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Doladeni osy Z" "Doladeni osy Z"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Vlozte filament (nezavadejte) do extruderu a stisknete tlacitko"
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Zavest filament" "Zavest filament"
@ -498,7 +562,7 @@
"Load to nozzle" "Load to nozzle"
"Zavest do trysky" "Zavest do trysky"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Kal. prvni vrstvy" "M117 Kal. prvni vrstvy"
@ -506,6 +570,14 @@
"Main" "Main"
"Hlavni nabidka" "Hlavni nabidka"
#MSG_BL_HIGH c=12
"Level Bright"
"\x00"
#MSG_BL_LOW c=12
"Level Dimmed"
"\x00"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Merim referencni vysku kalibracniho bodu" "Merim referencni vysku kalibracniho bodu"
@ -546,6 +618,10 @@
"Mode" "Mode"
"Mod" "Mod"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"\x00"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"\x00" "\x00"
@ -638,7 +714,7 @@
"Nozzle" "Nozzle"
"Tryska" "Tryska"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Neplatne hodnoty nastaveni. Bude pouzito vychozi PID, Esteps atd." "Neplatne hodnoty nastaveni. Bude pouzito vychozi PID, Esteps atd."
@ -670,7 +746,7 @@
"PINDA Heating" "PINDA Heating"
"Nahrivani PINDA" "Nahrivani PINDA"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Umistete list papiru na podlozku a udrzujte jej pod tryskou behem mereni prvnich 4 bodu. Pokud tryska zachyti papir, okamzite vypnete tiskarnu." "Umistete list papiru na podlozku a udrzujte jej pod tryskou behem mereni prvnich 4 bodu. Pokud tryska zachyti papir, okamzite vypnete tiskarnu."
@ -742,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Predehrev trysky. Prosim cekejte." "Predehrev trysky. Prosim cekejte."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Prosim aktualizujte." "Prosim aktualizujte."
@ -750,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Pro nahrati trysky a pokracovani stisknete tlacitko." "Pro nahrati trysky a pokracovani stisknete tlacitko."
#MSG_FS_PAUSE c=5
"Pause"
"\x00"
# #
"Power failures" "Power failures"
"Vypadky proudu" "Vypadky proudu"
@ -758,11 +842,11 @@
"Print aborted" "Print aborted"
"Tisk prerusen" "Tisk prerusen"
# # c=20
"Preheating to load" "Preheating to load"
"Predehrev k zavedeni" "Predehrev k zavedeni"
# # c=20
"Preheating to unload" "Preheating to unload"
"Predehrev k vyjmuti" "Predehrev k vyjmuti"
@ -814,15 +898,23 @@
"Rear side [um]" "Rear side [um]"
"Vzadu [um]" "Vzadu [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Recovering print " "Please unload the filament first, then repeat this action."
"Obnovovani tisku " "Prosim vyjmete filament a zopakujte tuto akci"
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 # c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"Prosim zkontrolujte zapojeni IR senzoru a vyjmuty filament"
#MSG_RECOVERING_PRINT c=20
"Recovering print "
"Obnovovani tisku "
#MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Vyjmete stary filament a stisknete tlacitko pro zavedeni noveho." "Vyjmete stary filament a stisknete tlacitko pro zavedeni noveho."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"\x00" "\x00"
@ -838,7 +930,7 @@
"Resume print" "Resume print"
"Pokracovat" "Pokracovat"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Obnoveni tisku" "Obnoveni tisku"
@ -906,11 +998,23 @@
"Set temperature:" "Set temperature:"
"Nastavte teplotu:" "Nastavte teplotu:"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Nastaveni" "Nastaveni"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Stav konc. spin." "Stav konc. spin."
@ -918,7 +1022,7 @@
"Sensor state" "Sensor state"
"Stav senzoru" "Stav senzoru"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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." "Nektere soubory nebudou setrideny. Maximalni pocet souboru ve slozce pro setrideni je 100."
@ -958,6 +1062,10 @@
"Sound" "Sound"
"Zvuk" "Zvuk"
# c=7
"Runouts"
"\x00"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
"Vyskytl se problem, srovnavam osu Z ..." "Vyskytl se problem, srovnavam osu Z ..."
@ -1002,7 +1110,7 @@
"Select filament:" "Select filament:"
"Zvolte filament:" "Zvolte filament:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Tepl. kal." "Tepl. kal."
@ -1022,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"Teplotni kalibrace dokoncena a je nyni aktivni. Teplotni kalibraci je mozno deaktivovat v menu Nastaveni->Tepl. kal." "Teplotni kalibrace dokoncena a je nyni aktivni. Teplotni kalibraci je mozno deaktivovat v menu Nastaveni->Tepl. kal."
# c=20 r=3
"Sensor verified, remove the filament now."
"Senzor overen, vyjmete filament."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"Teplota" "Teplota"
@ -1030,7 +1142,7 @@
"Temperatures" "Temperatures"
"Teploty" "Teploty"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Je potreba kalibrovat osu Z. Prosim postupujte dle prirucky, kapitola Zaciname, sekce Postup kalibrace." "Je potreba kalibrovat osu Z. Prosim postupujte dle prirucky, kapitola Zaciname, sekce Postup kalibrace."
@ -1126,7 +1238,7 @@
"Wizard" "Wizard"
"Pruvodce" "Pruvodce"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"Detaily XYZ kal." "Detaily XYZ kal."
@ -1150,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"Kalibrace XYZ v poradku. X/Y osy mirne zkosene. Dobra prace!" "Kalibrace XYZ v poradku. X/Y osy mirne zkosene. Dobra prace!"
# #MSG_TIMEOUT c=12
"Timeout"
"\x00"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"Korekce X:" "Korekce X:"
@ -1190,7 +1306,11 @@
"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)." "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)."
"Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)." "Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
"Overeni selhalo, vyjmete filament a zkuste znovu."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Korekce Y:" "Korekce Y:"
@ -1298,11 +1418,11 @@
"PINDA:" "PINDA:"
"\x00" "\x00"
# # c=20
"Preheating to cut" "Preheating to cut"
"Predehrev k ustrizeni" "Predehrev ke strihu"
# # c=20
"Preheating to eject" "Preheating to eject"
"Predehrev k vysunuti" "Predehrev k vysunuti"
@ -1314,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Prumer trysky tiskarny se lisi od G-code. Prosim zkontrolujte nastaveni. Tisk zrusen." "Prumer trysky tiskarny se lisi od G-code. Prosim zkontrolujte nastaveni. Tisk zrusen."
# c=20
"%s level expected"
"\x00"
# #
"Rename" "Rename"
"Prejmenovat" "Prejmenovat"
@ -1326,7 +1450,7 @@
"Sensor info" "Sensor info"
"Senzor info" "Senzor info"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Plat" "Plat"
@ -1334,14 +1458,15 @@
"Assist" "Assist"
"Asist." "Asist."
# # c=18
"Steel sheets" "Steel sheets"
"Tiskove platy" "Tiskove platy"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Korekce Z:" "Korekce Z:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"Pocet mereni Z" "Pocet mereni Z"

207
lang/lang_en_de.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Z Einstell.\x0aWert gesetzt,weiter\x0aoder mit 0 beginnen?\x0a%cWeiter%cNeu beginnen" "[%.7s]Z Einstell.\x0aWert gesetzt,weiter\x0aoder mit 0 beginnen?\x0a%cWeiter%cNeu beginnen"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 oder aelter"
# c=18
"FS v0.3 or older"
"FS 0.3 oder aelter"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 oder neuer"
# c=18
"FS v0.4 or newer"
"FS 0.4 oder neuer"
#MSG_IR_UNKNOWN c=18
"unknown state"
"Status unbekannt"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" von 4" " von 4"
@ -42,7 +62,11 @@
"Ambient" "Ambient"
"Raumtemp." "Raumtemp."
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"und Knopf druecken" "und Knopf druecken"
@ -58,7 +82,7 @@
"Auto home" "Auto home"
"Startposition" "Startposition"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"AutoLaden Filament" "AutoLaden Filament"
@ -94,15 +118,27 @@
"Bed level correct" "Bed level correct"
"Ausgleich Bett ok" "Ausgleich Bett ok"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Riementest "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Z-Kal. fehlgeschlg. Sensor nicht ausgeloest. Schmutzige Duese? Warte auf Reset." "Z-Kal. fehlgeschlg. Sensor nicht ausgeloest. Schmutzige Duese? Warte auf Reset."
#MSG_BRIGHT c=6
"Bright"
"Hell"
#MSG_BRIGHTNESS c=18
"Brightness"
"Helligkeit"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Bett" "Bett"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Gurtstatus" "Gurtstatus"
@ -166,7 +202,7 @@
"Copy selected language?" "Copy selected language?"
"Gewaehlte Sprache kopieren?" "Gewaehlte Sprache kopieren?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
"Crash Erk." "Crash Erk."
@ -202,11 +238,15 @@
"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." "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."
"Der Abstand zwischen der Spitze der Duese und dem Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, Kapitel Erste Schritte, Abschnitt Erste Schicht Kalibrierung." "Der Abstand zwischen der Spitze der Duese und dem Bett ist noch nicht eingestellt. Bitte folgen Sie dem Handbuch, Kapitel Erste Schritte, Abschnitt Erste Schicht Kalibrierung."
#MSG_FS_CONTINUE c=5
"Cont."
"\x00"
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Moechten Sie den letzten Schritt wiederholen, um den Abstand zwischen Duese und Druckbett neu einzustellen?" "Moechten Sie den letzten Schritt wiederholen, um den Abstand zwischen Duese und Druckbett neu einzustellen?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"E-Korrektur:" "E-Korrektur:"
@ -218,7 +258,7 @@
"Ejecting filament" "Ejecting filament"
"werfe Filament aus" "werfe Filament aus"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Ende nicht getroffen" "Ende nicht getroffen"
@ -234,10 +274,26 @@
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Fehler - statischer Speicher wurde ueberschrieben" "Fehler - statischer Speicher wurde ueberschrieben"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Fil. schneiden"
#MSG_CUTTER c=9
"Cutter"
"Messer"
# c=18
"Cutting filament"
"Schneide filament"
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"FEHLER: Filament- sensor reagiert nicht, bitte Verbindung pruefen." "FEHLER: Filament- sensor reagiert nicht, bitte Verbindung pruefen."
#MSG_DIM c=6
"Dim"
"Dimm"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
"FEHLER:" "FEHLER:"
@ -246,7 +302,7 @@
"Extruder fan:" "Extruder fan:"
"Extruder Luefter:" "Extruder Luefter:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"Extruder Info" "Extruder Info"
@ -258,7 +314,7 @@
"Fail stats MMU" "Fail stats MMU"
"MMU-Fehler" "MMU-Fehler"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"F. autoladen" "F. autoladen"
@ -280,9 +336,9 @@
#MSG_FSENSOR #MSG_FSENSOR
"Fil. sensor" "Fil. sensor"
"\x00" "Fil. Sensor"
# # c=14
"Filam. runouts" "Filam. runouts"
"Filam. Maengel" "Filam. Maengel"
@ -298,7 +354,7 @@
"Filament sensor" "Filament sensor"
"Filamentsensor" "Filamentsensor"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Filament benutzt" "Filament benutzt"
@ -306,15 +362,19 @@
"Print time" "Print time"
"Druckzeit" "Druckzeit"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"FS Aktion"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Datei unvollstaendig Trotzdem fortfahren?" "Datei unvollstaendig Trotzdem fortfahren?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Bewegung beenden" "Bewegung beenden"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Erste-Schicht Kal." "Erste-Schicht Kal."
@ -478,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Z einstellen" "Z einstellen"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Stecken Sie das Filament (nicht laden) in den Extruder und druecken Sie dann den Knopf."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Filament laden" "Filament laden"
@ -498,7 +562,7 @@
"Load to nozzle" "Load to nozzle"
"In Druckduese laden" "In Druckduese laden"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Erste-Schicht Kal." "M117 Erste-Schicht Kal."
@ -506,6 +570,14 @@
"Main" "Main"
"Hauptmenue" "Hauptmenue"
#MSG_BL_HIGH c=12
"Level Bright"
"Hell.wert"
#MSG_BL_LOW c=12
"Level Dimmed"
"Dimmwert"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Messen der Referenzhoehe des Kalibrierpunktes" "Messen der Referenzhoehe des Kalibrierpunktes"
@ -546,6 +618,10 @@
"Mode" "Mode"
"Modus" "Modus"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"MK3-Firmware am MK3S-Drucker erkannt"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"\x00" "\x00"
@ -568,7 +644,7 @@
#MSG_AUTO_POWER #MSG_AUTO_POWER
"Auto power" "Auto power"
"\x00" "Auto Leist"
#MSG_HIGH_POWER #MSG_HIGH_POWER
"High power" "High power"
@ -638,7 +714,7 @@
"Nozzle" "Nozzle"
"Duese" "Duese"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Alte Einstellungen gefunden. Standard PID, E-Steps u.s.w. werden gesetzt." "Alte Einstellungen gefunden. Standard PID, E-Steps u.s.w. werden gesetzt."
@ -670,7 +746,7 @@
"PINDA Heating" "PINDA Heating"
"PINDA erwaermen" "PINDA erwaermen"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Legen Sie ein Blatt Papier unter die Duese waehrend der Kalibrierung der ersten 4 Punkte. Wenn die Duese das Papier erfasst, den Drucker sofort ausschalten." "Legen Sie ein Blatt Papier unter die Duese waehrend der Kalibrierung der ersten 4 Punkte. Wenn die Duese das Papier erfasst, den Drucker sofort ausschalten."
@ -742,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Vorheizen der Duese. Bitte warten." "Vorheizen der Duese. Bitte warten."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Bitte aktualisieren." "Bitte aktualisieren."
@ -750,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Bitte druecken Sie den Knopf um die Duese vorzuheizen und fortzufahren." "Bitte druecken Sie den Knopf um die Duese vorzuheizen und fortzufahren."
#MSG_FS_PAUSE c=5
"Pause"
"\x00"
# #
"Power failures" "Power failures"
"Netzfehler" "Netzfehler"
@ -758,11 +842,11 @@
"Print aborted" "Print aborted"
"Druck abgebrochen" "Druck abgebrochen"
# # c=20
"Preheating to load" "Preheating to load"
"Heizen zum Laden" "Heizen zum Laden"
# # c=20
"Preheating to unload" "Preheating to unload"
"Heizen zum Entladen" "Heizen zum Entladen"
@ -814,15 +898,23 @@
"Rear side [um]" "Rear side [um]"
"Hinten [um]" "Hinten [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Recovering print " "Please unload the filament first, then repeat this action."
"Druck wiederherst " "Bitte entladen Sie erst das Filament und versuchen Sie es nochmal."
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 # c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"Bitte IR Sensor Verbindungen ueber- pruefen und Filament entladen ist."
#MSG_RECOVERING_PRINT c=20
"Recovering print "
"Druck wiederherst "
#MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Entfernen Sie das alte Filament und druecken Sie den Knopf, um das neue zu laden." "Entfernen Sie das alte Filament und druecken Sie den Knopf, um das neue zu laden."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"\x00" "\x00"
@ -838,7 +930,7 @@
"Resume print" "Resume print"
"Druck fortsetzen" "Druck fortsetzen"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Druck fortgesetzt" "Druck fortgesetzt"
@ -906,11 +998,23 @@
"Set temperature:" "Set temperature:"
"Temp. einstellen:" "Temp. einstellen:"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Einstellungen" "Einstellungen"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Endschalter Status" "Endschalter Status"
@ -918,7 +1022,7 @@
"Sensor state" "Sensor state"
"Sensorstatus" "Sensorstatus"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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." "Einige Dateien wur- den nicht sortiert. Max. Dateien pro Verzeichnis = 100."
@ -956,6 +1060,10 @@
#MSG_SOUND #MSG_SOUND
"Sound" "Sound"
"Ton"
# c=7
"Runouts"
"\x00" "\x00"
# #
@ -1002,7 +1110,7 @@
"Select filament:" "Select filament:"
"Filament auswaehlen:" "Filament auswaehlen:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Temp Kalib." "Temp Kalib."
@ -1022,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"Temp.kalibrierung ist fertig + aktiv. Temp.kalibrierung kann ausgeschaltet werden im Menu Einstellungen -> Temp.kal." "Temp.kalibrierung ist fertig + aktiv. Temp.kalibrierung kann ausgeschaltet werden im Menu Einstellungen -> Temp.kal."
# c=20 r=3
"Sensor verified, remove the filament now."
"Sensor ueberprueft, entladen Sie jetzt das Filament."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"Temperatur" "Temperatur"
@ -1030,9 +1142,9 @@
"Temperatures" "Temperatures"
"Temperaturen" "Temperaturen"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Es ist noch notwendig die Z-Kalibrierung auszufuehren. Bitte befolgen Sie das Handbuch, Kapitel Erste Schritte, Abschnitt Kalibrierablauf." "Es ist noch not- wendig die Z- Kalibrierung aus- zufuehren. Bitte befolgen Sie das Handbuch, Kapitel Erste Schritte, Abschnitt Kalibrierablauf."
# #
"Total filament" "Total filament"
@ -1126,7 +1238,7 @@
"Wizard" "Wizard"
"Assistent" "Assistent"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"XYZ Kal. Details" "XYZ Kal. Details"
@ -1150,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"XYZ Kalibrierung in Ordnung. X/Y Achsen sind etwas schraeg." "XYZ Kalibrierung in Ordnung. X/Y Achsen sind etwas schraeg."
# #MSG_TIMEOUT c=12
"Timeout"
"Verzoegerung"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"X-Korrektur:" "X-Korrektur:"
@ -1190,7 +1306,11 @@
"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)." "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)."
"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)." "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)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
"Ueberpruefung fehl- geschlagen, entladen Sie das Filament und versuchen Sie es erneut."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Y-Korrektur:" "Y-Korrektur:"
@ -1298,11 +1418,11 @@
"PINDA:" "PINDA:"
"\x00" "\x00"
# # c=20
"Preheating to cut" "Preheating to cut"
"Heizen zum Schnitt" "Heizen zum Schnitt"
# # c=20
"Preheating to eject" "Preheating to eject"
"Heizen zum Auswurf" "Heizen zum Auswurf"
@ -1314,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen." "Der Durchmesser der Druckerduese weicht vom G-Code ab. Bitte ueberpruefen Sie den Wert in den Einstellungen. Druck abgebrochen."
# c=20
"%s level expected"
"\x00"
# #
"Rename" "Rename"
"Umbenennen" "Umbenennen"
@ -1326,22 +1450,23 @@
"Sensor info" "Sensor info"
"Sensor Info" "Sensor Info"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Blech" "Stahlblech"
#MSG_SOUND_BLIND #MSG_SOUND_BLIND
"Assist" "Assist"
"\x00" "\x00"
# # c=18
"Steel sheets" "Steel sheets"
"Stahlbleche" "Stahlbleche"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Z-Korrektur:" "Z-Korrektur:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"\x00" "\x00"

231
lang/lang_en_es.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Ajuste Z\x0aAjustado, continuar\x0ao empezar de nuevo?\x0a%cContinuar%cRepetir" "[%.7s]Ajuste Z\x0aAjustado, continuar\x0ao empezar de nuevo?\x0a%cContinuar%cRepetir"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 o mayor"
# c=18
"FS v0.3 or older"
"FS 0.3 o mayor"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 o mas nueva"
# c=18
"FS v0.4 or newer"
"FS 0.4 o mas nueva"
#MSG_IR_UNKNOWN c=18
"unknown state"
"estado desconocido"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" de 4" " de 4"
@ -42,7 +62,11 @@
"Ambient" "Ambient"
"Ambiente" "Ambiente"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"Haz clic" "Haz clic"
@ -58,9 +82,9 @@
"Auto home" "Auto home"
"Llevar al origen" "Llevar al origen"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"Carga automatica de filamento" "Carga auto. filam."
#MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4 #MSG_AUTOLOADING_ONLY_IF_FSENS_ON c=20 r=4
"Autoloading filament available only when filament sensor is turned on..." "Autoloading filament available only when filament sensor is turned on..."
@ -94,17 +118,29 @@
"Bed level correct" "Bed level correct"
"Corr. de la cama" "Corr. de la cama"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Test cinturon "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Nivelacion fallada. Sensor no funciona. Restos en boquilla? Esperando reset." "Nivelacion fallada. Sensor no funciona. Restos en boquilla? Esperando reset."
#MSG_BRIGHT c=6
"Bright"
"Brill."
#MSG_BRIGHTNESS c=18
"Brightness"
"Brillo"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Base" "Base"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Estado de la correa" "Estado de correa"
#MSG_RECOVER_PRINT c=20 r=2 #MSG_RECOVER_PRINT c=20 r=2
"Blackout occurred. Recover print?" "Blackout occurred. Recover print?"
@ -166,7 +202,7 @@
"Copy selected language?" "Copy selected language?"
"Copiar idioma seleccionado?" "Copiar idioma seleccionado?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
"Det. choque" "Det. choque"
@ -202,23 +238,27 @@
"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." "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."
"Distancia entre la punta del boquilla y la superficie de la base aun no fijada. Por favor siga el manual, capitulo Primeros Pasos, Calibracion primera capa." "Distancia entre la punta del boquilla y la superficie de la base aun no fijada. Por favor siga el manual, capitulo Primeros Pasos, Calibracion primera capa."
#MSG_FS_CONTINUE c=5
"Cont."
"\x00"
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Quieres repetir el ultimo paso para reajustar la distancia boquilla-base?" "Quieres repetir el ultimo paso para reajustar la distancia boquilla-base?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"Corregir-E:" "Corregir-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=17 r=1
"Eject filament" "Eject filament"
"Expulsar filamento" "Expulsar fil."
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
"Ejecting filament" "Ejecting filament"
"Expulsando filamento" "Expulsando filamento"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Endstop no alcanzado" "Endstop no alcanzado"
@ -234,10 +274,26 @@
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Error - se ha sobre-escrito la memoria estatica" "Error - se ha sobre-escrito la memoria estatica"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Cortar filament"
#MSG_CUTTER c=9
"Cutter"
"Cuchillo"
# c=18
"Cutting filament"
"Corte de filament"
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"ERROR: El sensor de filamento no responde, por favor comprueba la conexion." "ERROR: El sensor de filamento no responde, por favor comprueba la conexion."
#MSG_DIM c=6
"Dim"
"\x00"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
"\x00" "\x00"
@ -246,9 +302,9 @@
"Extruder fan:" "Extruder fan:"
"Vent.extrusor:" "Vent.extrusor:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"Informacion del extrusor" "Info. del extrusor"
#MSG_MOVE_E #MSG_MOVE_E
"Extruder" "Extruder"
@ -258,7 +314,7 @@
"Fail stats MMU" "Fail stats MMU"
"Estadistica de fallos MMU" "Estadistica de fallos MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"Autocarg.fil." "Autocarg.fil."
@ -268,7 +324,7 @@
#MSG_FAN_SPEED c=14 #MSG_FAN_SPEED c=14
"Fan speed" "Fan speed"
"Velocidad Vent." "Velocidad Vent"
#MSG_SELFTEST_FAN c=20 #MSG_SELFTEST_FAN c=20
"Fan test" "Fan test"
@ -282,7 +338,7 @@
"Fil. sensor" "Fil. sensor"
"Sensor Fil." "Sensor Fil."
# # c=14
"Filam. runouts" "Filam. runouts"
"Filam. acabado" "Filam. acabado"
@ -298,7 +354,7 @@
"Filament sensor" "Filament sensor"
"Sensor de filamento" "Sensor de filamento"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Filamento usado" "Filamento usado"
@ -306,15 +362,19 @@
"Print time" "Print time"
"Tiempo de imp.:" "Tiempo de imp.:"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"FS accion"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Archivo incompleto. ?Continuar de todos modos?" "Archivo incompleto. ?Continuar de todos modos?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Term. movimientos" "Term. movimientos"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Cal. primera cap." "Cal. primera cap."
@ -356,7 +416,7 @@
#MSG_HEATING_COMPLETE c=20 #MSG_HEATING_COMPLETE c=20
"Heating done." "Heating done."
"Calentamiento acabado." "Calentando acabado."
#MSG_HEATING #MSG_HEATING
"Heating" "Heating"
@ -396,7 +456,7 @@
#MSG_SELFTEST_CHECK_FSENSOR c=20 #MSG_SELFTEST_CHECK_FSENSOR c=20
"Checking sensors " "Checking sensors "
"Comprobando los sensores" "Comprobando sensores"
#MSG_SELFTEST_CHECK_X c=20 #MSG_SELFTEST_CHECK_X c=20
"Checking X axis " "Checking X axis "
@ -444,7 +504,7 @@
#MSG_STEEL_SHEET_CHECK c=20 r=2 #MSG_STEEL_SHEET_CHECK c=20 r=2
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"?Esta colocada la lamina de acero sobre la base?" "?Esta colocada la lamina sobre la base"
# #
"Last print failures" "Last print failures"
@ -478,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Micropaso Eje Z" "Micropaso Eje Z"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Inserte el filamento (no lo cargue) en el extrusor y luego presione el dial."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Introducir filam." "Introducir filam."
@ -498,7 +562,7 @@
"Load to nozzle" "Load to nozzle"
"Cargar a la boquilla" "Cargar a la boquilla"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Cal. primera cap." "M117 Cal. primera cap."
@ -506,6 +570,14 @@
"Main" "Main"
"Menu principal" "Menu principal"
#MSG_BL_HIGH c=12
"Level Bright"
"Valor brill."
#MSG_BL_LOW c=12
"Level Dimmed"
"\x00"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Midiendo altura del punto de calibracion" "Midiendo altura del punto de calibracion"
@ -546,6 +618,10 @@
"Mode" "Mode"
"Modo" "Modo"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"Firmware MK3 detectado en impresora MK3S"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"\x00" "\x00"
@ -638,7 +714,7 @@
"Nozzle" "Nozzle"
"Boquilla" "Boquilla"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Se han encontrado ajustes anteriores. Se ajustara el PID, los pasos del extrusor, etc" "Se han encontrado ajustes anteriores. Se ajustara el PID, los pasos del extrusor, etc"
@ -670,7 +746,7 @@
"PINDA Heating" "PINDA Heating"
"Calentando PINDA" "Calentando PINDA"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Colocar una hoja de papel sobre la superficie de impresion durante la calibracion de los primeros 4 puntos. Si la boquilla mueve el papel, apagar impresora inmediatamente." "Colocar una hoja de papel sobre la superficie de impresion durante la calibracion de los primeros 4 puntos. Si la boquilla mueve el papel, apagar impresora inmediatamente."
@ -732,7 +808,7 @@
#MSG_PREHEAT_NOZZLE c=20 #MSG_PREHEAT_NOZZLE c=20
"Preheat the nozzle!" "Preheat the nozzle!"
"Precalienta extrusor!" "Precalienta extrusor"
#MSG_PREHEAT #MSG_PREHEAT
"Preheat" "Preheat"
@ -742,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Precalentando nozzle. Espera por favor." "Precalentando nozzle. Espera por favor."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Actualize por favor" "Actualize por favor"
@ -750,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Pulsa el dial para precalentar la boquilla y continue." "Pulsa el dial para precalentar la boquilla y continue."
#MSG_FS_PAUSE c=5
"Pause"
"Pausa"
# #
"Power failures" "Power failures"
"Cortes de energia" "Cortes de energia"
@ -758,13 +842,13 @@
"Print aborted" "Print aborted"
"Impresion cancelada" "Impresion cancelada"
# # c=20
"Preheating to load" "Preheating to load"
"Precalentar para cargar" "Precalent. cargar"
# # c=20
"Preheating to unload" "Preheating to unload"
"Precalentar para descargar" "Precalent. descargar"
#MSG_SELFTEST_PRINT_FAN_SPEED c=18 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:" "Print fan:"
@ -814,15 +898,23 @@
"Rear side [um]" "Rear side [um]"
"Trasera [um]" "Trasera [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Recovering print " "Please unload the filament first, then repeat this action."
"Recuperando impresion" "Primero descargue el filamento, luego repita esta accion."
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 # c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"Por favor comprueba la conexion del IR sensor y filamento esta descargado."
#MSG_RECOVERING_PRINT c=20
"Recovering print "
"Recuper. impresion "
#MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Retire el filamento viejo y presione el dial para comenzar a cargar el nuevo filamento." "Retire el filamento viejo y presione el dial para comenzar a cargar el nuevo filamento."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"\x00" "\x00"
@ -838,9 +930,9 @@
"Resume print" "Resume print"
"Reanudar impres." "Reanudar impres."
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Continuando impresion" "Continuan. impresion"
#MSG_BED_CORRECTION_RIGHT c=14 r=1 #MSG_BED_CORRECTION_RIGHT c=14 r=1
"Right side[um]" "Right side[um]"
@ -884,7 +976,7 @@
#MSG_SELFTEST #MSG_SELFTEST
"Selftest " "Selftest "
"Selftest" "\x00"
#MSG_SELFTEST_ERROR #MSG_SELFTEST_ERROR
"Selftest error !" "Selftest error !"
@ -906,11 +998,23 @@
"Set temperature:" "Set temperature:"
"Establecer temp.:" "Establecer temp.:"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Configuracion" "Configuracion"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Mostrar endstops" "Mostrar endstops"
@ -918,7 +1022,7 @@
"Sensor state" "Sensor state"
"Estado del sensor" "Estado del sensor"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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. " "Algunos archivos no se ordenaran. Maximo 100 archivos por carpeta para ordenar. "
@ -958,6 +1062,10 @@
"Sound" "Sound"
"Sonido" "Sonido"
# c=7
"Runouts"
"\x00"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
"Problema encontrado, nivelacion Z forzosa ..." "Problema encontrado, nivelacion Z forzosa ..."
@ -1002,7 +1110,7 @@
"Select filament:" "Select filament:"
"Selecciona filamento:" "Selecciona filamento:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Cal. temp." "Cal. temp."
@ -1022,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"Calibracion temperatura terminada. Haz clic para continuar." "Calibracion temperatura terminada. Haz clic para continuar."
# c=20 r=3
"Sensor verified, remove the filament now."
"Sensor verificado, retire el filamento ahora."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"Temperatura" "Temperatura"
@ -1030,7 +1142,7 @@
"Temperatures" "Temperatures"
"Temperaturas" "Temperaturas"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Todavia es necesario hacer una calibracion Z. Por favor siga el manual, capitulo Primeros pasos, seccion Calibracion del flujo." "Todavia es necesario hacer una calibracion Z. Por favor siga el manual, capitulo Primeros pasos, seccion Calibracion del flujo."
@ -1126,9 +1238,9 @@
"Wizard" "Wizard"
"\x00" "\x00"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"Detalles de calibracion XYZ" "Detalles cal. XYZ"
#MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED c=20 r=8 #MSG_BED_SKEW_OFFSET_DETECTION_FITTING_FAILED c=20 r=8
"XYZ calibration failed. Please consult the manual." "XYZ calibration failed. Please consult the manual."
@ -1150,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"Calibracion XYZ correcta. Los ejes X / Y estan ligeramente inclinados. Buen trabajo!" "Calibracion XYZ correcta. Los ejes X / Y estan ligeramente inclinados. Buen trabajo!"
# #MSG_TIMEOUT c=12
"Timeout"
"Expirar"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"Corregir-X:" "Corregir-X:"
@ -1190,7 +1306,11 @@
"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)." "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)."
"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)." "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)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
"La verificacion fallo, retire el filamento e intente nuevamente."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Corregir-Y:" "Corregir-Y:"
@ -1298,13 +1418,13 @@
"PINDA:" "PINDA:"
"PINDA:" "PINDA:"
# # c=20
"Preheating to cut" "Preheating to cut"
"Precalentando para laminar" "Precalent. laminar"
# # c=20
"Preheating to eject" "Preheating to eject"
"Precalentar para expulsar" "Precalent. expulsar"
# #
"Printer nozzle diameter differs from the G-code. Continue?" "Printer nozzle diameter differs from the G-code. Continue?"
@ -1314,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametro nozzle Impresora difiere de cod.G. Comprueba los valores en ajustes. Impresion cancelada." "Diametro nozzle Impresora difiere de cod.G. Comprueba los valores en ajustes. Impresion cancelada."
# c=20
"%s level expected"
"\x00"
# #
"Rename" "Rename"
"Renombrar" "Renombrar"
@ -1326,7 +1450,7 @@
"Sensor info" "Sensor info"
"Info sensor" "Info sensor"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Lamina" "Lamina"
@ -1334,14 +1458,15 @@
"Assist" "Assist"
"Asistido" "Asistido"
# # c=18
"Steel sheets" "Steel sheets"
"Lamina de acero" "Lamina de acero"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Corregir-Z:" "Corregir-Z:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"Z-sensor nr." "Z-sensor nr."

240
lang/lang_en_fr.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Ajust. du Z\x0aValeur enreg, contin\x0aou depart a zero?\x0a%cContinuer%cReset" "[%.7s]Ajust. du Z\x0aValeur enreg, contin\x0aou depart a zero?\x0a%cContinuer%cReset"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 ou +ancien"
# c=18
"FS v0.3 or older"
"FS v0.3 ou +ancien"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 ou +recent"
# c=18
"FS v0.4 or newer"
"FS v0.4 ou +recent"
#MSG_IR_UNKNOWN c=18
"unknown state"
"Etat inconnu"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" de 4" " de 4"
@ -20,7 +40,7 @@
#MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4 #MSG_CRASH_DET_STEALTH_FORCE_OFF c=20 r=4
"WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode" "WARNING:\x0aCrash detection\x0adisabled in\x0aStealth mode"
"ATTENTION:\x0aDetection de crash\x0adesactivee en\x0amode feutre" "ATTENTION:\x0aDetection de crash\x0adesactivee en\x0amode furtif"
# #
">Cancel" ">Cancel"
@ -42,9 +62,13 @@
"Ambient" "Ambient"
"Ambiant" "Ambiant"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"et pressez le bouton" "et appuyez sur le bouton"
#MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2 #MSG_CONFIRM_CARRIAGE_AT_THE_TOP c=20 r=2
"Are left and right Z~carriages all up?" "Are left and right Z~carriages all up?"
@ -58,7 +82,7 @@
"Auto home" "Auto home"
"Mise a 0 des axes" "Mise a 0 des axes"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"Autocharge du fil." "Autocharge du fil."
@ -94,15 +118,27 @@
"Bed level correct" "Bed level correct"
"Corr. niveau plateau" "Corr. niveau plateau"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Test de courroie "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Echec bed leveling. Capt. non declenche. Debris sur buse? En attente d'un reset." "Capt. non declenche pendant que je nivele le plateau. Debris sur buse? En attente d'un reset."
#MSG_BRIGHT c=6
"Bright"
"Brill."
#MSG_BRIGHTNESS c=18
"Brightness"
"Luminosite"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Lit" "Lit"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Statut courroie" "Statut courroie"
@ -164,9 +200,9 @@
# #
"Copy selected language?" "Copy selected language?"
"Copier la langue selectionne?" "Copier la langue choisie?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
"Detect.crash" "Detect.crash"
@ -202,11 +238,15 @@
"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." "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."
"La distance entre la pointe de la buse et la surface du plateau n'a pas encore ete reglee. Suivez le manuel, chapitre Premiers pas, section Calibration de la premiere couche." "La distance entre la pointe de la buse et la surface du plateau n'a pas encore ete reglee. Suivez le manuel, chapitre Premiers pas, section Calibration de la premiere couche."
#MSG_FS_CONTINUE c=5
"Cont."
"\x00"
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Voulez-vous repeter la derniere etape pour reajuster la distance entre la buse et le plateau chauffant?" "Voulez-vous refaire l'etape pour reajuster la hauteur entre la buse et le plateau chauffant?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"Correct-E:" "Correct-E:"
@ -218,7 +258,7 @@
"Ejecting filament" "Ejecting filament"
"Le fil. remonte" "Le fil. remonte"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Butee non atteinte" "Butee non atteinte"
@ -234,10 +274,26 @@
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Erreur - la memoire statique a ete ecrasee" "Erreur - la memoire statique a ete ecrasee"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Coupe filament"
#MSG_CUTTER c=9
"Cutter"
"Coupeur"
# c=18
"Cutting filament"
"Je coupe filament"
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"ERREUR: Le capteur de filament ne repond pas, verifiez le branchement." "ERREUR: Le capteur de filament ne repond pas, verifiez le branchement."
#MSG_DIM c=6
"Dim"
"\x00"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
"ERREUR:" "ERREUR:"
@ -246,7 +302,7 @@
"Extruder fan:" "Extruder fan:"
"Ventilo extrudeur:" "Ventilo extrudeur:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"Infos extrudeur" "Infos extrudeur"
@ -258,9 +314,10 @@
"Fail stats MMU" "Fail stats MMU"
"Stat. d'echec MMU" "Stat. d'echec MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"Autochargeur" "F. autocharg."
# #
"Fail stats" "Fail stats"
"Stat. d'echec" "Stat. d'echec"
@ -280,9 +337,10 @@
#MSG_FSENSOR #MSG_FSENSOR
"Fil. sensor" "Fil. sensor"
"Capteur Fil." "Capteur Fil."
#
# c=14
"Filam. runouts" "Filam. runouts"
"Fins de filament" "Fins filament"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
@ -296,7 +354,7 @@
"Filament sensor" "Filament sensor"
"Capteur de filament" "Capteur de filament"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Filament utilise" "Filament utilise"
@ -304,15 +362,19 @@
"Print time" "Print time"
"Temps d'impression" "Temps d'impression"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"\x00"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Fichier incomplet. Continuer qd meme?" "Fichier incomplet. Continuer qd meme?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Mouvement final" "Mouvement final"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Cal. 1ere couche" "Cal. 1ere couche"
@ -382,7 +444,7 @@
#MSG_SELFTEST_CHECK_BED c=20 #MSG_SELFTEST_CHECK_BED c=20
"Checking bed " "Checking bed "
"Verification du lit" "Verif. plateau chauf"
#MSG_SELFTEST_CHECK_ENDSTOPS c=20 #MSG_SELFTEST_CHECK_ENDSTOPS c=20
"Checking endstops" "Checking endstops"
@ -442,7 +504,7 @@
#MSG_STEEL_SHEET_CHECK c=20 r=2 #MSG_STEEL_SHEET_CHECK c=20 r=2
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"Plaque d'impression sur le lit chauffant?" "Est la plaque sur le plat. chauffant?"
# #
"Last print failures" "Last print failures"
@ -450,7 +512,7 @@
# #
"If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets." "If you have additional steel sheets, calibrate their presets in Settings - HW Setup - Steel sheets."
"Si vous avez d'autres feuilles d'acier, calibrez leurs pre-reglages dans Reglages - Config HW - Feuilles d'acier." "Si vous avez d'autres feuilles d'acier, calibrez leurs pre-reglages dans Reglages - Config HW - Plaque en acier."
# #
"Last print" "Last print"
@ -458,7 +520,7 @@
#MSG_SELFTEST_EXTRUDER_FAN c=20 #MSG_SELFTEST_EXTRUDER_FAN c=20
"Left hotend fan?" "Left hotend fan?"
"Ventilo tete gauche?" "Ventilo gauche?"
# #
"Left" "Left"
@ -476,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Ajuster Z en dir." "Ajuster Z en dir."
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Veuillez inserer le filament ( ne le chargez pas) dans l'extrudeur, puis appuyez sur le bouton."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Charger filament" "Charger filament"
@ -496,7 +562,7 @@
"Load to nozzle" "Load to nozzle"
"Charger la buse" "Charger la buse"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Cal. 1ere couche" "M117 Cal. 1ere couche"
@ -504,9 +570,17 @@
"Main" "Main"
"Menu principal" "Menu principal"
#MSG_BL_HIGH c=12
"Level Bright"
"Niveau brill"
#MSG_BL_LOW c=12
"Level Dimmed"
"\x00"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Mesure de la hauteur de reference du point de calibration" "Je mesure la hauteur de reference du point de calibrage"
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING
"Mesh Bed Leveling" "Mesh Bed Leveling"
@ -544,13 +618,17 @@
"Mode" "Mode"
"\x00" "\x00"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"Firmware MK3 detecte sur imprimante MK3S"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"\x00" "\x00"
#MSG_SILENT #MSG_SILENT
"Silent" "Silent"
"Feutre" "Furtif"
# #
"MMU needs user attention." "MMU needs user attention."
@ -636,7 +714,7 @@
"Nozzle" "Nozzle"
"Buse" "Buse"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Anciens reglages trouves. Le PID, les Esteps etc. par defaut seront regles" "Anciens reglages trouves. Le PID, les Esteps etc. par defaut seront regles"
@ -668,13 +746,13 @@
"PINDA Heating" "PINDA Heating"
"Chauffe de la PINDA" "Chauffe de la PINDA"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Placez une feuille de papier sous la buse pendant la calibration des 4 premiers points. Si la buse accroche le papier, eteignez vite l'imprimante." "Placez une feuille de papier sous la buse pendant la calibration des 4 premiers points. Si la buse accroche le papier, eteignez vite l'imprimante."
#MSG_WIZARD_CLEAN_HEATBED c=20 r=8 #MSG_WIZARD_CLEAN_HEATBED c=20 r=8
"Please clean heatbed and then press the knob." "Please clean heatbed and then press the knob."
"Nettoyez la plaque en acier et appuyez sur le bouton." "Nettoyez plateau chauffant en acier et appuyez sur le bouton."
#MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8 #MSG_CONFIRM_NOZZLE_CLEAN c=20 r=8
"Please clean the nozzle for calibration. Click when done." "Please clean the nozzle for calibration. Click when done."
@ -740,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Prechauffage de la buse. Merci de patienter." "Prechauffage de la buse. Merci de patienter."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Mettez a jour le FW." "Mettez a jour le FW."
@ -748,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Appuyez sur le bouton pour prechauffer la buse et continuer." "Appuyez sur le bouton pour prechauffer la buse et continuer."
#MSG_FS_PAUSE c=5
"Pause"
"\x00"
# #
"Power failures" "Power failures"
"Coup.de courant" "Coup.de courant"
@ -756,11 +842,11 @@
"Print aborted" "Print aborted"
"Impression annulee" "Impression annulee"
# c=20 r=1 # c=20
"Preheating to load" "Preheating to load"
"Chauffe pour charger" "Chauffe pour charger"
# c=20 r=1 # c=20
"Preheating to unload" "Preheating to unload"
"Chauf.pour decharger" "Chauf.pour decharger"
@ -812,15 +898,23 @@
"Rear side [um]" "Rear side [um]"
"Arriere [um]" "Arriere [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Recovering print " "Please unload the filament first, then repeat this action."
"Recup. impression" "SVP, dechargez le filament et reessayez."
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 # c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"SVP, verifiez la connexion du capteur IR et decharge le filament."
#MSG_RECOVERING_PRINT c=20
"Recovering print "
"Recup. impression "
#MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Retirez l'ancien filament puis appuyez sur le bouton pour charger le nouveau." "Retirez l'ancien filament puis appuyez sur le bouton pour charger le nouveau."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"\x00" "\x00"
@ -836,7 +930,7 @@
"Resume print" "Resume print"
"Reprendre impression" "Reprendre impression"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Reprise de l'impr." "Reprise de l'impr."
@ -866,7 +960,7 @@
#MSG_FIND_BED_OFFSET_AND_SKEW_LINE1 c=60 #MSG_FIND_BED_OFFSET_AND_SKEW_LINE1 c=60
"Searching bed calibration point" "Searching bed calibration point"
"Recherche du point de calibration du lit" "Recherche du point de calibration du plateau chauffant"
#MSG_LANGUAGE_SELECT #MSG_LANGUAGE_SELECT
"Select language" "Select language"
@ -904,11 +998,23 @@
"Set temperature:" "Set temperature:"
"Regler temp.:" "Regler temp.:"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Reglages" "Reglages"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Afficher butees" "Afficher butees"
@ -916,7 +1022,7 @@
"Sensor state" "Sensor state"
"Etat capteur" "Etat capteur"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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." "Certains fichiers ne seront pas tries. Max 100 fichiers tries par dossier."
@ -956,6 +1062,10 @@
"Sound" "Sound"
"Son" "Son"
# c=7
"Runouts"
"\x00"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
"Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..." "Probleme rencontre, cliquez sur le bouton pour niveller l'axe Z..."
@ -963,6 +1073,7 @@
#MSG_SOUND_ONCE #MSG_SOUND_ONCE
"Once" "Once"
"Une fois" "Une fois"
#MSG_SPEED #MSG_SPEED
"Speed" "Speed"
"Vitesse" "Vitesse"
@ -999,7 +1110,7 @@
"Select filament:" "Select filament:"
"Selectionnez le filament:" "Selectionnez le filament:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Calib. Temp." "Calib. Temp."
@ -1019,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"La calibration en temperature est terminee et activee. La calibration en temperature peut etre desactivee dans le menu Reglages-> Cal. Temp." "La calibration en temperature est terminee et activee. La calibration en temperature peut etre desactivee dans le menu Reglages-> Cal. Temp."
# c=20 r=3
"Sensor verified, remove the filament now."
"Capteur verifie, retirez le filament maintenant."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"\x00" "\x00"
@ -1027,7 +1142,7 @@
"Temperatures" "Temperatures"
"\x00" "\x00"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Il faut toujours effectuer la Calibration Z. Veuillez suivre le manuel, chapitre Premiers pas, section Processus de calibration." "Il faut toujours effectuer la Calibration Z. Veuillez suivre le manuel, chapitre Premiers pas, section Processus de calibration."
@ -1069,7 +1184,7 @@
# #
"Total" "Total"
"\x00" "Totale"
#MSG_USED c=19 r=1 #MSG_USED c=19 r=1
"Used during print" "Used during print"
@ -1089,7 +1204,7 @@
#MSG_WAITING_TEMP c=20 r=3 #MSG_WAITING_TEMP c=20 r=3
"Waiting for nozzle and bed cooling" "Waiting for nozzle and bed cooling"
"Attente du refroidissement des buse et plateau" "Attente du refroidissement des buse et plateau chauffant"
#MSG_WAITING_TEMP_PINDA c=20 r=3 #MSG_WAITING_TEMP_PINDA c=20 r=3
"Waiting for PINDA probe cooling" "Waiting for PINDA probe cooling"
@ -1123,7 +1238,7 @@
"Wizard" "Wizard"
"Assistant" "Assistant"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"Details calib. XYZ" "Details calib. XYZ"
@ -1147,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"Calibration XYZ OK. Les axes X/Y sont legerement non perpendiculaires. Bon boulot!" "Calibration XYZ OK. Les axes X/Y sont legerement non perpendiculaires. Bon boulot!"
# #MSG_TIMEOUT c=12
"Timeout"
"\x00"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"Correct-X:" "Correct-X:"
@ -1187,7 +1306,11 @@
"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)." "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)."
"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)." "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)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
"Verification en echec, retirez le filament et reessayez."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Correct-Y:" "Correct-Y:"
@ -1269,11 +1392,11 @@
# #
"G-code sliced for a different level. Continue?" "G-code sliced for a different level. Continue?"
"\x00" "Le G-code a ete prepare pour un niveau different. Continuer?"
# #
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
"\x00" "Le G-code a ete prepare pour un niveau different. Veuillez decouper le modele a nouveau. L'impression a ete annulee."
# #
"G-code sliced for a different printer type. Continue?" "G-code sliced for a different printer type. Continue?"
@ -1295,11 +1418,11 @@
"PINDA:" "PINDA:"
"PINDA:" "PINDA:"
# c=20 r=1 # c=20
"Preheating to cut" "Preheating to cut"
"Chauffe pour couper" "Chauffe pour couper"
# c=20 r=1 # c=20
"Preheating to eject" "Preheating to eject"
"Chauf. pour remonter" "Chauf. pour remonter"
@ -1311,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametre de la buse dans les reglages ne correspond pas a celui dans le G-Code. Merci de verifier le parametre dans les reglages. Impression annulee." "Diametre de la buse dans les reglages ne correspond pas a celui dans le G-Code. Merci de verifier le parametre dans les reglages. Impression annulee."
# c=20
"%s level expected"
"\x00"
# #
"Rename" "Rename"
"Renommer" "Renommer"
@ -1323,7 +1450,7 @@
"Sensor info" "Sensor info"
"Info capteur" "Info capteur"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Plaque" "Plaque"
@ -1331,14 +1458,15 @@
"Assist" "Assist"
"\x00" "\x00"
# # c=18
"Steel sheets" "Steel sheets"
"Plaques en acier" "Plaques en acier"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Correct-Z:" "Correct-Z:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"Mesurer x-fois" "Mesurer x-fois"

266
lang/lang_en_it.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Set valori\x0aComp. Z, continuare\x0ao iniziare da zero?\x0a%cContinua%cReset" "[%.7s]Set valori\x0aComp. Z, continuare\x0ao iniziare da zero?\x0a%cContinua%cReset"
#MSG_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 o inferiore"
# c=18
"FS v0.3 or older"
"FS 0.3 o inferiore"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 o superiore"
# c=18
"FS v0.4 or newer"
"FS 0.4 o superiore"
#MSG_IR_UNKNOWN c=18
"unknown state"
"stato sconosciuto"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" su 4" " su 4"
@ -42,7 +62,11 @@
"Ambient" "Ambient"
"Ambiente" "Ambiente"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"e cliccare manopola" "e cliccare manopola"
@ -52,13 +76,13 @@
#MSG_AUTO_DEPLETE c=17 r=1 #MSG_AUTO_DEPLETE c=17 r=1
"SpoolJoin" "SpoolJoin"
"\x00" ""
#MSG_AUTO_HOME #MSG_AUTO_HOME
"Auto home" "Auto home"
"Trova origine" "Trova origine"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"Autocaric. filam." "Autocaric. filam."
@ -80,7 +104,7 @@
#MSG_SELFTEST_BEDHEATER #MSG_SELFTEST_BEDHEATER
"Bed / Heater" "Bed / Heater"
"Letto/Riscald." "Piano/Riscald."
#MSG_BED_DONE #MSG_BED_DONE
"Bed done" "Bed done"
@ -88,27 +112,39 @@
#MSG_BED_HEATING #MSG_BED_HEATING
"Bed Heating" "Bed Heating"
"Riscald. letto" "Riscald. piano"
#MSG_BED_CORRECTION_MENU #MSG_BED_CORRECTION_MENU
"Bed level correct" "Bed level correct"
"Correz. liv.letto" "Correz. liv.piano"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Test cinghie "
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Livellamento letto fallito.NoRispSensore.Residui su ugello? In attesa di reset." "Livellamento piano fallito. Sensore KO? Residui su ugello? In attesa di reset."
#MSG_BRIGHT c=6
"Bright"
"Chiaro"
#MSG_BRIGHTNESS c=18
"Brightness"
"Luminosita'"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Letto" "Piano"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Stato cinghie" "Stato cinghie"
#MSG_RECOVER_PRINT c=20 r=2 #MSG_RECOVER_PRINT c=20 r=2
"Blackout occurred. Recover print?" "Blackout occurred. Recover print?"
"C'e stato un Blackout. Recuperare la stampa?" "Blackout rilevato. Recuperare la stampa?"
# #
"Calibrating home" "Calibrating home"
@ -166,7 +202,7 @@
"Copy selected language?" "Copy selected language?"
"Copiare la lingua selezionata?" "Copiare la lingua selezionata?"
#MSG_CRASHDETECT #MSG_CRASHDETECT c=13
"Crash det." "Crash det."
"Rileva.crash" "Rileva.crash"
@ -200,27 +236,31 @@
#MSG_BABYSTEP_Z_NOT_SET c=20 r=12 #MSG_BABYSTEP_Z_NOT_SET c=20 r=12
"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." "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."
"Distanza tra la punta dell'ugello e la superficie del letto non ancora imposta. Si prega di seguire il manuale, capitolo Primi Passi, sezione Calibrazione primo layer." "Distanza tra la punta dell'ugello e la superficie del piano non ancora impostata. Si prega di seguire il manuale, capitolo Primi Passi, sezione Calibrazione primo strato."
#MSG_FS_CONTINUE c=5
"Cont."
"\x00"
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Desideri ripetere l'ultimo passaggio per migliorare la distanza fra ugello e piatto?" "Desideri ripetere l'ultimo passaggio per migliorare la distanza fra ugello e piatto?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"Correzione-E:" "Correzione-E:"
#MSG_EJECT_FILAMENT c=17 r=1 #MSG_EJECT_FILAMENT c=17 r=1
"Eject filament" "Eject filament"
"Espelli filamento " "Espelli filamento"
#MSG_EJECTING_FILAMENT c=20 r=1 #MSG_EJECTING_FILAMENT c=20 r=1
"Ejecting filament" "Ejecting filament"
"Espellendo filamento " "Espellendo filamento"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Finecorsa fuori portata" "Finec. fuori portata"
#MSG_SELFTEST_ENDSTOP #MSG_SELFTEST_ENDSTOP
"Endstop" "Endstop"
@ -232,12 +272,28 @@
#MSG_STACK_ERROR c=20 r=4 #MSG_STACK_ERROR c=20 r=4
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Errore - la memoria statica e stata sovrascritta" "Errore - la memoria statica e' stata sovrascritta"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Taglia filamento"
#MSG_CUTTER c=9
"Cutter"
"Tagliatr."
# c=18
"Cutting filament"
"Tagliando filam."
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"ERRORE: il sensore filam. non risponde,Controllare conness." "ERRORE: il sensore filam. non risponde,Controllare conness."
#MSG_DIM c=6
"Dim"
"Scuro"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
"ERRORE:" "ERRORE:"
@ -246,7 +302,7 @@
"Extruder fan:" "Extruder fan:"
"Ventola estr:" "Ventola estr:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"Info estrusore" "Info estrusore"
@ -258,7 +314,7 @@
"Fail stats MMU" "Fail stats MMU"
"Stat.fall. MMU" "Stat.fall. MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"Autocar.fil." "Autocar.fil."
@ -281,13 +337,14 @@
#MSG_FSENSOR #MSG_FSENSOR
"Fil. sensor" "Fil. sensor"
"Sensore fil." "Sensore fil."
#
# c=14
"Filam. runouts" "Filam. runouts"
"Filam. esauriti" "Fil. esauriti"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
"Filamento estruso & con il giusto colore?" "Filamento estruso e con colore corretto?"
#MSG_NOT_LOADED c=19 #MSG_NOT_LOADED c=19
"Filament not loaded" "Filament not loaded"
@ -297,23 +354,27 @@
"Filament sensor" "Filament sensor"
"Sensore filam." "Sensore filam."
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Filamento utilizzato" "Fil. utilizzato"
#MSG_PRINT_TIME c=19 r=1 #MSG_PRINT_TIME c=19 r=1
"Print time" "Print time"
"Tempo di stampa" "Tempo di stampa"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"Azione FS"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"File incompleto. Continuare comunque?" "File incompleto. Continuare comunque?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Finalizzando gli spostamenti" "Finaliz. spostamenti"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Cal. primo strato" "Cal. primo strato"
@ -323,7 +384,7 @@
# #
"Fix the issue and then press button on MMU unit." "Fix the issue and then press button on MMU unit."
"Risolvi il problema e quindi premi il bottone sull'unita MMU. " "Risolvere il problema e premere il bottone sull'unita MMU. "
#MSG_FLOW #MSG_FLOW
"Flow" "Flow"
@ -379,7 +440,7 @@
#MSG_CORRECTLY c=20 #MSG_CORRECTLY c=20
"Changed correctly?" "Changed correctly?"
"Cambiato correttamente?" "Cambio corretto?"
#MSG_SELFTEST_CHECK_BED c=20 #MSG_SELFTEST_CHECK_BED c=20
"Checking bed " "Checking bed "
@ -439,11 +500,11 @@
#MSG_WIZARD_FILAMENT_LOADED c=20 r=2 #MSG_WIZARD_FILAMENT_LOADED c=20 r=2
"Is filament loaded?" "Is filament loaded?"
"Il filamento e stato caricato?" "Il filamento e' stato caricato?"
#MSG_STEEL_SHEET_CHECK c=20 r=2 #MSG_STEEL_SHEET_CHECK c=20 r=2
"Is steel sheet on heatbed?" "Is steel sheet on heatbed?"
"La piastra d'acciaio e sul piano riscaldato?" "Piastra d'acciaio su piano riscaldato?"
# #
"Last print failures" "Last print failures"
@ -477,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Compensazione Z" "Compensazione Z"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Inserire filamento (senza caricarlo) nell'estrusore e premere la manopola."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Carica filamento" "Carica filamento"
@ -497,21 +562,29 @@
"Load to nozzle" "Load to nozzle"
"Carica ugello" "Carica ugello"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Calibrazione primo layer." "M117 Calibr. primo strato"
#MSG_MAIN #MSG_MAIN
"Main" "Main"
"Menu principale" "Menu principale"
#MSG_BL_HIGH c=12
"Level Bright"
"Liv. Chiaro"
#MSG_BL_LOW c=12
"Level Dimmed"
"Liv. Scuro"
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Misura altezza di rif. del punto di calib." "Misura altezza di rif. del punto di calib."
#MSG_MESH_BED_LEVELING #MSG_MESH_BED_LEVELING
"Mesh Bed Leveling" "Mesh Bed Leveling"
"Livel. piatto" "Liv. grilia piano"
#MSG_MMU_OK_RESUMING_POSITION c=20 r=4 #MSG_MMU_OK_RESUMING_POSITION c=20 r=4
"MMU OK. Resuming position..." "MMU OK. Resuming position..."
@ -545,6 +618,10 @@
"Mode" "Mode"
"Mod." "Mod."
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"Firmware MK3 rilevato su stampante MK3S"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"Normale" "Normale"
@ -607,7 +684,7 @@
#MSG_NA #MSG_NA
"N/A" "N/A"
"\x00" "N/D"
#MSG_NO #MSG_NO
"No" "No"
@ -637,7 +714,7 @@
"Nozzle" "Nozzle"
"Ugello" "Ugello"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Sono state trovate impostazioni vecchie. Verranno impostati i valori predefiniti di PID, Esteps etc." "Sono state trovate impostazioni vecchie. Verranno impostati i valori predefiniti di PID, Esteps etc."
@ -669,7 +746,7 @@
"PINDA Heating" "PINDA Heating"
"Riscaldamento PINDA" "Riscaldamento PINDA"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Posizionare un foglio sotto l'ugello durante la calibrazione dei primi 4 punti. In caso l'ugello muova il foglio spegnere subito la stampante." "Posizionare un foglio sotto l'ugello durante la calibrazione dei primi 4 punti. In caso l'ugello muova il foglio spegnere subito la stampante."
@ -741,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Preriscaldando l'ugello. Attendere prego." "Preriscaldando l'ugello. Attendere prego."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Prego aggiornare." "Prego aggiornare."
@ -749,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Premete la manopola per preriscaldare l'ugello e continuare." "Premete la manopola per preriscaldare l'ugello e continuare."
#MSG_FS_PAUSE c=5
"Pause"
"Pausa"
# #
"Power failures" "Power failures"
"Mancanza corrente" "Mancanza corrente"
@ -757,13 +842,13 @@
"Print aborted" "Print aborted"
"Stampa interrotta" "Stampa interrotta"
# # c=20
"Preheating to load" "Preheating to load"
"Preriscaldamento per caricare" "Preriscald. carico"
# # c=20
"Preheating to unload" "Preheating to unload"
"Preriscaldamento per scaricare" "Preriscald. scarico"
#MSG_SELFTEST_PRINT_FAN_SPEED c=18 #MSG_SELFTEST_PRINT_FAN_SPEED c=18
"Print fan:" "Print fan:"
@ -813,15 +898,23 @@
"Rear side [um]" "Rear side [um]"
"Retro [um]" "Retro [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Please unload the filament first, then repeat this action."
"Scaricare prima il filamento, poi ripetere l'operazione."
# c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"Controllare il collegamento al sensore e rimuovere il filamento."
#MSG_RECOVERING_PRINT c=20
"Recovering print " "Recovering print "
"Recupero stampa" "Recupero stampa "
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 #MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Rimuovi il filamento precedente e premi la manopola per caricare il nuovo filamento. " "Rimuovi il filamento precedente e premi la manopola per caricare il nuovo filamento."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"\x00" "\x00"
@ -837,7 +930,7 @@
"Resume print" "Resume print"
"Riprendi stampa" "Riprendi stampa"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Riprendi stampa" "Riprendi stampa"
@ -883,7 +976,7 @@
#MSG_SELFTEST #MSG_SELFTEST
"Selftest " "Selftest "
"Autotest" "Autotest "
#MSG_SELFTEST_ERROR #MSG_SELFTEST_ERROR
"Selftest error !" "Selftest error !"
@ -903,13 +996,25 @@
#MSG_SET_TEMPERATURE c=19 r=1 #MSG_SET_TEMPERATURE c=19 r=1
"Set temperature:" "Set temperature:"
"Imposta temperatura:" "Imposta temperatura"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Impostazioni" "Impostazioni"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Stato finecorsa" "Stato finecorsa"
@ -917,7 +1022,7 @@
"Sensor state" "Sensor state"
"Stato sensore" "Stato sensore"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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." "Alcuni file non saranno ordinati. Il numero massimo di file in una cartella e 100 perche siano ordinati."
@ -957,6 +1062,10 @@
"Sound" "Sound"
"Suono" "Suono"
# c=7
"Runouts"
"Esaurim"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
"Sono stati rilevati problemi, avviato livellamento Z ..." "Sono stati rilevati problemi, avviato livellamento Z ..."
@ -1001,7 +1110,7 @@
"Select filament:" "Select filament:"
"Seleziona il filamento:" "Seleziona il filamento:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Calib. temp." "Calib. temp."
@ -1021,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"Calibrazione temperatura completata e attiva. Puo essere disattivata dal menu Impostazioni ->Cal. Temp." "Calibrazione temperatura completata e attiva. Puo essere disattivata dal menu Impostazioni ->Cal. Temp."
# c=20 r=3
"Sensor verified, remove the filament now."
"Sensore verificato, rimuovere il filamento."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"\x00" "\x00"
@ -1029,7 +1142,7 @@
"Temperatures" "Temperatures"
"Temperature" "Temperature"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"E ancora necessario effettuare la calibrazione Z. Segui il manuale, capitolo Primi Passi, sezione Sequenza di Calibrazione. " "E ancora necessario effettuare la calibrazione Z. Segui il manuale, capitolo Primi Passi, sezione Sequenza di Calibrazione. "
@ -1125,7 +1238,7 @@
"Wizard" "Wizard"
"\x00" "\x00"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"XYZ Cal. dettagli" "XYZ Cal. dettagli"
@ -1149,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"Calibrazion XYZ corretta. Assi X/Y leggermente storti. Ben fatto!" "Calibrazion XYZ corretta. Assi X/Y leggermente storti. Ben fatto!"
# #MSG_TIMEOUT c=12
"Timeout"
"\x00"
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"Correzione-X:" "Correzione-X:"
@ -1171,7 +1288,7 @@
# #
"XYZ calibration failed. Bed calibration point was not found." "XYZ calibration failed. Bed calibration point was not found."
"Calibrazione XYZ fallita. Il punto di calibrazione sul letto non e' stato trovato." "Calibrazione XYZ fallita. Il punto di calibrazione sul piano non e' stato trovato."
# #
"XYZ calibration failed. Front calibration points not reachable." "XYZ calibration failed. Front calibration points not reachable."
@ -1189,7 +1306,11 @@
"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)." "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)."
"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):" "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):"
# # c=20 r=5
"Verification failed, remove the filament and try again."
"Verifica fallita, rimuovere il filamento e riprovare."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Correzione-Y:" "Correzione-Y:"
@ -1231,7 +1352,7 @@
# #
"HW Setup" "HW Setup"
"Installazione HW" "Impostazioni HW"
# #
"IR:" "IR:"
@ -1247,7 +1368,7 @@
# #
"Mesh bed leveling" "Mesh bed leveling"
"Mesh livel. letto" "Liv. griglia piano"
# #
"MK3S firmware detected on MK3 printer" "MK3S firmware detected on MK3 printer"
@ -1297,13 +1418,13 @@
"PINDA:" "PINDA:"
"\x00" "\x00"
# # c=20
"Preheating to cut" "Preheating to cut"
"Preriscaldamento per taglio" "Preriscalda. taglio"
# # c=20
"Preheating to eject" "Preheating to eject"
"Preriscaldamento per espulsione" "Preriscalda. espuls."
# #
"Printer nozzle diameter differs from the G-code. Continue?" "Printer nozzle diameter differs from the G-code. Continue?"
@ -1313,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Diametro ugello diverso dal G-Code. Controlla il valore nelle impostazioni. Stampa annullata." "Diametro ugello diverso dal G-Code. Controlla il valore nelle impostazioni. Stampa annullata."
# c=20
"%s level expected"
"atteso livello %s"
# #
"Rename" "Rename"
"Rinomina" "Rinomina"
@ -1325,7 +1450,7 @@
"Sensor info" "Sensor info"
"Info Sensore" "Info Sensore"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Piano" "Piano"
@ -1333,14 +1458,15 @@
"Assist" "Assist"
"Assist." "Assist."
# # c=18
"Steel sheets" "Steel sheets"
"Piani d'acciaio" "Piani d'acciaio"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Correzione-Z:" "Correzione-Z:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"\x00" "Nr. Z-test"

218
lang/lang_en_pl.txt Executable file → Normal file
View File

@ -2,6 +2,26 @@
"[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset" "[%.7s]Live adj. Z\x0avalue set, continue\x0aor start from zero?\x0a%cContinue%cReset"
"[%.7s]Live Adj. Z\x0austaw., kontynuowac\x0aczy zaczac od 0?\x0a%cKontynuuj%cReset" "[%.7s]Live Adj. Z\x0austaw., kontynuowac\x0aczy zaczac od 0?\x0a%cKontynuuj%cReset"
#MSG_IR_03_OR_OLDER c=18
" 0.3 or older"
" 0.3 lub starszy"
# c=18
"FS v0.3 or older"
"FS 0.3 lub starszy"
#MSG_IR_04_OR_NEWER c=18
" 0.4 or newer"
" 0.4 lub nowszy"
# c=18
"FS v0.4 or newer"
"FS 0.4 lub nowszy"
#MSG_IR_UNKNOWN c=18
"unknown state"
"Stan nieznany"
#MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14 #MSG_IMPROVE_BED_OFFSET_AND_SKEW_LINE2 c=14
" of 4" " of 4"
" z 4" " z 4"
@ -42,7 +62,11 @@
"Ambient" "Ambient"
"Otoczenie" "Otoczenie"
#MSG_PRESS c=20 #MSG_AUTO c=6
"Auto"
"\x00"
#MSG_PRESS c=20 r=2
"and press the knob" "and press the knob"
"i nacisnij pokretlo" "i nacisnij pokretlo"
@ -58,7 +82,7 @@
"Auto home" "Auto home"
"Auto zerowanie" "Auto zerowanie"
#MSG_AUTOLOAD_FILAMENT c=17 #MSG_AUTOLOAD_FILAMENT c=18
"AutoLoad filament" "AutoLoad filament"
"Autoladowanie fil." "Autoladowanie fil."
@ -94,15 +118,27 @@
"Bed level correct" "Bed level correct"
"Korekta stolu" "Korekta stolu"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=4 #MSG_BELTTEST c=17
"Belt test "
"Test paskow"
#MSG_BED_LEVELING_FAILED_POINT_LOW c=20 r=5
"Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset." "Bed leveling failed. Sensor didnt trigger. Debris on nozzle? Waiting for reset."
"Kalibracja nieudana. Sensor nie aktywowal sie. Zanieczysz. dysza? Czekam na reset." "Kalibracja nieudana. Sensor nie aktywowal sie. Zanieczysz. dysza? Czekam na reset."
#MSG_BRIGHT c=6
"Bright"
"Jasny"
#MSG_BRIGHTNESS c=18
"Brightness"
"Jasnosc"
#MSG_BED #MSG_BED
"Bed" "Bed"
"Stol" "Stol"
#MSG_MENU_BELT_STATUS c=15 r=1 #MSG_MENU_BELT_STATUS c=18
"Belt status" "Belt status"
"Stan paskow" "Stan paskow"
@ -202,11 +238,15 @@
"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." "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."
"Odleglosc dyszy od powierzchni druku nie jest skalibrowana. Postepuj zgodnie z instrukcja: rozdzial Wprowadzenie - Kalibracja pierwszej warstwy." "Odleglosc dyszy od powierzchni druku nie jest skalibrowana. Postepuj zgodnie z instrukcja: rozdzial Wprowadzenie - Kalibracja pierwszej warstwy."
#MSG_FS_CONTINUE c=5
"Cont."
"Kont."
#MSG_WIZARD_REPEAT_V2_CAL c=20 r=7 #MSG_WIZARD_REPEAT_V2_CAL c=20 r=7
"Do you want to repeat last step to readjust distance between nozzle and heatbed?" "Do you want to repeat last step to readjust distance between nozzle and heatbed?"
"Chcesz powtorzyc ostatni krok i ponownie ustawic odleglosc miedzy dysza a stolikiem?" "Chcesz powtorzyc ostatni krok i ponownie ustawic odleglosc miedzy dysza a stolikiem?"
#MSG_EXTRUDER_CORRECTION c=10 #MSG_EXTRUDER_CORRECTION c=13
"E-correct:" "E-correct:"
"Korekcja-E:" "Korekcja-E:"
@ -218,7 +258,7 @@
"Ejecting filament" "Ejecting filament"
"Wysuwanie filamentu" "Wysuwanie filamentu"
#MSG_SELFTEST_ENDSTOP_NOTHIT c=20 r=1 #MSG_SELFTEST_ENDSTOP_NOTHIT c=20
"Endstop not hit" "Endstop not hit"
"Krancowka nie aktyw." "Krancowka nie aktyw."
@ -234,10 +274,26 @@
"Error - static memory has been overwritten" "Error - static memory has been overwritten"
"Blad - pamiec statyczna zostala nadpisana" "Blad - pamiec statyczna zostala nadpisana"
#MSG_CUT_FILAMENT c=16
"Cut filament"
"Ciecie filamentu"
#MSG_CUTTER c=9
"Cutter"
"Nozyk"
# c=18
"Cutting filament"
"Obcinanie fil."
#MSG_FSENS_NOT_RESPONDING c=20 r=4 #MSG_FSENS_NOT_RESPONDING c=20 r=4
"ERROR: Filament sensor is not responding, please check connection." "ERROR: Filament sensor is not responding, please check connection."
"BLAD: Czujnik filamentu nie odpowiada, sprawdz polaczenie." "BLAD: Czujnik filamentu nie odpowiada, sprawdz polaczenie."
#MSG_DIM c=6
"Dim"
"Sciemn"
#MSG_ERROR #MSG_ERROR
"ERROR:" "ERROR:"
"BLAD:" "BLAD:"
@ -246,7 +302,7 @@
"Extruder fan:" "Extruder fan:"
"WentHotend:" "WentHotend:"
#MSG_INFO_EXTRUDER c=15 r=1 #MSG_INFO_EXTRUDER c=18
"Extruder info" "Extruder info"
"Ekstruder - info" "Ekstruder - info"
@ -258,7 +314,7 @@
"Fail stats MMU" "Fail stats MMU"
"Bledy MMU" "Bledy MMU"
#MSG_FSENSOR_AUTOLOAD #MSG_FSENSOR_AUTOLOAD c=13
"F. autoload" "F. autoload"
"Autolad. fil." "Autolad. fil."
@ -282,13 +338,13 @@
"Fil. sensor" "Fil. sensor"
"Czuj. filam." "Czuj. filam."
# # c=14
"Filam. runouts" "Filam. runouts"
"Konc. filamentu" "Konc.filamentu"
#MSG_FILAMENT_CLEAN c=20 r=2 #MSG_FILAMENT_CLEAN c=20 r=2
"Filament extruding & with correct color?" "Filament extruding & with correct color?"
"Filament wychodzi z dyszy, kolor jest ok?" "Filament wychodzi z dyszy,kolor jest ok?"
#MSG_NOT_LOADED c=19 #MSG_NOT_LOADED c=19
"Filament not loaded" "Filament not loaded"
@ -298,7 +354,7 @@
"Filament sensor" "Filament sensor"
"Czujnik filamentu" "Czujnik filamentu"
#MSG_FILAMENT_USED c=19 r=1 #MSG_FILAMENT_USED c=19
"Filament used" "Filament used"
"Uzyty filament" "Uzyty filament"
@ -306,15 +362,19 @@
"Print time" "Print time"
"Czas druku" "Czas druku"
#MSG_FILE_INCOMPLETE c=20 r=2 #MSG_FS_ACTION c=10
"FS Action"
"Akcja FS"
#MSG_FILE_INCOMPLETE c=20 r=3
"File incomplete. Continue anyway?" "File incomplete. Continue anyway?"
"Plik niekompletny. Kontynowac?" "Plik niekompletny. Kontynowac?"
#MSG_FINISHING_MOVEMENTS c=20 r=1 #MSG_FINISHING_MOVEMENTS c=20
"Finishing movements" "Finishing movements"
"Konczenie druku" "Konczenie druku"
#MSG_V2_CALIBRATION c=17 r=1 #MSG_V2_CALIBRATION c=18
"First layer cal." "First layer cal."
"Kal. 1. warstwy" "Kal. 1. warstwy"
@ -396,7 +456,7 @@
#MSG_SELFTEST_CHECK_FSENSOR c=20 #MSG_SELFTEST_CHECK_FSENSOR c=20
"Checking sensors " "Checking sensors "
"Sprawdzanie czujnikow" "Kontrola czujnikow"
#MSG_SELFTEST_CHECK_X c=20 #MSG_SELFTEST_CHECK_X c=20
"Checking X axis " "Checking X axis "
@ -478,6 +538,10 @@
"Live adjust Z" "Live adjust Z"
"Ustaw. Live Z" "Ustaw. Live Z"
# c=20 r=6
"Insert the filament (do not load it) into the extruder and then press the knob."
"Wsun filament (nie uzywaj funkcji ladowania) do ekstrudera i nacisnij pokretlo."
#MSG_LOAD_FILAMENT c=17 #MSG_LOAD_FILAMENT c=17
"Load filament" "Load filament"
"Ladowanie fil." "Ladowanie fil."
@ -498,7 +562,7 @@
"Load to nozzle" "Load to nozzle"
"Zaladuj do dyszy" "Zaladuj do dyszy"
#MSG_M117_V2_CALIBRATION c=25 r=1 #MSG_M117_V2_CALIBRATION c=25
"M117 First layer cal." "M117 First layer cal."
"M117 Kal. 1. warstwy" "M117 Kal. 1. warstwy"
@ -506,6 +570,14 @@
"Main" "Main"
"Menu glowne" "Menu glowne"
#MSG_BL_HIGH c=12
"Level Bright"
"Poziom jasn."
#MSG_BL_LOW c=12
"Level Dimmed"
"Poziom ciem."
#MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60 #MSG_MEASURE_BED_REFERENCE_HEIGHT_LINE1 c=60
"Measuring reference height of calibration point" "Measuring reference height of calibration point"
"Okreslam wysokosc odniesienia punktu kalibracyjnego" "Okreslam wysokosc odniesienia punktu kalibracyjnego"
@ -546,9 +618,13 @@
"Mode" "Mode"
"Tryb" "Tryb"
# c=20 r=3
"MK3 firmware detected on MK3S printer"
"Wykryto firmware MK3 w drukarce MK3S"
#MSG_NORMAL #MSG_NORMAL
"Normal" "Normal"
"Normalny" "Normalni"
#MSG_SILENT #MSG_SILENT
"Silent" "Silent"
@ -638,7 +714,7 @@
"Nozzle" "Nozzle"
"Dysza" "Dysza"
#MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 #MSG_DEFAULT_SETTINGS_LOADED c=20 r=5
"Old settings found. Default PID, Esteps etc. will be set." "Old settings found. Default PID, Esteps etc. will be set."
"Znaleziono stare ustawienia. Zostana przywrocone domyslne ust. PID, Esteps, itp." "Znaleziono stare ustawienia. Zostana przywrocone domyslne ust. PID, Esteps, itp."
@ -670,7 +746,7 @@
"PINDA Heating" "PINDA Heating"
"Grzanie sondy PINDA" "Grzanie sondy PINDA"
#MSG_PAPER c=20 r=8 #MSG_PAPER c=20 r=10
"Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately." "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
"Umiesc kartke papieru na stole roboczym i podczas pomiaru pierwszych 4 punktow. Jesli dysza zahaczy o papier, natychmiast wylacz drukarke." "Umiesc kartke papieru na stole roboczym i podczas pomiaru pierwszych 4 punktow. Jesli dysza zahaczy o papier, natychmiast wylacz drukarke."
@ -742,6 +818,10 @@
"Preheating nozzle. Please wait." "Preheating nozzle. Please wait."
"Nagrzewanie dyszy. Prosze czekac." "Nagrzewanie dyszy. Prosze czekac."
# c=14
"PINDA"
"\x00"
# #
"Please upgrade." "Please upgrade."
"Prosze zaktualizowac." "Prosze zaktualizowac."
@ -750,6 +830,10 @@
"Press knob to preheat nozzle and continue." "Press knob to preheat nozzle and continue."
"Wcisnij pokretlo aby rozgrzac dysze i kontynuowac." "Wcisnij pokretlo aby rozgrzac dysze i kontynuowac."
#MSG_FS_PAUSE c=5
"Pause"
"Pauza"
# #
"Power failures" "Power failures"
"Zaniki zasilania" "Zaniki zasilania"
@ -758,11 +842,11 @@
"Print aborted" "Print aborted"
"Druk przerwany" "Druk przerwany"
# # c=20
"Preheating to load" "Preheating to load"
"Nagrzew. do ladowania" "Nagrzew.do ladowania"
# # c=20
"Preheating to unload" "Preheating to unload"
"Nagrzew. do rozlad." "Nagrzew. do rozlad."
@ -814,17 +898,25 @@
"Rear side [um]" "Rear side [um]"
"Tyl [um]" "Tyl [um]"
#MSG_RECOVERING_PRINT c=20 r=1 # c=20 r=4
"Recovering print " "Please unload the filament first, then repeat this action."
"Wznawianie wydruku" "Najpierw rozladuj filament, nastepnie powtorz czynnosc."
#MSG_REMOVE_OLD_FILAMENT c=20 r=4 # c=20 r=4
"Please check the IR sensor connection, unload filament if present."
"Sprawdz polaczenie czujnika IR, rozladuj filament, jesli zaladowany."
#MSG_RECOVERING_PRINT c=20
"Recovering print "
"Wznawianie wydruku "
#MSG_REMOVE_OLD_FILAMENT c=20 r=5
"Remove old filament and press the knob to start loading new filament." "Remove old filament and press the knob to start loading new filament."
"Wyciagnij poprzedni filament i nacisnij pokretlo aby zaladowac nowy." "Wyciagnij poprzedni filament i nacisnij pokretlo aby zaladowac nowy."
# # c=20
"Prusa i3 MK3S OK." "Prusa i3 MK3S OK."
"Prusa i3 MK3S OK" "\x00"
#MSG_CALIBRATE_BED_RESET #MSG_CALIBRATE_BED_RESET
"Reset XYZ calibr." "Reset XYZ calibr."
@ -838,7 +930,7 @@
"Resume print" "Resume print"
"Wznowic wydruk" "Wznowic wydruk"
#MSG_RESUMING_PRINT c=20 r=1 #MSG_RESUMING_PRINT c=20
"Resuming print" "Resuming print"
"Wznawianie druku" "Wznawianie druku"
@ -906,11 +998,23 @@
"Set temperature:" "Set temperature:"
"Ustaw temperature:" "Ustaw temperature:"
# c=20
"Prusa i3 MK2.5 OK."
"\x00"
# c=20
"Prusa i3 MK2.5S OK."
"\x00"
# c=20
"Prusa i3 MK3 OK."
"\x00"
#MSG_SETTINGS #MSG_SETTINGS
"Settings" "Settings"
"Ustawienia" "Ustawienia"
#MSG_SHOW_END_STOPS c=17 r=1 #MSG_SHOW_END_STOPS c=18
"Show end stops" "Show end stops"
"Pokaz krancowki" "Pokaz krancowki"
@ -918,7 +1022,7 @@
"Sensor state" "Sensor state"
"Stan czujnikow" "Stan czujnikow"
#MSG_FILE_CNT c=20 r=4 #MSG_FILE_CNT c=20 r=6
"Some files will not be sorted. Max. No. of files in 1 folder for sorting is 100." "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." "Niektore pliki nie zostana posortowane. Max. liczba plikow w 1 folderze = 100."
@ -958,6 +1062,10 @@
"Sound" "Sound"
"Dzwiek" "Dzwiek"
# c=7
"Runouts"
"Konce f"
# #
"Some problem encountered, Z-leveling enforced ..." "Some problem encountered, Z-leveling enforced ..."
"Wykryto problem, wymuszono poziomowanie osi Z." "Wykryto problem, wymuszono poziomowanie osi Z."
@ -965,6 +1073,7 @@
#MSG_SOUND_ONCE #MSG_SOUND_ONCE
"Once" "Once"
"1-raz" "1-raz"
#MSG_SPEED #MSG_SPEED
"Speed" "Speed"
"Predkosc" "Predkosc"
@ -1001,9 +1110,9 @@
"Select filament:" "Select filament:"
"Wybierz filament:" "Wybierz filament:"
#MSG_TEMP_CALIBRATION c=12 r=1 #MSG_TEMP_CALIBRATION c=14
"Temp. cal." "Temp. cal."
"Kalibracja temp." "Kalib. temp."
# #
"Select temperature which matches your material." "Select temperature which matches your material."
@ -1021,6 +1130,10 @@
"Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal." "Temperature calibration is finished and active. Temp. calibration can be disabled in menu Settings->Temp. cal."
"Kalibracja temperaturowa zakonczona i wlaczona. Moze byc wylaczona z menu Ustawienia -> Kalibracja temp." "Kalibracja temperaturowa zakonczona i wlaczona. Moze byc wylaczona z menu Ustawienia -> Kalibracja temp."
# c=20 r=3
"Sensor verified, remove the filament now."
"Czujnik sprawdzony, wyciagnij filament."
#MSG_TEMPERATURE #MSG_TEMPERATURE
"Temperature" "Temperature"
"Temperatura" "Temperatura"
@ -1029,7 +1142,7 @@
"Temperatures" "Temperatures"
"Temperatury" "Temperatury"
#MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=4 #MSG_FOLLOW_Z_CALIBRATION_FLOW c=20 r=9
"There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow." "There is still a need to make Z calibration. Please follow the manual, chapter First steps, section Calibration flow."
"Musimy przeprowadzic kalibracje Z. Kieruj sie Samouczkiem: rozdzial Pierwsze Kroki, sekcja Kalibracja." "Musimy przeprowadzic kalibracje Z. Kieruj sie Samouczkiem: rozdzial Pierwsze Kroki, sekcja Kalibracja."
@ -1125,7 +1238,7 @@
"Wizard" "Wizard"
"Asystent" "Asystent"
#MSG_XYZ_DETAILS c=19 r=1 #MSG_XYZ_DETAILS c=18
"XYZ cal. details" "XYZ cal. details"
"Szczegoly kal. XYZ" "Szczegoly kal. XYZ"
@ -1149,7 +1262,11 @@
"XYZ calibration all right. X/Y axes are slightly skewed. Good job!" "XYZ calibration all right. X/Y axes are slightly skewed. Good job!"
"Kalibracja XYZ prawidlowa. Osie X/Y lekko skosne. Dobra robota!" "Kalibracja XYZ prawidlowa. Osie X/Y lekko skosne. Dobra robota!"
# #MSG_TIMEOUT c=12
"Timeout"
"Wyl. czas."
#MSG_X_CORRECTION c=13
"X-correct:" "X-correct:"
"Korekcja-X:" "Korekcja-X:"
@ -1189,7 +1306,11 @@
"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)." "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)."
"Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)." "Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)."
# # c=20 r=5
"Verification failed, remove the filament and try again."
"Niepowodzenie sprawdzenia, wyciagnij filament i sprobuj ponownie."
#MSG_Y_CORRECTION c=13
"Y-correct:" "Y-correct:"
"Korekcja-Y:" "Korekcja-Y:"
@ -1271,7 +1392,7 @@
# #
"G-code sliced for a different level. Continue?" "G-code sliced for a different level. Continue?"
"\x00" "G-code pociety dla innej wersji. Kontynuowac?"
# #
"G-code sliced for a different level. Please re-slice the model again. Print cancelled." "G-code sliced for a different level. Please re-slice the model again. Print cancelled."
@ -1297,13 +1418,13 @@
"PINDA:" "PINDA:"
"\x00" "\x00"
# # c=20
"Preheating to cut" "Preheating to cut"
"Nagrzewanie do obciecia" "Nagrzew. obciecia"
# # c=20
"Preheating to eject" "Preheating to eject"
"Nagrzewanie do wysuniecia" "Nagrzew. wysuniecia"
# #
"Printer nozzle diameter differs from the G-code. Continue?" "Printer nozzle diameter differs from the G-code. Continue?"
@ -1313,6 +1434,10 @@
"Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled." "Printer nozzle diameter differs from the G-code. Please check the value in settings. Print cancelled."
"Srednica dyszy rozni sie od tej w G-code. Sprawdz ustawienia. Druk anulowany." "Srednica dyszy rozni sie od tej w G-code. Sprawdz ustawienia. Druk anulowany."
# c=20
"%s level expected"
"Oczekiwano wersji %s"
# #
"Rename" "Rename"
"Zmien nazwe" "Zmien nazwe"
@ -1325,7 +1450,7 @@
"Sensor info" "Sensor info"
"Info o sensorach" "Info o sensorach"
# #MSG_SHEET c=10
"Sheet" "Sheet"
"Plyta" "Plyta"
@ -1333,14 +1458,15 @@
"Assist" "Assist"
"Asyst." "Asyst."
# # c=18
"Steel sheets" "Steel sheets"
"Plyty stalowe" "Plyty stalowe"
# #MSG_Z_CORRECTION c=13
"Z-correct:" "Z-correct:"
"Korekcja-Z:" "Korekcja-Z:"
#MSG_Z_PROBE_NR #MSG_Z_PROBE_NR
"Z-probe nr." "Z-probe nr."
"Ilosc Pomiarow" "Ilosc Pomiarow"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff