From d38b96fff165c89ae8fffbb54c81d23f755c58fc Mon Sep 17 00:00:00 2001 From: elgambitero Date: Sun, 12 Aug 2012 22:45:11 +0300 Subject: [PATCH 01/52] Update Marlin/language.h --- Marlin/language.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/language.h b/Marlin/language.h index 973a8929c2..9ad0311111 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -344,7 +344,7 @@ #define MSG_NOZZLE " \002Nozzle:" #define MSG_NOZZLE1 " \002Nozzle2:" #define MSG_NOZZLE2 " \002Nozzle3:" -#define MSG_BED " \002Bed:" +#define MSG_BED " \002Base:" #define MSG_FAN_SPEED " Ventilador:" #define MSG_FLOW " Flujo:" #define MSG_CONTROL " Control \003" From b9f9f8f7d39cedfe30e64ed9d15af154e2e83bf6 Mon Sep 17 00:00:00 2001 From: Blair Thompson Date: Mon, 20 Aug 2012 21:49:37 +0100 Subject: [PATCH 02/52] The pre-heat ABS and PLA options in the LCD Menu were broken a while back. The pre-heat worked fine, but the cooling fans were not switching on as intended. This is now fixed. --- Marlin/ultralcd.pde | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 9be357cb98..98d9f4bc86 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -530,14 +530,16 @@ void MainMenu::showPrepare() case ItemP_preheat_pla: MENUITEM( lcdprintPGM(MSG_PREHEAT_PLA) , BLOCK;setTargetHotend0(PLA_PREHEAT_HOTEND_TEMP);setTargetBed(PLA_PREHEAT_HPB_TEMP); #if FAN_PIN > -1 - analogWrite(FAN_PIN, PLA_PREHEAT_FAN_SPEED); + FanSpeed=PLA_PREHEAT_FAN_SPEED; + analogWrite(FAN_PIN, FanSpeed); #endif beepshort(); ); break; case ItemP_preheat_abs: MENUITEM( lcdprintPGM(MSG_PREHEAT_ABS) , BLOCK;setTargetHotend0(ABS_PREHEAT_HOTEND_TEMP);setTargetBed(ABS_PREHEAT_HPB_TEMP); #if FAN_PIN > -1 - analogWrite(FAN_PIN, ABS_PREHEAT_FAN_SPEED); + FanSpeed=ABS_PREHEAT_FAN_SPEED; + analogWrite(FAN_PIN, FanSpeed); #endif beepshort(); ); break; From 6c050b8440f6493f449df851cd7f3fbf467c513b Mon Sep 17 00:00:00 2001 From: Blair Thompson Date: Mon, 20 Aug 2012 21:54:47 +0100 Subject: [PATCH 03/52] Fixes error introduced at commit aee475aa55f3a53428ed6b60bb8d6662046cd16c which caused the sketch not to comile for language option 1. Several defines were removed but still referenced in ultralcd.pde --- Marlin/language.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Marlin/language.h b/Marlin/language.h index 12461a6fe1..99c6751451 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -37,6 +37,7 @@ #define MSG_SET_ORIGIN " Set Origin" #define MSG_COOLDOWN " Cooldown" #define MSG_EXTRUDE " Extrude" + #define MSG_RETRACT " Extract" #define MSG_PREHEAT_PLA " Preheat PLA" #define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_MOVE_AXIS " Move Axis \x7E" @@ -87,6 +88,8 @@ #define MSG_CONTROL_ARROW " Control \x7E" #define MSG_RETRACT_ARROW " Control \x7E" #define MSG_TUNE " Tune \x7E" + #define MSG_PAUSE_PRINT " Pause Print \x7E" + #define MSG_RESUME_PRINT " Resume Print \x7E" #define MSG_STOP_PRINT " Stop Print \x7E" #define MSG_CARD_MENU " Card Menu \x7E" #define MSG_NO_CARD " No Card" From 69961dbba32c3a8f9638507d4e5c9724ba50e332 Mon Sep 17 00:00:00 2001 From: stohn Date: Tue, 21 Aug 2012 14:44:20 +0200 Subject: [PATCH 04/52] fixed incorrect menu messages from last commit... - removed several multiple definitions of same message - fixed definition of missing messages in german and spanish - tweaked german translation (a lot) - added note about changing and testing this file --- Marlin/language.h | 187 ++++++++++++++++++++++++---------------------- 1 file changed, 98 insertions(+), 89 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index 99c6751451..8ace273ec4 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -1,11 +1,16 @@ #ifndef LANGUAGE_H #define LANGUAGE_H +// NOTE: IF YOU CHANGE THIS FILE / MERGE THIS FILE WITH CHANGES +// +// ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h" +// ==> ALSO TRY ALL AVAILABLE "LANGUAGE_CHOICE" OPTIONS + // Languages -// 1 Custom (For you to add your own messages) -// 2 English +// 1 English +// 2 - // 3 French (Waiting translation) -// 4 German (Waiting translation) +// 4 German // 5 Spanish // 6 Etc @@ -37,7 +42,7 @@ #define MSG_SET_ORIGIN " Set Origin" #define MSG_COOLDOWN " Cooldown" #define MSG_EXTRUDE " Extrude" - #define MSG_RETRACT " Extract" + #define MSG_RETRACT " Retract" #define MSG_PREHEAT_PLA " Preheat PLA" #define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_MOVE_AXIS " Move Axis \x7E" @@ -86,29 +91,27 @@ #define MSG_PREPARE " Prepare \x7E" #define MSG_PREPARE_ALT " Prepare \003" #define MSG_CONTROL_ARROW " Control \x7E" - #define MSG_RETRACT_ARROW " Control \x7E" + #define MSG_RETRACT_ARROW " Retract \x7E" #define MSG_TUNE " Tune \x7E" #define MSG_PAUSE_PRINT " Pause Print \x7E" #define MSG_RESUME_PRINT " Resume Print \x7E" #define MSG_STOP_PRINT " Stop Print \x7E" #define MSG_CARD_MENU " Card Menu \x7E" #define MSG_NO_CARD " No Card" - #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Something is wrong in the MenuStructure." #define MSG_DWELL "Sleep..." #define MSG_USERWAIT "Wait for user..." #define MSG_NO_MOVE "No move." #define MSG_PART_RELEASE "Partial Release" #define MSG_KILLED "KILLED. " #define MSG_STOPPED "STOPPED. " - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_STEPPER_RELEASED "Released." - #define MSG_CONTROL_RETRACT " Retract mm:" - #define MSG_CONTROL_RETRACTF " Retract F:" - #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" - #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" - #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" - #define MSG_AUTORETRACT " AutoRetr.:" + #define MSG_CONTROL_RETRACT " Retract mm:" + #define MSG_CONTROL_RETRACTF " Retract F:" + #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" + #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" + #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" + #define MSG_AUTORETRACT " AutoRetr.:" + #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Something is wrong in the MenuStructure." // Serial Console Messages @@ -181,84 +184,87 @@ // LCD Menu Messages - #define WELCOME_MSG MACHINE_NAME " Ready." + #define WELCOME_MSG MACHINE_NAME " Bereit." - #define MSG_SD_INSERTED "Card inserted" - #define MSG_SD_REMOVED "Card removed" - #define MSG_MAIN " Main \003" - #define MSG_AUTOSTART " Autostart" + #define MSG_SD_INSERTED "SDKarte erkannt" + #define MSG_SD_REMOVED "SDKarte entfernt" + #define MSG_MAIN " Hauptmneü \003" + #define MSG_AUTOSTART " Autostart" #define MSG_DISABLE_STEPPERS " Stepper abschalten" - #define MSG_AUTO_HOME " Auto Heim" - #define MSG_SET_ORIGIN " Position setzen" - #define MSG_PREHEAT_PLA " Aufheizen PLA" - #define MSG_PREHEAT_ABS " Aufheizen ABS" - #define MSG_COOLDOWN " Abkuehlen" - #define MSG_EXTRUDE " Extrude" - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_MOVE_AXIS " Move Axis \x7E" - #define MSG_MOVE_AXIS " Achsen verfahren \x7E" - #define MSG_SPEED " Geschw:" - #define MSG_NOZZLE " \002Duese:" - #define MSG_NOZZLE1 " \002Duese2:" - #define MSG_NOZZLE2 " \002Duese3:" - #define MSG_BED " \002Bett:" - #define MSG_FAN_SPEED " Luefter geschw.:" - #define MSG_FLOW " Fluss:" - #define MSG_CONTROL " Kontrolle \003" - #define MSG_MIN " \002 Min:" - #define MSG_MAX " \002 Max:" - #define MSG_FACTOR " \002 Faktor:" - #define MSG_AUTOTEMP " AutoTemp:" - #define MSG_ON "Ein " - #define MSG_OFF "Aus " - #define MSG_PID_P " PID-P: " - #define MSG_PID_I " PID-I: " - #define MSG_PID_D " PID-D: " - #define MSG_PID_C " PID-C: " - #define MSG_ACC " Acc:" - #define MSG_VXY_JERK " Vxy-jerk: " - #define MSG_VMAX " Vmax " - #define MSG_X "x:" - #define MSG_Y "y:" - #define MSG_Z "z:" - #define MSG_E "e:" - #define MSG_VMIN " Vmin:" - #define MSG_VTRAV_MIN " VTrav min:" - #define MSG_AMAX " Amax " - #define MSG_A_RETRACT " A-retract:" - #define MSG_XSTEPS " Xsteps/mm:" - #define MSG_YSTEPS " Ysteps/mm:" - #define MSG_ZSTEPS " Zsteps/mm:" - #define MSG_ESTEPS " Esteps/mm:" - #define MSG_MAIN_WIDE " Main \003" - #define MSG_TEMPERATURE_WIDE " Temperatur \x7E" - #define MSG_MOTION_WIDE " Motion \x7E" - #define MSG_STORE_EPROM " EPROM speichern" - #define MSG_LOAD_EPROM " EPROM laden" - #define MSG_RESTORE_FAILSAFE " Standard Konfig." - #define MSG_REFRESH "\004Refresh" - #define MSG_WATCH " Beobachten \003" - #define MSG_PREPARE " Prepare \x7E" - #define MSG_PREPARE_ALT " Prepare \003" - #define MSG_CONTROL_ARROW " Control \x7E" + #define MSG_AUTO_HOME " Auto Nullpunkt" + #define MSG_SET_ORIGIN " Setze Nullpunkt" + #define MSG_PREHEAT_PLA " Vorwärmen PLA" + #define MSG_PREHEAT_ABS " Vorwärmen ABS" + #define MSG_COOLDOWN " Abkühlen" + #define MSG_EXTRUDE " Extrude" + #define MSG_RETRACT " Retract" + #define MSG_MOVE_AXIS " Achsen bewegen\x7E" + #define MSG_SPEED " Geschw:" + #define MSG_NOZZLE " \002Düse:" + #define MSG_NOZZLE1 " \002Düse2:" + #define MSG_NOZZLE2 " \002Düse3:" + #define MSG_BED " \002Bett:" + #define MSG_FAN_SPEED " Lüftergeschw.:" + #define MSG_FLOW " Fluß:" + #define MSG_CONTROL " Einstellungen \003" + #define MSG_MIN " \002 Min:" + #define MSG_MAX " \002 Max:" + #define MSG_FACTOR " \002 Faktor:" + #define MSG_AUTOTEMP " AutoTemp:" + #define MSG_ON "Ein " + #define MSG_OFF "Aus " + #define MSG_PID_P " PID-P: " + #define MSG_PID_I " PID-I: " + #define MSG_PID_D " PID-D: " + #define MSG_PID_C " PID-C: " + #define MSG_ACC " Acc:" + #define MSG_VXY_JERK " Vxy-jerk: " + #define MSG_VMAX " Vmax " + #define MSG_X "x:" + #define MSG_Y "y:" + #define MSG_Z "z:" + #define MSG_E "e:" + #define MSG_VMIN " Vmin:" + #define MSG_VTRAV_MIN " VTrav min:" + #define MSG_AMAX " Amax " + #define MSG_A_RETRACT " A-Retract:" + #define MSG_XSTEPS " Xsteps/mm:" + #define MSG_YSTEPS " Ysteps/mm:" + #define MSG_ZSTEPS " Zsteps/mm:" + #define MSG_ESTEPS " Esteps/mm:" + #define MSG_MAIN_WIDE " Hauptmenü \003" + #define MSG_RECTRACT_WIDE " Rectract \x7E" + #define MSG_WATCH " Beobachten \003" + #define MSG_TEMPERATURE_WIDE " Temperatur \x7E" + #define MSG_MOTION_WIDE " Bewegung \x7E" + #define MSG_STORE_EPROM " EPROM speichern" + #define MSG_LOAD_EPROM " EPROM laden" + #define MSG_RESTORE_FAILSAFE " Standardkonfig." + #define MSG_REFRESH "\004Aktualisieren" + #define MSG_PREPARE " Vorbereitung \x7E" + #define MSG_PREPARE_ALT " Vorbereitung \003" + #define MSG_CONTROL_ARROW " Einstellungen \x7E" + #define MSG_TUNE " Justierung \x7E" + #define MSG_PAUSE_PRINT " Druck anhalten\x7E" + #define MSG_RESUME_PRINT " Druck fortsetz\x7E" + #define MSG_STOP_PRINT " Druck stoppen \x7E" + #define MSG_CARD_MENU " SDKarten Menü \x7E" + #define MSG_NO_CARD " Keine SDKarte" + #define MSG_DWELL "Warten..." + #define MSG_USERWAIT "Warte auf Nutzer..." + #define MSG_NO_MOVE "Kein Zug." + #define MSG_PART_RELEASE "Stepper tlw frei" + #define MSG_KILLED "KILLED" + #define MSG_STOPPED "GESTOPPT" + #define MSG_STEPPER_RELEASED "Stepper frei" + #define MSG_CONTROL_RETRACT " Retract mm:" + #define MSG_CONTROL_RETRACTF " Retract F:" + #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" + #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" + #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" + #define MSG_AUTORETRACT " AutoRetr.:" + #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Fehler in Menüstruktur." - #define MSG_TUNE " Tune \x7E" - #define MSG_STOP_PRINT " Druck stoppen \x7E" - #define MSG_CARD_MENU " SDKarten Menue \x7E" - #define MSG_NO_CARD " Keine SDKarte" - #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Fehler in der Menuestruktur." - #define MSG_DWELL "DWELL..." - #define MSG_NO_MOVE "No move." - #define MSG_PART_RELEASE "Partial Release" - #define MSG_KILLED "KILLED. " - #define MSG_STOPPED "STOPPED. " - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_STEPPER_RELEASED "Released." - - - // Serial Console Messages #define MSG_Enqueing "enqueing \"" @@ -340,6 +346,7 @@ #define MSG_SET_ORIGIN " Establecer Cero" #define MSG_COOLDOWN " Enfriar" #define MSG_EXTRUDE " Extruir" +#define MSG_RETRACT " Retract" #define MSG_PREHEAT_PLA " Precalentar PLA" #define MSG_PREHEAT_ABS " Precalentar ABS" #define MSG_MOVE_AXIS " Mover Ejes \x7E" @@ -390,6 +397,8 @@ #define MSG_CONTROL_ARROW " Control \x7E" #define MSG_RETRACT_ARROW " Control \x7E" #define MSG_TUNE " Ajustar \x7E" +#define MSG_PAUSE_PRINT " Pause Print \x7E" +#define MSG_RESUME_PRINT " Resume Print \x7E" #define MSG_STOP_PRINT " Detener Impresion \x7E" #define MSG_CARD_MENU " Menu de SD \x7E" #define MSG_NO_CARD " No hay Tarjeta SD" From de0448343f198369f018ed370d357364b9bd81f6 Mon Sep 17 00:00:00 2001 From: stohn Date: Tue, 21 Aug 2012 14:48:29 +0200 Subject: [PATCH 05/52] added KILL_PIN support / cleaned up manage_inactivity function definition --- Marlin/Marlin.h | 2 +- Marlin/Marlin.pde | 46 +++++++++++++++++++++++++++++----------------- Marlin/planner.cpp | 2 +- Marlin/stepper.cpp | 2 +- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 937fabb36f..5b59885cd3 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -107,7 +107,7 @@ FORCE_INLINE void serialprintPGM(const char *str) void get_command(); void process_commands(); -void manage_inactivity(byte debug); +void manage_inactivity(); #if X_ENABLE_PIN > -1 #define enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index f48a41921d..d46a5a62f0 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -245,6 +245,14 @@ void enquecommand(const char *cmd) } } +void setup_killpin() +{ + #if( KILL_PIN>-1 ) + pinMode(KILL_PIN,INPUT); + WRITE(KILL_PIN,HIGH); + #endif +} + void setup_photpin() { #ifdef PHOTOGRAPH_PIN @@ -276,7 +284,8 @@ void suicide() } void setup() -{ +{ + setup_killpin(); setup_powerhold(); MYSERIAL.begin(BAUDRATE); SERIAL_PROTOCOLLNPGM("start"); @@ -365,7 +374,7 @@ void loop() } //check heater every n milliseconds manage_heater(); - manage_inactivity(1); + manage_inactivity(); checkHitEndstops(); LCD_STATUS; } @@ -653,8 +662,8 @@ void process_commands() previous_millis_cmd = millis(); while(millis() < codenum ){ manage_heater(); - manage_inactivity(1); - LCD_STATUS; + manage_inactivity(); + LCD_STATUS; } break; #ifdef FWRETRACT @@ -816,21 +825,20 @@ void process_commands() st_synchronize(); previous_millis_cmd = millis(); - if (codenum > 0) - { + if (codenum > 0){ codenum += millis(); // keep track of when we started waiting while(millis() < codenum && !CLICKED){ manage_heater(); - manage_inactivity(1); - LCD_STATUS; - } + manage_inactivity(); + LCD_STATUS; + } }else{ - while(!CLICKED) { + while(!CLICKED){ manage_heater(); - manage_inactivity(1); - LCD_STATUS; - } - } + manage_inactivity(); + LCD_STATUS; + } + } } break; #endif @@ -1064,7 +1072,7 @@ void process_commands() codenum = millis(); } manage_heater(); - manage_inactivity(1); + manage_inactivity(); LCD_STATUS; #ifdef TEMP_RESIDENCY_TIME /* start/restart the TEMP_RESIDENCY_TIME timer whenever we reach target temp for the first time @@ -1102,7 +1110,7 @@ void process_commands() codenum = millis(); } manage_heater(); - manage_inactivity(1); + manage_inactivity(); LCD_STATUS; } LCD_MESSAGEPGM(MSG_BED_DONE); @@ -1664,7 +1672,7 @@ void controllerFan() } #endif -void manage_inactivity(byte debug) +void manage_inactivity() { if( (millis() - previous_millis_cmd) > max_inactive_time ) if(max_inactive_time) @@ -1682,6 +1690,10 @@ void manage_inactivity(byte debug) } } } + #if( KILL_PIN>-1 ) + if( 0 == READ(KILL_PIN) ) + kill(); + #endif #ifdef CONTROLLERFAN_PIN controllerFan(); //Check if fan should be turned on to cool stepper drivers down #endif diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 93bd8225ac..6c47e298d5 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -501,7 +501,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa // Rest here until there is room in the buffer. while(block_buffer_tail == next_buffer_head) { manage_heater(); - manage_inactivity(1); + manage_inactivity(); LCD_STATUS; } diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index a222f154a8..d5c8164b73 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -899,7 +899,7 @@ void st_synchronize() { while( blocks_queued()) { manage_heater(); - manage_inactivity(1); + manage_inactivity(); LCD_STATUS; } } From 31873ec707d5ba19de59b046cb1e882b8bd4e1db Mon Sep 17 00:00:00 2001 From: stohn Date: Tue, 21 Aug 2012 16:47:39 +0200 Subject: [PATCH 06/52] changed int to long to overcome overflow of number display - related bug reports: Issue #201, Issue #213 --- Marlin/ultralcd.pde | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 98d9f4bc86..5663dda80f 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -2621,7 +2621,7 @@ char *ftostr31(const float &x) char *ftostr32(const float &x) { - int xx=x*100; + long xx=x*100; conv[0]=(xx>=0)?'+':'-'; xx=abs(xx); conv[1]=(xx/100)%10+'0'; @@ -2666,7 +2666,7 @@ char *itostr4(const int &xx) // convert float to string with +1234.5 format char *ftostr51(const float &x) { - int xx=x*10; + long xx=x*10; conv[0]=(xx>=0)?'+':'-'; xx=abs(xx); conv[1]=(xx/10000)%10+'0'; @@ -2682,7 +2682,7 @@ char *ftostr51(const float &x) // convert float to string with +123.45 format char *ftostr52(const float &x) { - int xx=x*100; + long xx=x*100; conv[0]=(xx>=0)?'+':'-'; xx=abs(xx); conv[1]=(xx/10000)%10+'0'; From aacbebbebeb6cc76d30b4e64300c31194f6d18bc Mon Sep 17 00:00:00 2001 From: Blair Thompson Date: Tue, 21 Aug 2012 23:46:10 +0100 Subject: [PATCH 07/52] Added Menu Options to the Main-> Control->Temperature Submenu that allow the user to set new values for the ABS and PLA preheat function. EEPROM updated so that these settings can also be committed to EEPROM memory. --- Marlin/EEPROMwrite.h | 28 +++- Marlin/language.h | 15 +- Marlin/ultralcd.h | 6 +- Marlin/ultralcd.pde | 323 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 353 insertions(+), 19 deletions(-) diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h index 2ddd2b7de8..12674ef000 100644 --- a/Marlin/EEPROMwrite.h +++ b/Marlin/EEPROMwrite.h @@ -6,7 +6,13 @@ #include "temperature.h" //#include +int plaPreheatHotendTemp; +int plaPreheatHPBTemp; +int plaPreheatFanSpeed; +int absPreheatHotendTemp; +int absPreheatHPBTemp; +int absPreheatFanSpeed; template int EEPROM_writeAnything(int &ee, const T& value) { @@ -38,7 +44,7 @@ template int EEPROM_readAnything(int &ee, T& value) // the default values are used whenever there is a change to the data, to prevent // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V06" +#define EEPROM_VERSION "V07" inline void EEPROM_StoreSettings() { @@ -58,6 +64,12 @@ inline void EEPROM_StoreSettings() EEPROM_writeAnything(i,max_z_jerk); EEPROM_writeAnything(i,max_e_jerk); EEPROM_writeAnything(i,add_homeing); + EEPROM_writeAnything(i,plaPreheatHotendTemp); + EEPROM_writeAnything(i,plaPreheatHPBTemp); + EEPROM_writeAnything(i,plaPreheatFanSpeed); + EEPROM_writeAnything(i,absPreheatHotendTemp); + EEPROM_writeAnything(i,absPreheatHPBTemp); + EEPROM_writeAnything(i,absPreheatFanSpeed); #ifdef PIDTEMP EEPROM_writeAnything(i,Kp); EEPROM_writeAnything(i,Ki); @@ -162,6 +174,12 @@ inline void EEPROM_RetrieveSettings(bool def=false) EEPROM_readAnything(i,max_z_jerk); EEPROM_readAnything(i,max_e_jerk); EEPROM_readAnything(i,add_homeing); + EEPROM_readAnything(i,plaPreheatHotendTemp); + EEPROM_readAnything(i,plaPreheatHPBTemp); + EEPROM_readAnything(i,plaPreheatFanSpeed); + EEPROM_readAnything(i,absPreheatHotendTemp); + EEPROM_readAnything(i,absPreheatHPBTemp); + EEPROM_readAnything(i,absPreheatFanSpeed); #ifndef PIDTEMP float Kp,Ki,Kd; #endif @@ -195,6 +213,14 @@ inline void EEPROM_RetrieveSettings(bool def=false) add_homeing[0] = add_homeing[1] = add_homeing[2] = 0; SERIAL_ECHO_START; SERIAL_ECHOLN("Using Default settings:"); +#ifdef ULTIPANEL + plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP; + plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP; + plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED; + absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP; + absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP; + absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED; +#endif } #ifdef EEPROM_CHITCHAT EEPROM_printSettings(); diff --git a/Marlin/language.h b/Marlin/language.h index 99c6751451..a3d8281594 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -77,6 +77,7 @@ #define MSG_MAIN_WIDE " Main \003" #define MSG_RECTRACT_WIDE " Rectract \x7E" #define MSG_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_TEMPERATURE_RTN " Temperature \003" #define MSG_MOTION_WIDE " Motion \x7E" #define MSG_STORE_EPROM " Store memory" #define MSG_LOAD_EPROM " Load memory" @@ -101,14 +102,16 @@ #define MSG_KILLED "KILLED. " #define MSG_STOPPED "STOPPED. " #define MSG_PREHEAT_PLA " Preheat PLA" + #define MSG_PREHEAT_PLA_SETTINGS " Preheat PLA Setting" + #define MSG_PREHEAT_ABS_SETTINGS " Preheat ABS Setting" #define MSG_PREHEAT_ABS " Preheat ABS" #define MSG_STEPPER_RELEASED "Released." - #define MSG_CONTROL_RETRACT " Retract mm:" - #define MSG_CONTROL_RETRACTF " Retract F:" - #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" - #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" - #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" - #define MSG_AUTORETRACT " AutoRetr.:" + #define MSG_CONTROL_RETRACT " Retract mm:" + #define MSG_CONTROL_RETRACTF " Retract F:" + #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" + #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" + #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" + #define MSG_AUTORETRACT " AutoRetr.:" // Serial Console Messages diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index dc44d1cda9..5bb646834f 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -46,12 +46,14 @@ #define BLOCK {blocking[BL_MI]=millis()+blocktime;blocking[BL_ST]=millis()+blocktime;} #endif + + // blocking time for recognizing a new keypress of one key, ms #define blocktime 500 #define lcdslow 5 - enum MainStatus{Main_Status, Main_Menu, Main_Prepare,Sub_PrepareMove, Main_Control, Main_SD,Sub_TempControl,Sub_MotionControl,Sub_RetractControl}; + enum MainStatus{Main_Status, Main_Menu, Main_Prepare,Sub_PrepareMove, Main_Control, Main_SD,Sub_TempControl,Sub_MotionControl,Sub_RetractControl, Sub_PreheatPLASettings, Sub_PreheatABSSettings}; class MainMenu{ public: @@ -71,6 +73,8 @@ void showControlRetract(); void showAxisMove(); void showSD(); + void showPLAsettings(); + void showABSsettings(); bool force_lcd_update; long lastencoderpos; int8_t lineoffset; diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 98d9f4bc86..e050c6125d 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -528,17 +528,17 @@ void MainMenu::showPrepare() MENUITEM( lcdprintPGM(MSG_SET_ORIGIN) , BLOCK;enquecommand("G92 X0 Y0 Z0");beepshort(); ) ; break; case ItemP_preheat_pla: - MENUITEM( lcdprintPGM(MSG_PREHEAT_PLA) , BLOCK;setTargetHotend0(PLA_PREHEAT_HOTEND_TEMP);setTargetBed(PLA_PREHEAT_HPB_TEMP); + MENUITEM( lcdprintPGM(MSG_PREHEAT_PLA) , BLOCK;setTargetHotend0(plaPreheatHotendTemp);setTargetBed(plaPreheatHPBTemp); #if FAN_PIN > -1 - FanSpeed=PLA_PREHEAT_FAN_SPEED; + FanSpeed = plaPreheatFanSpeed; analogWrite(FAN_PIN, FanSpeed); #endif beepshort(); ); break; case ItemP_preheat_abs: - MENUITEM( lcdprintPGM(MSG_PREHEAT_ABS) , BLOCK;setTargetHotend0(ABS_PREHEAT_HOTEND_TEMP);setTargetBed(ABS_PREHEAT_HPB_TEMP); + MENUITEM( lcdprintPGM(MSG_PREHEAT_ABS) , BLOCK;setTargetHotend0(absPreheatHotendTemp);setTargetBed(absPreheatHPBTemp); #if FAN_PIN > -1 - FanSpeed=ABS_PREHEAT_FAN_SPEED; + FanSpeed = absPreheatFanSpeed; analogWrite(FAN_PIN, FanSpeed); #endif beepshort(); ); @@ -789,7 +789,7 @@ void MainMenu::showTune() { lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend0()))); - } + } if((activeline!=line) ) break; @@ -967,7 +967,9 @@ enum { ItemCT_bed, #endif ItemCT_fan, - ItemCT_PID_P,ItemCT_PID_I,ItemCT_PID_D,ItemCT_PID_C + ItemCT_PID_P,ItemCT_PID_I,ItemCT_PID_D,ItemCT_PID_C, + ItemCT_PLA_PreHeat_Setting, + ItemCT_ABS_PreHeat_Setting, }; void MainMenu::showControlTemp() @@ -1434,16 +1436,19 @@ void MainMenu::showControlTemp() #endif #endif break; + case ItemCT_PLA_PreHeat_Setting: + MENUITEM( lcdprintPGM(MSG_PREHEAT_PLA_SETTINGS) , BLOCK;status=Sub_PreheatPLASettings;beepshort(); ) ; + break; + case ItemCT_ABS_PreHeat_Setting: + MENUITEM( lcdprintPGM(MSG_PREHEAT_ABS_SETTINGS) , BLOCK;status=Sub_PreheatABSSettings;beepshort(); ) ; + break; default: break; } line++; } - #ifdef PID_ADD_EXTRUSION_RATE - updateActiveLines(ItemCT_PID_C,encoderpos); - #else - updateActiveLines(ItemCT_PID_D,encoderpos); - #endif + + updateActiveLines(ItemCT_ABS_PreHeat_Setting,encoderpos); } @@ -2569,6 +2574,14 @@ void MainMenu::update() { showSD(); }break; + case Sub_PreheatPLASettings: + { + showPLAsettings(); + }break; + case Sub_PreheatABSSettings: + { + showABSsettings(); + }break; } if(timeoutToStatus255) encoderpos=255; + plaPreheatFanSpeed=encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + case ItemPLAPreHeat_set_nozzle: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE); + lcd.setCursor(13,line);lcd.print(ftostr3(plaPreheatHotendTemp)); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=plaPreheatHotendTemp; + } + else + { + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>260) encoderpos=260; + plaPreheatHotendTemp = encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + case ItemPLAPreHeat_set_HPB: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_BED); + lcd.setCursor(13,line);lcd.print(ftostr3(plaPreheatHPBTemp)); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=plaPreheatHPBTemp; + } + else + { + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>250) encoderpos=150; + plaPreheatHPBTemp = encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + case ItemPLAPreHeat_Store_Eprom: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_STORE_EPROM); + } + if((activeline==line) && CLICKED) + { + //enquecommand("M84"); + beepshort(); + BLOCK; + EEPROM_StoreSettings(); + } + }break; + default: + break; + } + line++; + } + updateActiveLines(ItemPLAPreHeat_Store_Eprom,encoderpos); +#endif +} +enum { + ItemABSPreHeat_Exit, + ItemABSPreHeat_set_FanSpeed, + ItemABSPreHeat_set_nozzle, + ItemABSPreHeat_set_HPB, + ItemABSPreHeat_Store_Eprom + }; + +void MainMenu::showABSsettings() +{ +#ifdef ULTIPANEL + uint8_t line=0; + clearIfNecessary(); + for(int8_t i=lineoffset;i255) encoderpos=255; + absPreheatFanSpeed=encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + + case ItemABSPreHeat_set_nozzle: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE); + lcd.setCursor(13,line);lcd.print(ftostr3(absPreheatHotendTemp)); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=absPreheatHotendTemp; + } + else + { + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>260) encoderpos=260; + absPreheatHotendTemp = encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + + case ItemABSPreHeat_set_HPB: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_BED); + lcd.setCursor(13,line);lcd.print(ftostr3(absPreheatHPBTemp)); + } + + if((activeline!=line) ) + break; + + if(CLICKED) + { + linechanging=!linechanging; + if(linechanging) + { + encoderpos=absPreheatHPBTemp; + } + else + { + encoderpos=activeline*lcdslow; + beepshort(); + } + BLOCK; + } + if(linechanging) + { + if(encoderpos<0) encoderpos=0; + if(encoderpos>250) encoderpos=150; + absPreheatHPBTemp = encoderpos; + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos)); + } + }break; + case ItemABSPreHeat_Store_Eprom: + { + if(force_lcd_update) + { + lcd.setCursor(0,line);lcdprintPGM(MSG_STORE_EPROM); + } + if((activeline==line) && CLICKED) + { + //enquecommand("M84"); + beepshort(); + BLOCK; + EEPROM_StoreSettings(); + } + }break; + default: + break; + } + line++; + } + updateActiveLines(ItemABSPreHeat_Store_Eprom,encoderpos); +#endif +} + +//********************************************************************************************************** // convert float to string with +123.4 format char *ftostr3(const float &x) { From 87ff61a8a6e572d3c6a5befd655a2b39280fe83d Mon Sep 17 00:00:00 2001 From: daid Date: Wed, 22 Aug 2012 10:54:55 +0200 Subject: [PATCH 08/52] Fix for #201 --- Marlin/ultralcd.pde | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index e050c6125d..eee89237d8 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -2967,7 +2967,7 @@ char *itostr4(const int &xx) // convert float to string with +1234.5 format char *ftostr51(const float &x) { - int xx=x*10; + long xx=x*10; conv[0]=(xx>=0)?'+':'-'; xx=abs(xx); conv[1]=(xx/10000)%10+'0'; @@ -2983,7 +2983,7 @@ char *ftostr51(const float &x) // convert float to string with +123.45 format char *ftostr52(const float &x) { - int xx=x*100; + long xx=x*100; conv[0]=(xx>=0)?'+':'-'; xx=abs(xx); conv[1]=(xx/10000)%10+'0'; From 06c03fe2f0947723a9013b636a6751b1a7c5af1a Mon Sep 17 00:00:00 2001 From: stohn Date: Wed, 22 Aug 2012 12:44:41 +0200 Subject: [PATCH 09/52] new method for message for making KILLED message visible The cli(); at the start of the kill() function also stops the internal arduino timer which stops updating of millis() which prevents the display of the "KILLED." message. The new function updates the display directly without checking any timers. --- Marlin/Marlin.pde | 2 +- Marlin/ultralcd.h | 3 +++ Marlin/ultralcd.pde | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index d46a5a62f0..a7b637b89f 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1734,7 +1734,7 @@ void kill() if(PS_ON_PIN > -1) pinMode(PS_ON_PIN,INPUT); SERIAL_ERROR_START; SERIAL_ERRORLNPGM(MSG_ERR_KILLED); - LCD_MESSAGEPGM(MSG_KILLED); + LCD_ALERTMESSAGEPGM(MSG_KILLED); suicide(); while(1); // Wait for reset } diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index dc44d1cda9..5cfa6a5431 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -140,12 +140,14 @@ #define LCD_INIT lcd_init(); #define LCD_MESSAGE(x) lcd_status(x); #define LCD_MESSAGEPGM(x) lcd_statuspgm(MYPGM(x)); + #define LCD_ALERTMESSAGEPGM(x) lcd_alertstatuspgm(MYPGM(x)); #define LCD_STATUS lcd_status() #else //no lcd #define LCD_INIT #define LCD_STATUS #define LCD_MESSAGE(x) #define LCD_MESSAGEPGM(x) + #define LCD_ALERTMESSAGEPGM(x) FORCE_INLINE void lcd_status() {}; #define CLICKED false @@ -153,6 +155,7 @@ #endif void lcd_statuspgm(const char* message); +void lcd_alertstatuspgm(const char* message); char *ftostr3(const float &x); char *itostr2(const uint8_t &x); diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 5663dda80f..becdf4677b 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -92,6 +92,12 @@ void lcd_statuspgm(const char* message) *target=0; } +void lcd_alertstatuspgm(const char* message) +{ + lcd_statuspgm(message); + menu.showStatus(); +} + FORCE_INLINE void clear() { lcd.clear(); From b69e75c89a0be970b2742cd8bff603baf824d7a9 Mon Sep 17 00:00:00 2001 From: daid Date: Wed, 22 Aug 2012 14:49:57 +0200 Subject: [PATCH 10/52] Added long filename support. --- Marlin/Marlin.pde | 2 -- Marlin/Sd2Card.cpp | 4 +--- Marlin/SdBaseFile.cpp | 40 +++++++++++++++++++++++++++++++--- Marlin/SdBaseFile.h | 6 +++--- Marlin/SdFatConfig.h | 9 +++++++- Marlin/SdFatStructs.h | 50 +++++++++++++++++++++++++++++++++++++------ Marlin/cardreader.cpp | 8 +++---- Marlin/cardreader.h | 5 +++-- Marlin/ultralcd.pde | 20 +++++++++++++++-- 9 files changed, 117 insertions(+), 27 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index f48a41921d..2de41a07a1 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1810,5 +1810,3 @@ void setPwmFrequency(uint8_t pin, int val) } } #endif - - diff --git a/Marlin/Sd2Card.cpp b/Marlin/Sd2Card.cpp index 884fa45533..eb38df6b72 100644 --- a/Marlin/Sd2Card.cpp +++ b/Marlin/Sd2Card.cpp @@ -369,7 +369,6 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) { * * \param[in] blockNumber Logical block to be read. * \param[out] dst Pointer to the location that will receive the data. - * \return The value one, true, is returned for success and * the value zero, false, is returned for failure. */ @@ -639,5 +638,4 @@ bool Sd2Card::writeStop() { return false; } - -#endif \ No newline at end of file +#endif diff --git a/Marlin/SdBaseFile.cpp b/Marlin/SdBaseFile.cpp index b84efc8eaa..c4d538073a 100644 --- a/Marlin/SdBaseFile.cpp +++ b/Marlin/SdBaseFile.cpp @@ -867,7 +867,7 @@ bool SdBaseFile::openParent(SdBaseFile* dir) { } // search for parent in '../..' do { - if (file.readDir(&entry) != 32) goto fail; + if (file.readDir(&entry, NULL) != 32) goto fail; c = entry.firstClusterLow; c |= (uint32_t)entry.firstClusterHigh << 16; } while (c != cluster); @@ -1108,10 +1108,16 @@ int16_t SdBaseFile::read(void* buf, uint16_t nbyte) { * readDir() called before a directory has been opened, this is not * a directory file or an I/O error occurred. */ -int8_t SdBaseFile::readDir(dir_t* dir) { +int8_t SdBaseFile::readDir(dir_t* dir, char* longFilename) { int16_t n; // if not a directory file or miss-positioned return an error if (!isDir() || (0X1F & curPosition_)) return -1; + + //If we have a longFilename buffer, mark it as invalid. If we find a long filename it will be filled automaticly. + if (longFilename != NULL) + { + longFilename[0] = '\0'; + } while (1) { n = read(dir, sizeof(dir_t)); @@ -1120,6 +1126,34 @@ int8_t SdBaseFile::readDir(dir_t* dir) { if (dir->name[0] == DIR_NAME_FREE) return 0; // skip empty entries and entry for . and .. if (dir->name[0] == DIR_NAME_DELETED || dir->name[0] == '.') continue; + //Fill the long filename if we have a long filename entry, + // long filename entries are stored before the actual filename. + if (DIR_IS_LONG_NAME(dir) && longFilename != NULL) + { + vfat_t *VFAT = (vfat_t*)dir; + //Sanity check the VFAT entry. The first cluster is always set to zero. And th esequence number should be higher then 0 + if (VFAT->firstClusterLow == 0 && (VFAT->sequenceNumber & 0x1F) > 0 && (VFAT->sequenceNumber & 0x1F) <= MAX_VFAT_ENTRIES) + { + //TODO: Store the filename checksum to verify if a none-long filename aware system modified the file table. + n = ((VFAT->sequenceNumber & 0x1F) - 1) * 13; + longFilename[n+0] = VFAT->name1[0]; + longFilename[n+1] = VFAT->name1[1]; + longFilename[n+2] = VFAT->name1[2]; + longFilename[n+3] = VFAT->name1[3]; + longFilename[n+4] = VFAT->name1[4]; + longFilename[n+5] = VFAT->name2[0]; + longFilename[n+6] = VFAT->name2[1]; + longFilename[n+7] = VFAT->name2[2]; + longFilename[n+8] = VFAT->name2[3]; + longFilename[n+9] = VFAT->name2[4]; + longFilename[n+10] = VFAT->name2[5]; + longFilename[n+11] = VFAT->name3[0]; + longFilename[n+12] = VFAT->name3[1]; + //If this VFAT entry is the last one, add a NUL terminator at the end of the string + if (VFAT->sequenceNumber & 0x40) + longFilename[n+13] = '\0'; + } + } // return if normal file or subdirectory if (DIR_IS_FILE_OR_SUBDIR(dir)) return n; } @@ -1788,4 +1822,4 @@ void (*SdBaseFile::oldDateTime_)(uint16_t& date, uint16_t& time) = 0; // NOLINT #endif // ALLOW_DEPRECATED_FUNCTIONS -#endif +#endif diff --git a/Marlin/SdBaseFile.h b/Marlin/SdBaseFile.h index 1bf75f6f24..dea299a646 100644 --- a/Marlin/SdBaseFile.h +++ b/Marlin/SdBaseFile.h @@ -283,7 +283,7 @@ class SdBaseFile { bool printName(); int16_t read(); int16_t read(void* buf, uint16_t nbyte); - int8_t readDir(dir_t* dir); + int8_t readDir(dir_t* dir, char* longFilename); static bool remove(SdBaseFile* dirFile, const char* path); bool remove(); /** Set the file's current position to zero. */ @@ -455,7 +455,7 @@ class SdBaseFile { * \param[out] dir The dir_t struct that will receive the data. * \return bytes read for success zero for eof or -1 for failure. */ - int8_t readDir(dir_t& dir) {return readDir(&dir);} // NOLINT + int8_t readDir(dir_t& dir, char* longFilename) {return readDir(&dir, longFilename);} // NOLINT /** \deprecated Use: * static uint8_t remove(SdBaseFile* dirFile, const char* path); * \param[in] dirFile The directory that contains the file. @@ -480,4 +480,4 @@ class SdBaseFile { }; #endif // SdBaseFile_h -#endif \ No newline at end of file +#endif diff --git a/Marlin/SdFatConfig.h b/Marlin/SdFatConfig.h index 2a78c2a857..710b1f7924 100644 --- a/Marlin/SdFatConfig.h +++ b/Marlin/SdFatConfig.h @@ -108,7 +108,14 @@ uint8_t const SOFT_SPI_SCK_PIN = 13; * a pure virtual function is called. */ #define USE_CXA_PURE_VIRTUAL 1 +/** + * Defines for long (vfat) filenames + */ +/** Number of VFAT entries used. Every entry has 13 UTF-16 characters */ +#define MAX_VFAT_ENTRIES (2) +/** Total size of the buffer used to store the long filenames */ +#define LONG_FILENAME_LENGTH (13*MAX_VFAT_ENTRIES+1) #endif // SdFatConfig_h -#endif \ No newline at end of file +#endif diff --git a/Marlin/SdFatStructs.h b/Marlin/SdFatStructs.h index 7ad88d67fc..3867216160 100644 --- a/Marlin/SdFatStructs.h +++ b/Marlin/SdFatStructs.h @@ -22,6 +22,8 @@ #ifndef SdFatStructs_h #define SdFatStructs_h + +#define PACKED __attribute__((__packed__)) /** * \file * \brief FAT file structures @@ -95,7 +97,7 @@ struct partitionTable { uint32_t firstSector; /** Length of the partition, in blocks. */ uint32_t totalSectors; -}; +} PACKED; /** Type name for partitionTable */ typedef struct partitionTable part_t; //------------------------------------------------------------------------------ @@ -119,7 +121,7 @@ struct masterBootRecord { uint8_t mbrSig0; /** Second MBR signature byte. Must be 0XAA */ uint8_t mbrSig1; -}; +} PACKED; /** Type name for masterBootRecord */ typedef struct masterBootRecord mbr_t; //------------------------------------------------------------------------------ @@ -247,7 +249,7 @@ struct fat_boot { uint8_t bootSectorSig0; /** must be 0XAA */ uint8_t bootSectorSig1; -}; +} PACKED; /** Type name for FAT Boot Sector */ typedef struct fat_boot fat_boot_t; //------------------------------------------------------------------------------ @@ -401,7 +403,7 @@ struct fat32_boot { uint8_t bootSectorSig0; /** must be 0XAA */ uint8_t bootSectorSig1; -}; +} PACKED; /** Type name for FAT32 Boot Sector */ typedef struct fat32_boot fat32_boot_t; //------------------------------------------------------------------------------ @@ -441,7 +443,7 @@ struct fat32_fsinfo { uint8_t reserved2[12]; /** must be 0X00, 0X00, 0X55, 0XAA */ uint8_t tailSignature[4]; -}; +} PACKED; /** Type name for FAT32 FSINFO Sector */ typedef struct fat32_fsinfo fat32_fsinfo_t; //------------------------------------------------------------------------------ @@ -539,12 +541,46 @@ struct directoryEntry { uint16_t firstClusterLow; /** 32-bit unsigned holding this file's size in bytes. */ uint32_t fileSize; -}; +} PACKED; +/** + * \struct directoryVFATEntry + * \brief VFAT long filename directory entry + * + * directoryVFATEntries are found in the same list as normal directoryEntry. + * But have the attribute field set to DIR_ATT_LONG_NAME. + * + * Long filenames are saved in multiple directoryVFATEntries. + * Each entry containing 13 UTF-16 characters. + */ +struct directoryVFATEntry { + /** + * Sequence number. Consists of 2 parts: + * bit 6: indicates first long filename block for the next file + * bit 0-4: the position of this long filename block (first block is 1) + */ + uint8_t sequenceNumber; + /** First set of UTF-16 characters */ + uint16_t name1[5];//UTF-16 + /** attributes (at the same location as in directoryEntry), always 0x0F */ + uint8_t attributes; + /** Reserved for use by Windows NT. Always 0. */ + uint8_t reservedNT; + /** Checksum of the short 8.3 filename, can be used to checked if the file system as modified by a not-long-filename aware implementation. */ + uint8_t checksum; + /** Second set of UTF-16 characters */ + uint16_t name2[6];//UTF-16 + /** firstClusterLow is always zero for longFilenames */ + uint16_t firstClusterLow; + /** Third set of UTF-16 characters */ + uint16_t name3[2];//UTF-16 +} PACKED; //------------------------------------------------------------------------------ // Definitions for directory entries // /** Type name for directoryEntry */ typedef struct directoryEntry dir_t; +/** Type name for directoryVFATEntry */ +typedef struct directoryVFATEntry vfat_t; /** escape for name[0] = 0XE5 */ uint8_t const DIR_NAME_0XE5 = 0X05; /** name[0] value for entry that is free after being "deleted" */ @@ -607,4 +643,4 @@ static inline uint8_t DIR_IS_FILE_OR_SUBDIR(const dir_t* dir) { #endif // SdFatStructs_h -#endif \ No newline at end of file +#endif diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp index 222632f552..47a3fd0509 100644 --- a/Marlin/cardreader.cpp +++ b/Marlin/cardreader.cpp @@ -51,7 +51,7 @@ void CardReader::lsDive(const char *prepend,SdFile parent) dir_t p; uint8_t cnt=0; - while (parent.readDir(p) > 0) + while (parent.readDir(p, longFilename) > 0) { if( DIR_IS_SUBDIR(&p) && lsAction!=LS_Count && lsAction!=LS_GetFilename) // hence LS_SerialPrint { @@ -429,16 +429,16 @@ void CardReader::checkautostart(bool force) char autoname[30]; sprintf(autoname,"auto%i.g",lastnr); - for(int8_t i=0;i<(int)strlen(autoname);i++) + for(int8_t i=0;i<(int8_t)strlen(autoname);i++) autoname[i]=tolower(autoname[i]); dir_t p; root.rewind(); bool found=false; - while (root.readDir(p) > 0) + while (root.readDir(p, NULL) > 0) { - for(int8_t i=0;i<(int)strlen((char*)p.name);i++) + for(int8_t i=0;i<(int8_t)strlen((char*)p.name);i++) p.name[i]=tolower(p.name[i]); //Serial.print((char*)p.name); //Serial.print(" "); diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index 964bbe7669..e5c8443f5e 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -45,7 +45,8 @@ public: bool saving; bool sdprinting ; bool cardOK ; - char filename[12]; + char filename[13]; + char longFilename[LONG_FILENAME_LENGTH]; bool filenameIsDir; int lastnr; //last number of the autostart; private: @@ -72,4 +73,4 @@ private: #define IS_SD_PRINTING (false) #endif //SDSUPPORT -#endif +#endif diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index eee89237d8..5bea7f39ef 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -2304,7 +2304,15 @@ void MainMenu::showSD() //Serial.print("Filenr:");Serial.println(i-2); lcd.setCursor(0,line);lcdprintPGM(" "); if(card.filenameIsDir) lcd.print("\005"); - lcd.print(card.filename); + if (card.longFilename[0]) + { + card.longFilename[LCD_WIDTH-1] = '\0'; + lcd.print(card.longFilename); + } + else + { + lcd.print(card.filename); + } } if((activeline==line) && CLICKED) { @@ -2329,7 +2337,15 @@ void MainMenu::showSD() enquecommand("M24"); beep(); status=Main_Status; - lcd_status(card.filename); + if (card.longFilename[0]) + { + card.longFilename[LCD_WIDTH-1] = '\0'; + lcd_status(card.longFilename); + } + else + { + lcd_status(card.filename); + } } } } From 299c18596f2f3f940f93bf33cf9b2c02215f35fa Mon Sep 17 00:00:00 2001 From: elgambitero Date: Wed, 22 Aug 2012 21:44:57 +0300 Subject: [PATCH 11/52] Update Marlin/language.h Some dialogs are corrected --- Marlin/language.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index 9ad0311111..12b73b70cc 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -426,15 +426,15 @@ #define MSG_ERR_CHECKSUM_MISMATCH "el checksum no coincide, Ultima Linea:" #define MSG_ERR_NO_CHECKSUM "No se pudo hallar el Checksum con el numero de linea, Ultima Linea:" #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No se hallo el Numero de Linea con el Checksum, Ultima Linea:" -#define MSG_FILE_PRINTED "Impresion terminado" +#define MSG_FILE_PRINTED "Impresion terminada" #define MSG_BEGIN_FILE_LIST "Comienzo de la lista de archivos" #define MSG_END_FILE_LIST "Fin de la lista de archivos" #define MSG_M104_INVALID_EXTRUDER "M104 Extrusor Invalido " #define MSG_M105_INVALID_EXTRUDER "M105 Extrusor Invalido " #define MSG_ERR_NO_THERMISTORS "No hay termistores - no temp" #define MSG_M109_INVALID_EXTRUDER "M109 Extrusor Invalido " -#define MSG_HEATING "Calientando..." -#define MSG_HEATING_COMPLETE "Calentamiento terminado." +#define MSG_HEATING "Calentando..." +#define MSG_HEATING_COMPLETE "Calentamiento Hecho." #define MSG_BED_HEATING "Calentando la base." #define MSG_BED_DONE "Base Caliente." #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" From 6cd150842f6741b75cd7b5911805f307d1dbc2eb Mon Sep 17 00:00:00 2001 From: elgambitero Date: Wed, 22 Aug 2012 21:46:22 +0300 Subject: [PATCH 12/52] Update Marlin/language.h Some dialogs corrected and Default language set to 1 --- Marlin/language.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/language.h b/Marlin/language.h index 12b73b70cc..2f2b71c596 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -9,7 +9,7 @@ // 5 Spanish // 6 Etc -#define LANGUAGE_CHOICE 5 // Pick your language from the list above +#define LANGUAGE_CHOICE 1 // Pick your language from the list above #define PROTOCOL_VERSION "1.0" From 0e89022cc326c1d1274d8dee50afabbd0aded939 Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Tue, 28 Aug 2012 19:47:22 +0200 Subject: [PATCH 13/52] Correct temptable_55 name. --- Marlin/thermistortables.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/thermistortables.h b/Marlin/thermistortables.h index 6cff32930a..941b2394a5 100644 --- a/Marlin/thermistortables.h +++ b/Marlin/thermistortables.h @@ -419,7 +419,7 @@ const short temptable_52[][2] PROGMEM = { // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance // Advantage: More resolution and better linearity from 150C to 200C -const short temptable_52[][2] PROGMEM = { +const short temptable_55[][2] PROGMEM = { {1*OVERSAMPLENR, 500}, {76*OVERSAMPLENR, 300}, {87*OVERSAMPLENR, 290}, From 0e58ef68056657f505810ccad55bc758d72ddf11 Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Wed, 29 Aug 2012 21:15:59 +0200 Subject: [PATCH 14/52] Some dialogs are corrected --- Marlin/language.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index 8d3d67b0c1..111557521d 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -364,7 +364,7 @@ #define MSG_NOZZLE " \002Nozzle:" #define MSG_NOZZLE1 " \002Nozzle2:" #define MSG_NOZZLE2 " \002Nozzle3:" -#define MSG_BED " \002Bed:" +#define MSG_BED " \002Base:" #define MSG_FAN_SPEED " Ventilador:" #define MSG_FLOW " Flujo:" #define MSG_CONTROL " Control \003" @@ -447,15 +447,15 @@ #define MSG_ERR_CHECKSUM_MISMATCH "el checksum no coincide, Ultima Linea:" #define MSG_ERR_NO_CHECKSUM "No se pudo hallar el Checksum con el numero de linea, Ultima Linea:" #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No se hallo el Numero de Linea con el Checksum, Ultima Linea:" -#define MSG_FILE_PRINTED "Impresion terminado" +#define MSG_FILE_PRINTED "Impresion terminada" #define MSG_BEGIN_FILE_LIST "Comienzo de la lista de archivos" #define MSG_END_FILE_LIST "Fin de la lista de archivos" #define MSG_M104_INVALID_EXTRUDER "M104 Extrusor Invalido " #define MSG_M105_INVALID_EXTRUDER "M105 Extrusor Invalido " #define MSG_ERR_NO_THERMISTORS "No hay termistores - no temp" #define MSG_M109_INVALID_EXTRUDER "M109 Extrusor Invalido " -#define MSG_HEATING "Calientando..." -#define MSG_HEATING_COMPLETE "Calentamiento terminado." +#define MSG_HEATING "Calentando..." +#define MSG_HEATING_COMPLETE "Calentamiento Hecho." #define MSG_BED_HEATING "Calentando la base." #define MSG_BED_DONE "Base Caliente." #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" From ddd9d0cfd475d4f494c518946c73d2a352db3eee Mon Sep 17 00:00:00 2001 From: Blair Thompson Date: Wed, 29 Aug 2012 21:08:41 +0100 Subject: [PATCH 15/52] Added PDF file containing Menu Tree for documentation purposes. Source xlsx document included. --- Marlin/LCD Menu Tree.pdf | Bin 0 -> 217464 bytes Marlin/Menu Plans.xlsx | Bin 0 -> 59410 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Marlin/LCD Menu Tree.pdf create mode 100644 Marlin/Menu Plans.xlsx diff --git a/Marlin/LCD Menu Tree.pdf b/Marlin/LCD Menu Tree.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e29d049509ca89c600be33a1ea21b2edbc7d1e4 GIT binary patch literal 217464 zcmY!laBsDSaLj?nc{G=>iE*l&DkjjEoedolI#GL$e{eZ;u)M5oA z1p|d3eV@dkYQj3%r3AU`p)^Kc_j*l`rer-#nB2TARA*9ko6fOxzV{O zHL)Z!KhGtxBvr%3%E-Xb$iTwL($LJk{FKt<)FO?4 z{~3H4G8vK?iWu@4iW%}5(iln@)-fnBxH42QBr~Kkd2{h1yQj7CTi;`1|ZEW=2^7BeSl%awdD0uAb^dtO}vQm>lf}XjF z>8Tb979a_I-_(*sLjwgv127LPWoWEm2nxX*)?C5R9Lxo4wNx;)1oOaZ zjSLiwASQt%jf@nGKv4)a$jDg12x2Z+(p13+$yg&Z1tYLiA(k3hC>TK;2sYQ)K*1Pd zE`)2OU<@%BWRkIof-xv~pw<|hDi}iy21}YN7(<*3(P^Pz3^5lZX=0#Yf@G|Tp@In{ zae~#F7%P}S+za8FDwsgbg>cOkOdtk>O|n!lfrJByXKJ8e3O3iyPT#en#67qqu_V>T zM&CWy&``k;Y=xbjen3%va&T%%w0?k#n|?@YMG3^~P7ul&LV1Exw!Uv_N@k){enqqb z$XG)|O9MSqBLxc+Lp@8QSOtCO{JfIXypm!Ci2K}&@=FU~Sq99}57rMUO3W)R0Hv4Y zN`2>GeV5d-%;eM{cPBeL{gA|@V*OxfMunuQVg&=_kM`jxiUgjlc1Kf&1=&$V)x@6rL!S zNd;wPtjv_3Whe1?M{BS1C9z+htIxf-cX#&>?biW3_he%|%lpoqnR&4;YJJhCojX=t z?A|32^kt#NOFQ<``RlK*j^AIn{q_s{ITzb=XYxDh0q|3R~?aGO{2FSW<4&#%|VA1ipy+Lp(uE6b+4&5P&TGnqX} zS^fJ=mv3bF%ojc7<=unaE0}Jx{ug9@_nFs!#qUXTvc4|0(h-sg$Dr}ewVK7iHR`w^W&F7kv^EQTuP0a6z4Jik832#lInM5>j?(rM185=JU!?=2Ku_Zk&E5)i|kD zvE*@od@$t#jkZY{2QcB7R%Q&Rjaz1i6SFP|!xzFaPJKICW)L&3)QwZmr z*PBz7T;ERi`7*`x)&VwEuUtiuznKe9v>(3g$x{6IwpxwQ)WRKyr@vcuh4IHSqX)&; zYz_+_y*N$Q=1Qyj!>NZ=FUxSslC;arD}JfC2DQhC zOy-shnsnE0U!;wetJ|W?qkc9lk1nd8Y1Cizz5isj^_+R0Hd&@Cb9i?5bnQ<_d#7Kt z;7)2;!m>B2sf+Y>3Os3JZk-fobV0@4J8{9K(BnIEBXp#b4a@W-y>5Ms*r};or*gU8 zZ{4xJGVL3YYyaiGlVylK%9X_Kd3VcfvDd6>k4s+eSXODhq(#(wMZ|lX(x{5tawiV* zH7*dEuA?Ks!e=C~eyK`c@`1HF7ykZ}u>BiQB_�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≦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 z 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 Qn?ajlHa7!9;vEnV04KUzJpcdz literal 0 HcmV?d00001 From dcd3e8a211184779379bd003e3eb85e6815db58a Mon Sep 17 00:00:00 2001 From: Blair Thompson Date: Wed, 29 Aug 2012 22:53:41 +0100 Subject: [PATCH 16/52] Tidy up --- Marlin/Menu Plans.xlsx | Bin 59410 -> 51386 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Marlin/Menu Plans.xlsx b/Marlin/Menu Plans.xlsx index a2a0c534c8fba39fcbb0e21bb06d08a0657a5f29..45a58e40352d441bd581361d358cee07df009ed5 100644 GIT binary patch delta 43779 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 delta 51322 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 G0r3DwHnsBr From d728e356587a38a21244ae8e552341ffee62a943 Mon Sep 17 00:00:00 2001 From: Drakelive Date: Thu, 30 Aug 2012 23:36:49 +0300 Subject: [PATCH 17/52] Update Marlin/pins.h --- Marlin/pins.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/pins.h b/Marlin/pins.h index 8d719375bd..ded25479e7 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -543,6 +543,7 @@ #define LED_PIN -1 //changed @ rkoeppl 20110410 #define FAN_PIN -1 //changed @ rkoeppl 20110410 #define PS_ON_PIN -1 //changed @ rkoeppl 20110410 + #define KILL_PIN -1 //changed @ drakelive 20120830 //our pin for debugging. #define DEBUG_PIN 0 From e358a2d7afae323abc7205cef31615a4d6b0258c Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Sun, 2 Sep 2012 01:12:49 +0200 Subject: [PATCH 18/52] Added fix for SF Arc Point fillet procedure --- Marlin/Configuration.h | 3 +++ Marlin/Marlin.pde | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index f01af41444..0ec06316f8 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -285,6 +285,9 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ // #define PHOTOGRAPH_PIN 23 +// SF send wrong arc g-codes when using Arc Point as fillet procedure +//#define SF_ARC_FIX + #include "Configuration_adv.h" #include "thermistortables.h" diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index f8ae5b8744..89104333ba 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1576,7 +1576,15 @@ void get_coordinates() void get_arc_coordinates() { +#ifdef SF_ARC_FIX + bool relative_mode_backup = relative_mode; + bool relative_mode = true; +#endif get_coordinates(); +#ifdef SF_ARC_FIX + relative_mode=relative_mode_backup; +#endif + if(code_seen('I')) { offset[0] = code_value(); } From 47319cf64e2a598d0e52907c34395e609967688f Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Mon, 3 Sep 2012 21:28:31 +0200 Subject: [PATCH 19/52] Fixed typo in SF arc fix code. --- Marlin/Marlin.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 89104333ba..5c46e7355f 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1578,7 +1578,7 @@ void get_arc_coordinates() { #ifdef SF_ARC_FIX bool relative_mode_backup = relative_mode; - bool relative_mode = true; + relative_mode = true; #endif get_coordinates(); #ifdef SF_ARC_FIX From abf0693e8e970311cfb66244bb622b092c3fe603 Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Tue, 4 Sep 2012 08:20:27 +0200 Subject: [PATCH 20/52] Added KILL_PIN -1 to gen7 boards --- Marlin/pins.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/pins.h b/Marlin/pins.h index ded25479e7..403ff41169 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -108,6 +108,7 @@ #define HEATER_2_PIN -1 #define HEATER_BED_PIN 3 +#define KILL_PIN -1 #define SDPOWER -1 #define SDSS -1 // SCL pin of I2C header @@ -206,6 +207,7 @@ #define SDCARDDETECT -1 #define SUICIDE_PIN -1 //has to be defined; otherwise Power_off doesn't work + #define KILL_PIN -1 //Pins for 4bit LCD Support #define LCD_PINS_RS 18 #define LCD_PINS_ENABLE 17 From e8c92e0a953541ef0a68a79818ad52e3e2c633fa Mon Sep 17 00:00:00 2001 From: ZetaPhoenix Date: Sun, 9 Sep 2012 16:06:02 -0700 Subject: [PATCH 21/52] Missing #else in temperature.cpp prevented reading bed temp when TEMP_BED_PIN <7. Thanks to Leland Wallace for helping me track this down via "Sesame Street" coding (what is not like the other) --- Marlin/temperature.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 7307b24aa8..a0413f710e 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -885,6 +885,8 @@ ISR(TIMER0_COMPB_vect) #if (TEMP_BED_PIN > -1) #if TEMP_BED_PIN > 7 ADCSRB = 1< Date: Wed, 12 Sep 2012 21:01:31 -0500 Subject: [PATCH 22/52] bed pid Conflicts: Marlin/Configuration.h --- Marlin/Configuration.h | 13 +++- Marlin/Marlin.pde | 31 +++++++- Marlin/temperature.cpp | 171 ++++++++++++++++++++++++++++++----------- Marlin/temperature.h | 14 +++- 4 files changed, 176 insertions(+), 53 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 0ec06316f8..2bcfc72833 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -95,10 +95,11 @@ // PID settings: // Comment the following line to disable PID and enable bang-bang. #define PIDTEMP +#define PIDTEMPBED #define PID_MAX 255 // limits current to nozzle; 255=full current #ifdef PIDTEMP //#define PID_DEBUG // Sends debug data to the serial port. - //#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in % + //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term #define K1 0.95 //smoothing factor withing the PID #define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the @@ -114,6 +115,16 @@ // #define DEFAULT_Ki 0.1 // #define DEFAULT_Kd 12 +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, argressive factor of .15 (vs .1, 1, 10) + #define DEFAULT_bedKp 10.00 + #define DEFAULT_bedKi .023 + #define DEFAULT_bedKd 305.4 + +//mark from pidautotune +// #define DEFAULT_bedKp 97.1 +// #define DEFAULT_bedKi 1.41 +// #define DEFAULT_bedKd 1675.16 + // Mendel Parts V9 on 12V // #define DEFAULT_Kp 63.0 // #define DEFAULT_Ki 2.25 diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 5c46e7355f..91fbac52cd 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -113,6 +113,7 @@ // M221 S- set extrude factor override percentage // M240 - Trigger a camera to take a photograph // M301 - Set PID parameters P I and D +// M304 - Set bed PID parameters P I and D // M302 - Allow cold extrudes // M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) // M400 - Finish all moves @@ -1002,6 +1003,10 @@ void process_commands() #ifdef PIDTEMP SERIAL_PROTOCOLPGM(" @:"); SERIAL_PROTOCOL(getHeaterPower(tmp_extruder)); + #endif + #ifdef PIDTEMPBED + SERIAL_PROTOCOLPGM(" B@:"); + SERIAL_PROTOCOL(getHeaterPower(-1)); #endif SERIAL_PROTOCOLLN(""); return; @@ -1405,6 +1410,24 @@ void process_commands() } break; #endif //PIDTEMP + #ifdef PIDTEMPBED + case 304: // M304 + { + if(code_seen('P')) bedKp = code_value(); + if(code_seen('I')) bedKi = code_value()*PID_dT; + if(code_seen('D')) bedKd = code_value()/PID_dT; + updatePID(); + SERIAL_PROTOCOL(MSG_OK); + SERIAL_PROTOCOL(" p:"); + SERIAL_PROTOCOL(Kp); + SERIAL_PROTOCOL(" i:"); + SERIAL_PROTOCOL(Ki/PID_dT); + SERIAL_PROTOCOL(" d:"); + SERIAL_PROTOCOL(Kd*PID_dT); + SERIAL_PROTOCOLLN(""); + } + break; + #endif //PIDTEMP case 240: // M240 Triggers a camera by emulating a Canon RC-1 : http://www.doc-diy.net/photo/rc-1_hacked/ { #ifdef PHOTOGRAPH_PIN @@ -1437,8 +1460,14 @@ void process_commands() case 303: // M303 PID autotune { float temp = 150.0; + int e=0; + int c=5; + if (code_seen('E')) e=code_value(); + if (e<0) + temp=70; if (code_seen('S')) temp=code_value(); - PID_autotune(temp); + if (code_seen('C')) c=code_value(); + PID_autotune(temp, e, c); } break; case 400: // M400 finish all moves diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index a0413f710e..f31f84b260 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -57,6 +57,15 @@ int current_raw_bed = 0; float Kc=DEFAULT_Kc; #endif #endif //PIDTEMP + +#ifdef PIDTEMPBED + // used external + float pid_setpoint_bed = { 0.0 }; + + float bedKp=DEFAULT_bedKp; + float bedKi=(DEFAULT_bedKi*PID_dT); + float bedKd=(DEFAULT_bedKd/PID_dT); +#endif //PIDTEMPBED //=========================================================================== @@ -64,9 +73,6 @@ int current_raw_bed = 0; //=========================================================================== static volatile bool temp_meas_ready = false; -static unsigned long previous_millis_bed_heater; -//static unsigned long previous_millis_heater; - #ifdef PIDTEMP //static cannot be external: static float temp_iState[EXTRUDERS] = { 0 }; @@ -82,7 +88,20 @@ static unsigned long previous_millis_bed_heater; // static float pid_output[EXTRUDERS]; static bool pid_reset[EXTRUDERS]; #endif //PIDTEMP +#ifdef PIDTEMPBED + //static cannot be external: + static float temp_iState_bed = { 0 }; + static float temp_dState_bed = { 0 }; + static float pTerm_bed; + static float iTerm_bed; + static float dTerm_bed; + //int output; + static float pid_error_bed; + static float temp_iState_min_bed; + static float temp_iState_max_bed; +#endif //PIDTEMPBED static unsigned char soft_pwm[EXTRUDERS]; + static unsigned char soft_pwm_bed; #ifdef WATCHPERIOD int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all @@ -122,7 +141,7 @@ static unsigned long previous_millis_bed_heater; //============================= functions ============================ //=========================================================================== -void PID_autotune(float temp) +void PID_autotune(float temp, int extruder, int ncycles) { float input; int cycles=0; @@ -139,27 +158,45 @@ void PID_autotune(float temp) float Ku, Tu; float Kp, Ki, Kd; float max, min; - + + if ((extruder > EXTRUDERS) + #if (TEMP_BED_PIN <= -1) + ||(extruder < 0) + #endif + ){ + SERIAL_ECHOLN("PID Autotune failed. Bad extruder number."); + return; + } + SERIAL_ECHOLN("PID Autotune start"); disable_heater(); // switch off all heaters. - - soft_pwm[0] = PID_MAX/2; - - for(;;) { + + if (extruder<0) + soft_pwm_bed = PID_MAX/2; + else + soft_pwm[extruder] = PID_MAX/2; + + + + + for(;;) { if(temp_meas_ready == true) { // temp sample ready CRITICAL_SECTION_START; temp_meas_ready = false; CRITICAL_SECTION_END; - input = analog2temp(current_raw[0], 0); - + input = (extruder<0)?analog2tempBed(current_raw_bed):analog2temp(current_raw[extruder], extruder); + max=max(max,input); min=min(min,input); if(heating == true && input > temp) { if(millis() - t2 > 5000) { heating=false; - soft_pwm[0] = (bias - d) >> 1; + if (extruder<0) + soft_pwm_bed = (bias - d) >> 1; + else + soft_pwm[extruder] = (bias - d) >> 1; t1=millis(); t_high=t1 - t2; max=temp; @@ -210,7 +247,10 @@ void PID_autotune(float temp) */ } } - soft_pwm[0] = (bias + d) >> 1; + if (extruder<0) + soft_pwm_bed = (bias + d) >> 1; + else + soft_pwm[extruder] = (bias + d) >> 1; cycles++; min=temp; } @@ -221,17 +261,26 @@ void PID_autotune(float temp) return; } if(millis() - temp_millis > 2000) { - temp_millis = millis(); - SERIAL_PROTOCOLPGM("ok T:"); - SERIAL_PROTOCOL(degHotend(0)); + int p; + if (extruder<0){ + p=soft_pwm_bed; + SERIAL_PROTOCOLPGM("ok B:"); + }else{ + p=soft_pwm[extruder]; + SERIAL_PROTOCOLPGM("ok T:"); + } + + SERIAL_PROTOCOL(input); SERIAL_PROTOCOLPGM(" @:"); - SERIAL_PROTOCOLLN(getHeaterPower(0)); + SERIAL_PROTOCOLLN(p); + + temp_millis = millis(); } if(((millis() - t1) + (millis() - t2)) > (10L*60L*1000L*2L)) { SERIAL_PROTOCOLLNPGM("PID Autotune failed! timeout"); return; } - if(cycles > 5) { + if(cycles > ncycles) { SERIAL_PROTOCOLLNPGM("PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h"); return; } @@ -245,19 +294,18 @@ void updatePID() for(int e = 0; e < EXTRUDERS; e++) { temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki; } + temp_iState_max_bed = PID_INTEGRAL_DRIVE_MAX / bedKi; #endif } int getHeaterPower(int heater) { + if (heater<0) + return soft_pwm_bed; return soft_pwm[heater]; } void manage_heater() { -#ifdef HEATER_BED_DUTY_CYCLE_DIVIDER - static int bed_needs_heating=0; - static int bed_is_on=0; -#endif #ifdef USE_WATCHDOG wd_reset(); @@ -298,12 +346,16 @@ void manage_heater() temp_iState[e] += pid_error[e]; temp_iState[e] = constrain(temp_iState[e], temp_iState_min[e], temp_iState_max[e]); iTerm[e] = Ki * temp_iState[e]; + //K1 defined in Configuration.h in the PID settings #define K2 (1.0-K1) dTerm[e] = (Kd * (pid_input - temp_dState[e]))*K2 + (K1 * dTerm[e]); temp_dState[e] = pid_input; + pid_output = constrain(pTerm[e] + iTerm[e] - dTerm[e], 0, PID_MAX); } + #else + pid_output = constrain(pid_setpoint[e], 0, PID_MAX); #endif //PID_OPENLOOP #ifdef PID_DEBUG SERIAL_ECHOLN(" PIDDEBUG "< -1 - - #ifdef HEATER_BED_DUTY_CYCLE_DIVIDER - bed_needs_heating=0; #endif - #ifndef BED_LIMIT_SWITCHING + #if TEMP_BED_PIN > -1 + + #ifdef PIDTEMPBED + pid_input = analog2tempBed(current_raw_bed); + + #ifndef PID_OPENLOOP + pid_error_bed = pid_setpoint_bed - pid_input; + pTerm_bed = bedKp * pid_error_bed; + temp_iState_bed += pid_error_bed; + temp_iState_bed = constrain(temp_iState_bed, temp_iState_min_bed, temp_iState_max_bed); + iTerm_bed = bedKi * temp_iState_bed; + + //K1 defined in Configuration.h in the PID settings + #define K2 (1.0-K1) + dTerm_bed= (bedKd * (pid_input - temp_dState_bed))*K2 + (K1 * dTerm_bed); + temp_dState_bed = pid_input; + + pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, PID_MAX); + + #else + pid_output = constrain(pid_setpoint_bed, 0, PID_MAX); + #endif //PID_OPENLOOP + + if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) + { + soft_pwm_bed = (int)pid_output >> 1; + } + else { + soft_pwm_bed = 0; + } + + #elif not defined BED_LIMIT_SWITCHING // Check if temperature is within the correct range if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) { if(current_raw_bed >= target_raw_bed) { - WRITE(HEATER_BED_PIN,LOW); + soft_pwm_bed = 0; } else { - #ifdef HEATER_BED_DUTY_CYCLE_DIVIDER - bed_needs_heating=1; - #endif - WRITE(HEATER_BED_PIN,HIGH); + soft_pwm_bed = 100; } } else { + soft_pwm_bed = 0; WRITE(HEATER_BED_PIN,LOW); } #else //#ifdef BED_LIMIT_SWITCHING @@ -381,18 +449,16 @@ void manage_heater() if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) { if(current_raw_bed > target_bed_high_temp) { - WRITE(HEATER_BED_PIN,LOW); + soft_pwm_bed = 0; } else if(current_raw_bed <= target_bed_low_temp) { - #ifdef HEATER_BED_DUTY_CYCLE_DIVIDER - bed_needs_heating=1; - #endif - WRITE(HEATER_BED_PIN,HIGH); + soft_pwm_bed = 100; } } else { + soft_pwm_bed = 0; WRITE(HEATER_BED_PIN,LOW); } #endif @@ -567,6 +633,8 @@ void tp_init() #ifdef PIDTEMP temp_iState_min[e] = 0.0; temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki; + temp_iState_min_bed = 0.0; + temp_iState_max_bed = PID_INTEGRAL_DRIVE_MAX / bedKi; #endif //PIDTEMP } @@ -728,6 +796,7 @@ void disable_heater() #if TEMP_BED_PIN > -1 target_raw_bed=0; + soft_pwm_bed=0; #if HEATER_BED_PIN > -1 WRITE(HEATER_BED_PIN,LOW); #endif @@ -832,6 +901,7 @@ ISR(TIMER0_COMPB_vect) static unsigned char soft_pwm_0; static unsigned char soft_pwm_1; static unsigned char soft_pwm_2; + static unsigned char soft_pwm_b; if(pwm_count == 0){ soft_pwm_0 = soft_pwm[0]; @@ -844,6 +914,10 @@ ISR(TIMER0_COMPB_vect) soft_pwm_2 = soft_pwm[2]; if(soft_pwm_2 > 0) WRITE(HEATER_2_PIN,1); #endif + #if HEATER_BED_PIN > -1 + soft_pwm_b = soft_pwm_bed; + if(soft_pwm_b > 0) WRITE(HEATER_BED_PIN,1); + #endif } if(soft_pwm_0 <= pwm_count) WRITE(HEATER_0_PIN,0); #if EXTRUDERS > 1 @@ -852,6 +926,9 @@ ISR(TIMER0_COMPB_vect) #if EXTRUDERS > 2 if(soft_pwm_2 <= pwm_count) WRITE(HEATER_2_PIN,0); #endif + #if HEATER_BED_PIN > -1 + if(soft_pwm_b <= pwm_count) WRITE(HEATER_BED_PIN,0); + #endif pwm_count++; pwm_count &= 0x7f; diff --git a/Marlin/temperature.h b/Marlin/temperature.h index 1848c703dd..ae289de41f 100644 --- a/Marlin/temperature.h +++ b/Marlin/temperature.h @@ -46,11 +46,15 @@ extern int current_raw_bed; extern int target_bed_low_temp ; extern int target_bed_high_temp ; #endif -extern float Kp,Ki,Kd,Kc; #ifdef PIDTEMP + extern float Kp,Ki,Kd,Kc; extern float pid_setpoint[EXTRUDERS]; #endif +#ifdef PIDTEMPBED + extern float bedKp,bedKi,bedKd; + extern float pid_setpoint_bed; +#endif // #ifdef WATCHPERIOD extern int watch_raw[EXTRUDERS] ; @@ -88,7 +92,9 @@ FORCE_INLINE void setTargetHotend(const float &celsius, uint8_t extruder) { FORCE_INLINE void setTargetBed(const float &celsius) { target_raw_bed = temp2analogBed(celsius); - #ifdef BED_LIMIT_SWITCHING + #ifdef PIDTEMPBED + pid_setpoint_bed = celsius; + #elif defined BED_LIMIT_SWITCHING if(celsius>BED_HYSTERESIS) { target_bed_low_temp= temp2analogBed(celsius-BED_HYSTERESIS); @@ -163,7 +169,7 @@ FORCE_INLINE void autotempShutdown(){ #endif } -void PID_autotune(float temp); +void PID_autotune(float temp, int extruder, int ncycles); #endif - + From 5bfccab650db1e75d37d28a26b4e2ea54e333c62 Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Wed, 12 Sep 2012 21:52:16 -0500 Subject: [PATCH 23/52] readme --- README.md | 222 +++--------------------------------------------------- 1 file changed, 11 insertions(+), 211 deletions(-) diff --git a/README.md b/README.md index fb2c18968c..3fd246345b 100644 --- a/README.md +++ b/README.md @@ -1,222 +1,22 @@ WARNING: -------- -THIS IS RELEASE CANDIDATE 2 FOR MARLIN 1.0.0 +This is an experimental modification to allow PID on your bed heater. -The configuration is now split in two files -Configuration.h for the normal settings -Configuration_adv.h for the advanced settings +This will run at the same frequency as the main PID loop. Make sure you heater FET or SSR can do this. I use a fotek SSR-10DA and it's fine -Gen7T is not supported. +add something like this to you configuration (pulling this branch will get you this -Quick Information -=================== -This RepRap firmware is a mashup between Sprinter, grbl and many original parts. +~~~~~~~~~~~~~~~~~~~~ +#define PIDTEMPBED -Derived from Sprinter and Grbl by Erik van der Zalm. -Sprinters lead developers are Kliment and caru. -Grbls lead developer is Simen Svale Skogsrud. Sonney Jeon (Chamnit) improved some parts of grbl -A fork by bkubicek for the Ultimaker was merged, and further development was aided by him. -Some features have been added by: -Lampmaker, Bradley Feldman, and others... +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, argressive factor of .15 (vs .1, 1, 10) + #define DEFAULT_bedKp 10.00 + #define DEFAULT_bedKi .023 + #define DEFAULT_bedKd 305.4 +~~~~~~~~~~~~~~~~~~~~ -Features: - -* Interrupt based movement with real linear acceleration -* High steprate -* Look ahead (Keep the speed high when possible. High cornering speed) -* Interrupt based temperature protection -* preliminary support for Matthew Roberts advance algorithm - For more info see: http://reprap.org/pipermail/reprap-dev/2011-May/003323.html -* Full endstop support -* SD Card support -* SD Card folders (works in pronterface) -* SD Card autostart support -* LCD support (ideally 20x4) -* LCD menu system for autonomous SD card printing, controlled by an click-encoder. -* EEPROM storage of e.g. max-velocity, max-acceleration, and similar variables -* many small but handy things originating from bkubicek's fork. -* Arc support -* Temperature oversampling -* Dynamic Temperature setpointing aka "AutoTemp" -* Support for QTMarlin, a very beta GUI for PID-tuning and velocity-acceleration testing. https://github.com/bkubicek/QTMarlin -* Endstop trigger reporting to the host software. -* Updated sdcardlib -* Heater power reporting. Useful for PID monitoring. -* PID tuning -* CoreXY kinematics (www.corexy.com/theory.html) - -The default baudrate is 250000. This baudrate has less jitter and hence errors than the usual 115200 baud, but is less supported by drivers and host-environments. - - -Differences and additions to the already good Sprinter firmware: -================================================================ - -*Look-ahead:* - -Marlin has look-ahead. While sprinter has to break and re-accelerate at each corner, -lookahead will only decelerate and accelerate to a velocity, -so that the change in vectorial velocity magnitude is less than the xy_jerk_velocity. -This is only possible, if some future moves are already processed, hence the name. -It leads to less over-deposition at corners, especially at flat angles. - -*Arc support:* - -Slic3r can find curves that, although broken into segments, were ment to describe an arc. -Marlin is able to print those arcs. The advantage is the firmware can choose the resolution, -and can perform the arc with nearly constant velocity, resulting in a nice finish. -Also, less serial communication is needed. - -*Temperature Oversampling:* - -To reduce noise and make the PID-differential term more useful, 16 ADC conversion results are averaged. - -*AutoTemp:* - -If your gcode contains a wide spread of extruder velocities, or you realtime change the building speed, the temperature should be changed accordingly. -Usually, higher speed requires higher temperature. -This can now be performed by the AutoTemp function -By calling M109 S T F you enter the autotemp mode. - -You can leave it by calling M109 without any F. -If active, the maximal extruder stepper rate of all buffered moves will be calculated, and named "maxerate" [steps/sec]. -The wanted temperature then will be set to t=tempmin+factor*maxerate, while being limited between tempmin and tempmax. -If the target temperature is set manually or by gcode to a value less then tempmin, it will be kept without change. -Ideally, your gcode can be completely free of temperature controls, apart from a M109 S T F in the start.gcode, and a M109 S0 in the end.gcode. - -*EEPROM:* - -If you know your PID values, the acceleration and max-velocities of your unique machine, you can set them, and finally store them in the EEPROM. -After each reboot, it will magically load them from EEPROM, independent what your Configuration.h says. - -*LCD Menu:* - -If your hardware supports it, you can build yourself a LCD-CardReader+Click+encoder combination. It will enable you to realtime tune temperatures, -accelerations, velocities, flow rates, select and print files from the SD card, preheat, disable the steppers, and do other fancy stuff. -One working hardware is documented here: http://www.thingiverse.com/thing:12663 -Also, with just a 20x4 or 16x2 display, useful data is shown. - -*SD card folders:* - -If you have an SD card reader attached to your controller, also folders work now. Listing the files in pronterface will show "/path/subpath/file.g". -You can write to file in a subfolder by specifying a similar text using small letters in the path. -Also, backup copies of various operating systems are hidden, as well as files not ending with ".g". - -*SD card folders:* - -If you place a file auto[0-9].g into the root of the sd card, it will be automatically executed if you boot the printer. The same file will be executed by selecting "Autostart" from the menu. -First *0 will be performed, than *1 and so on. That way, you can heat up or even print automatically without user interaction. - -*Endstop trigger reporting:* - -If an endstop is hit while moving towards the endstop, the location at which the firmware thinks that the endstop was triggered is outputed on the serial port. -This is useful, because the user gets a warning message. -However, also tools like QTMarlin can use this for finding acceptable combinations of velocity+acceleration. - -*Coding paradigm:* - -Not relevant from a user side, but Marlin was split into thematic junks, and has tried to partially enforced private variables. -This is intended to make it clearer, what interacts which what, and leads to a higher level of modularization. -We think that this is a useful prestep for porting this firmware to e.g. an ARM platform in the future. -A lot of RAM (with enabled LCD ~2200 bytes) was saved by storing char []="some message" in Program memory. -In the serial communication, a #define based level of abstraction was enforced, so that it is clear that -some transfer is information (usually beginning with "echo:"), an error "error:", or just normal protocol, -necessary for backwards compatibility. - -*Interrupt based temperature measurements:* - -An interrupt is used to manage ADC conversions, and enforce checking for critical temperatures. -This leads to less blocking in the heater management routine. - - -Non-standard M-Codes, different to an old version of sprinter: -============================================================== -Movement: - -* G2 - CW ARC -* G3 - CCW ARC - -General: - -* M17 - Enable/Power all stepper motors. Compatibility to ReplicatorG. -* M18 - Disable all stepper motors; same as M84.Compatibility to ReplicatorG. -* M30 - Print time since last M109 or SD card start to serial -* M42 - Change pin status via gcode -* M80 - Turn on Power Supply -* M81 - Turn off Power Supply -* M114 - Output current position to serial port -* M119 - Output Endstop status to serial port - -Movement variables: - -* M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!! -* M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec -* M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate -* M206 - set home offsets. This sets the X,Y,Z coordinates of the endstops (and is added to the {X,Y,Z}_HOME_POS configuration options (and is also added to the coordinates, if any, provided to G82, as with earlier firmware) -* M220 - set build speed mulitplying S:factor in percent ; aka "realtime tuneing in the gcode". So you can slow down if you have islands in one height-range, and speed up otherwise. -* M221 - set the extrude multiplying S:factor in percent -* M400 - Finish all buffered moves. - -Temperature variables: -* M301 - Set PID parameters P I and D -* M302 - Allow cold extrudes -* M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) - -Advance: - -* M200 - Set filament diameter for advance -* M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk - -EEPROM: - -* M500 - stores paramters in EEPROM. This parameters are stored: axis_steps_per_unit, max_feedrate, max_acceleration ,acceleration,retract_acceleration, - minimumfeedrate,mintravelfeedrate,minsegmenttime, jerk velocities, PID -* M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). -* M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. -* M503 - print the current settings (from memory not from eeprom) - -MISC: - -* M240 - Trigger a camera to take a photograph -* M999 - Restart after being stopped by error - -Configuring and compilation: -============================ - -Install the arduino software IDE/toolset v22 - http://www.arduino.cc/en/Main/Software - -For gen6 and sanguinololu the Sanguino directory in the Marlin dir needs to be copied to the arduino environment. - copy Marlin\sanguino \hardware\Sanguino - -Install Ultimaker's RepG 25 build - http://software.ultimaker.com -For SD handling and as better substitute (apart from stl manipulation) download -the very nice Kliment's printrun/pronterface https://github.com/kliment/Printrun - -Copy the Ultimaker Marlin firmware - https://github.com/ErikZalm/Marlin/tree/Marlin_v1 - (Use the download button) - -Start the arduino IDE. -Select Tools -> Board -> Arduino Mega 2560 or your microcontroller -Select the correct serial port in Tools ->Serial Port -Open Marlin.pde - -Click the Verify/Compile button - -Click the Upload button -If all goes well the firmware is uploading - -Start Ultimaker's Custom RepG 25 -Make sure Show Experimental Profiles is enabled in Preferences -Select Sprinter as the Driver - -Press the Connect button. - -KNOWN ISSUES: RepG will display: Unknown: marlin x.y.z - -That's ok. Enjoy Silky Smooth Printing. +Autotune works for the bed. Give it an "M303 E-1 C8 S90" to run autotune on the bed at 90 degrees for 8 cycles. From 1d389ad3a8dcbbd14dce11c8b489387ec07b48ac Mon Sep 17 00:00:00 2001 From: andrey-vasilyev Date: Thu, 13 Sep 2012 19:23:48 +0400 Subject: [PATCH 24/52] Fix M81 not working reliably on Gen7 Some discussion of the issue is here http://forums.reprap.org/read.php?181,118329,page=1 --- Marlin/Marlin.pde | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 5c46e7355f..f38d3f052f 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1145,7 +1145,8 @@ void process_commands() st_synchronize(); suicide(); #elif (PS_ON_PIN > -1) - SET_INPUT(PS_ON_PIN); //Floating + SET_OUTPUT(PS_ON_PIN); + WRITE(PS_ON_PIN, HIGH); #endif break; From c433142abf3e7162f6507cd3dc8b9e0f2aa4e935 Mon Sep 17 00:00:00 2001 From: "G. W. C." Date: Fri, 14 Sep 2012 16:29:43 +0300 Subject: [PATCH 25/52] Update Marlin/ultralcd.pde The joris' char drawins are expressed in binary so to show their content's in a more visual fashion. This is not a code modification as much as a readibility modification. --- Marlin/ultralcd.pde | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 511d47fcf9..5cfbc322e1 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -133,9 +133,36 @@ void lcd_init() B10001, B01110 }; - byte uplevel[8]={0x04, 0x0e, 0x1f, 0x04, 0x1c, 0x00, 0x00, 0x00};//thanks joris - byte refresh[8]={0x00, 0x06, 0x19, 0x18, 0x03, 0x13, 0x0c, 0x00}; //thanks joris - byte folder [8]={0x00, 0x1c, 0x1f, 0x11, 0x11, 0x1f, 0x00, 0x00}; //thanks joris + byte uplevel[8]={ + B00100, + B01110, + B11111, + B00100, + B11100, + B00000, + B00000, + B00000 + }; //thanks joris + byte refresh[8]={ + B00000, + B00110, + B11001, + B11000, + B00011, + B10011, + B01100, + B00000, + }; //thanks joris + byte folder [8]={ + B00000, + B11100, + B11111, + B10001, + B10001, + B11111, + B00000, + B00000 + }; //thanks joris lcd.begin(LCD_WIDTH, LCD_HEIGHT); lcd.createChar(1,Degree); lcd.createChar(2,Thermometer); From 6ccbfeb80c675ad6f819a6e96b621def7d442c7d Mon Sep 17 00:00:00 2001 From: "G. W. C." Date: Fri, 14 Sep 2012 16:38:54 +0300 Subject: [PATCH 26/52] Update Marlin/Marlin.pde MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added function 'setTargetedHotend' that turns into a function an operation repeated 3 times through the M-codes processing. This modification saves a few bytes that can be used to add support for new commands. --- Marlin/Marlin.pde | 60 +++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 5c46e7355f..9412404c50 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -202,6 +202,7 @@ bool Stopped=false; //=========================================================================== void get_arc_coordinates(); +bool setTargetedHotend(int code); void serial_echopair_P(const char *s_P, float v) { serialprintPGM(s_P); SERIAL_ECHO(v); } @@ -957,15 +958,8 @@ void process_commands() } break; case 104: // M104 - tmp_extruder = active_extruder; - if(code_seen('T')) { - tmp_extruder = code_value(); - if(tmp_extruder >= EXTRUDERS) { - SERIAL_ECHO_START; - SERIAL_ECHO(MSG_M104_INVALID_EXTRUDER); - SERIAL_ECHOLN(tmp_extruder); - break; - } + if(setTargetedHotend(104)){ + break; } if (code_seen('S')) setTargetHotend(code_value(), tmp_extruder); setWatch(); @@ -974,15 +968,8 @@ void process_commands() if (code_seen('S')) setTargetBed(code_value()); break; case 105 : // M105 - tmp_extruder = active_extruder; - if(code_seen('T')) { - tmp_extruder = code_value(); - if(tmp_extruder >= EXTRUDERS) { - SERIAL_ECHO_START; - SERIAL_ECHO(MSG_M105_INVALID_EXTRUDER); - SERIAL_ECHOLN(tmp_extruder); - break; - } + if(setTargetedHotend(105)){ + break; } #if (TEMP_0_PIN > -1) SERIAL_PROTOCOLPGM("ok T:"); @@ -1008,15 +995,8 @@ void process_commands() break; case 109: {// M109 - Wait for extruder heater to reach target. - tmp_extruder = active_extruder; - if(code_seen('T')) { - tmp_extruder = code_value(); - if(tmp_extruder >= EXTRUDERS) { - SERIAL_ECHO_START; - SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER); - SERIAL_ECHOLN(tmp_extruder); - break; - } + if(setTargetedHotend(109)){ + break; } LCD_MESSAGEPGM(MSG_HEATING); #ifdef AUTOTEMP @@ -1829,4 +1809,28 @@ void setPwmFrequency(uint8_t pin, int val) } } -#endif +#endif //FAST_PWM_FAN + +bool setTargetedHotend(int code){ + tmp_extruder = active_extruder; + if(code_seen('T')) { + tmp_extruder = code_value(); + if(tmp_extruder >= EXTRUDERS) { + SERIAL_ECHO_START; + switch(code){ + case 104: + SERIAL_ECHO(MSG_M104_INVALID_EXTRUDER); + break; + case 105: + SERIAL_ECHO(MSG_M105_INVALID_EXTRUDER); + break; + case 109: + SERIAL_ECHO(MSG_M109_INVALID_EXTRUDER); + break; + } + SERIAL_ECHOLN(tmp_extruder); + return true; + } + } + return false; +} \ No newline at end of file From dc566d654f1cdf8d88c40c0361644d99db110820 Mon Sep 17 00:00:00 2001 From: ZetaPhoenix Date: Fri, 14 Sep 2012 21:48:49 -0700 Subject: [PATCH 27/52] fixes #246 Added statements to set the limit switch positions to the maximum travel if homing in the positive direction as well as bed center at (0,0) if defined. --- Marlin/Configuration.h | 54 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 0ec06316f8..a9ef23ce34 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -203,10 +203,56 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th #define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS) #define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS) -// The position of the homing switches. Use MAX_LENGTH * -0.5 if the center should be 0, 0, 0 -#define X_HOME_POS 0 -#define Y_HOME_POS 0 -#define Z_HOME_POS 0 +// The position of the homing switches +// Auto switch code by ZetaPhoenix +//#define MANUAL_HOME_POSITIONS //If defined, manualy programed locations will be loaded +//#define BED_CENTER_AT_0_0 + +#ifdef MANUAL_HOME_POSITION //Manual limit switch locations + #define X_HOME_POS 0 + #define Y_HOME_POS 0 + #define Z_HOME_POS 0 + +//Set min/max homing switch positions based upon direction and min/max travel limits +#else + //X axis + #if X_HOME_DIR == -1 + #ifdef BED_CENTER_AT_0_0 + #define X_HOME_POS X_MAX_LENGTH * -0.5 + #else + #define X_HOME_POS X_MIN_POS + #endif //BED_CENTER_AT_0_0 + #else + #ifdef BED_CENTER_AT_0_0 + #define X_HOME_POS X_MAX_LENGTH * 0.5 + #else + #define X_HOME_POS X_MAX_POS + #endif //BED_CENTER_AT_0_0 + #endif //X_HOME_DIR == -1 + + //Y axis + #if Y_HOME_DIR == -1 + #ifdef BED_CENTER_AT_0_0 + #define Y_HOME_POS Y_MAX_LENGTH * -0.5 + #else + #define Y_HOME_POS Y_MIN_POS + #endif //BED_CENTER_AT_0_0 + #else + #ifdef BED_CENTER_AT_0_0 + #define Y_HOME_POS Y_MAX_LENGTH * 0.5 + #else + #define Y_HOME_POS Y_MAX_POS + #endif //BED_CENTER_AT_0_0 + #endif //Y_HOME_DIR == -1 + + // Z axis + #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used + #define Z_HOME_POS Z_MIN_POS + #else + #define Z_HOME_POS Z_MAX_POS + #endif //Z_HOME_DIR == -1 +#endif //End auto min/max positions + //// MOVEMENT SETTINGS #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E From c6caa45ae25196dfe658d1cdb2189a9a9ff9f574 Mon Sep 17 00:00:00 2001 From: ZetaPhoenix Date: Sat, 15 Sep 2012 15:25:49 -0700 Subject: [PATCH 28/52] Limit Switch locations based on MIN/MAX limits and homing direction fixes #246 Added statements to set the limit switch positions to the maximum travel if homing in the positive direction as well as bed center at (0,0) if defined. Relocated code based on feedback. --- Marlin/Configuration.h | 54 +++++--------------------------------- Marlin/Configuration_adv.h | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 48 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index a9ef23ce34..00ccaa082d 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -204,55 +204,13 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th #define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS) // The position of the homing switches -// Auto switch code by ZetaPhoenix -//#define MANUAL_HOME_POSITIONS //If defined, manualy programed locations will be loaded -//#define BED_CENTER_AT_0_0 - -#ifdef MANUAL_HOME_POSITION //Manual limit switch locations - #define X_HOME_POS 0 - #define Y_HOME_POS 0 - #define Z_HOME_POS 0 - -//Set min/max homing switch positions based upon direction and min/max travel limits -#else - //X axis - #if X_HOME_DIR == -1 - #ifdef BED_CENTER_AT_0_0 - #define X_HOME_POS X_MAX_LENGTH * -0.5 - #else - #define X_HOME_POS X_MIN_POS - #endif //BED_CENTER_AT_0_0 - #else - #ifdef BED_CENTER_AT_0_0 - #define X_HOME_POS X_MAX_LENGTH * 0.5 - #else - #define X_HOME_POS X_MAX_POS - #endif //BED_CENTER_AT_0_0 - #endif //X_HOME_DIR == -1 - - //Y axis - #if Y_HOME_DIR == -1 - #ifdef BED_CENTER_AT_0_0 - #define Y_HOME_POS Y_MAX_LENGTH * -0.5 - #else - #define Y_HOME_POS Y_MIN_POS - #endif //BED_CENTER_AT_0_0 - #else - #ifdef BED_CENTER_AT_0_0 - #define Y_HOME_POS Y_MAX_LENGTH * 0.5 - #else - #define Y_HOME_POS Y_MAX_POS - #endif //BED_CENTER_AT_0_0 - #endif //Y_HOME_DIR == -1 - - // Z axis - #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used - #define Z_HOME_POS Z_MIN_POS - #else - #define Z_HOME_POS Z_MAX_POS - #endif //Z_HOME_DIR == -1 -#endif //End auto min/max positions +//#define MANUAL_HOME_POSITIONS // If defined, manualy programed locations will be used +//#define BED_CENTER_AT_0_0 // If defined the center of the bed is defined as (0,0) +//Manual homing switch locations: +#define MANUAL_X_HOME_POS 0 +#define MANUAL_Y_HOME_POS 0 +#define MANUAL_Z_HOME_POS 0 //// MOVEMENT SETTINGS #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 0182c9375a..a356c919e2 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -76,6 +76,54 @@ #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing + +//// AUTOSET LOCATIONS OF LIMIT SWITCHES +//// Added by ZetaPhoenix 09-15-2012 +#ifdef MANUAL_HOME_POSITION //Use manual limit switch locations + #define X_HOME_POS MANUAL_X_HOME_POS + #define Y_HOME_POS MANUAL_Y_HOME_POS + #define Z_HOME_POS MANUAL_Z_HOME_POS +#else //Set min/max homing switch positions based upon homing direction and min/max travel limits + //X axis + #if X_HOME_DIR == -1 + #ifdef BED_CENTER_AT_0_0 + #define X_HOME_POS X_MAX_LENGTH * -0.5 + #else + #define X_HOME_POS X_MIN_POS + #endif //BED_CENTER_AT_0_0 + #else + #ifdef BED_CENTER_AT_0_0 + #define X_HOME_POS X_MAX_LENGTH * 0.5 + #else + #define X_HOME_POS X_MAX_POS + #endif //BED_CENTER_AT_0_0 + #endif //X_HOME_DIR == -1 + + //Y axis + #if Y_HOME_DIR == -1 + #ifdef BED_CENTER_AT_0_0 + #define Y_HOME_POS Y_MAX_LENGTH * -0.5 + #else + #define Y_HOME_POS Y_MIN_POS + #endif //BED_CENTER_AT_0_0 + #else + #ifdef BED_CENTER_AT_0_0 + #define Y_HOME_POS Y_MAX_LENGTH * 0.5 + #else + #define Y_HOME_POS Y_MAX_POS + #endif //BED_CENTER_AT_0_0 + #endif //Y_HOME_DIR == -1 + + // Z axis + #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used + #define Z_HOME_POS Z_MIN_POS + #else + #define Z_HOME_POS Z_MAX_POS + #endif //Z_HOME_DIR == -1 +#endif //End auto min/max positions +//END AUTOSET LOCATIONS OF LIMIT SWITCHES -ZP + + //#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats. // A single Z stepper driver is usually used to drive 2 stepper motors. From 8ac5b29e02fad3c2f857097923b9d5f1afafa354 Mon Sep 17 00:00:00 2001 From: ZetaPhoenix Date: Sun, 16 Sep 2012 14:51:24 -0700 Subject: [PATCH 29/52] Changes to M119 response for easier visual comparison Changed to report on individual lines with "TRIGGERED" or "open" instead of "H" or "L" on one line as H&L could be confused with logic levels High and Low which may be wrong if using inverted logic. Added strings to language.h. Fixed typo "deu" in English language that was fixed in #134 but got added back in via 9f7f7354f5b953dd3545a3b2cb96687ebd3d3ba0 --- Marlin/Marlin.pde | 14 +++++++------- Marlin/language.h | 48 +++++++++++++++++++++++++++-------------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index abee6c6e9a..92ed8be16f 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1225,31 +1225,31 @@ void process_commands() enable_endstops(true) ; break; case 119: // M119 + SERIAL_PROTOCOLLN(MSG_M119_REPORT); #if (X_MIN_PIN > -1) SERIAL_PROTOCOLPGM(MSG_X_MIN); - SERIAL_PROTOCOL(((READ(X_MIN_PIN)^X_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(X_MIN_PIN)^X_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif #if (X_MAX_PIN > -1) SERIAL_PROTOCOLPGM(MSG_X_MAX); - SERIAL_PROTOCOL(((READ(X_MAX_PIN)^X_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(X_MAX_PIN)^X_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif #if (Y_MIN_PIN > -1) SERIAL_PROTOCOLPGM(MSG_Y_MIN); - SERIAL_PROTOCOL(((READ(Y_MIN_PIN)^Y_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(Y_MIN_PIN)^Y_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif #if (Y_MAX_PIN > -1) SERIAL_PROTOCOLPGM(MSG_Y_MAX); - SERIAL_PROTOCOL(((READ(Y_MAX_PIN)^Y_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(Y_MAX_PIN)^Y_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif #if (Z_MIN_PIN > -1) SERIAL_PROTOCOLPGM(MSG_Z_MIN); - SERIAL_PROTOCOL(((READ(Z_MIN_PIN)^Z_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(Z_MIN_PIN)^Z_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif #if (Z_MAX_PIN > -1) SERIAL_PROTOCOLPGM(MSG_Z_MAX); - SERIAL_PROTOCOL(((READ(Z_MAX_PIN)^Z_ENDSTOPS_INVERTING)?"H ":"L ")); + SERIAL_PROTOCOLLN(((READ(Z_MAX_PIN)^Z_ENDSTOPS_INVERTING)?MSG_ENDSTOP_HIT:MSG_ENDSTOP_OPEN)); #endif - SERIAL_PROTOCOLLN(""); break; //TODO: update for all axis, use for loop case 201: // M201 diff --git a/Marlin/language.h b/Marlin/language.h index 111557521d..907a9a5736 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -151,17 +151,20 @@ #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" #define MSG_COUNT_X " Count X:" #define MSG_ERR_KILLED "Printer halted. kill() called !!" - #define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!. (Temperature is reset. Set it before restarting)" + #define MSG_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart!. (Temperature is reset. Set it before restarting)" #define MSG_RESEND "Resend:" #define MSG_UNKNOWN_COMMAND "Unknown command:\"" #define MSG_ACTIVE_EXTRUDER "Active Extruder: " #define MSG_INVALID_EXTRUDER "Invalid extruder" - #define MSG_X_MIN "x_min:" - #define MSG_X_MAX "x_max:" - #define MSG_Y_MIN "y_min:" - #define MSG_Y_MAX "y_max:" - #define MSG_Z_MIN "z_min:" - #define MSG_Z_MAX "z_max:" + #define MSG_X_MIN "x_min: " + #define MSG_X_MAX "x_max: " + #define MSG_Y_MIN "y_min: " + #define MSG_Y_MAX "y_max: " + #define MSG_Z_MIN "z_min: " + #define MSG_Z_MAX "z_max: " + #define MSG_M119_REPORT "Reporting endstop status" + #define MSG_ENDSTOP_HIT "TRIGGERED" + #define MSG_ENDSTOP_OPEN "open" #define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir" #define MSG_SD_INIT_FAIL "SD init fail" @@ -311,12 +314,15 @@ #define MSG_UNKNOWN_COMMAND "Unknown command:\"" #define MSG_ACTIVE_EXTRUDER "Active Extruder: " #define MSG_INVALID_EXTRUDER "Invalid extruder" - #define MSG_X_MIN "x_min:" - #define MSG_X_MAX "x_max:" - #define MSG_Y_MIN "y_min:" - #define MSG_Y_MAX "y_max:" - #define MSG_Z_MIN "z_min:" - #define MSG_Z_MAX "z_max:" + #define MSG_X_MIN "x_min: " + #define MSG_X_MAX "x_max: " + #define MSG_Y_MIN "y_min: " + #define MSG_Y_MAX "y_max: " + #define MSG_Z_MIN "z_min: " + #define MSG_Z_MAX "z_max: " + #define MSG_M119_REPORT "Reporting endstop status" + #define MSG_ENDSTOP_HIT "TRIGGERED" + #define MSG_ENDSTOP_OPEN "open" #define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir" #define MSG_SD_INIT_FAIL "SD init fail" @@ -466,13 +472,15 @@ #define MSG_UNKNOWN_COMMAND "Comando Desconocido:\"" #define MSG_ACTIVE_EXTRUDER "Extrusor Activo: " #define MSG_INVALID_EXTRUDER "Extrusor Invalido" -#define MSG_X_MIN "x_min:" -#define MSG_X_MAX "x_max:" -#define MSG_Y_MIN "y_min:" -#define MSG_Y_MAX "y_max:" -#define MSG_Z_MIN "z_min:" -#define MSG_Z_MAX "z_max:" - +#define MSG_X_MIN "x_min: " +#define MSG_X_MAX "x_max: " +#define MSG_Y_MIN "y_min: " +#define MSG_Y_MAX "y_max: " +#define MSG_Z_MIN "z_min: " +#define MSG_M119_REPORT "Reporting endstop status" +#define MSG_ENDSTOP_HIT "TRIGGERED" +#define MSG_ENDSTOP_OPEN "open" + #define MSG_SD_CANT_OPEN_SUBDIR "No se pudo abrir la subcarpeta." #define MSG_SD_INIT_FAIL "Fallo al iniciar la SD" #define MSG_SD_VOL_INIT_FAIL "Fallo al montar el volumen" From 0a5ad3ab8592ab02c47153144030fe2b6c020c6e Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Mon, 17 Sep 2012 08:42:35 -0500 Subject: [PATCH 30/52] move comment to correct place --- Marlin/Marlin.pde | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 91fbac52cd..7c58499133 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -113,9 +113,9 @@ // M221 S- set extrude factor override percentage // M240 - Trigger a camera to take a photograph // M301 - Set PID parameters P I and D -// M304 - Set bed PID parameters P I and D // M302 - Allow cold extrudes // M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) +// M304 - Set bed PID parameters P I and D // M400 - Finish all moves // M500 - stores paramters in EEPROM // M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). From 04631d2250c9107c6c2b6e34e7c8523ac669c7aa Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Mon, 17 Sep 2012 14:17:24 -0500 Subject: [PATCH 31/52] cleanup for pull --- Marlin/Configuration.h | 49 +++++++++++++++++++++++++++++--------- Marlin/Configuration_adv.h | 5 +--- Marlin/temperature.cpp | 25 +++++++++++-------- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 2bcfc72833..0a1c119446 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -95,7 +95,6 @@ // PID settings: // Comment the following line to disable PID and enable bang-bang. #define PIDTEMP -#define PIDTEMPBED #define PID_MAX 255 // limits current to nozzle; 255=full current #ifdef PIDTEMP //#define PID_DEBUG // Sends debug data to the serial port. @@ -115,22 +114,50 @@ // #define DEFAULT_Ki 0.1 // #define DEFAULT_Kd 12 -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, argressive factor of .15 (vs .1, 1, 10) - #define DEFAULT_bedKp 10.00 - #define DEFAULT_bedKi .023 - #define DEFAULT_bedKd 305.4 - -//mark from pidautotune -// #define DEFAULT_bedKp 97.1 -// #define DEFAULT_bedKi 1.41 -// #define DEFAULT_bedKd 1675.16 - // Mendel Parts V9 on 12V // #define DEFAULT_Kp 63.0 // #define DEFAULT_Ki 2.25 // #define DEFAULT_Kd 440 #endif // PIDTEMP +// Bed Temperature Control +// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis +// +// uncomment this to enable PID on the bed. It uses the same ferquency PWM as the extruder. +// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz, +// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating. +// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater. +// If your configuration is significantly different than this and you don't understand the issues involved, you proabaly +// shouldn't use bed PID until someone else verifies your hardware works. +// If this is enabled, find your own PID constants below. +//#define PIDTEMPBED +// +//#define BED_LIMIT_SWITCHING + +// This sets the max power delived to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option. +// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis) +// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did, +// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED) +#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current + +#ifdef PIDTEMPBED +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, argressive factor of .15 (vs .1, 1, 10) + #define DEFAULT_bedKp 10.00 + #define DEFAULT_bedKi .023 + #define DEFAULT_bedKd 305.4 + +//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+) +//from pidautotune +// #define DEFAULT_bedKp 97.1 +// #define DEFAULT_bedKi 1.41 +// #define DEFAULT_bedKd 1675.16 + +// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles. +#endif // PIDTEMPBED + + + //this prevents dangerous Extruder moves, i.e. if the temperature is under the limit //can be software-disabled for whatever purposes by #define PREVENT_DANGEROUS_EXTRUDE diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 0182c9375a..281da70bc0 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -5,13 +5,10 @@ //=============================Thermal Settings ============================ //=========================================================================== -// Select one of these only to define how the bed temp is read. -// -//#define BED_LIMIT_SWITCHING #ifdef BED_LIMIT_SWITCHING #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS #endif -#define BED_CHECK_INTERVAL 5000 //ms +#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control //// Heating sanity check: // This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index f31f84b260..f25b462ab6 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -153,8 +153,7 @@ void PID_autotune(float temp, int extruder, int ncycles) long t_high; long t_low; - long bias=PID_MAX/2; - long d = PID_MAX/2; + long bias, d; float Ku, Tu; float Kp, Ki, Kd; float max, min; @@ -173,9 +172,15 @@ void PID_autotune(float temp, int extruder, int ncycles) disable_heater(); // switch off all heaters. if (extruder<0) - soft_pwm_bed = PID_MAX/2; + { + soft_pwm_bed = (PID_MAX_BED)/2; + bias = d = (PID_MAX_BED)/2; + } else - soft_pwm[extruder] = PID_MAX/2; + { + soft_pwm[extruder] = (PID_MAX)/2; + bias = d = (PID_MAX)/2; + } @@ -209,8 +214,8 @@ void PID_autotune(float temp, int extruder, int ncycles) t_low=t2 - t1; if(cycles > 0) { bias += (d*(t_high - t_low))/(t_low + t_high); - bias = constrain(bias, 20 ,PID_MAX-20); - if(bias > PID_MAX/2) d = PID_MAX - 1 - bias; + bias = constrain(bias, 20 ,(extruder<0?(PID_MAX_BED):(PID_MAX))-20); + if(bias > (extruder<0?(PID_MAX_BED):(PID_MAX))/2) d = (extruder<0?(PID_MAX_BED):(PID_MAX)) - 1 - bias; else d = bias; SERIAL_PROTOCOLPGM(" bias: "); SERIAL_PROTOCOL(bias); @@ -414,10 +419,10 @@ void manage_heater() dTerm_bed= (bedKd * (pid_input - temp_dState_bed))*K2 + (K1 * dTerm_bed); temp_dState_bed = pid_input; - pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, PID_MAX); + pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, PID_MAX_BED); #else - pid_output = constrain(pid_setpoint_bed, 0, PID_MAX); + pid_output = constrain(pid_setpoint_bed, 0, PID_MAX_BED); #endif //PID_OPENLOOP if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) @@ -437,7 +442,7 @@ void manage_heater() } else { - soft_pwm_bed = 100; + soft_pwm_bed = PID_MAX_BED>>1; } } else { @@ -454,7 +459,7 @@ void manage_heater() else if(current_raw_bed <= target_bed_low_temp) { - soft_pwm_bed = 100; + soft_pwm_bed = PID_MAX_BED>>1; } } else { From eb06a886c4b84c972c01e07d43e3d2674c90dea5 Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Mon, 17 Sep 2012 14:23:49 -0500 Subject: [PATCH 32/52] missed --- Marlin/temperature.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index f25b462ab6..63c6813301 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -173,8 +173,8 @@ void PID_autotune(float temp, int extruder, int ncycles) if (extruder<0) { - soft_pwm_bed = (PID_MAX_BED)/2; - bias = d = (PID_MAX_BED)/2; + soft_pwm_bed = (MAX_BED_POWER)/2; + bias = d = (MAX_BED_POWER)/2; } else { @@ -214,8 +214,8 @@ void PID_autotune(float temp, int extruder, int ncycles) t_low=t2 - t1; if(cycles > 0) { bias += (d*(t_high - t_low))/(t_low + t_high); - bias = constrain(bias, 20 ,(extruder<0?(PID_MAX_BED):(PID_MAX))-20); - if(bias > (extruder<0?(PID_MAX_BED):(PID_MAX))/2) d = (extruder<0?(PID_MAX_BED):(PID_MAX)) - 1 - bias; + bias = constrain(bias, 20 ,(extruder<0?(MAX_BED_POWER):(PID_MAX))-20); + if(bias > (extruder<0?(MAX_BED_POWER):(PID_MAX))/2) d = (extruder<0?(MAX_BED_POWER):(PID_MAX)) - 1 - bias; else d = bias; SERIAL_PROTOCOLPGM(" bias: "); SERIAL_PROTOCOL(bias); @@ -299,6 +299,8 @@ void updatePID() for(int e = 0; e < EXTRUDERS; e++) { temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki; } +#endif +#ifdef PIDTEMPBED temp_iState_max_bed = PID_INTEGRAL_DRIVE_MAX / bedKi; #endif } @@ -419,10 +421,10 @@ void manage_heater() dTerm_bed= (bedKd * (pid_input - temp_dState_bed))*K2 + (K1 * dTerm_bed); temp_dState_bed = pid_input; - pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, PID_MAX_BED); + pid_output = constrain(pTerm_bed + iTerm_bed - dTerm_bed, 0, MAX_BED_POWER); #else - pid_output = constrain(pid_setpoint_bed, 0, PID_MAX_BED); + pid_output = constrain(pid_setpoint_bed, 0, MAX_BED_POWER); #endif //PID_OPENLOOP if((current_raw_bed > bed_minttemp) && (current_raw_bed < bed_maxttemp)) @@ -442,7 +444,7 @@ void manage_heater() } else { - soft_pwm_bed = PID_MAX_BED>>1; + soft_pwm_bed = MAX_BED_POWER>>1; } } else { @@ -459,7 +461,7 @@ void manage_heater() else if(current_raw_bed <= target_bed_low_temp) { - soft_pwm_bed = PID_MAX_BED>>1; + soft_pwm_bed = MAX_BED_POWER>>1; } } else { From d197f8504b2bd8ff2872f4b562b8b2465b296090 Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Mon, 17 Sep 2012 19:18:09 -0500 Subject: [PATCH 33/52] clean up and changes from testing --- Marlin/Marlin.pde | 7 +++---- Marlin/temperature.cpp | 6 +++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 7c58499133..d0ce597dcd 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1000,14 +1000,13 @@ void process_commands() SERIAL_ERROR_START; SERIAL_ERRORLNPGM(MSG_ERR_NO_THERMISTORS); #endif - #ifdef PIDTEMP + SERIAL_PROTOCOLPGM(" @:"); SERIAL_PROTOCOL(getHeaterPower(tmp_extruder)); - #endif - #ifdef PIDTEMPBED + SERIAL_PROTOCOLPGM(" B@:"); SERIAL_PROTOCOL(getHeaterPower(-1)); - #endif + SERIAL_PROTOCOLLN(""); return; break; diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 63c6813301..66293c7f59 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -99,6 +99,8 @@ static volatile bool temp_meas_ready = false; static float pid_error_bed; static float temp_iState_min_bed; static float temp_iState_max_bed; +#else //PIDTEMPBED + static unsigned long previous_millis_bed_heater; #endif //PIDTEMPBED static unsigned char soft_pwm[EXTRUDERS]; static unsigned char soft_pwm_bed; @@ -640,9 +642,11 @@ void tp_init() #ifdef PIDTEMP temp_iState_min[e] = 0.0; temp_iState_max[e] = PID_INTEGRAL_DRIVE_MAX / Ki; +#endif //PIDTEMP +#ifdef PIDTEMPBED temp_iState_min_bed = 0.0; temp_iState_max_bed = PID_INTEGRAL_DRIVE_MAX / bedKi; -#endif //PIDTEMP +#endif //PIDTEMPBED } #if (HEATER_0_PIN > -1) From ebc4601185d785abccc0d79f6bdd789d3da5dabe Mon Sep 17 00:00:00 2001 From: elgambitero Date: Fri, 7 Sep 2012 14:55:39 +0200 Subject: [PATCH 34/52] Some new dialogs translated to Spanish --- Marlin/language.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index 907a9a5736..e09e63234c 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -412,10 +412,10 @@ #define MSG_PREPARE " Preparar \x7E" #define MSG_PREPARE_ALT " Preparar \003" #define MSG_CONTROL_ARROW " Control \x7E" -#define MSG_RETRACT_ARROW " Control \x7E" +#define MSG_RETRACT_ARROW " Retraer \x7E" #define MSG_TUNE " Ajustar \x7E" -#define MSG_PAUSE_PRINT " Pause Print \x7E" -#define MSG_RESUME_PRINT " Resume Print \x7E" +#define MSG_PAUSE_PRINT " Pausar Impresion \x7E" +#define MSG_RESUME_PRINT " Reanudar Impresion \x7E" #define MSG_STOP_PRINT " Detener Impresion \x7E" #define MSG_CARD_MENU " Menu de SD \x7E" #define MSG_NO_CARD " No hay Tarjeta SD" From 7afd202b89d5e06488af56ad4b14825dcc5d9c51 Mon Sep 17 00:00:00 2001 From: elgambitero Date: Tue, 25 Sep 2012 19:16:57 +0200 Subject: [PATCH 35/52] New dialogs translated to spanish. Bug fixes. Dialogs from M119 translated, and "Set Preheat" dialogs adapted to the screen size. --- Marlin/language.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index e09e63234c..f236dd3817 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -360,11 +360,11 @@ #define MSG_SET_ORIGIN " Establecer Cero" #define MSG_COOLDOWN " Enfriar" #define MSG_EXTRUDE " Extruir" -#define MSG_RETRACT " Retract" +#define MSG_RETRACT " Retraer" #define MSG_PREHEAT_PLA " Precalentar PLA" -#define MSG_PREHEAT_PLA_SETTINGS " Precalentar PLA Setting" +#define MSG_PREHEAT_PLA_SETTINGS " Ajustar temp. PLA" #define MSG_PREHEAT_ABS " Precalentar ABS" -#define MSG_PREHEAT_ABS_SETTINGS " Precalentar ABS Setting" +#define MSG_PREHEAT_ABS_SETTINGS " Ajustar temp. ABS" #define MSG_MOVE_AXIS " Mover Ejes \x7E" #define MSG_SPEED " Velocidad:" #define MSG_NOZZLE " \002Nozzle:" @@ -477,9 +477,9 @@ #define MSG_Y_MIN "y_min: " #define MSG_Y_MAX "y_max: " #define MSG_Z_MIN "z_min: " -#define MSG_M119_REPORT "Reporting endstop status" -#define MSG_ENDSTOP_HIT "TRIGGERED" -#define MSG_ENDSTOP_OPEN "open" +#define MSG_M119_REPORT "Comprobando fines de carrera." +#define MSG_ENDSTOP_HIT "PULSADO" +#define MSG_ENDSTOP_OPEN "abierto" #define MSG_SD_CANT_OPEN_SUBDIR "No se pudo abrir la subcarpeta." #define MSG_SD_INIT_FAIL "Fallo al iniciar la SD" From ddf6603d81334697eb8121e56bf6a6cf1118d740 Mon Sep 17 00:00:00 2001 From: elgambitero Date: Wed, 26 Sep 2012 19:11:45 +0200 Subject: [PATCH 36/52] Spanish language updated. Bug fixes on dialogs. --- Marlin/language.h | 480 ---------------------------------------------- 1 file changed, 480 deletions(-) diff --git a/Marlin/language.h b/Marlin/language.h index ce5f7fdec6..f236dd3817 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -1,4 +1,3 @@ -<<<<<<< HEAD #ifndef LANGUAGE_H #define LANGUAGE_H @@ -505,482 +504,3 @@ #endif #endif // ifndef LANGUAGE_H -======= -#ifndef LANGUAGE_H -#define LANGUAGE_H - -// Languages -// 1 Custom (For you to add your own messages) -// 2 English -// 3 French (Waiting translation) -// 4 German (Waiting translation) -// 5 Spanish -// 6 Etc - -#define LANGUAGE_CHOICE 1 // Pick your language from the list above - -#define PROTOCOL_VERSION "1.0" - -#if MOTHERBOARD == 7 || MOTHERBOARD == 71 - #define MACHINE_NAME "Ultimaker" - #define FIRMWARE_URL "http://firmware.ultimaker.com" -#else - #define MACHINE_NAME "Mendel" - #define FIRMWARE_URL "http://www.mendel-parts.com" -#endif - -#define STRINGIFY_(n) #n -#define STRINGIFY(n) STRINGIFY_(n) - -#if LANGUAGE_CHOICE == 1 - -// LCD Menu Messages - #define WELCOME_MSG MACHINE_NAME " Ready." - #define MSG_SD_INSERTED "Card inserted" - #define MSG_SD_REMOVED "Card removed" - #define MSG_MAIN " Main \003" - #define MSG_AUTOSTART " Autostart" - #define MSG_DISABLE_STEPPERS " Disable Steppers" - #define MSG_AUTO_HOME " Auto Home" - #define MSG_SET_ORIGIN " Set Origin" - #define MSG_COOLDOWN " Cooldown" - #define MSG_EXTRUDE " Extrude" - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_MOVE_AXIS " Move Axis \x7E" - #define MSG_SPEED " Speed:" - #define MSG_NOZZLE " \002Nozzle:" - #define MSG_NOZZLE1 " \002Nozzle2:" - #define MSG_NOZZLE2 " \002Nozzle3:" - #define MSG_BED " \002Bed:" - #define MSG_FAN_SPEED " Fan speed:" - #define MSG_FLOW " Flow:" - #define MSG_CONTROL " Control \003" - #define MSG_MIN " \002 Min:" - #define MSG_MAX " \002 Max:" - #define MSG_FACTOR " \002 Fact:" - #define MSG_AUTOTEMP " Autotemp:" - #define MSG_ON "On " - #define MSG_OFF "Off" - #define MSG_PID_P " PID-P: " - #define MSG_PID_I " PID-I: " - #define MSG_PID_D " PID-D: " - #define MSG_PID_C " PID-C: " - #define MSG_ACC " Acc:" - #define MSG_VXY_JERK " Vxy-jerk: " - #define MSG_VMAX " Vmax " - #define MSG_X "x:" - #define MSG_Y "y:" - #define MSG_Z "z:" - #define MSG_E "e:" - #define MSG_VMIN " Vmin:" - #define MSG_VTRAV_MIN " VTrav min:" - #define MSG_AMAX " Amax " - #define MSG_A_RETRACT " A-retract:" - #define MSG_XSTEPS " Xsteps/mm:" - #define MSG_YSTEPS " Ysteps/mm:" - #define MSG_ZSTEPS " Zsteps/mm:" - #define MSG_ESTEPS " Esteps/mm:" - #define MSG_MAIN_WIDE " Main \003" - #define MSG_RECTRACT_WIDE " Rectract \x7E" - #define MSG_TEMPERATURE_WIDE " Temperature \x7E" - #define MSG_MOTION_WIDE " Motion \x7E" - #define MSG_STORE_EPROM " Store memory" - #define MSG_LOAD_EPROM " Load memory" - #define MSG_RESTORE_FAILSAFE " Restore Failsafe" - #define MSG_REFRESH "\004Refresh" - #define MSG_WATCH " Watch \003" - #define MSG_PREPARE " Prepare \x7E" - #define MSG_PREPARE_ALT " Prepare \003" - #define MSG_CONTROL_ARROW " Control \x7E" - #define MSG_RETRACT_ARROW " Control \x7E" - #define MSG_TUNE " Tune \x7E" - #define MSG_STOP_PRINT " Stop Print \x7E" - #define MSG_CARD_MENU " Card Menu \x7E" - #define MSG_NO_CARD " No Card" - #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Something is wrong in the MenuStructure." - #define MSG_DWELL "Sleep..." - #define MSG_USERWAIT "Wait for user..." - #define MSG_NO_MOVE "No move." - #define MSG_PART_RELEASE "Partial Release" - #define MSG_KILLED "KILLED. " - #define MSG_STOPPED "STOPPED. " - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_STEPPER_RELEASED "Released." - #define MSG_CONTROL_RETRACT " Retract mm:" - #define MSG_CONTROL_RETRACTF " Retract F:" - #define MSG_CONTROL_RETRACT_ZLIFT " Hop mm:" - #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" - #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" - #define MSG_AUTORETRACT " AutoRetr.:" - -// Serial Console Messages - - #define MSG_Enqueing "enqueing \"" - #define MSG_POWERUP "PowerUp" - #define MSG_EXTERNAL_RESET " External Reset" - #define MSG_BROWNOUT_RESET " Brown out Reset" - #define MSG_WATCHDOG_RESET " Watchdog Reset" - #define MSG_SOFTWARE_RESET " Software Reset" - #define MSG_MARLIN "Marlin " - #define MSG_AUTHOR " | Author: " - #define MSG_CONFIGURATION_VER " Last Updated: " - #define MSG_FREE_MEMORY " Free Memory: " - #define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: " - #define MSG_OK "ok" - #define MSG_FILE_SAVED "Done saving file." - #define MSG_ERR_LINE_NO "Line Number is not Last Line Number+1, Last Line:" - #define MSG_ERR_CHECKSUM_MISMATCH "checksum mismatch, Last Line:" - #define MSG_ERR_NO_CHECKSUM "No Checksum with line number, Last Line:" - #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No Line Number with checksum, Last Line:" - #define MSG_FILE_PRINTED "Done printing file" - #define MSG_BEGIN_FILE_LIST "Begin file list" - #define MSG_END_FILE_LIST "End file list" - #define MSG_M104_INVALID_EXTRUDER "M104 Invalid extruder " - #define MSG_M105_INVALID_EXTRUDER "M105 Invalid extruder " - #define MSG_ERR_NO_THERMISTORS "No thermistors - no temp" - #define MSG_M109_INVALID_EXTRUDER "M109 Invalid extruder " - #define MSG_HEATING "Heating..." - #define MSG_HEATING_COMPLETE "Heating done." - #define MSG_BED_HEATING "Bed Heating." - #define MSG_BED_DONE "Bed done." - #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" - #define MSG_COUNT_X " Count X:" - #define MSG_ERR_KILLED "Printer halted. kill() called !!" - #define MSG_ERR_STOPPED "Printer stopped deu to errors. Fix the error and use M999 to restart!. (Temperature is reset. Set it before restarting)" - #define MSG_RESEND "Resend:" - #define MSG_UNKNOWN_COMMAND "Unknown command:\"" - #define MSG_ACTIVE_EXTRUDER "Active Extruder: " - #define MSG_INVALID_EXTRUDER "Invalid extruder" - #define MSG_X_MIN "x_min:" - #define MSG_X_MAX "x_max:" - #define MSG_Y_MIN "y_min:" - #define MSG_Y_MAX "y_max:" - #define MSG_Z_MIN "z_min:" - #define MSG_Z_MAX "z_max:" - - #define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir" - #define MSG_SD_INIT_FAIL "SD init fail" - #define MSG_SD_VOL_INIT_FAIL "volume.init failed" - #define MSG_SD_OPENROOT_FAIL "openRoot failed" - #define MSG_SD_CARD_OK "SD card ok" - #define MSG_SD_WORKDIR_FAIL "workDir open failed" - #define MSG_SD_OPEN_FILE_FAIL "open failed, File: " - #define MSG_SD_FILE_OPENED "File opened:" - #define MSG_SD_SIZE " Size:" - #define MSG_SD_FILE_SELECTED "File selected" - #define MSG_SD_WRITE_TO_FILE "Writing to file: " - #define MSG_SD_PRINTING_BYTE "SD printing byte " - #define MSG_SD_NOT_PRINTING "Not SD printing" - #define MSG_SD_ERR_WRITE_TO_FILE "error writing to file" - #define MSG_SD_CANT_ENTER_SUBDIR "Cannot enter subdir:" - - #define MSG_STEPPER_TO_HIGH "Steprate to high : " - #define MSG_ENDSTOPS_HIT "endstops hit: " - #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" - #define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented" - -#endif -#if LANGUAGE_CHOICE == 4 - -// LCD Menu Messages - - #define WELCOME_MSG MACHINE_NAME " Ready." - - #define MSG_SD_INSERTED "Card inserted" - #define MSG_SD_REMOVED "Card removed" - #define MSG_MAIN " Main \003" - #define MSG_AUTOSTART " Autostart" - #define MSG_DISABLE_STEPPERS " Stepper abschalten" - #define MSG_AUTO_HOME " Auto Heim" - #define MSG_SET_ORIGIN " Position setzen" - #define MSG_PREHEAT_PLA " Aufheizen PLA" - #define MSG_PREHEAT_ABS " Aufheizen ABS" - #define MSG_COOLDOWN " Abkuehlen" - #define MSG_EXTRUDE " Extrude" - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_MOVE_AXIS " Move Axis \x7E" - #define MSG_MOVE_AXIS " Achsen verfahren \x7E" - #define MSG_SPEED " Geschw:" - #define MSG_NOZZLE " \002Duese:" - #define MSG_NOZZLE1 " \002Duese2:" - #define MSG_NOZZLE2 " \002Duese3:" - #define MSG_BED " \002Bett:" - #define MSG_FAN_SPEED " Luefter geschw.:" - #define MSG_FLOW " Fluss:" - #define MSG_CONTROL " Kontrolle \003" - #define MSG_MIN " \002 Min:" - #define MSG_MAX " \002 Max:" - #define MSG_FACTOR " \002 Faktor:" - #define MSG_AUTOTEMP " AutoTemp:" - #define MSG_ON "Ein " - #define MSG_OFF "Aus " - #define MSG_PID_P " PID-P: " - #define MSG_PID_I " PID-I: " - #define MSG_PID_D " PID-D: " - #define MSG_PID_C " PID-C: " - #define MSG_ACC " Acc:" - #define MSG_VXY_JERK " Vxy-jerk: " - #define MSG_VMAX " Vmax " - #define MSG_X "x:" - #define MSG_Y "y:" - #define MSG_Z "z:" - #define MSG_E "e:" - #define MSG_VMIN " Vmin:" - #define MSG_VTRAV_MIN " VTrav min:" - #define MSG_AMAX " Amax " - #define MSG_A_RETRACT " A-retract:" - #define MSG_XSTEPS " Xsteps/mm:" - #define MSG_YSTEPS " Ysteps/mm:" - #define MSG_ZSTEPS " Zsteps/mm:" - #define MSG_ESTEPS " Esteps/mm:" - #define MSG_MAIN_WIDE " Main \003" - #define MSG_TEMPERATURE_WIDE " Temperatur \x7E" - #define MSG_MOTION_WIDE " Motion \x7E" - #define MSG_STORE_EPROM " EPROM speichern" - #define MSG_LOAD_EPROM " EPROM laden" - #define MSG_RESTORE_FAILSAFE " Standard Konfig." - #define MSG_REFRESH "\004Refresh" - #define MSG_WATCH " Beobachten \003" - #define MSG_PREPARE " Prepare \x7E" - #define MSG_PREPARE_ALT " Prepare \003" - #define MSG_CONTROL_ARROW " Control \x7E" - - #define MSG_TUNE " Tune \x7E" - #define MSG_STOP_PRINT " Druck stoppen \x7E" - #define MSG_CARD_MENU " SDKarten Menue \x7E" - #define MSG_NO_CARD " Keine SDKarte" - #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Fehler in der Menuestruktur." - #define MSG_DWELL "DWELL..." - #define MSG_NO_MOVE "No move." - #define MSG_PART_RELEASE "Partial Release" - #define MSG_KILLED "KILLED. " - #define MSG_STOPPED "STOPPED. " - #define MSG_PREHEAT_PLA " Preheat PLA" - #define MSG_PREHEAT_ABS " Preheat ABS" - #define MSG_STEPPER_RELEASED "Released." - - - -// Serial Console Messages - - #define MSG_Enqueing "enqueing \"" - #define MSG_POWERUP "PowerUp" - #define MSG_EXTERNAL_RESET " External Reset" - #define MSG_BROWNOUT_RESET " Brown out Reset" - #define MSG_WATCHDOG_RESET " Watchdog Reset" - #define MSG_SOFTWARE_RESET " Software Reset" - #define MSG_MARLIN "Marlin: " - #define MSG_AUTHOR " | Author: " - #define MSG_CONFIGURATION_VER " Last Updated: " - #define MSG_FREE_MEMORY " Free Memory: " - #define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: " - #define MSG_OK "ok" - #define MSG_FILE_SAVED "Done saving file." - #define MSG_ERR_LINE_NO "Line Number is not Last Line Number+1, Last Line:" - #define MSG_ERR_CHECKSUM_MISMATCH "checksum mismatch, Last Line:" - #define MSG_ERR_NO_CHECKSUM "No Checksum with line number, Last Line:" - #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No Line Number with checksum, Last Line:" - #define MSG_FILE_PRINTED "Done printing file" - #define MSG_BEGIN_FILE_LIST "Begin file list" - #define MSG_END_FILE_LIST "End file list" - #define MSG_M104_INVALID_EXTRUDER "M104 Invalid extruder " - #define MSG_M105_INVALID_EXTRUDER "M105 Invalid extruder " - #define MSG_ERR_NO_THERMISTORS "No thermistors - no temp" - #define MSG_M109_INVALID_EXTRUDER "M109 Invalid extruder " - #define MSG_HEATING "Heating..." - #define MSG_HEATING_COMPLETE "Heating done." - #define MSG_BED_HEATING "Bed Heating." - #define MSG_BED_DONE "Bed done." - #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" - #define MSG_COUNT_X " Count X:" - #define MSG_ERR_KILLED "Printer halted. kill() called !!" - #define MSG_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart!" - #define MSG_RESEND "Resend:" - #define MSG_UNKNOWN_COMMAND "Unknown command:\"" - #define MSG_ACTIVE_EXTRUDER "Active Extruder: " - #define MSG_INVALID_EXTRUDER "Invalid extruder" - #define MSG_X_MIN "x_min:" - #define MSG_X_MAX "x_max:" - #define MSG_Y_MIN "y_min:" - #define MSG_Y_MAX "y_max:" - #define MSG_Z_MIN "z_min:" - #define MSG_Z_MAX "z_max:" - - #define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir" - #define MSG_SD_INIT_FAIL "SD init fail" - #define MSG_SD_VOL_INIT_FAIL "volume.init failed" - #define MSG_SD_OPENROOT_FAIL "openRoot failed" - #define MSG_SD_CARD_OK "SD card ok" - #define MSG_SD_WORKDIR_FAIL "workDir open failed" - #define MSG_SD_OPEN_FILE_FAIL "open failed, File: " - #define MSG_SD_FILE_OPENED "File opened:" - #define MSG_SD_SIZE " Size:" - #define MSG_SD_FILE_SELECTED "File selected" - #define MSG_SD_WRITE_TO_FILE "Writing to file: " - #define MSG_SD_PRINTING_BYTE "SD printing byte " - #define MSG_SD_NOT_PRINTING "Not SD printing" - #define MSG_SD_ERR_WRITE_TO_FILE "error writing to file" - #define MSG_SD_CANT_ENTER_SUBDIR "Cannot enter subdir:" - - #define MSG_STEPPER_TO_HIGH "Steprate to high : " - #define MSG_ENDSTOPS_HIT "endstops hit: " - #define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented" - #define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented" - -#endif - -#if LANGUAGE_CHOICE == 5 - -// LCD Menu Messages -#define WELCOME_MSG MACHINE_NAME " Lista." -#define MSG_SD_INSERTED "Tarjeta SD Colocada" -#define MSG_SD_REMOVED "Tarjeta SD Retirada" -#define MSG_MAIN " Menu Principal \003" -#define MSG_AUTOSTART " Autostart" -#define MSG_DISABLE_STEPPERS " Apagar Motores" -#define MSG_AUTO_HOME " Llevar Ejes al Cero" -#define MSG_SET_ORIGIN " Establecer Cero" -#define MSG_COOLDOWN " Enfriar" -#define MSG_EXTRUDE " Extruir" -#define MSG_PREHEAT_PLA " Precalentar PLA" -#define MSG_PREHEAT_ABS " Precalentar ABS" -#define MSG_MOVE_AXIS " Mover Ejes \x7E" -#define MSG_SPEED " Velocidad:" -#define MSG_NOZZLE " \002Nozzle:" -#define MSG_NOZZLE1 " \002Nozzle2:" -#define MSG_NOZZLE2 " \002Nozzle3:" -#define MSG_BED " \002Base:" -#define MSG_FAN_SPEED " Ventilador:" -#define MSG_FLOW " Flujo:" -#define MSG_CONTROL " Control \003" -#define MSG_MIN " \002 Min:" -#define MSG_MAX " \002 Max:" -#define MSG_FACTOR " \002 Fact:" -#define MSG_AUTOTEMP " Autotemp:" -#define MSG_ON "On " -#define MSG_OFF "Off" -#define MSG_PID_P " PID-P: " -#define MSG_PID_I " PID-I: " -#define MSG_PID_D " PID-D: " -#define MSG_PID_C " PID-C: " -#define MSG_ACC " Acc:" -#define MSG_VXY_JERK " Vxy-jerk: " -#define MSG_VMAX " Vmax " -#define MSG_X "x:" -#define MSG_Y "y:" -#define MSG_Z "z:" -#define MSG_E "e:" -#define MSG_VMIN " Vmin:" -#define MSG_VTRAV_MIN " VTrav min:" -#define MSG_AMAX " Amax " -#define MSG_A_RETRACT " A-retrac.:" -#define MSG_XSTEPS " Xpasos/mm:" -#define MSG_YSTEPS " Ypasos/mm:" -#define MSG_ZSTEPS " Zpasos/mm:" -#define MSG_ESTEPS " Epasos/mm:" -#define MSG_MAIN_WIDE " Menu Principal \003" -#define MSG_RECTRACT_WIDE " Retraer \x7E" -#define MSG_TEMPERATURE_WIDE " Temperatura \x7E" -#define MSG_MOTION_WIDE " Movimiento \x7E" -#define MSG_STORE_EPROM " Guardar Memoria" -#define MSG_LOAD_EPROM " Cargar Memoria" -#define MSG_RESTORE_FAILSAFE " Rest. de emergencia" -#define MSG_REFRESH "\004Volver a cargar" -#define MSG_WATCH " Monitorizar \003" -#define MSG_PREPARE " Preparar \x7E" -#define MSG_PREPARE_ALT " Preparar \003" -#define MSG_CONTROL_ARROW " Control \x7E" -#define MSG_RETRACT_ARROW " Control \x7E" -#define MSG_TUNE " Ajustar \x7E" -#define MSG_STOP_PRINT " Detener Impresion \x7E" -#define MSG_CARD_MENU " Menu de SD \x7E" -#define MSG_NO_CARD " No hay Tarjeta SD" -#define MSG_SERIAL_ERROR_MENU_STRUCTURE "Hay un error en la estructura del menu" -#define MSG_DWELL "Reposo..." -#define MSG_USERWAIT "Esperando Ordenes..." -#define MSG_NO_MOVE "Sin movimiento" -#define MSG_PART_RELEASE "Desacople Parcial" -#define MSG_KILLED "PARADA DE EMERGENCIA. " -#define MSG_STOPPED "PARADA. " -#define MSG_PREHEAT_PLA " Precalentar PLA" -#define MSG_PREHEAT_ABS " Precalentar ABS" -#define MSG_STEPPER_RELEASED "Desacoplada." -#define MSG_CONTROL_RETRACT " Retraer mm:" -#define MSG_CONTROL_RETRACTF " Retraer F:" -#define MSG_CONTROL_RETRACT_ZLIFT " Levantar mm:" -#define MSG_CONTROL_RETRACT_RECOVER " DesRet +mm:" -#define MSG_CONTROL_RETRACT_RECOVERF " DesRet F:" -#define MSG_AUTORETRACT " AutoRetr.:" - -// Serial Console Messages - -#define MSG_Enqueing "En cola \"" -#define MSG_POWERUP "PowerUp" -#define MSG_EXTERNAL_RESET " Reset Externo" -#define MSG_BROWNOUT_RESET " Reset por Voltaje Incorrecto" -#define MSG_WATCHDOG_RESET " Reset por Bloqueo" -#define MSG_SOFTWARE_RESET " Reset por Software" -#define MSG_MARLIN "Marlin " -#define MSG_AUTHOR " | Autor: " -#define MSG_CONFIGURATION_VER " Ultima actualizacion: " -#define MSG_FREE_MEMORY " Memoria libre: " -#define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: " -#define MSG_OK "ok" -#define MSG_FILE_SAVED "Guardado." -#define MSG_ERR_LINE_NO "El Numero de Linea no es igual al Ultimo Numero de Linea+1, Ultima Linea:" -#define MSG_ERR_CHECKSUM_MISMATCH "el checksum no coincide, Ultima Linea:" -#define MSG_ERR_NO_CHECKSUM "No se pudo hallar el Checksum con el numero de linea, Ultima Linea:" -#define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No se hallo el Numero de Linea con el Checksum, Ultima Linea:" -#define MSG_FILE_PRINTED "Impresion terminada" -#define MSG_BEGIN_FILE_LIST "Comienzo de la lista de archivos" -#define MSG_END_FILE_LIST "Fin de la lista de archivos" -#define MSG_M104_INVALID_EXTRUDER "M104 Extrusor Invalido " -#define MSG_M105_INVALID_EXTRUDER "M105 Extrusor Invalido " -#define MSG_ERR_NO_THERMISTORS "No hay termistores - no temp" -#define MSG_M109_INVALID_EXTRUDER "M109 Extrusor Invalido " -#define MSG_HEATING "Calentando..." -#define MSG_HEATING_COMPLETE "Calentamiento Hecho." -#define MSG_BED_HEATING "Calentando la base." -#define MSG_BED_DONE "Base Caliente." -#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" -#define MSG_COUNT_X " Cuenta X:" -#define MSG_ERR_KILLED "¡¡Impresora Parada con kill()!!" -#define MSG_ERR_STOPPED "¡Impresora parada por errores. Arregle el error y use M999 Para reiniciar!. (La temperatura se reestablece. Ajustela antes de continuar)" -#define MSG_RESEND "Reenviar:" -#define MSG_UNKNOWN_COMMAND "Comando Desconocido:\"" -#define MSG_ACTIVE_EXTRUDER "Extrusor Activo: " -#define MSG_INVALID_EXTRUDER "Extrusor Invalido" -#define MSG_X_MIN "x_min:" -#define MSG_X_MAX "x_max:" -#define MSG_Y_MIN "y_min:" -#define MSG_Y_MAX "y_max:" -#define MSG_Z_MIN "z_min:" -#define MSG_Z_MAX "z_max:" - -#define MSG_SD_CANT_OPEN_SUBDIR "No se pudo abrir la subcarpeta." -#define MSG_SD_INIT_FAIL "Fallo al iniciar la SD" -#define MSG_SD_VOL_INIT_FAIL "Fallo al montar el volumen" -#define MSG_SD_OPENROOT_FAIL "Fallo al abrir la carpeta raiz" -#define MSG_SD_CARD_OK "Tarjeta SD OK" -#define MSG_SD_WORKDIR_FAIL "Fallo al abrir la carpeta de trabajo" -#define MSG_SD_OPEN_FILE_FAIL "Error al abrir, Archivo: " -#define MSG_SD_FILE_OPENED "Archivo abierto:" -#define MSG_SD_SIZE " Tamaño:" -#define MSG_SD_FILE_SELECTED "Archivo Seleccionado" -#define MSG_SD_WRITE_TO_FILE "Escribiendo en el archivo: " -#define MSG_SD_PRINTING_BYTE "SD imprimiendo el byte " -#define MSG_SD_NOT_PRINTING "No se esta imprimiendo con SD" -#define MSG_SD_ERR_WRITE_TO_FILE "Error al escribir en el archivo" -#define MSG_SD_CANT_ENTER_SUBDIR "No se puede entrar en la carpeta:" - -#define MSG_STEPPER_TO_HIGH "Steprate demasiado alto : " -#define MSG_ENDSTOPS_HIT "Se ha tocado el fin de carril: " -#define MSG_ERR_COLD_EXTRUDE_STOP " extrusion fria evitada" -#define MSG_ERR_LONG_EXTRUDE_STOP " extrusion demasiado larga evitada" - -#endif -#endif // ifndef LANGUAGE_H ->>>>>>> 6cd150842f6741b75cd7b5911805f307d1dbc2eb From df09e2adce96c7bb3cdf19af0f6c9f2ea64618c6 Mon Sep 17 00:00:00 2001 From: elgambitero Date: Wed, 26 Sep 2012 19:14:07 +0200 Subject: [PATCH 37/52] Spanish updated --- Marlin/language.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/language.h b/Marlin/language.h index f236dd3817..2aa379eb72 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -495,7 +495,7 @@ #define MSG_SD_PRINTING_BYTE "SD imprimiendo el byte " #define MSG_SD_NOT_PRINTING "No se esta imprimiendo con SD" #define MSG_SD_ERR_WRITE_TO_FILE "Error al escribir en el archivo" -#define MSG_SD_CANT_ENTER_SUBDIR "No se puede entrar en la carpeta:" +#define MSG_SD_CANT_ENTER_SUBDIR "No se puede abrir la carpeta:" #define MSG_STEPPER_TO_HIGH "Steprate demasiado alto : " #define MSG_ENDSTOPS_HIT "Se ha tocado el fin de carril: " From bf7e453d022dcd305a8b3a714be849c6e44e7acc Mon Sep 17 00:00:00 2001 From: Mark Finn Date: Tue, 9 Oct 2012 14:47:35 -0500 Subject: [PATCH 38/52] Unwanted artifacts from unclean merge of bed-pid tree --- Marlin/Marlin.pde | 6 +- README.md | 222 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 214 insertions(+), 14 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 92e3ff9cef..bda479e3ca 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -1399,11 +1399,11 @@ void process_commands() updatePID(); SERIAL_PROTOCOL(MSG_OK); SERIAL_PROTOCOL(" p:"); - SERIAL_PROTOCOL(Kp); + SERIAL_PROTOCOL(bedKp); SERIAL_PROTOCOL(" i:"); - SERIAL_PROTOCOL(Ki/PID_dT); + SERIAL_PROTOCOL(bedKi/PID_dT); SERIAL_PROTOCOL(" d:"); - SERIAL_PROTOCOL(Kd*PID_dT); + SERIAL_PROTOCOL(bedKd*PID_dT); SERIAL_PROTOCOLLN(""); } break; diff --git a/README.md b/README.md index 3fd246345b..fb2c18968c 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,222 @@ WARNING: -------- -This is an experimental modification to allow PID on your bed heater. +THIS IS RELEASE CANDIDATE 2 FOR MARLIN 1.0.0 -This will run at the same frequency as the main PID loop. Make sure you heater FET or SSR can do this. I use a fotek SSR-10DA and it's fine +The configuration is now split in two files +Configuration.h for the normal settings +Configuration_adv.h for the advanced settings -add something like this to you configuration (pulling this branch will get you this +Gen7T is not supported. -~~~~~~~~~~~~~~~~~~~~ -#define PIDTEMPBED +Quick Information +=================== +This RepRap firmware is a mashup between Sprinter, grbl and many original parts. -//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, argressive factor of .15 (vs .1, 1, 10) - #define DEFAULT_bedKp 10.00 - #define DEFAULT_bedKi .023 - #define DEFAULT_bedKd 305.4 -~~~~~~~~~~~~~~~~~~~~ +Derived from Sprinter and Grbl by Erik van der Zalm. +Sprinters lead developers are Kliment and caru. +Grbls lead developer is Simen Svale Skogsrud. Sonney Jeon (Chamnit) improved some parts of grbl +A fork by bkubicek for the Ultimaker was merged, and further development was aided by him. +Some features have been added by: +Lampmaker, Bradley Feldman, and others... -Autotune works for the bed. Give it an "M303 E-1 C8 S90" to run autotune on the bed at 90 degrees for 8 cycles. +Features: + +* Interrupt based movement with real linear acceleration +* High steprate +* Look ahead (Keep the speed high when possible. High cornering speed) +* Interrupt based temperature protection +* preliminary support for Matthew Roberts advance algorithm + For more info see: http://reprap.org/pipermail/reprap-dev/2011-May/003323.html +* Full endstop support +* SD Card support +* SD Card folders (works in pronterface) +* SD Card autostart support +* LCD support (ideally 20x4) +* LCD menu system for autonomous SD card printing, controlled by an click-encoder. +* EEPROM storage of e.g. max-velocity, max-acceleration, and similar variables +* many small but handy things originating from bkubicek's fork. +* Arc support +* Temperature oversampling +* Dynamic Temperature setpointing aka "AutoTemp" +* Support for QTMarlin, a very beta GUI for PID-tuning and velocity-acceleration testing. https://github.com/bkubicek/QTMarlin +* Endstop trigger reporting to the host software. +* Updated sdcardlib +* Heater power reporting. Useful for PID monitoring. +* PID tuning +* CoreXY kinematics (www.corexy.com/theory.html) + +The default baudrate is 250000. This baudrate has less jitter and hence errors than the usual 115200 baud, but is less supported by drivers and host-environments. + + +Differences and additions to the already good Sprinter firmware: +================================================================ + +*Look-ahead:* + +Marlin has look-ahead. While sprinter has to break and re-accelerate at each corner, +lookahead will only decelerate and accelerate to a velocity, +so that the change in vectorial velocity magnitude is less than the xy_jerk_velocity. +This is only possible, if some future moves are already processed, hence the name. +It leads to less over-deposition at corners, especially at flat angles. + +*Arc support:* + +Slic3r can find curves that, although broken into segments, were ment to describe an arc. +Marlin is able to print those arcs. The advantage is the firmware can choose the resolution, +and can perform the arc with nearly constant velocity, resulting in a nice finish. +Also, less serial communication is needed. + +*Temperature Oversampling:* + +To reduce noise and make the PID-differential term more useful, 16 ADC conversion results are averaged. + +*AutoTemp:* + +If your gcode contains a wide spread of extruder velocities, or you realtime change the building speed, the temperature should be changed accordingly. +Usually, higher speed requires higher temperature. +This can now be performed by the AutoTemp function +By calling M109 S T F you enter the autotemp mode. + +You can leave it by calling M109 without any F. +If active, the maximal extruder stepper rate of all buffered moves will be calculated, and named "maxerate" [steps/sec]. +The wanted temperature then will be set to t=tempmin+factor*maxerate, while being limited between tempmin and tempmax. +If the target temperature is set manually or by gcode to a value less then tempmin, it will be kept without change. +Ideally, your gcode can be completely free of temperature controls, apart from a M109 S T F in the start.gcode, and a M109 S0 in the end.gcode. + +*EEPROM:* + +If you know your PID values, the acceleration and max-velocities of your unique machine, you can set them, and finally store them in the EEPROM. +After each reboot, it will magically load them from EEPROM, independent what your Configuration.h says. + +*LCD Menu:* + +If your hardware supports it, you can build yourself a LCD-CardReader+Click+encoder combination. It will enable you to realtime tune temperatures, +accelerations, velocities, flow rates, select and print files from the SD card, preheat, disable the steppers, and do other fancy stuff. +One working hardware is documented here: http://www.thingiverse.com/thing:12663 +Also, with just a 20x4 or 16x2 display, useful data is shown. + +*SD card folders:* + +If you have an SD card reader attached to your controller, also folders work now. Listing the files in pronterface will show "/path/subpath/file.g". +You can write to file in a subfolder by specifying a similar text using small letters in the path. +Also, backup copies of various operating systems are hidden, as well as files not ending with ".g". + +*SD card folders:* + +If you place a file auto[0-9].g into the root of the sd card, it will be automatically executed if you boot the printer. The same file will be executed by selecting "Autostart" from the menu. +First *0 will be performed, than *1 and so on. That way, you can heat up or even print automatically without user interaction. + +*Endstop trigger reporting:* + +If an endstop is hit while moving towards the endstop, the location at which the firmware thinks that the endstop was triggered is outputed on the serial port. +This is useful, because the user gets a warning message. +However, also tools like QTMarlin can use this for finding acceptable combinations of velocity+acceleration. + +*Coding paradigm:* + +Not relevant from a user side, but Marlin was split into thematic junks, and has tried to partially enforced private variables. +This is intended to make it clearer, what interacts which what, and leads to a higher level of modularization. +We think that this is a useful prestep for porting this firmware to e.g. an ARM platform in the future. +A lot of RAM (with enabled LCD ~2200 bytes) was saved by storing char []="some message" in Program memory. +In the serial communication, a #define based level of abstraction was enforced, so that it is clear that +some transfer is information (usually beginning with "echo:"), an error "error:", or just normal protocol, +necessary for backwards compatibility. + +*Interrupt based temperature measurements:* + +An interrupt is used to manage ADC conversions, and enforce checking for critical temperatures. +This leads to less blocking in the heater management routine. + + +Non-standard M-Codes, different to an old version of sprinter: +============================================================== +Movement: + +* G2 - CW ARC +* G3 - CCW ARC + +General: + +* M17 - Enable/Power all stepper motors. Compatibility to ReplicatorG. +* M18 - Disable all stepper motors; same as M84.Compatibility to ReplicatorG. +* M30 - Print time since last M109 or SD card start to serial +* M42 - Change pin status via gcode +* M80 - Turn on Power Supply +* M81 - Turn off Power Supply +* M114 - Output current position to serial port +* M119 - Output Endstop status to serial port + +Movement variables: + +* M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!! +* M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec +* M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2 also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate +* M206 - set home offsets. This sets the X,Y,Z coordinates of the endstops (and is added to the {X,Y,Z}_HOME_POS configuration options (and is also added to the coordinates, if any, provided to G82, as with earlier firmware) +* M220 - set build speed mulitplying S:factor in percent ; aka "realtime tuneing in the gcode". So you can slow down if you have islands in one height-range, and speed up otherwise. +* M221 - set the extrude multiplying S:factor in percent +* M400 - Finish all buffered moves. + +Temperature variables: +* M301 - Set PID parameters P I and D +* M302 - Allow cold extrudes +* M303 - PID relay autotune S sets the target temperature. (default target temperature = 150C) + +Advance: + +* M200 - Set filament diameter for advance +* M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk + +EEPROM: + +* M500 - stores paramters in EEPROM. This parameters are stored: axis_steps_per_unit, max_feedrate, max_acceleration ,acceleration,retract_acceleration, + minimumfeedrate,mintravelfeedrate,minsegmenttime, jerk velocities, PID +* M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily). +* M502 - reverts to the default "factory settings". You still need to store them in EEPROM afterwards if you want to. +* M503 - print the current settings (from memory not from eeprom) + +MISC: + +* M240 - Trigger a camera to take a photograph +* M999 - Restart after being stopped by error + +Configuring and compilation: +============================ + +Install the arduino software IDE/toolset v22 + http://www.arduino.cc/en/Main/Software + +For gen6 and sanguinololu the Sanguino directory in the Marlin dir needs to be copied to the arduino environment. + copy Marlin\sanguino \hardware\Sanguino + +Install Ultimaker's RepG 25 build + http://software.ultimaker.com +For SD handling and as better substitute (apart from stl manipulation) download +the very nice Kliment's printrun/pronterface https://github.com/kliment/Printrun + +Copy the Ultimaker Marlin firmware + https://github.com/ErikZalm/Marlin/tree/Marlin_v1 + (Use the download button) + +Start the arduino IDE. +Select Tools -> Board -> Arduino Mega 2560 or your microcontroller +Select the correct serial port in Tools ->Serial Port +Open Marlin.pde + +Click the Verify/Compile button + +Click the Upload button +If all goes well the firmware is uploading + +Start Ultimaker's Custom RepG 25 +Make sure Show Experimental Profiles is enabled in Preferences +Select Sprinter as the Driver + +Press the Connect button. + +KNOWN ISSUES: RepG will display: Unknown: marlin x.y.z + +That's ok. Enjoy Silky Smooth Printing. From 24bcc9647db79b6f5c4506171a7c7957a2a815a7 Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Fri, 12 Oct 2012 18:33:05 +0400 Subject: [PATCH 39/52] Added Russian translation --- Marlin/language.h | 161 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/Marlin/language.h b/Marlin/language.h index 2aa379eb72..5e37d5b60f 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -12,7 +12,8 @@ // 3 French (Waiting translation) // 4 German // 5 Spanish -// 6 Etc +// 6 Russian +// 7 Etc #define LANGUAGE_CHOICE 1 // Pick your language from the list above @@ -502,5 +503,163 @@ #define MSG_ERR_COLD_EXTRUDE_STOP " extrusion fria evitada" #define MSG_ERR_LONG_EXTRUDE_STOP " extrusion demasiado larga evitada" +#endif + +#if LANGUAGE_CHOICE == 6 + +// LCD Menu Messages +#define WELCOME_MSG MACHINE_NAME " Готов." +#define MSG_SD_INSERTED "Карта вставлена" +#define MSG_SD_REMOVED "Карта извлечена" +#define MSG_MAIN " Меню \003" +#define MSG_AUTOSTART " Автостарт " +#define MSG_DISABLE_STEPPERS " Выключить двигатели" +#define MSG_AUTO_HOME " Парковка " +#define MSG_SET_ORIGIN " Запомнить ноль " +#define MSG_PREHEAT_PLA " Преднагрев PLA " +#define MSG_PREHEAT_PLA_SETTINGS " Настр. преднагр.PLA" +#define MSG_PREHEAT_ABS " Преднагрев ABS " +#define MSG_PREHEAT_ABS_SETTINGS " Настр. преднагр.ABS" +#define MSG_COOLDOWN " Охлаждение " +#define MSG_EXTRUDE " Экструзия " +#define MSG_RETRACT " Откат" +#define MSG_MOVE_AXIS " Движение по осям \x7E" +#define MSG_SPEED " Скорость:" +#define MSG_NOZZLE " \002 Фильера:" +#define MSG_NOZZLE1 " \002 Фильера2:" +#define MSG_NOZZLE2 " \002 Фильера3:" +#define MSG_BED " \002 Кровать:" +#define MSG_FAN_SPEED " Куллер:" +#define MSG_FLOW " Поток:" +#define MSG_CONTROL " Настройки \003" +#define MSG_MIN " \002 Минимум:" +#define MSG_MAX " \002 Максимум:" +#define MSG_FACTOR " \002 Фактор:" +#define MSG_AUTOTEMP " Autotemp:" +#define MSG_ON "Вкл. " +#define MSG_OFF "Выкл. " +#define MSG_PID_P " PID-P: " +#define MSG_PID_I " PID-I: " +#define MSG_PID_D " PID-D: " +#define MSG_PID_C " PID-C: " +#define MSG_ACC " Acc:" +#define MSG_VXY_JERK " Vxy-jerk: " +#define MSG_VMAX " Vmax " +#define MSG_X "x:" +#define MSG_Y "y:" +#define MSG_Z "z:" +#define MSG_E "e:" +#define MSG_VMIN " Vmin:" +#define MSG_VTRAV_MIN " VTrav min:" +#define MSG_AMAX " Amax " +#define MSG_A_RETRACT " A-retract:" +#define MSG_XSTEPS " X шаг/mm:" +#define MSG_YSTEPS " Y шаг/mm:" +#define MSG_ZSTEPS " Z шаг/mm:" +#define MSG_ESTEPS " E шаг/mm:" +#define MSG_MAIN_WIDE " Меню \003" +#define MSG_RECTRACT_WIDE " Откат подачи \x7E" +#define MSG_TEMPERATURE_WIDE " Температура \x7E" +#define MSG_TEMPERATURE_RTN " Температура \003" +#define MSG_MOTION_WIDE " Скорости \x7E" +#define MSG_STORE_EPROM " Сохранить настройки" +#define MSG_LOAD_EPROM " Загрузить настройки" +#define MSG_RESTORE_FAILSAFE " Сброс настроек " +#define MSG_REFRESH "\004Обновить " +#define MSG_WATCH " Обзор \003" +#define MSG_PREPARE " Действия \x7E" +#define MSG_PREPARE_ALT " Действия \003" +#define MSG_CONTROL_ARROW " Настройки \x7E" +#define MSG_RETRACT_ARROW " Настройки отката \x7E" +#define MSG_TUNE " Tune \x7E" +#define MSG_PAUSE_PRINT " Пауза печати \x7E" +#define MSG_RESUME_PRINT " Продолжить печать \x7E" +#define MSG_STOP_PRINT " Остановить печать \x7E" +#define MSG_CARD_MENU " Меню карты \x7E" +#define MSG_NO_CARD " Нет карты" +#define MSG_DWELL "Сон..." +#define MSG_USERWAIT "Нажмите для продолж." +#define MSG_NO_MOVE "Нет движения. " +#define MSG_PART_RELEASE " Извлечение принта " +#define MSG_KILLED "УБИТО. " +#define MSG_STOPPED "ОСТАНОВЛЕНО. " +#define MSG_STEPPER_RELEASED "Двигатели отключены." +#define MSG_CONTROL_RETRACT " Откат mm:" +#define MSG_CONTROL_RETRACTF " Откат F:" +#define MSG_CONTROL_RETRACT_ZLIFT " Прыжок mm:" +#define MSG_CONTROL_RETRACT_RECOVER " Возврат +mm:" +#define MSG_CONTROL_RETRACT_RECOVERF " Возврат F:" +#define MSG_AUTORETRACT " АвтоОткат:" +#define MSG_SERIAL_ERROR_MENU_STRUCTURE "Ошибка в структуре меню." + +// Serial Console Messages + +#define MSG_Enqueing "Запланировано \"" +#define MSG_POWERUP "Включение питания" +#define MSG_EXTERNAL_RESET " Внешний сброс" +#define MSG_BROWNOUT_RESET " Brown out сброс" +#define MSG_WATCHDOG_RESET " Watchdog сброс" +#define MSG_SOFTWARE_RESET " программный сброс" +#define MSG_MARLIN "Marlin " +#define MSG_AUTHOR " | Автор: " +#define MSG_CONFIGURATION_VER " Последнее обновление: " +#define MSG_FREE_MEMORY " Памяти свободно: " +#define MSG_PLANNER_BUFFER_BYTES " Буффер очереди команд Bytes: " +#define MSG_OK "ok" +#define MSG_FILE_SAVED "Файл записан." +#define MSG_ERR_LINE_NO "Номен строки это не последняя строка+1, последняя строка:" +#define MSG_ERR_CHECKSUM_MISMATCH "контрольная сумма не совпадает, последняя строка:" +#define MSG_ERR_NO_CHECKSUM "нет контрольной суммы для строки, последняя строка:" +#define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "нет строки для контрольной суммы, последняя строка:" +#define MSG_FILE_PRINTED "Печать файла завершена" +#define MSG_BEGIN_FILE_LIST "Список файлов" +#define MSG_END_FILE_LIST "Конец списка файлов" +#define MSG_M104_INVALID_EXTRUDER "M104 ошибка экструдера " +#define MSG_M105_INVALID_EXTRUDER "M105 ошибка экструдера " +#define MSG_ERR_NO_THERMISTORS "Нет термистра - нет температуры" +#define MSG_M109_INVALID_EXTRUDER "M109 ошибка экструдера " +#define MSG_HEATING "Нагрев... " +#define MSG_HEATING_COMPLETE "Наргето. " +#define MSG_BED_HEATING "Нагрев стола... " +#define MSG_BED_DONE "Стол нагрет. " +#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" +#define MSG_COUNT_X " Count X:" +#define MSG_ERR_KILLED "Принтер остановлен. вызов kill() !!" +#define MSG_ERR_STOPPED "Ошибка принтера, останов. Устраните неисправность и используйте M999 для перезагрузки!. (Температура недоступна. Проверьте датчики)" +#define MSG_RESEND "Переотправка:" +#define MSG_UNKNOWN_COMMAND "Неизвестная команда:\"" +#define MSG_ACTIVE_EXTRUDER "Активный экструдер: " +#define MSG_INVALID_EXTRUDER "Ошибка экструдера" +#define MSG_X_MIN "x_min:" +#define MSG_X_MAX "x_max:" +#define MSG_Y_MIN "y_min:" +#define MSG_Y_MAX "y_max:" +#define MSG_Z_MIN "z_min:" +#define MSG_Z_MAX "z_max:" + +#define MSG_SD_CANT_OPEN_SUBDIR "Не открыть папку" +#define MSG_SD_INIT_FAIL "Ошибка инициализации SD" +#define MSG_SD_VOL_INIT_FAIL "Ошибка инициализации раздела" +#define MSG_SD_OPENROOT_FAIL "Не прочесть содержимое корня" +#define MSG_SD_CARD_OK "SD карта в порядке" +#define MSG_SD_WORKDIR_FAIL "не открыть рабочую папку" +#define MSG_SD_OPEN_FILE_FAIL "Ошибка чтения, файл: " +#define MSG_SD_FILE_OPENED "Файл открыт:" +#define MSG_SD_SIZE " Размер:" +#define MSG_SD_FILE_SELECTED "Файл выбран" +#define MSG_SD_WRITE_TO_FILE "Запись в файл: " +#define MSG_SD_PRINTING_BYTE "SD печать byte " +#define MSG_SD_NOT_PRINTING "нет SD печати" +#define MSG_SD_ERR_WRITE_TO_FILE "ошибка записи в файл" +#define MSG_SD_CANT_ENTER_SUBDIR "Не зайти в папку:" + +#define MSG_STEPPER_TO_HIGH "Частота шагов очень высока : " +#define MSG_ENDSTOPS_HIT "концевик сработал: " +#define MSG_ERR_COLD_EXTRUDE_STOP " защита холодной экструзии" +#define MSG_ERR_LONG_EXTRUDE_STOP " защита превышения длинны экструзии" +#define MSG_M119_REPORT "Статус концевиков" +#define MSG_ENDSTOP_HIT "Срабатывание концевика" +#define MSG_ENDSTOP_OPEN "Концевик освобожден" + #endif #endif // ifndef LANGUAGE_H From cfc193cdac385094bd07dff45b0fe989c52eb181 Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Fri, 12 Oct 2012 19:06:43 +0400 Subject: [PATCH 40/52] Enables support the Cyrillic alphabet for LCD --- Marlin/LiquidCrystalRus.cpp | 389 ++++++++++++++++++++++++++++++++++++ Marlin/LiquidCrystalRus.h | 129 ++++++++++++ Marlin/ultralcd.h | 10 +- Marlin/ultralcd.pde | 8 + 4 files changed, 535 insertions(+), 1 deletion(-) create mode 100644 Marlin/LiquidCrystalRus.cpp create mode 100644 Marlin/LiquidCrystalRus.h diff --git a/Marlin/LiquidCrystalRus.cpp b/Marlin/LiquidCrystalRus.cpp new file mode 100644 index 0000000000..66bb370857 --- /dev/null +++ b/Marlin/LiquidCrystalRus.cpp @@ -0,0 +1,389 @@ +#include "LiquidCrystalRus.h" + +#include +#include +#include +#include + +#if defined(ARDUINO) && ARDUINO >= 100 + #include "Arduino.h" +#else + #include "WProgram.h" +#endif + +// it is a russian alphabet translation +// except 0401 --> 0xa2 = ╗, 0451 --> 0xb5 +PROGMEM prog_uchar utf_recode[] = + { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f, + 0xa8,0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, + 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f, + 0xbe,0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 + }; + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). +// +// modified 27 Jul 2011 +// by Ilya V. Danilov http://mk90.ru/ + + +LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); +} + +LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +LiquidCrystalRus::LiquidCrystalRus(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) +{ + init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); +} + +void LiquidCrystalRus::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) +{ + _rs_pin = rs; + _rw_pin = rw; + _enable_pin = enable; + + _data_pins[0] = d0; + _data_pins[1] = d1; + _data_pins[2] = d2; + _data_pins[3] = d3; + _data_pins[4] = d4; + _data_pins[5] = d5; + _data_pins[6] = d6; + _data_pins[7] = d7; + + pinMode(_rs_pin, OUTPUT); + // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# + if (_rw_pin != 255) { + pinMode(_rw_pin, OUTPUT); + } + pinMode(_enable_pin, OUTPUT); + + if (fourbitmode) + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + else + _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; + + begin(16, 1); +} + +void LiquidCrystalRus::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { + if (lines > 1) { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + _currline = 0; + + // for some 1 line displays you can select a 10 pixel high font + if ((dotsize != 0) && (lines == 1)) { + _displayfunction |= LCD_5x10DOTS; + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 + delayMicroseconds(50000); + // Now we pull both RS and R/W low to begin commands + digitalWrite(_rs_pin, LOW); + digitalWrite(_enable_pin, LOW); + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + //put the LCD into 4 bit or 8 bit mode + if (! (_displayfunction & LCD_8BITMODE)) { + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + writeNbits(0x03,4); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + writeNbits(0x03,4); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + writeNbits(0x03,4); + delayMicroseconds(150); + + // finally, set to 8-bit interface + writeNbits(0x02,4); + } else { + // this is according to the hitachi HD44780 datasheet + // page 45 figure 23 + + // Send function set command sequence + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(4500); // wait more than 4.1ms + + // second try + command(LCD_FUNCTIONSET | _displayfunction); + delayMicroseconds(150); + + // third go + command(LCD_FUNCTIONSET | _displayfunction); + } + + // finally, set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear it off + clear(); + + // Initialize to default text direction (for romance languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + +} + +void LiquidCrystalRus::setDRAMModel(uint8_t model) { + _dram_model = model; +} + +/********** high level commands, for the user! */ +void LiquidCrystalRus::clear() +{ + command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystalRus::home() +{ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystalRus::setCursor(uint8_t col, uint8_t row) +{ + int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; + if ( row >= _numlines ) { + row = _numlines-1; // we count rows starting w/0 + } + + command(LCD_SETDDRAMADDR | (col + row_offsets[row])); +} + +// Turn the display on/off (quickly) +void LiquidCrystalRus::noDisplay() { + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystalRus::display() { + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LiquidCrystalRus::noCursor() { + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystalRus::cursor() { + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turn on and off the blinking cursor +void LiquidCrystalRus::noBlink() { + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystalRus::blink() { + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LiquidCrystalRus::scrollDisplayLeft(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} +void LiquidCrystalRus::scrollDisplayRight(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LiquidCrystalRus::leftToRight(void) { + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LiquidCrystalRus::rightToLeft(void) { + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'right justify' text from the cursor +void LiquidCrystalRus::autoscroll(void) { + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LiquidCrystalRus::noAutoscroll(void) { + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Allows us to fill the first 8 CGRAM locations +// with custom characters +void LiquidCrystalRus::createChar(uint8_t location, uint8_t charmap[]) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i=0; i<8; i++) { + write(charmap[i]); + } +} + +/*********** mid level commands, for sending data/cmds */ + +inline void LiquidCrystalRus::command(uint8_t value) { + send(value, LOW); +} + +#if defined(ARDUINO) && ARDUINO >= 100 + size_t LiquidCrystalRus::write(uint8_t value) +#else + void LiquidCrystalRus::write(uint8_t value) +#endif +{ + uint8_t out_char=value; + + if (_dram_model == LCD_DRAM_WH1601) { + uint8_t ac=recv(LOW) & 0x7f; + if (ac>7 && ac<0x14) command(LCD_SETDDRAMADDR | (0x40+ac-8)); + } + + if (value>=0x80) { // UTF-8 handling + if (value >= 0xc0) { + utf_hi_char = value - 0xd0; + } else { + value &= 0x3f; + if (!utf_hi_char && (value == 1)) + send(0xa2,HIGH); // ╗ + else if ((utf_hi_char == 1) && (value == 0x11)) + send(0xb5,HIGH); // ╦ + else + send(pgm_read_byte_near(utf_recode + value + (utf_hi_char<<6) - 0x10), HIGH); + } + } else send(out_char, HIGH); +#if defined(ARDUINO) && ARDUINO >= 100 + return 1; // assume sucess +#endif +} + +/************ low level data pushing commands **********/ + +// write either command or data, with automatic 4/8-bit selection +void LiquidCrystalRus::send(uint8_t value, uint8_t mode) { + digitalWrite(_rs_pin, mode); + + // if there is a RW pin indicated, set it low to Write + if (_rw_pin != 255) { + digitalWrite(_rw_pin, LOW); + } + + if (_displayfunction & LCD_8BITMODE) { + writeNbits(value,8); + } else { + writeNbits(value>>4,4); + writeNbits(value,4); + } +} + +// read data, with automatic 4/8-bit selection +uint8_t LiquidCrystalRus::recv(uint8_t mode) { + uint8_t retval; + digitalWrite(_rs_pin, mode); + + // if there is a RW pin indicated, set it low to Write + if (_rw_pin != 255) { + digitalWrite(_rw_pin, HIGH); + } + + if (_displayfunction & LCD_8BITMODE) { + retval = readNbits(8); + } else { + retval = readNbits(4) << 4; + retval |= readNbits(4); + } + return retval; +} +void LiquidCrystalRus::pulseEnable() { + digitalWrite(_enable_pin, LOW); + delayMicroseconds(1); + digitalWrite(_enable_pin, HIGH); + delayMicroseconds(1); // enable pulse must be >450ns + digitalWrite(_enable_pin, LOW); + delayMicroseconds(100); // commands need > 37us to settle +} + +void LiquidCrystalRus::writeNbits(uint8_t value, uint8_t n) { + for (int i = 0; i < n; i++) { + pinMode(_data_pins[i], OUTPUT); + digitalWrite(_data_pins[i], (value >> i) & 0x01); + } + + pulseEnable(); +} + +uint8_t LiquidCrystalRus::readNbits(uint8_t n) { + uint8_t retval=0; + for (int i = 0; i < n; i++) { + pinMode(_data_pins[i], INPUT); + } + + digitalWrite(_enable_pin, LOW); + delayMicroseconds(1); + digitalWrite(_enable_pin, HIGH); + delayMicroseconds(1); // enable pulse must be >450ns + + for (int i = 0; i < n; i++) { + retval |= (digitalRead(_data_pins[i]) == HIGH)?(1 << i):0; + } + + digitalWrite(_enable_pin, LOW); + + return retval; +} + diff --git a/Marlin/LiquidCrystalRus.h b/Marlin/LiquidCrystalRus.h new file mode 100644 index 0000000000..ad85394ae3 --- /dev/null +++ b/Marlin/LiquidCrystalRus.h @@ -0,0 +1,129 @@ +// +// based on LiquidCrystal library from ArduinoIDE, see http://arduino.cc +// modified 27 Jul 2011 +// by Ilya V. Danilov http://mk90.ru/ +// + +#ifndef LiquidCrystalRus_h +#define LiquidCrystalRus_h + +#include +#include "Print.h" + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +// enum for +#define LCD_DRAM_Normal 0x00 +#define LCD_DRAM_WH1601 0x01 + + +class LiquidCrystalRus : public Print { +public: + LiquidCrystalRus(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + LiquidCrystalRus(uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + LiquidCrystalRus(uint8_t rs, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); + + void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, + uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, + uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); + + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); + + void clear(); + void home(); + + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void leftToRight(); + void rightToLeft(); + void autoscroll(); + void noAutoscroll(); + + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); + +#if defined(ARDUINO) && ARDUINO >= 100 + virtual size_t write(uint8_t); + using Print::write; +#else + virtual void write(uint8_t); +#endif + + void command(uint8_t); + + void setDRAMModel(uint8_t); + +private: + void send(uint8_t, uint8_t); + void writeNbits(uint8_t, uint8_t); + uint8_t recv(uint8_t); + uint8_t readNbits(uint8_t); + void pulseEnable(); + + uint8_t _rs_pin; // LOW: command. HIGH: character. + uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. + uint8_t _enable_pin; // activated by a HIGH pulse. + uint8_t _data_pins[8]; + + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + + uint8_t _initialized; + + uint8_t _numlines,_currline; + + uint8_t _dram_model; + uint8_t utf_hi_char; // UTF-8 high part +}; + +#endif diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index d44c2c3373..1d46572727 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -2,7 +2,11 @@ #define ULTRALCD_H #include "Marlin.h" #ifdef ULTRA_LCD - #include +#if LANGUAGE_CHOICE == 6 +#include "LiquidCrystalRus.h" +#else +#include +#endif void lcd_status(); void lcd_init(); void lcd_status(const char* message); @@ -12,7 +16,11 @@ #define LCD_UPDATE_INTERVAL 100 #define STATUSTIMEOUT 15000 +#if LANGUAGE_CHOICE == 6 + extern LiquidCrystalRus lcd; +#else extern LiquidCrystal lcd; +#endif extern volatile char buttons; //the last checked buttons in a bit array. #ifdef NEWPANEL diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 5cfbc322e1..47e1a2a9fe 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -6,7 +6,11 @@ #include "language.h" #include "temperature.h" #include "EEPROMwrite.h" +#if LANGUAGE_CHOICE == 6 +#include "LiquidCrystalRus.h" +#else #include +#endif //=========================================================================== //=============================imported variables============================ //=========================================================================== @@ -38,7 +42,11 @@ static char messagetext[LCD_WIDTH]=""; //return for string conversion routines static char conv[8]; +#if LANGUAGE_CHOICE == 6 +LiquidCrystalRus lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 +#else LiquidCrystal lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 +#elseif static unsigned long previous_millis_lcd=0; //static long previous_millis_buttons=0; From efcc28d347c73f03a2f87b9c9b79235127431c60 Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Sat, 13 Oct 2012 00:29:34 +0400 Subject: [PATCH 41/52] Fix check for include LiquidCrystalRus.h --- Marlin/ultralcd.h | 1 + Marlin/ultralcd.pde | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 1d46572727..fbc12e987f 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -2,6 +2,7 @@ #define ULTRALCD_H #include "Marlin.h" #ifdef ULTRA_LCD +#include "language.h" #if LANGUAGE_CHOICE == 6 #include "LiquidCrystalRus.h" #else diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 47e1a2a9fe..dcbde404ae 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -46,7 +46,7 @@ static char conv[8]; LiquidCrystalRus lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 #else LiquidCrystal lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PINS_D6,LCD_PINS_D7); //RS,Enable,D4,D5,D6,D7 -#elseif +#endif static unsigned long previous_millis_lcd=0; //static long previous_millis_buttons=0; From d07b6e93d51dfe8905a3f25e4ad202b0e560f98f Mon Sep 17 00:00:00 2001 From: brupje Date: Sun, 14 Oct 2012 14:05:12 +0300 Subject: [PATCH 42/52] Add support for Megatronics --- Marlin/pins.h | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/Marlin/pins.h b/Marlin/pins.h index 403ff41169..b3d16b68ba 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -1132,6 +1132,109 @@ #endif +/**************************************************************************************** +* MegaTronics +* +****************************************************************************************/ +#if MOTHERBOARD == 70 +#define KNOWN_BOARD 1 + +//////////////////FIX THIS////////////// + + #ifndef __AVR_ATmega2560__ + #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. + #endif + + + + +#define X_STEP_PIN 26 +#define X_DIR_PIN 28 +#define X_ENABLE_PIN 24 +#define X_MIN_PIN 41 +#define X_MAX_PIN 37 //2 //Max endstops default to disabled "-1", set to commented value to enable. + +#define Y_STEP_PIN 60 // A6 +#define Y_DIR_PIN 61 // A7 +#define Y_ENABLE_PIN 22 +#define Y_MIN_PIN 14 +#define Y_MAX_PIN 15 //15 + +#define Z_STEP_PIN 54 // A0 +#define Z_DIR_PIN 55 // A1 +#define Z_ENABLE_PIN 56 // A2 +#define Z_MIN_PIN 18 +#define Z_MAX_PIN 19 + +#define E0_STEP_PIN 31 +#define E0_DIR_PIN 32 +#define E0_ENABLE_PIN 38 + +#define E1_STEP_PIN 34 +#define E1_DIR_PIN 36 +#define E1_ENABLE_PIN 30 + +#define SDPOWER -1 +#define SDSS 53 +#define LED_PIN 13 + + +#define FAN_PIN 7 // IO pin. Buffer needed +#define PS_ON_PIN 12 +#define KILL_PIN -1 + +#define HEATER_0_PIN 9 // EXTRUDER 1 +#define HEATER_1_PIN 8 // EXTRUDER 2 (FAN On Sprinter) +#define HEATER_2_PIN -1 + +#if TEMP_SENSOR_0 == -1 +#define TEMP_0_PIN 8 // ANALOG NUMBERING +#else +#define TEMP_0_PIN 13 // ANALOG NUMBERING + +#endif + +#define TEMP_1_PIN 15 // ANALOG NUMBERING +#define TEMP_2_PIN -1 // ANALOG NUMBERING +#define HEATER_BED_PIN 10 // BED +#define TEMP_BED_PIN 14 // ANALOG NUMBERING + +#define BEEPER 33 // Beeper on AUX-4 + + +#ifdef ULTRA_LCD + + #ifdef NEWPANEL + //arduino pin which triggers an piezzo beeper + + #define LCD_PINS_RS 16 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 23 + #define LCD_PINS_D5 25 + #define LCD_PINS_D6 27 + #define LCD_PINS_D7 29 + + //buttons are directly attached using AUX-2 + #define BTN_EN1 37 + #define BTN_EN2 35 + #define BTN_ENC 43 //the click + + #define BLEN_C 2 + #define BLEN_B 1 + #define BLEN_A 0 + + #define SDCARDDETECT -1 // Ramps does not use this port + + //encoder rotation values + #define encrot0 0 + #define encrot1 2 + #define encrot2 3 + #define encrot3 1 +#endif +#endif //ULTRA_LCD + +#endif + #ifndef KNOWN_BOARD #error Unknown MOTHERBOARD value in configuration.h #endif From 326423719f0de85ad1d6e43a481034875b03d323 Mon Sep 17 00:00:00 2001 From: brupje Date: Sun, 14 Oct 2012 14:05:57 +0300 Subject: [PATCH 43/52] Add support for Megatronics --- Marlin/Configuration.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 06eea462b0..1d2bb292a0 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -30,6 +30,7 @@ // Ultimaker = 7 // Teensylu = 8 // Gen3+ =9 +// Megatronics =70 #ifndef MOTHERBOARD #define MOTHERBOARD 7 From e10d3136c85c997ef03c42d23b86da68487415c7 Mon Sep 17 00:00:00 2001 From: Jonathan Bastien-Filiatrault Date: Mon, 15 Oct 2012 21:16:25 -0400 Subject: [PATCH 44/52] Create an explicit rule for building applet/Marlin.cpp. It would seem that the pattern matches do not work when the source file is created when make is running. The result of this is that it is necessary to run "make" twice to build the firmware. This adds an explicit rule without a pattern match for building applet/Marlin.cpp it corrects the make behaviour at the cost of adding a little redundancy in the Makefile. --- Marlin/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Marlin/Makefile b/Marlin/Makefile index 940bb168b7..818b8b96f2 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -277,6 +277,10 @@ applet/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE) $(Pecho) " CC $@" $P $(CC) -MMD -c $(ALL_CFLAGS) $< -o $@ +applet/Marlin.o: applet/Marlin.cpp Configuration.h Configuration_adv.h $(MAKEFILE) + $(Pecho) " CXX $@" + $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $< -o $@ + applet/%.o: %.cpp Configuration.h Configuration_adv.h $(MAKEFILE) $(Pecho) " CXX $@" $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $< -o $@ From e4a5e333efaeede05b041311d05091a6cb9f5b5a Mon Sep 17 00:00:00 2001 From: Jonathan Bastien-Filiatrault Date: Mon, 15 Oct 2012 21:34:33 -0400 Subject: [PATCH 45/52] Generalize. --- Marlin/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/Makefile b/Marlin/Makefile index 818b8b96f2..275c9c0884 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -277,7 +277,7 @@ applet/%.o: %.c Configuration.h Configuration_adv.h $(MAKEFILE) $(Pecho) " CC $@" $P $(CC) -MMD -c $(ALL_CFLAGS) $< -o $@ -applet/Marlin.o: applet/Marlin.cpp Configuration.h Configuration_adv.h $(MAKEFILE) +applet/%.o: applet/%.cpp Configuration.h Configuration_adv.h $(MAKEFILE) $(Pecho) " CXX $@" $P $(CXX) -MMD -c $(ALL_CXXFLAGS) $< -o $@ From cb02c2f9d82afd0a0825b70d497b1291ec9c6beb Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Wed, 17 Oct 2012 10:49:05 +0400 Subject: [PATCH 46/52] fix LCD temp bed artifacts on power up ' B022/0.) -> B022/000 ' --- Marlin/ultralcd.pde | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index dcbde404ae..a2492ac6e2 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -177,6 +177,7 @@ void lcd_init() lcd.createChar(3,uplevel); lcd.createChar(4,refresh); lcd.createChar(5,folder); + setTargetHotend0(0);setTargetHotend1(0);setTargetHotend2(0);setTargetBed(0); LCD_MESSAGEPGM(WELCOME_MSG); } From 695938ba3f60dc0c1190220282f695b8bf9cd8a2 Mon Sep 17 00:00:00 2001 From: Daniele Sdei Date: Wed, 17 Oct 2012 12:48:26 +0200 Subject: [PATCH 47/52] Italian language support --- Marlin/language.h | 162 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 161 insertions(+), 1 deletion(-) diff --git a/Marlin/language.h b/Marlin/language.h index 5e37d5b60f..82caee9b21 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -13,7 +13,8 @@ // 4 German // 5 Spanish // 6 Russian -// 7 Etc +// 7 Italian +// 8 Etc #define LANGUAGE_CHOICE 1 // Pick your language from the list above @@ -662,4 +663,163 @@ #define MSG_ENDSTOP_OPEN "Концевик освобожден" #endif + +#if LANGUAGE_CHOICE == 7 + + // LCD Menu Messages + #define WELCOME_MSG MACHINE_NAME " Pronto." + #define MSG_SD_INSERTED "SD Card inserita" + #define MSG_SD_REMOVED "SD Card rimossa" + #define MSG_MAIN " Menu principale \003" + #define MSG_AUTOSTART " Autostart" + #define MSG_DISABLE_STEPPERS " Disabilita Motori Passo-Passo" + #define MSG_AUTO_HOME " Auto Home" + #define MSG_SET_ORIGIN " Imposta Origini Assi" + #define MSG_PREHEAT_PLA " Preriscalda PLA" + #define MSG_PREHEAT_PLA_SETTINGS " Impostazioni Preriscaldamento PLA" + #define MSG_PREHEAT_ABS " Preriscalda ABS" + #define MSG_PREHEAT_ABS_SETTINGS " Impostazioni Preriscaldamento ABS" + #define MSG_COOLDOWN " Rafredda" + #define MSG_EXTRUDE " Estrudi" + #define MSG_RETRACT " Ritrai" + #define MSG_MOVE_AXIS " Muovi Asse \x7E" + #define MSG_SPEED " Velcità:" + #define MSG_NOZZLE " \002Ugello:" + #define MSG_NOZZLE1 " \002Ugello2:" + #define MSG_NOZZLE2 " \002Ugello3:" + #define MSG_BED " \002Piatto:" + #define MSG_FAN_SPEED " Velocità Ventola:" + #define MSG_FLOW " Flusso:" + #define MSG_CONTROL " Controllo \003" + #define MSG_MIN " \002 Min:" + #define MSG_MAX " \002 Max:" + #define MSG_FACTOR " \002 Fact:" + #define MSG_AUTOTEMP " Autotemp:" + #define MSG_ON "On " + #define MSG_OFF "Off" + #define MSG_PID_P " PID-P: " + #define MSG_PID_I " PID-I: " + #define MSG_PID_D " PID-D: " + #define MSG_PID_C " PID-C: " + #define MSG_ACC " Acc:" + #define MSG_VXY_JERK " Vxy-jerk: " + #define MSG_VMAX " Vmax " + #define MSG_X "x:" + #define MSG_Y "y:" + #define MSG_Z "z:" + #define MSG_E "e:" + #define MSG_VMIN " Vmin:" + #define MSG_VTRAV_MIN " VTrav min:" + #define MSG_AMAX " Amax " + #define MSG_A_RETRACT " A-ritrai:" + #define MSG_XSTEPS " Xpassi/mm:" + #define MSG_YSTEPS " Ypassi/mm:" + #define MSG_ZSTEPS " Zpassi/mm:" + #define MSG_ESTEPS " Epassi/mm:" + #define MSG_MAIN_WIDE " Menu Principale \003" + #define MSG_RECTRACT_WIDE " Ritrai \x7E" + #define MSG_TEMPERATURE_WIDE " Temperatura \x7E" + #define MSG_TEMPERATURE_RTN " Temperatura \003" + #define MSG_MOTION_WIDE " Movimento \x7E" + #define MSG_STORE_EPROM " Salva in memoria" + #define MSG_LOAD_EPROM " Carica dalla memoria" + #define MSG_RESTORE_FAILSAFE " Configurazioni di default" + #define MSG_REFRESH "\004Aggiorna" + #define MSG_WATCH " Guarda \003" + #define MSG_PREPARE " Prepara \x7E" + #define MSG_PREPARE_ALT " Prepara \003" + #define MSG_CONTROL_ARROW " Controllo \x7E" + #define MSG_RETRACT_ARROW " Ritrai \x7E" + #define MSG_TUNE " Tune \x7E" + #define MSG_PAUSE_PRINT " Metti in Pausa la Stampa \x7E" + #define MSG_RESUME_PRINT " Riprendi Stampa \x7E" + #define MSG_STOP_PRINT " Arresta Stampa \x7E" + #define MSG_CARD_MENU " Card Menu \x7E" + #define MSG_NO_CARD " No Card" + #define MSG_DWELL " Sospensione..." + #define MSG_USERWAIT "Attendi utente..." + #define MSG_NO_MOVE "Nessun movimento." + #define MSG_PART_RELEASE "Rilascio Parziale" + #define MSG_KILLED "UCCISO. " + #define MSG_STOPPED "ARRESTATO. " + #define MSG_STEPPER_RELEASED "Rilasciato." + #define MSG_CONTROL_RETRACT " Ritrai mm:" + #define MSG_CONTROL_RETRACTF " Ritrai F:" + #define MSG_CONTROL_RETRACT_ZLIFT " Salta mm:" + #define MSG_CONTROL_RETRACT_RECOVER " UnRet +mm:" + #define MSG_CONTROL_RETRACT_RECOVERF " UnRet F:" + #define MSG_AUTORETRACT " AutoRilascio.:" + #define MSG_SERIAL_ERROR_MENU_STRUCTURE "Qualcosa non va in MenuStructure." + + // Serial Console Messages + + #define MSG_Enqueing "accodamento \"" + #define MSG_POWERUP "Accensione" + #define MSG_EXTERNAL_RESET " Reset Esterno" + #define MSG_BROWNOUT_RESET " Brown out Reset" + #define MSG_WATCHDOG_RESET " Watchdog Reset" + #define MSG_SOFTWARE_RESET " Software Reset" + #define MSG_MARLIN "Marlin " + #define MSG_AUTHOR " | Autore: " + #define MSG_CONFIGURATION_VER " Ultimo Aggiornamento: " + #define MSG_FREE_MEMORY " Memoria Libera: " + #define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: " + #define MSG_OK "ok" + #define MSG_FILE_SAVED "File Salvato." + #define MSG_ERR_LINE_NO "Il Numero della Linea non corrisponde al Numero dell'Ultima Linea+1, Ultima Linea:" + #define MSG_ERR_CHECKSUM_MISMATCH "checksum non corrispondente, Ultima Linea:" + #define MSG_ERR_NO_CHECKSUM "Nessun Checksum con Numero di Linea, Ultima Linea:" + #define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "Nessun Numero di Linea con Checksum, Ultima Linea:" + #define MSG_FILE_PRINTED "File stampato" + #define MSG_BEGIN_FILE_LIST "Inizio Lista File" + #define MSG_END_FILE_LIST "Fine Lista File" + #define MSG_M104_INVALID_EXTRUDER "M104 Estrusore non valido " + #define MSG_M105_INVALID_EXTRUDER "M105 Estrusore non valido " + #define MSG_ERR_NO_THERMISTORS "Nessun Termistore - nessuna temperatura" + #define MSG_M109_INVALID_EXTRUDER "M109 Estrusore non valido " + #define MSG_HEATING "Riscaldamento..." + #define MSG_HEATING_COMPLETE "Riscaldamento concluso." + #define MSG_BED_HEATING "Riscaldamento Piatto." + #define MSG_BED_DONE "Piatto Pronto." + #define MSG_M115_REPORT "FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL:" FIRMWARE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) "\n" + #define MSG_COUNT_X " Calcola X:" + #define MSG_ERR_KILLED "Stampante Calda. kill() chiamata !!" + #define MSG_ERR_STOPPED "Stampante fermata a causa di errori. Risolvi l'errore e usa M999 per ripartire!. (Reset temperatura. Impostala prima di ripartire)" + #define MSG_RESEND "Reinviato:" + #define MSG_UNKNOWN_COMMAND "Comando sconosciuto:\"" + #define MSG_ACTIVE_EXTRUDER "Attiva Estrusore: " + #define MSG_INVALID_EXTRUDER "Estrusore non valido" + #define MSG_X_MIN "x_min: " + #define MSG_X_MAX "x_max: " + #define MSG_Y_MIN "y_min: " + #define MSG_Y_MAX "y_max: " + #define MSG_Z_MIN "z_min: " + #define MSG_Z_MAX "z_max: " + #define MSG_M119_REPORT "Segnalazione stato degli endstop" + #define MSG_ENDSTOP_HIT "INNESCATO" + #define MSG_ENDSTOP_OPEN "aperto" + + #define MSG_SD_CANT_OPEN_SUBDIR "Impossibile aprire sottocartella" + #define MSG_SD_INIT_FAIL "Fallita Inizializzazione SD" + #define MSG_SD_VOL_INIT_FAIL "Fallito il montaggio del Volume" + #define MSG_SD_OPENROOT_FAIL "Fallita l'apertura Cartella Principale" + #define MSG_SD_CARD_OK "SD card ok" + #define MSG_SD_WORKDIR_FAIL "Fallita l'apertura Cartella di Lavoro" + #define MSG_SD_OPEN_FILE_FAIL "Fallita l'apertura del File: " + #define MSG_SD_FILE_OPENED "File aperto:" + #define MSG_SD_SIZE " Dimensione:" + #define MSG_SD_FILE_SELECTED "File selezionato" + #define MSG_SD_WRITE_TO_FILE "Scrittura su file: " + #define MSG_SD_PRINTING_BYTE "Si sta scrivendo il byte su SD " + #define MSG_SD_NOT_PRINTING "Non si sta scrivendo su SD" + #define MSG_SD_ERR_WRITE_TO_FILE "Errore nella scrittura su file" + #define MSG_SD_CANT_ENTER_SUBDIR "Impossibile entrare nella sottocartella:" + + #define MSG_STEPPER_TO_HIGH "Steprate troppo alto : " + #define MSG_ENDSTOPS_HIT "Raggiunto il fondo carrello: " + #define MSG_ERR_COLD_EXTRUDE_STOP " prevenuta estrusione fredda" + #define MSG_ERR_LONG_EXTRUDE_STOP " prevenuta estrusione troppo lunga" + +#endif + #endif // ifndef LANGUAGE_H From 8178dec4c3820cd06d67fffab099bee4b5512448 Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Thu, 18 Oct 2012 17:45:40 +0400 Subject: [PATCH 48/52] Fix num of digits on LCD for E and Z axis. The number of steps per mm often contains 4 digits before the decimal point and does not require precision greater than 0.1 --- Marlin/ultralcd.pde | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index a2492ac6e2..3fb1f38d30 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -1858,7 +1858,7 @@ void MainMenu::showControlMotion() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(MSG_ZSTEPS); - lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[Z_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr51(axis_steps_per_unit[Z_AXIS])); } if((activeline!=line) ) @@ -1897,7 +1897,7 @@ void MainMenu::showControlMotion() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(MSG_ESTEPS); - lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[E_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr51(axis_steps_per_unit[E_AXIS])); } if((activeline!=line) ) From febeb4319770ed37c6fd8ade681642cd5f65823a Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Sun, 21 Oct 2012 14:36:31 +0200 Subject: [PATCH 49/52] Revert "fix LCD temp bed artifacts on power up ' B022/0.) -> B022/000 '" This reverts commit cb02c2f9d82afd0a0825b70d497b1291ec9c6beb. --- Marlin/ultralcd.pde | 1 - 1 file changed, 1 deletion(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index a2492ac6e2..dcbde404ae 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -177,7 +177,6 @@ void lcd_init() lcd.createChar(3,uplevel); lcd.createChar(4,refresh); lcd.createChar(5,folder); - setTargetHotend0(0);setTargetHotend1(0);setTargetHotend2(0);setTargetBed(0); LCD_MESSAGEPGM(WELCOME_MSG); } From 58bca87c725f1aa6b59ee1c747e49b6f5df3e3b8 Mon Sep 17 00:00:00 2001 From: Erik vd Zalm Date: Sun, 21 Oct 2012 14:40:06 +0200 Subject: [PATCH 50/52] fix LCD temp bed artifacts on power up ' B022/0.) -> B022/000 ' --- Marlin/ultralcd.pde | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index dcbde404ae..a70eb061b2 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -366,11 +366,11 @@ void MainMenu::showStatus() { encoderpos=feedmultiply; clear(); - lcd.setCursor(0,0);lcdprintPGM("\002---/---\001 "); + lcd.setCursor(0,0);lcdprintPGM("\002000/000\001 "); #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 - lcd.setCursor(10,0);lcdprintPGM("B---/---\001 "); + lcd.setCursor(10,0);lcdprintPGM("B000/000\001 "); #elif EXTRUDERS > 1 - lcd.setCursor(10,0);lcdprintPGM("\002---/---\001 "); + lcd.setCursor(10,0);lcdprintPGM("\002000/000\001 "); #endif } From 2a67363e27d99687255ba2a174a6cc44572f1b07 Mon Sep 17 00:00:00 2001 From: Sergey Taranenko Date: Mon, 22 Oct 2012 11:05:17 +0400 Subject: [PATCH 51/52] =?UTF-8?q?Fix=20=E2=80=98prog=5Fuchar=E2=80=99=20de?= =?UTF-8?q?finition=20in=20LiquidCrystalRus.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/LiquidCrystalRus.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Marlin/LiquidCrystalRus.cpp b/Marlin/LiquidCrystalRus.cpp index 66bb370857..9f3f5c055b 100644 --- a/Marlin/LiquidCrystalRus.cpp +++ b/Marlin/LiquidCrystalRus.cpp @@ -1,3 +1,4 @@ +#define __PROG_TYPES_COMPAT__ #include "LiquidCrystalRus.h" #include @@ -13,7 +14,7 @@ // it is a russian alphabet translation // except 0401 --> 0xa2 = ╗, 0451 --> 0xb5 -PROGMEM prog_uchar utf_recode[] = +const PROGMEM prog_uchar utf_recode[] = { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f, 0xa8,0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f, From 6ed02c86be4dbb2e28984d26622ed55ae4cab024 Mon Sep 17 00:00:00 2001 From: MaikStohn Date: Tue, 23 Oct 2012 18:08:43 +0200 Subject: [PATCH 52/52] Fixed wrong code (will not even compile when EXTRUDERS>2) --- Marlin/stepper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/stepper.h b/Marlin/stepper.h index 7671a65ea0..e02b7b74d0 100644 --- a/Marlin/stepper.h +++ b/Marlin/stepper.h @@ -25,7 +25,7 @@ #if EXTRUDERS > 2 #define WRITE_E_STEP(v) { if(current_block->active_extruder == 2) { WRITE(E2_STEP_PIN, v); } else { if(current_block->active_extruder == 1) { WRITE(E1_STEP_PIN, v); } else { WRITE(E0_STEP_PIN, v); }}} - #define NORM_E_DIR() { if(current_block->active_extruder == 2) { WRITE(!E2_DIR_PIN, INVERT_E2_DIR); } else { if(current_block->active_extruder == 1) { WRITE(!E1_DIR_PIN, INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, !INVERT_E0_DIR); }}} + #define NORM_E_DIR() { if(current_block->active_extruder == 2) { WRITE(E2_DIR_PIN, !INVERT_E2_DIR); } else { if(current_block->active_extruder == 1) { WRITE(E1_DIR_PIN, !INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, !INVERT_E0_DIR); }}} #define REV_E_DIR() { if(current_block->active_extruder == 2) { WRITE(E2_DIR_PIN, INVERT_E2_DIR); } else { if(current_block->active_extruder == 1) { WRITE(E1_DIR_PIN, INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, INVERT_E0_DIR); }}} #elif EXTRUDERS > 1 #define WRITE_E_STEP(v) { if(current_block->active_extruder == 1) { WRITE(E1_STEP_PIN, v); } else { WRITE(E0_STEP_PIN, v); }}