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 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μ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 literal 0 HcmV?d00001 diff --git a/Marlin/Menu Plans.xlsx b/Marlin/Menu Plans.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a2a0c534c8fba39fcbb0e21bb06d08a0657a5f29 GIT binary patch literal 59410 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�+qmvu(D43@<@Q#6U9QafueSnBD{S7OXA% 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 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 literal 51386 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 QU_t&ek?spd{qM8?0*~k1G5`Po delta 51322 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ξWCpupQ>Xkj6U>cAP@Bu7W+TnfTug*Sj4Mv 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 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); }}