diff --git a/Marlin/.gitignore b/Marlin/.gitignore new file mode 100644 index 0000000000..37a3c9b84d --- /dev/null +++ b/Marlin/.gitignore @@ -0,0 +1,2 @@ +*.o +applet/ diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 4731a04ed7..74c03eb04c 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -8,25 +8,28 @@ //User specified version info of THIS file to display in [Pronterface, etc] terminal window during startup. //Implementation of an idea by Prof Braino to inform user that any changes made //to THIS file by the user have been successfully uploaded into firmware. -#define STRING_VERSION_CONFIG_H "2012-02-08j" //Personal revision number for changes to THIS file. -#define STRING_CONFIG_H_AUTHOR "scuba82" //Who made the changes. +#define STRING_VERSION_CONFIG_H "2012-02-25" //Personal revision number for changes to THIS file. +#define STRING_CONFIG_H_AUTHOR "erik" //Who made the changes. // This determines the communication speed of the printer -//#define BAUDRATE 250000 -#define BAUDRATE 115200 +#define BAUDRATE 250000 +//#define BAUDRATE 115200 //// The following define selects which electronics board you have. Please choose the one that matches your setup -// MEGA/RAMPS up to 1.2 = 3, -// RAMPS 1.3 = 33 -// Gen6 = 5, +// Gen7 custom (Alfons3 Version) = 10 "https://github.com/Alfons3/Generation_7_Electronics" +// Gen7 v1.1, v1.2 = 11 +// Gen7 v1.3 = 12 +// Gen7 v1.4 = 13 +// MEGA/RAMPS up to 1.2 = 3 +// RAMPS 1.3 = 33 (Power outputs: Extruder, Bed, Fan) +// RAMPS 1.3 = 34 (Power outputs: Extruder0, Extruder1, Bed) +// Gen6 = 5 +// Gen6 deluxe = 51 // Sanguinololu 1.2 and above = 62 -// Ultimaker = 7, -// Gen7 custom (Alfons3 Version) = 77, "https://github.com/Alfons3/Generation_7_Electronics" -// Gen7 v1.1, v1.2 = 78 -// Gen7 v1.3 = 79 -// Teensylu = 8, +// Ultimaker = 7 +// Teensylu = 8 // Gen3+ =9 -#define MOTHERBOARD 77 +#define MOTHERBOARD 7 //=========================================================================== //=============================Thermal Settings ============================ @@ -44,14 +47,14 @@ // 6 is EPCOS 100k // 7 is 100k Honeywell thermistor 135-104LAG-J01 -#define TEMP_SENSOR_0 6 +#define TEMP_SENSOR_0 -1 #define TEMP_SENSOR_1 0 #define TEMP_SENSOR_2 0 -#define TEMP_SENSOR_BED 1 +#define TEMP_SENSOR_BED 0 // Actual temperature must be close to target for this long before M109 returns success -#define TEMP_RESIDENCY_TIME 30 // (seconds) -#define TEMP_HYSTERESIS 3 // (C�) range of +/- temperatures considered "close" to the target one +#define TEMP_RESIDENCY_TIME 10 // (seconds) +#define TEMP_HYSTERESIS 3 // (degC) range of +/- temperatures considered "close" to the target one // The minimal temperature defines the temperature below which the heater will not be enabled It is used // to check that the wiring to the thermistor is not broken. @@ -69,6 +72,7 @@ #define HEATER_2_MAXTEMP 275 #define BED_MAXTEMP 150 + // PID settings: // Comment the following line to disable PID and enable bang-bang. #define PIDTEMP @@ -111,9 +115,9 @@ #define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors // The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. -const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. -const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. +const bool X_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. +const bool Y_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. +const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 #define X_ENABLE_ON 0 @@ -127,9 +131,9 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t #define DISABLE_Z false #define DISABLE_E false // For all extruders -#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true +#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true #define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false -#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true +#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true #define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false @@ -140,19 +144,24 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t #define Y_HOME_DIR -1 #define Z_HOME_DIR -1 -#define min_software_endstops false //If true, axis won't move to coordinates less than zero. +#define min_software_endstops true //If true, axis won't move to coordinates less than HOME_POS. #define max_software_endstops true //If true, axis won't move to coordinates greater than the defined lengths below. #define X_MAX_LENGTH 205 #define Y_MAX_LENGTH 205 #define Z_MAX_LENGTH 200 +// 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 + //// MOVEMENT SETTINGS #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E #define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min) // default settings -#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,760*1.1} // default steps per unit for ultimaker +#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker #define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec) #define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot. @@ -173,22 +182,32 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t // 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. //define this to enable eeprom support -#define EEPROM_SETTINGS +//#define EEPROM_SETTINGS //to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out: // please keep turned on if you can. -#define EEPROM_CHITCHAT +//#define EEPROM_CHITCHAT //LCD and SD support //#define ULTRA_LCD //general lcd support, also 16x2 -#define SDSUPPORT // Enable SD Card Support in Hardware Console +//#define SDSUPPORT // Enable SD Card Support in Hardware Console -#define ULTIPANEL +//#define ULTIPANEL #ifdef ULTIPANEL #define NEWPANEL //enable this if you have a click-encoder panel #define SDSUPPORT #define ULTRA_LCD #define LCD_WIDTH 20 #define LCD_HEIGHT 4 + +// Preheat Constants + #define PLA_PREHEAT_HOTEND_TEMP 180 + #define PLA_PREHEAT_HPB_TEMP 70 + #define PLA_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 + + #define ABS_PREHEAT_HOTEND_TEMP 240 + #define ABS_PREHEAT_HPB_TEMP 100 + #define ABS_PREHEAT_FAN_SPEED 255 // Insert Value between 0 and 255 + #else //no panel but just lcd #ifdef ULTRA_LCD #define LCD_WIDTH 16 diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index a19747d145..38e940950f 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -25,9 +25,6 @@ // if CooldownNoWait is defined M109 will not wait for the cooldown to finish #define CooldownNoWait true -//Do not wait for M109 to finish when printing from SD card -//#define STOP_HEATING_WAIT_WHEN_SD_PRINTING - #ifdef PIDTEMP // this adds an experimental additional term to the heatingpower, proportional to the extrusion speed. // if Kc is choosen well, the additional required power due to increased melting should be compensated. @@ -59,6 +56,11 @@ #define EXTRUDER_RUNOUT_SPEED 1500. //extrusion speed #define EXTRUDER_RUNOUT_EXTRUDE 100 +//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements. +//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET" +#define TEMP_SENSOR_AD595_OFFSET 0.0 +#define TEMP_SENSOR_AD595_GAIN 1.0 + //=========================================================================== //=============================Mechanical Settings=========================== //=========================================================================== @@ -74,7 +76,7 @@ #define X_HOME_RETRACT_MM 5 #define Y_HOME_RETRACT_MM 5 #define Z_HOME_RETRACT_MM 1 -#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. +//#define QUICK_HOME //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially. #define AXIS_RELATIVE_MODES {false, false, false, false} @@ -148,6 +150,12 @@ const int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement +// If you are using a RAMPS board or cheap E-bay purchased boards that do not detect when an SD card is inserted +// You can get round this by connecting a push button or single throw switch to the pin defined as SDCARDCARDDETECT +// in the pins.h file. When using a push button pulling the pin to ground this will need inverted. This setting should +// be commented out otherwise +#define SDCARDDETECTINVERTED + //=========================================================================== //=============================Buffers ============================ //=========================================================================== diff --git a/Marlin/Gen7/cores/arduino/pins_arduino.c b/Marlin/Gen7/cores/arduino/pins_arduino.c index ccb88fe989..c67ab73fb0 100644 --- a/Marlin/Gen7/cores/arduino/pins_arduino.c +++ b/Marlin/Gen7/cores/arduino/pins_arduino.c @@ -67,28 +67,28 @@ const uint8_t PROGMEM port_to_mode_PGM[] = { NOT_A_PORT, - &DDRA, - &DDRB, - &DDRC, - &DDRD, + (uint8_t) &DDRA, + (uint8_t) &DDRB, + (uint8_t) &DDRC, + (uint8_t) &DDRD, }; const uint8_t PROGMEM port_to_output_PGM[] = { NOT_A_PORT, - &PORTA, - &PORTB, - &PORTC, - &PORTD, + (uint8_t) &PORTA, + (uint8_t) &PORTB, + (uint8_t) &PORTC, + (uint8_t) &PORTD, }; const uint8_t PROGMEM port_to_input_PGM[] = { NOT_A_PORT, - &PINA, - &PINB, - &PINC, - &PIND, + (uint8_t) &PINA, + (uint8_t) &PINB, + (uint8_t) &PINC, + (uint8_t) &PIND, }; const uint8_t PROGMEM digital_pin_to_port_PGM[] = diff --git a/Marlin/Makefile b/Marlin/Makefile index 71ee747485..9e41c28d33 100644 --- a/Marlin/Makefile +++ b/Marlin/Makefile @@ -61,7 +61,7 @@ SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \ $(ARDUINO)/wiring_pulse.c \ $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c CXXSRC = $(ARDUINO)/WMath.cpp $(ARDUINO)/WString.cpp\ - $(ARDUINO)/Print.cpp Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp + $(ARDUINO)/Print.cpp applet/Marlin.cpp MarlinSerial.cpp Sd2Card.cpp SdBaseFile.cpp SdFatUtil.cpp SdFile.cpp SdVolume.cpp motion_control.cpp planner.cpp stepper.cpp temperature.cpp cardreader.cpp FORMAT = ihex @@ -138,6 +138,8 @@ all: build sizeafter build: elf hex applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE) + +applet/%.cpp: %.pde # Here is the "preprocessing". # It creates a .cpp file based with the same name as the .pde file. # On top of the new .cpp file comes the WProgram.h header. @@ -145,11 +147,11 @@ applet/$(TARGET).cpp: $(TARGET).pde $(MAKEFILE) # Then the .cpp file will be compiled. Errors during compile will # refer to this new, automatically generated, file. # Not the original .pde file you actually edit... - @echo " WR applet/$(TARGET).cpp" - @test -d applet || mkdir applet - @echo '#include "WProgram.h"' > applet/$(TARGET).cpp - @cat $(TARGET).pde >> applet/$(TARGET).cpp - @cat $(ARDUINO)/main.cpp >> applet/$(TARGET).cpp + @echo " WR $@" + @test -d $(dir $@) || mkdir $(dir $@) + @echo '#include "WProgram.h"' > $@ + @cat $< >> $@ + @cat $(ARDUINO)/main.cpp >> $@ elf: applet/$(TARGET).elf hex: applet/$(TARGET).hex diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index ffa3839a72..e01d98ad50 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -175,7 +175,6 @@ extern float homing_feedrate[]; extern bool axis_relative_modes[]; extern float current_position[NUM_AXIS] ; extern float add_homeing[3]; -extern bool stop_heating_wait; // Handling multiple extruders pins extern uint8_t active_extruder; diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 2ec088ca07..c595b5baa1 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -35,8 +35,9 @@ #include "cardreader.h" #include "watchdog.h" #include "EEPROMwrite.h" +#include "language.h" -#define VERSION_STRING "1.0.0 RC1" +#define VERSION_STRING "1.0.0 RC2" // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html // http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes @@ -97,7 +98,8 @@ // 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 // M205 - advanced settings: minimum travel speed S=while printing T=travel only, B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk // M206 - set additional homeing offset -// M220 - set speed factor override percentage S:factor in percent +// M220 S- set speed factor override percentage +// M221 S- set extrude factor override percentage // M240 - Trigger a camera to take a photograph // M301 - Set PID parameters P I and D // M302 - Allow cold extrudes @@ -125,10 +127,10 @@ bool axis_relative_modes[] = AXIS_RELATIVE_MODES; volatile int feedmultiply=100; //100->1 200->2 int saved_feedmultiply; volatile bool feedmultiplychanged=false; +volatile int extrudemultiply=100; //100->1 200->2 float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0 }; float add_homeing[3]={0,0,0}; uint8_t active_extruder = 0; -bool stop_heating_wait=false; //=========================================================================== //=============================private variables============================= @@ -249,6 +251,16 @@ void setup() MYSERIAL.begin(BAUDRATE); SERIAL_PROTOCOLLNPGM("start"); SERIAL_ECHO_START; + + // Check startup - does nothing if bootloader sets MCUSR to 0 + byte mcu = MCUSR; + if(mcu & 1) SERIAL_ECHOLNPGM("PowerUp"); + if(mcu & 2) SERIAL_ECHOLNPGM("External Reset"); + if(mcu & 4) SERIAL_ECHOLNPGM("Brown out Reset"); + if(mcu & 8) SERIAL_ECHOLNPGM("Watchdog Reset"); + if(mcu & 32) SERIAL_ECHOLNPGM("Software Reset"); + MCUSR=0; + SERIAL_ECHOPGM("Marlin: "); SERIAL_ECHOLNPGM(VERSION_STRING); #ifdef STRING_VERSION_CONFIG_H @@ -331,9 +343,13 @@ void get_command() serial_char = MYSERIAL.read(); if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1) ) { - if(!serial_count) return; //if empty line + if(!serial_count) { //if empty line + comment_mode = false; //for new command + return; + } cmdbuffer[bufindw][serial_count] = 0; //terminate string if(!comment_mode){ + comment_mode = false; //for new command fromsd[bufindw] = false; if(strstr(cmdbuffer[bufindw], "N") != NULL) { @@ -410,9 +426,7 @@ void get_command() } bufindw = (bufindw + 1)%BUFSIZE; buflen += 1; - } - comment_mode = false; //for new command serial_count = 0; //clear buffer } else @@ -446,10 +460,9 @@ void get_command() card.checkautostart(true); } - if(serial_char=='\n') - comment_mode = false; //for new command if(!serial_count) { + comment_mode = false; //for new command return; //if empty line } cmdbuffer[bufindw][serial_count] = 0; //terminate string @@ -458,6 +471,7 @@ void get_command() buflen += 1; bufindw = (bufindw + 1)%BUFSIZE; } + comment_mode = false; //for new command serial_count = 0; //clear buffer } else @@ -476,10 +490,12 @@ float code_value() { return (strtod(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL)); } + long code_value_long() { return (strtol(&cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], NULL, 10)); } + bool code_seen(char code_string[]) //Return True if the string was found { return (strstr(cmdbuffer[bufindr], code_string) != NULL); @@ -490,6 +506,7 @@ bool code_seen(char code) strchr_pointer = strchr(cmdbuffer[bufindr], code); return (strchr_pointer != NULL); //Return True if a character was found } + #define HOMEAXIS(LETTER) \ if ((LETTER##_MIN_PIN > -1 && LETTER##_HOME_DIR==-1) || (LETTER##_MAX_PIN > -1 && LETTER##_HOME_DIR==1))\ { \ @@ -498,22 +515,22 @@ bool code_seen(char code) destination[LETTER##_AXIS] = 1.5 * LETTER##_MAX_LENGTH * LETTER##_HOME_DIR; \ feedrate = homing_feedrate[LETTER##_AXIS]; \ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \ + st_synchronize();\ \ current_position[LETTER##_AXIS] = 0;\ plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\ destination[LETTER##_AXIS] = -LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \ + st_synchronize();\ \ destination[LETTER##_AXIS] = 2*LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\ feedrate = homing_feedrate[LETTER##_AXIS]/2 ; \ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \ + st_synchronize();\ \ - current_position[LETTER##_AXIS] = (LETTER##_HOME_DIR == -1) ? 0 : LETTER##_MAX_LENGTH;\ - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\ + current_position[LETTER##_AXIS] = (LETTER##_HOME_DIR == -1) ? LETTER##_HOME_POS : LETTER##_MAX_LENGTH;\ destination[LETTER##_AXIS] = current_position[LETTER##_AXIS];\ feedrate = 0.0;\ - st_synchronize();\ - plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\ endstops_hit_on_purpose();\ } @@ -567,7 +584,7 @@ void process_commands() feedrate = 0.0; home_all_axis = !((code_seen(axis_codes[0])) || (code_seen(axis_codes[1])) || (code_seen(axis_codes[2]))); #ifdef QUICK_HOME - if( code_seen(axis_codes[0]) && code_seen(axis_codes[1]) ) //first diagonal move + if( code_seen(axis_codes[X_AXIS]) && code_seen(axis_codes[Y_AXIS]) ) //first diagonal move { current_position[X_AXIS] = 0;current_position[Y_AXIS] = 0; @@ -576,17 +593,17 @@ void process_commands() feedrate = homing_feedrate[X_AXIS]; if(homing_feedrate[Y_AXIS]- set extrude factor override percentage + { + if(code_seen('S')) + { + extrudemultiply = code_value() ; + } + } + break; #ifdef PIDTEMP case 301: // M301 @@ -1265,11 +1295,10 @@ void get_arc_coordinates() void prepare_move() { - if (min_software_endstops) { - if (destination[X_AXIS] < 0) destination[X_AXIS] = 0.0; - if (destination[Y_AXIS] < 0) destination[Y_AXIS] = 0.0; - if (destination[Z_AXIS] < 0) destination[Z_AXIS] = 0.0; + if (destination[X_AXIS] < X_HOME_POS) destination[X_AXIS] = X_HOME_POS; + if (destination[Y_AXIS] < Y_HOME_POS) destination[Y_AXIS] = Y_HOME_POS; + if (destination[Z_AXIS] < Z_HOME_POS) destination[Z_AXIS] = Z_HOME_POS; } if (max_software_endstops) { @@ -1277,7 +1306,7 @@ void prepare_move() if (destination[Y_AXIS] > Y_MAX_LENGTH) destination[Y_AXIS] = Y_MAX_LENGTH; if (destination[Z_AXIS] > Z_MAX_LENGTH) destination[Z_AXIS] = Z_MAX_LENGTH; } - + plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply/60/100.0, active_extruder); for(int8_t i=0; i < NUM_AXIS; i++) { current_position[i] = destination[i]; diff --git a/Marlin/Sanguino/cores/arduino/pins_arduino.c b/Marlin/Sanguino/cores/arduino/pins_arduino.c index ccb88fe989..d5fa6fea3b 100644 --- a/Marlin/Sanguino/cores/arduino/pins_arduino.c +++ b/Marlin/Sanguino/cores/arduino/pins_arduino.c @@ -67,28 +67,28 @@ const uint8_t PROGMEM port_to_mode_PGM[] = { NOT_A_PORT, - &DDRA, - &DDRB, - &DDRC, - &DDRD, + (uint8_t) (uint16_t) &DDRA, + (uint8_t) (uint16_t) &DDRB, + (uint8_t) (uint16_t) &DDRC, + (uint8_t) (uint16_t) &DDRD, }; const uint8_t PROGMEM port_to_output_PGM[] = { NOT_A_PORT, - &PORTA, - &PORTB, - &PORTC, - &PORTD, + (uint8_t) (uint16_t) &PORTA, + (uint8_t) (uint16_t) &PORTB, + (uint8_t) (uint16_t) &PORTC, + (uint8_t) (uint16_t) &PORTD, }; const uint8_t PROGMEM port_to_input_PGM[] = { NOT_A_PORT, - &PINA, - &PINB, - &PINC, - &PIND, + (uint8_t) (uint16_t) &PINA, + (uint8_t) (uint16_t) &PINB, + (uint8_t) (uint16_t) &PINC, + (uint8_t) (uint16_t) &PIND, }; const uint8_t PROGMEM digital_pin_to_port_PGM[] = diff --git a/Marlin/Sanguino/cores/arduino/pins_arduino.h b/Marlin/Sanguino/cores/arduino/pins_arduino.h index e0b7add867..fd7ee5c8c2 100644 --- a/Marlin/Sanguino/cores/arduino/pins_arduino.h +++ b/Marlin/Sanguino/cores/arduino/pins_arduino.h @@ -58,8 +58,8 @@ extern const uint8_t PROGMEM digital_pin_to_timer_PGM[]; #define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) ) #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) ) #define analogInPinToBit(P) (P) -#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_byte( port_to_output_PGM + (P))) ) -#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_byte( port_to_input_PGM + (P))) ) -#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_byte( port_to_mode_PGM + (P))) ) +#define portOutputRegister(P) ( (volatile uint8_t *)( (uint16_t) pgm_read_byte( port_to_output_PGM + (P))) ) +#define portInputRegister(P) ( (volatile uint8_t *)( (uint16_t) pgm_read_byte( port_to_input_PGM + (P))) ) +#define portModeRegister(P) ( (volatile uint8_t *)( (uint16_t) pgm_read_byte( port_to_mode_PGM + (P))) ) #endif diff --git a/Marlin/Sanguino/cores/arduino/wiring_private.h b/Marlin/Sanguino/cores/arduino/wiring_private.h index 56c471353d..7449c76ac3 100644 --- a/Marlin/Sanguino/cores/arduino/wiring_private.h +++ b/Marlin/Sanguino/cores/arduino/wiring_private.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp index ecf0c47121..052ce20302 100644 --- a/Marlin/cardreader.cpp +++ b/Marlin/cardreader.cpp @@ -447,9 +447,6 @@ void CardReader::printingHasFinished() st_synchronize(); quickStop(); sdprinting = false; - #ifdef STOP_HEATING_WAIT_FOR_SD_PRINTING - stop_heating_wait=true; - #endif if(SD_FINISHED_STEPPERRELEASE) { //finishAndDisableSteppers(); diff --git a/Marlin/language.h b/Marlin/language.h new file mode 100644 index 0000000000..6dfd7e0be1 --- /dev/null +++ b/Marlin/language.h @@ -0,0 +1,339 @@ +#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 Etc + +#define LANGUAGE_CHOICE 1 // Pick your language from the list above + +#if LANGUAGE_CHOICE == 1 + +// LCD Menu Messages + + #define WELCOME_MSG "RepRap Ready." + #define MSG_SD_INSERTED "Card Ready" + #define MSG_SD_REMOVED "Card Initiate" + #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_PREHEAT_PLA " Preheat PLA" + #define MSG_PREHEAT_ABS " Preheat ABS" + #define MSG_COOLDOWN " Cooldown" + #define MSG_EXTRUDE " Extrude" + #define MSG_MOVE_AXIS " Move Axis \x7E" + #define MSG_SPEED " Speed:" + #define MSG_NOZZLE " \002Nozzle:" + #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_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_MOTION_WIDE " Motion \x7E" + #define MSG_STORE_EPROM " Store EPROM" + #define MSG_LOAD_EPROM " Load EPROM" + #define MSG_RESTORE_FAILSAFE " Restore Failsafe" + #define MSG_REFRESH "\004Refresh" + #define MSG_WATCH " Watch \003" + #define MSG_PREPARE " Prepare \x7E" + #define MSG_CONTROL_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." + +#endif + +#if LANGUAGE_CHOICE == 2 + +// LCD Menu Messages + + #define WELCOME_MSG "UltiMARLIN 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_PREHEAT " Preheat" + #define MSG_COOLDOWN " Cooldown" + #define MSG_EXTRUDE " Extrude" + #define MSG_MOVE_AXIS " Move Axis \x7E" + #define MSG_SPEED " Speed:" + #define MSG_NOZZLE " \002Nozzle:" + #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_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_MOTION_WIDE " Motion \x7E" + #define MSG_STORE_EPROM " Store EPROM" + #define MSG_LOAD_EPROM " Load EPROM" + #define MSG_RESTORE_FAILSAFE " Restore Failsafe" + #define MSG_REFRESH "\004Refresh" + #define MSG_WATCH " Watch \003" + #define MSG_PREPARE " Prepare \x7E" + #define MSG_CONTROL_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." + +#endif + +#if LANGUAGE_CHOICE == 3 + +// LCD Menu Messages + + #define WELCOME_MSG "RepRap Ready." + #define MSG_SD_INSERTED "Card Ready" + #define MSG_SD_REMOVED "Card Initiate" + #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_PREHEAT " Preheat" + #define MSG_COOLDOWN " Cooldown" + #define MSG_EXTRUDE " Extrude" + #define MSG_MOVE_AXIS " Move Axis \x7E" + #define MSG_SPEED " Speed:" + #define MSG_NOZZLE " \002Nozzle:" + #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_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_MOTION_WIDE " Motion \x7E" + #define MSG_STORE_EPROM " Store EPROM" + #define MSG_LOAD_EPROM " Load EPROM" + #define MSG_RESTORE_FAILSAFE " Restore Failsafe" + #define MSG_REFRESH "\004Refresh" + #define MSG_WATCH " Watch \003" + #define MSG_PREPARE " Prepare \x7E" + #define MSG_CONTROL_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." + +#endif + +#if LANGUAGE_CHOICE == 4 + +// LCD Menu Messages + + #define WELCOME_MSG "RepRap Ready." + #define MSG_SD_INSERTED "Card Ready" + #define MSG_SD_REMOVED "Card Initiate" + #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_PREHEAT " Preheat" + #define MSG_COOLDOWN " Cooldown" + #define MSG_EXTRUDE " Extrude" + #define MSG_MOVE_AXIS " Move Axis \x7E" + #define MSG_SPEED " Speed:" + #define MSG_NOZZLE " \002Nozzle:" + #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_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_MOTION_WIDE " Motion \x7E" + #define MSG_STORE_EPROM " Store EPROM" + #define MSG_LOAD_EPROM " Load EPROM" + #define MSG_RESTORE_FAILSAFE " Restore Failsafe" + #define MSG_REFRESH "\004Refresh" + #define MSG_WATCH " Watch \003" + #define MSG_PREPARE " Prepare \x7E" + #define MSG_CONTROL_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." + +#endif + +#if LANGUAGE_CHOICE == 5 + +// LCD Menu Messages + + #define WELCOME_MSG "RepRap Ready." + #define MSG_SD_INSERTED "Card Ready" + #define MSG_SD_REMOVED "Card Initiate" + #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_PREHEAT " Preheat" + #define MSG_COOLDOWN " Cooldown" + #define MSG_EXTRUDE " Extrude" + #define MSG_MOVE_AXIS " Move Axis \x7E" + #define MSG_SPEED " Speed:" + #define MSG_NOZZLE " \002Nozzle:" + #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_TEMPERATURE_WIDE " Temperature \x7E" + #define MSG_MOTION_WIDE " Motion \x7E" + #define MSG_STORE_EPROM " Store EPROM" + #define MSG_LOAD_EPROM " Load EPROM" + #define MSG_RESTORE_FAILSAFE " Restore Failsafe" + #define MSG_REFRESH "\004Refresh" + #define MSG_WATCH " Watch \003" + #define MSG_PREPARE " Prepare \x7E" + #define MSG_CONTROL_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." + +#endif + +#endif // ifndef LANGUAGE_H diff --git a/Marlin/motion_control.cpp b/Marlin/motion_control.cpp index a24b2b782c..67619b86f3 100644 --- a/Marlin/motion_control.cpp +++ b/Marlin/motion_control.cpp @@ -122,6 +122,18 @@ void mc_arc(float *position, float *target, float *offset, uint8_t axis_0, uint8 arc_target[axis_1] = center_axis1 + r_axis1; arc_target[axis_linear] += linear_per_segment; arc_target[E_AXIS] += extruder_per_segment; + + if (min_software_endstops) { + if (arc_target[X_AXIS] < X_HOME_POS) arc_target[X_AXIS] = X_HOME_POS; + if (arc_target[Y_AXIS] < Y_HOME_POS) arc_target[Y_AXIS] = Y_HOME_POS; + if (arc_target[Z_AXIS] < Z_HOME_POS) arc_target[Z_AXIS] = Z_HOME_POS; + } + + if (max_software_endstops) { + if (arc_target[X_AXIS] > X_MAX_LENGTH) arc_target[X_AXIS] = X_MAX_LENGTH; + if (arc_target[Y_AXIS] > Y_MAX_LENGTH) arc_target[Y_AXIS] = Y_MAX_LENGTH; + if (arc_target[Z_AXIS] > Z_MAX_LENGTH) arc_target[Z_AXIS] = Z_MAX_LENGTH; + } plan_buffer_line(arc_target[X_AXIS], arc_target[Y_AXIS], arc_target[Z_AXIS], arc_target[E_AXIS], feed_rate, extruder); } diff --git a/Marlin/pins.h b/Marlin/pins.h index ce21a9ade2..fb809ce583 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -45,225 +45,195 @@ #endif /* 99 */ /**************************************************************************************** -* Arduino pin assignment -* -* ATMega168 -* +-\/-+ -* PC6 1| |28 PC5 (AI 5 / D19) -* (D 0) PD0 2| |27 PC4 (AI 4 / D18) -* (D 1) PD1 3| |26 PC3 (AI 3 / D17) -* (D 2) PD2 4| |25 PC2 (AI 2 / D16) -* PWM+ (D 3) PD3 5| |24 PC1 (AI 1 / D15) -* (D 4) PD4 6| |23 PC0 (AI 0 / D14) -* VCC 7| |22 GND -* GND 8| |21 AREF -* PB6 9| |20 AVCC -* PB7 10| |19 PB5 (D 13) -* PWM+ (D 5) PD5 11| |18 PB4 (D 12) -* PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM -* (D 7) PD7 13| |16 PB2 (D 10) PWM -* (D 8) PB0 14| |15 PB1 (D 9) PWM -* +----+ -****************************************************************************************/ -#if MOTHERBOARD == 0 -#define KNOWN_BOARD 1 - -#ifndef __AVR_ATmega168__ -#error Oops! Make sure you have 'Arduino Diecimila' selected from the boards menu. -#endif - -#define X_STEP_PIN 2 -#define X_DIR_PIN 3 -#define X_ENABLE_PIN -1 -#define X_MIN_PIN 4 -#define X_MAX_PIN 9 - -#define Y_STEP_PIN 10 -#define Y_DIR_PIN 7 -#define Y_ENABLE_PIN -1 -#define Y_MIN_PIN 8 -#define Y_MAX_PIN 13 - -#define Z_STEP_PIN 19 -#define Z_DIR_PIN 18 -#define Z_ENABLE_PIN 5 -#define Z_MIN_PIN 17 -#define Z_MAX_PIN 16 - -#define E0_STEP_PIN 11 -#define E0_DIR_PIN 12 -#define E0_ENABLE_PIN -1 - -#define SDPOWER -1 -#define SDSS -1 -#define LED_PIN -1 -#define FAN_PIN -1 -#define PS_ON_PIN 15 -#define KILL_PIN -1 - -#define HEATER_0_PIN 6 -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define HEATER_BED_PIN -1 -#define TEMP_BED_PIN -1 -#endif - - - -/**************************************************************************************** -* Sanguino/RepRap Motherboard with direct-drive extruders -* -* ATMega644P -* -* +---\/---+ -* (D 0) PB0 1| |40 PA0 (AI 0 / D31) -* (D 1) PB1 2| |39 PA1 (AI 1 / D30) -* INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29) -* PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28) -* PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27) -* MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26) -* MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25) -* SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24) -* RST 9| |32 AREF -* VCC 10| |31 GND -* GND 11| |30 AVCC -* XTAL2 12| |29 PC7 (D 23) -* XTAL1 13| |28 PC6 (D 22) -* RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI -* TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO -* INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS -* INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK -* PWM (D 12) PD4 18| |23 PC1 (D 17) SDA -* PWM (D 13) PD5 19| |22 PC0 (D 16) SCL -* PWM (D 14) PD6 20| |21 PD7 (D 15) PWM -* +--------+ +* Gen7 v1.1, v1.2, v1.3, v1.4 pin assignment * ****************************************************************************************/ -#if MOTHERBOARD == 1 -#define KNOWN_BOARD 1 -#ifndef __AVR_ATmega644P__ -#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. + +#if MOTHERBOARD == 13 +#define MOTHERBOARD 11 +#define GEN7_VERSION 14 // v1.4 #endif -#define X_STEP_PIN 15 -#define X_DIR_PIN 18 -#define X_ENABLE_PIN 19 -#define X_MIN_PIN 20 -#define X_MAX_PIN 21 - -#define Y_STEP_PIN 23 -#define Y_DIR_PIN 22 -#define Y_ENABLE_PIN 19 -#define Y_MIN_PIN 25 -#define Y_MAX_PIN 26 - -#define Z_STEP_PIN 29 -#define Z_DIR_PIN 30 -#define Z_ENABLE_PIN 31 -#define Z_MIN_PIN 2 -#define Z_MAX_PIN 1 - -#define E0_STEP_PIN 12 -#define E0_DIR_PIN 16 -#define E0_ENABLE_PIN 3 - -#define SDPOWER -1 -#define SDSS -1 -#define LED_PIN 0 -#define FAN_PIN -1 -#define PS_ON_PIN -1 -#define KILL_PIN -1 - -#define HEATER_0_PIN 14 -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 4 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define TEMP_1_PIN -1 -#define TEMP_2_PIN -1 -#define HEATER_BED_PIN -1 -#define TEMP_BED_PIN -1 -/* Unused (1) (2) (3) 4 5 6 7 8 9 10 11 12 13 (14) (15) (16) 17 (18) (19) (20) (21) (22) (23) 24 (25) (26) (27) 28 (29) (30) (31) */ +#if MOTHERBOARD == 12 +#define MOTHERBOARD 11 +#define GEN7_VERSION 13 // v1.3 +#endif +#if MOTHERBOARD == 11 +#define KNOWN_BOARD +#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__) +#error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu. #endif - -/**************************************************************************************** -* RepRap Motherboard ****---NOOOOOO RS485/EXTRUDER CONTROLLER!!!!!!!!!!!!!!!!!---******* -* -****************************************************************************************/ -#if MOTHERBOARD == 2 -#define KNOWN_BOARD 1 - -#ifndef __AVR_ATmega644P__ -#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#ifndef GEN7_VERSION +#define GEN7_VERSION 12 // v1.x #endif -#define X_STEP_PIN 15 -#define X_DIR_PIN 18 -#define X_ENABLE_PIN 19 -#define X_MIN_PIN 20 -#define X_MAX_PIN 21 +//x axis pins +#define X_STEP_PIN 19 +#define X_DIR_PIN 18 +#define X_ENABLE_PIN 24 +#define X_MIN_PIN 7 +#define X_MAX_PIN -1 -#define Y_STEP_PIN 23 -#define Y_DIR_PIN 22 -#define Y_ENABLE_PIN 24 -#define Y_MIN_PIN 25 -#define Y_MAX_PIN 26 +//y axis pins +#define Y_STEP_PIN 23 +#define Y_DIR_PIN 22 +#define Y_ENABLE_PIN 24 +#define Y_MIN_PIN 5 +#define Y_MAX_PIN -1 -#define Z_STEP_PINN 27 -#define Z_DIR_PINN 28 -#define Z_ENABLE_PIN 29 -#define Z_MIN_PIN 30 -#define Z_MAX_PIN 31 +//z axis pins +#define Z_STEP_PIN 26 +#define Z_DIR_PIN 25 +#define Z_ENABLE_PIN 24 +#define Z_MIN_PIN 1 +#define Z_MAX_PIN 0 -#define E0_STEP_PIN 17 -#define E0_DIR_PIN 16 -#define E0_ENABLE_PIN -1 +//extruder pins +#define E0_STEP_PIN 28 +#define E0_DIR_PIN 27 +#define E0_ENABLE_PIN 24 -#define SDPOWER -1 -#define SDSS 4 -#define LED_PIN 0 +#define TEMP_0_PIN 1 +#define TEMP_1_PIN -1 +#define TEMP_2_PIN -1 +#define TEMP_BED_PIN 2 -#define SD_CARD_WRITE 2 -#define SD_CARD_DETECT 3 -#define SD_CARD_SELECT 4 +#define HEATER_0_PIN 4 +#define HEATER_1_PIN -1 +#define HEATER_2_PIN -1 +#define HEATER_BED_PIN 3 + + +#define SDPOWER -1 +#define SDSS -1 // SCL pin of I2C header +#define LED_PIN -1 + +#if (GEN7_VERSION >= 13) +// Gen7 v1.3 removed the fan pin +#define FAN_PIN -1 +#else +#define FAN_PIN 31 +#endif +#define PS_ON_PIN 15 + +#if (GEN7_VERSION < 14) +// Gen 1.3 and earlier supplied thermistor power via PS_ON +// Need to ignore the bad thermistor readings on those units +#define BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE +#endif + +//our pin for debugging. +#define DEBUG_PIN 0 //our RS485 pins -#define TX_ENABLE_PIN 12 -#define RX_ENABLE_PIN 13 +#define TX_ENABLE_PIN 12 +#define RX_ENABLE_PIN 13 -//pin for controlling the PSU. -#define PS_ON_PIN 14 +#endif -#define FAN_PIN -1 -#define KILL_PIN -1 +/******************************************************************************* +********* +* Gen7 Alfons3 pin assignment +* +******************************************************************************** +********/ +/* These Pins are assigned for the modified GEN7 Board from Alfons3 Please review the pins and adjust it for your needs*/ -#define HEATER_0_PIN -1 -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 -#define TEMP_0_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define TEMP_1_PIN -1 -#define TEMP_2_PIN -1 -#define HEATER_BED_PIN -1 -#define TEMP_BED_PIN -1 +#if MOTHERBOARD == 10 +#define KNOWN_BOARD +#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__) + #error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu. + +#endif + +//x axis pins + #define X_STEP_PIN 21 //different from stanard GEN7 + #define X_DIR_PIN 20 //different from stanard GEN7 + #define X_ENABLE_PIN 24 + #define X_MIN_PIN 0 + #define X_MAX_PIN -1 + + //y axis pins + #define Y_STEP_PIN 23 + #define Y_DIR_PIN 22 + #define Y_ENABLE_PIN 24 + #define Y_MIN_PIN 1 + #define Y_MAX_PIN -1 + + //z axis pins + #define Z_STEP_PIN 26 + #define Z_DIR_PIN 25 + #define Z_ENABLE_PIN 24 + #define Z_MIN_PIN 2 + #define Z_MAX_PIN -1 + + //extruder pins + #define E0_STEP_PIN 28 + #define E0_DIR_PIN 27 + #define E0_ENABLE_PIN 24 + + #define TEMP_0_PIN 2 + #define TEMP_1_PIN -1 + #define TEMP_2_PIN -1 + #define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) + + #define HEATER_0_PIN 4 + #define HEATER_1_PIN -1 + #define HEATER_2_PIN -1 + #define HEATER_BED_PIN 3 // (bed) + + #define SDPOWER -1 + #define SDSS 31 // SCL pin of I2C header || CS Pin for SD Card support + #define LED_PIN -1 + + #define FAN_PIN -1 + #define PS_ON_PIN 19 + //our pin for debugging. + + #define DEBUG_PIN -1 + + //our RS485 pins + //#define TX_ENABLE_PIN 12 + //#define RX_ENABLE_PIN 13 + + #define BEEPER -1 + #define SDCARDDETECT -1 + #define SUICIDE_PIN -1 //has to be defined; otherwise Power_off doesn't work + + //Pins for 4bit LCD Support + #define LCD_PINS_RS 18 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 16 + #define LCD_PINS_D5 15 + #define LCD_PINS_D6 13 + #define LCD_PINS_D7 14 + + //buttons are directly attached + #define BTN_EN1 11 + #define BTN_EN2 10 + #define BTN_ENC 12 //the click + + #define BLEN_C 2 + #define BLEN_B 1 + #define BLEN_A 0 + + #define encrot0 0 + #define encrot1 2 + #define encrot2 3 + #define encrot3 1 #endif /**************************************************************************************** * Arduino Mega pin assignment * ****************************************************************************************/ -#if MOTHERBOARD == 33 -#define MOTHERBOARD 3 -#define RAMPS_V_1_3 -#endif -#if MOTHERBOARD == 3 +#if MOTHERBOARD == 3 || MOTHERBOARD == 33 || MOTHERBOARD == 34 #define KNOWN_BOARD 1 //////////////////FIX THIS////////////// @@ -277,7 +247,7 @@ // #define RAMPS_V_1_3 // #define RAMPS_V_1_0 -#ifdef RAMPS_V_1_3 +#ifdef MOTHERBOARD == 33 || MOTHERBOARD == 34 #define X_STEP_PIN 54 #define X_DIR_PIN 55 @@ -295,7 +265,7 @@ #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 #define Z_MIN_PIN 18 -#define Z_MAX_PIN 19 //19 +#define Z_MAX_PIN 19 #define E0_STEP_PIN 26 #define E0_DIR_PIN 28 @@ -308,19 +278,96 @@ #define SDPOWER -1 #define SDSS 53 #define LED_PIN 13 -#define FAN_PIN 4 + +#if MOTHERBOARD == 33 +#define FAN_PIN 9 // (Sprinter config) +#else +#define FAN_PIN 4 // IO pin. Buffer needed +#endif #define PS_ON_PIN 12 #define KILL_PIN -1 #define HEATER_0_PIN 10 // EXTRUDER 1 -#define HEATER_1_PIN 9 // EXTRUDER 2 -#define HEATER_2_PIN -1 // EXTRUDER 2 +#if MOTHERBOARD == 33 +#define HEATER_1_PIN -1 +#else +#define HEATER_1_PIN 9 // EXTRUDER 2 (FAN On Sprinter) +#endif +#define HEATER_2_PIN -1 #define TEMP_0_PIN 13 // ANALOG NUMBERING #define TEMP_1_PIN 15 // ANALOG NUMBERING #define TEMP_2_PIN -1 // ANALOG NUMBERING #define HEATER_BED_PIN 8 // BED #define TEMP_BED_PIN 14 // ANALOG NUMBERING +#ifdef ULTRA_LCD + + #ifdef NEWPANEL + //arduino pin which triggers an piezzo beeper + #define BEEPER 33 // Beeper on AUX-4 + + #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 44 + #define BTN_EN2 42 + #define BTN_ENC 64 //the click + + #define BLEN_C 2 + #define BLEN_B 1 + #define BLEN_A 0 + + #define SDCARDDETECT 31 // Ramps does not use this port + + //encoder rotation values + #define encrot0 0 + #define encrot1 2 + #define encrot2 3 + #define encrot3 1 + + #else //old style panel with shift register + //arduino pin witch triggers an piezzo beeper + #define BEEPER 33 No Beeper added + + //buttons are attached to a shift register + // Not wired this yet + //#define SHIFT_CLK 38 + //#define SHIFT_LD 42 + //#define SHIFT_OUT 40 + //#define SHIFT_EN 17 + + #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 + + //encoder rotation values + #define encrot0 0 + #define encrot1 2 + #define encrot2 3 + #define encrot3 1 + + + //bits in the shift register that carry the buttons for: + // left up center down right red + #define BL_LE 7 + #define BL_UP 6 + #define BL_MI 5 + #define BL_DW 4 + #define BL_RI 3 + #define BL_ST 2 + + #define BLEN_B 1 + #define BLEN_A 0 + #endif +#endif //ULTRA_LCD #else // RAMPS_V_1_1 or RAMPS_V_1_2 as default @@ -440,11 +487,13 @@ * Gen6 pin assignment * ****************************************************************************************/ -#if MOTHERBOARD == 5 +#if MOTHERBOARD == 5 || MOTHERBOARD == 51 #define KNOWN_BOARD 1 #ifndef __AVR_ATmega644P__ - #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#ifndef __AVR_ATmega1284P__ +#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#endif #endif //x axis pins @@ -474,13 +523,19 @@ #define E0_ENABLE_PIN 3 //Added @ EJE Electronics 20100715 #define TEMP_0_PIN 5 //changed @ rkoeppl 20110410 #define TEMP_1_PIN -1 //changed @ rkoeppl 20110410 + + #define TEMP_2_PIN -1 //changed @ rkoeppl 20110410 #define HEATER_0_PIN 14 //changed @ rkoeppl 20110410 #define HEATER_1_PIN -1 #define HEATER_2_PIN -1 + #if MOTHERBOARD == 5 #define HEATER_BED_PIN -1 //changed @ rkoeppl 20110410 #define TEMP_BED_PIN -1 //changed @ rkoeppl 20110410 - + #else + #define HEATER_BED_PIN 1 //changed @ rkoeppl 20110410 + #define TEMP_BED_PIN 0 //changed @ rkoeppl 20110410 + #endif #define SDPOWER -1 #define SDSS 17 #define LED_PIN -1 //changed @ rkoeppl 20110410 @@ -502,14 +557,17 @@ * ****************************************************************************************/ #if MOTHERBOARD == 62 +#undef MOTHERBOARD #define MOTHERBOARD 6 #define SANGUINOLOLU_V_1_2 #endif #if MOTHERBOARD == 6 #define KNOWN_BOARD 1 #ifndef __AVR_ATmega644P__ +#ifndef __AVR_ATmega1284P__ #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #endif +#endif #define X_STEP_PIN 15 #define X_DIR_PIN 21 @@ -567,180 +625,6 @@ #endif -/**************************************************************************************** -* Gen7 v1.1, v1.2, v1.3 pin assignment -* -****************************************************************************************/ - -#if MOTHERBOARD == 79 -#define MOTHERBOARD 78 -#define GEN7_V_1_3 -#endif - -#if MOTHERBOARD == 78 -#define KNOWN_BOARD - -#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__) -#error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu. - -#endif - -//x axis pins -#define X_STEP_PIN 19 -#define X_DIR_PIN 18 -#define X_ENABLE_PIN 24 -#define X_MIN_PIN 7 -#define X_MAX_PIN -1 - -//y axis pins -#define Y_STEP_PIN 23 -#define Y_DIR_PIN 22 -#define Y_ENABLE_PIN 24 -#define Y_MIN_PIN 5 -#define Y_MAX_PIN -1 - -//z axis pins -#define Z_STEP_PIN 26 -#define Z_DIR_PIN 25 -#define Z_ENABLE_PIN 24 -#define Z_MIN_PIN 1 -#define Z_MAX_PIN -1 - -//extruder pins -#define E0_STEP_PIN 28 -#define E0_DIR_PIN 27 -#define E0_ENABLE_PIN 24 - -#define TEMP_0_PIN 1 -#define TEMP_1_PIN -1 -#define TEMP_2_PIN -1 -#define TEMP_BED_PIN 2 - -#define HEATER_0_PIN 4 -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 -#define HEATER_BED_PIN 3 - - -#define SDPOWER -1 -#define SDSS -1 // SCL pin of I2C header -#define LED_PIN -1 - -#ifdef GEN7_V_1_3 -// Gen7 v1.3 removed the fan pin -#define FAN_PIN -1 -#else -#define FAN_PIN 31 -#endif -#define PS_ON_PIN 15 - -//our pin for debugging. -#define DEBUG_PIN 0 - -//our RS485 pins -#define TX_ENABLE_PIN 12 -#define RX_ENABLE_PIN 13 - -#endif - -/******************************************************************************* -********* -* Gen7 Alfons3 pin assignment -* -******************************************************************************** -********/ -/* These Pins are assigned for the modified GEN7 Board from Alfons3 Please review the pins and adjust it for your needs*/ - -#if MOTHERBOARD == 77 -#define KNOWN_BOARD - -#if !defined(__AVR_ATmega644P__) && !defined(__AVR_ATmega644__) && !defined(__AVR_ATmega1284P__) - #error Oops! Make sure you have 'Gen7' selected from the 'Tools -> Boards' menu. - -#endif - -//x axis pins - #define X_STEP_PIN 21 //different from stanard GEN7 - #define X_DIR_PIN 20 //different from stanard GEN7 - #define X_ENABLE_PIN 24 - #define X_MIN_PIN 0 - #define X_MAX_PIN -1 - - //y axis pins - #define Y_STEP_PIN 23 - #define Y_DIR_PIN 22 - #define Y_ENABLE_PIN 24 - #define Y_MIN_PIN 1 - #define Y_MAX_PIN -1 - - //z axis pins - #define Z_STEP_PIN 26 - #define Z_DIR_PIN 25 - #define Z_ENABLE_PIN 24 - #define Z_MIN_PIN 2 - #define Z_MAX_PIN -1 - - //extruder pins - #define E0_STEP_PIN 28 - #define E0_DIR_PIN 27 - #define E0_ENABLE_PIN 24 - - #define TEMP_0_PIN 2 - #define TEMP_1_PIN -1 - #define TEMP_2_PIN -1 - #define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) - - #define HEATER_0_PIN 4 - #define HEATER_1_PIN -1 - #define HEATER_2_PIN -1 - #define HEATER_BED_PIN 3 // (bed) - - - - - #define SDPOWER -1 - #define SDSS 31 // SCL pin of I2C header || CS Pin for SD Card support - #define LED_PIN -1 - - #define FAN_PIN -1 - #define PS_ON_PIN 19 - //our pin for debugging. - - #define DEBUG_PIN -1 - - //our RS485 pins - //#define TX_ENABLE_PIN 12 - //#define RX_ENABLE_PIN 13 - - #define BEEPER -1 - #define SDCARDDETECT -1 - #define SUICIDE_PIN -1 //has to be defined; otherwise Power_off doesn't work - - //Pins for 4bit LCD Support - #define LCD_PINS_RS 18 - #define LCD_PINS_ENABLE 17 - #define LCD_PINS_D4 16 - #define LCD_PINS_D5 15 - #define LCD_PINS_D6 13 - #define LCD_PINS_D7 14 - - //buttons are directly attached - #define BTN_EN1 11 - #define BTN_EN2 10 - #define BTN_ENC 12 //the click - - #define BLEN_C 2 - #define BLEN_B 1 - #define BLEN_A 0 - - - #define encrot0 0 - #define encrot1 2 - #define encrot2 3 - #define encrot3 1 - - -#endif #if MOTHERBOARD == 7 #define KNOWN_BOARD @@ -1003,8 +887,10 @@ #define MOTHERBOARD 6 #define KNOWN_BOARD 1 #ifndef __AVR_ATmega644P__ +#ifndef __AVR_ATmega1284P__ #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #endif +#endif #define X_STEP_PIN 15 #define X_DIR_PIN 18 diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index b895b95e52..00fead1288 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -81,6 +81,8 @@ long position[4]; //rescaled from extern when axis_steps_per_unit are changed static float previous_speed[4]; // Speed of previous path line segment static float previous_nominal_speed; // Nominal speed of previous path line segment +extern volatile int extrudemultiply; // Sets extrude multiply factor (in percent) + #ifdef AUTOTEMP float autotemp_max=250; float autotemp_min=210; @@ -439,7 +441,7 @@ float junction_deviation = 0.1; // Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in // mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration // calculation the caller must also provide the physical length of the line in millimeters. -void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder) +void plan_buffer_line(float &x, float &y, float &z, float &e, float feed_rate, uint8_t &extruder) { // Calculate the buffer head after we push this byte int next_buffer_head = next_block_index(block_buffer_head); @@ -451,7 +453,7 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa manage_inactivity(1); LCD_STATUS; } - + // The target position of the tool in absolute steps // Calculate target position in absolute steps //this should be done after the wait, because otherwise a M92 code within the gcode disrupts this calculation somehow @@ -488,6 +490,8 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa block->steps_y = labs(target[Y_AXIS]-position[Y_AXIS]); block->steps_z = labs(target[Z_AXIS]-position[Z_AXIS]); block->steps_e = labs(target[E_AXIS]-position[E_AXIS]); + block->steps_e *= extrudemultiply; + block->steps_e /= 100; block->step_event_count = max(block->steps_x, max(block->steps_y, max(block->steps_z, block->steps_e))); // Bail if this is a zero-length block @@ -512,11 +516,18 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa // Enable all if(block->steps_e != 0) { enable_e0();enable_e1();enable_e2(); } + + // slow down when de buffer starts to empty, rather than wait at the corner for a buffer refill + int moves_queued=(block_buffer_head-block_buffer_tail + BLOCK_BUFFER_SIZE) & (BLOCK_BUFFER_SIZE - 1); + #ifdef SLOWDOWN + if(moves_queued < (BLOCK_BUFFER_SIZE * 0.5) && moves_queued > 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5); + #endif + float delta_mm[4]; delta_mm[X_AXIS] = (target[X_AXIS]-position[X_AXIS])/axis_steps_per_unit[X_AXIS]; delta_mm[Y_AXIS] = (target[Y_AXIS]-position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]; delta_mm[Z_AXIS] = (target[Z_AXIS]-position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]; - delta_mm[E_AXIS] = (target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS]; + delta_mm[E_AXIS] = ((target[E_AXIS]-position[E_AXIS])/axis_steps_per_unit[E_AXIS])*extrudemultiply/100.0; if ( block->steps_x == 0 && block->steps_y == 0 && block->steps_z == 0 ) { block->millimeters = abs(delta_mm[E_AXIS]); } else { @@ -537,12 +548,6 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa if(feed_rate 1) feed_rate = feed_rate*moves_queued / (BLOCK_BUFFER_SIZE * 0.5); -#endif - /* // segment time im micro seconds long segment_time = lround(1000000.0/inverse_second); diff --git a/Marlin/planner.h b/Marlin/planner.h index ac9719fbcf..c90581bfd8 100644 --- a/Marlin/planner.h +++ b/Marlin/planner.h @@ -67,7 +67,7 @@ void plan_init(); // Add a new linear movement to the buffer. x, y and z is the signed, absolute target position in // millimaters. Feed rate specifies the speed of the motion. -void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder); +void plan_buffer_line(float &x, float &y, float &z, float &e, float feed_rate, uint8_t &extruder); // Set position. Used for G92 instructions. void plan_set_position(const float &x, const float &y, const float &z, const float &e); diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index 6bd84b13f0..40d4873fab 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -432,7 +432,7 @@ ISR(TIMER1_COMPA_vect) } else { // +direction NORM_E_DIR(); - count_direction[E_AXIS]=-1; + count_direction[E_AXIS]=1; } #endif //!ADVANCE diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 95f0f86748..1155d88cf4 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -312,7 +312,7 @@ int temp2analog(int celsius, uint8_t e) { return (1023 * OVERSAMPLENR) - raw; } - return celsius * (1024.0 / (5.0 * 100.0) ) * OVERSAMPLENR; + return ((celsius-TEMP_SENSOR_AD595_OFFSET)/TEMP_SENSOR_AD595_GAIN) * (1024.0 / (5.0 * 100.0) ) * OVERSAMPLENR; } // Takes bed temperature value as input and returns corresponding raw value. @@ -342,7 +342,7 @@ int temp2analogBed(int celsius) { return (1023 * OVERSAMPLENR) - raw; #elif defined BED_USES_AD595 - return lround(celsius * (1024.0 * OVERSAMPLENR/ (5.0 * 100.0) ) ); + return lround(((celsius-TEMP_SENSOR_AD595_OFFSET)/TEMP_SENSOR_AD595_GAIN) * (1024.0 * OVERSAMPLENR/ (5.0 * 100.0) ) ); #else #warning No heater-type defined for the bed. return 0; @@ -390,7 +390,7 @@ float analog2temp(int raw, uint8_t e) { return celsius; } - return raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR; + return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET; } // Derived from RepRap FiveD extruder::getTemperature() @@ -421,7 +421,7 @@ float analog2tempBed(int raw) { return celsius; #elif defined BED_USES_AD595 - return raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR; + return ((raw * ((5.0 * 100.0) / 1024.0) / OVERSAMPLENR) * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET; #else #warning No heater-type defined for the bed. #endif @@ -851,18 +851,18 @@ ISR(TIMER0_COMPB_vect) for(unsigned char e = 0; e < EXTRUDERS; e++) { if(current_raw[e] >= maxttemp[e]) { target_raw[e] = 0; - #if (PS_ON != -1) + max_temp_error(e); + #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE { - max_temp_error(e); kill();; } #endif } if(current_raw[e] <= minttemp[e]) { target_raw[e] = 0; - #if (PS_ON != -1) + min_temp_error(e); + #ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE { - min_temp_error(e); kill(); } #endif diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index db8a131836..c4392d26fc 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -9,18 +9,11 @@ void beep(); void buttons_check(); - #define LCD_UPDATE_INTERVAL 100 #define STATUSTIMEOUT 15000 - - - extern LiquidCrystal lcd; - - + #ifdef NEWPANEL - - #define EN_C (1< -1) - { - #define CARDINSERTED (READ(SDCARDDETECT)==0) - } - #endif - + #ifdef SDCARDDETECTINVERTED + #define CARDINSERTED (READ(SDCARDDETECT)!=0) + #else + #define CARDINSERTED (READ(SDCARDDETECT)==0) + #endif + #endif //SDCARDTETECTINVERTED + #else //atomatic, do not change diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 32ef2f3b87..54b7012848 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -9,6 +9,8 @@ extern volatile int feedmultiply; extern volatile bool feedmultiplychanged; +extern volatile int extrudemultiply; + extern long position[4]; extern CardReader card; @@ -122,7 +124,7 @@ void lcd_init() lcd.createChar(3,uplevel); lcd.createChar(4,refresh); lcd.createChar(5,folder); - LCD_MESSAGEPGM("UltiMarlin ready."); + LCD_MESSAGEPGM(WELCOME_MSG); } @@ -372,7 +374,7 @@ void MainMenu::showStatus() if((currentz!=oldzpos)||force_lcd_update) { lcd.setCursor(10,1); - lcdprintPGM("Z:");lcd.print(ftostr32(current_position[2])); + lcdprintPGM("Z:");lcd.print(ftostr52(current_position[2])); oldzpos=currentz; } static int oldfeedmultiply=0; @@ -411,7 +413,6 @@ void MainMenu::showStatus() lcd.setCursor(7,2); lcd.print(itostr3((int)percent)); lcdprintPGM("%SD"); - } #else //smaller LCDS---------------------------------- @@ -457,7 +458,7 @@ void MainMenu::showStatus() force_lcd_update=false; } -enum {ItemP_exit, ItemP_autostart,ItemP_disstep,ItemP_home, ItemP_origin, ItemP_preheat, ItemP_cooldown,/*ItemP_extrude,*/ItemP_move}; +enum {ItemP_exit, ItemP_autostart,ItemP_disstep,ItemP_home, ItemP_origin, ItemP_preheat_pla, ItemP_preheat_abs, ItemP_cooldown,/*ItemP_extrude,*/ItemP_move}; //any action must not contain a ',' character anywhere, or this breaks: #define MENUITEM(repaint_action, click_action) \ @@ -476,31 +477,34 @@ void MainMenu::showPrepare() switch(i) { case ItemP_exit: - MENUITEM( lcdprintPGM(" Main \003") , BLOCK;status=Main_Menu;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_MAIN) , BLOCK;status=Main_Menu;beepshort(); ) ; break; case ItemP_autostart: - MENUITEM( lcdprintPGM(" Autostart") , BLOCK;card.lastnr=0;card.setroot();card.checkautostart(true);beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_AUTOSTART) , BLOCK;card.lastnr=0;card.setroot();card.checkautostart(true);beepshort(); ) ; break; case ItemP_disstep: - MENUITEM( lcdprintPGM(" Disable Steppers") , BLOCK;enquecommand("M84");beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_DISABLE_STEPPERS) , BLOCK;enquecommand("M84");beepshort(); ) ; break; case ItemP_home: - MENUITEM( lcdprintPGM(" Auto Home") , BLOCK;enquecommand("G28 X0 Y0 Z0");beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_AUTO_HOME) , BLOCK;enquecommand("G28");beepshort(); ) ; break; case ItemP_origin: - MENUITEM( lcdprintPGM(" Set Origin") , BLOCK;enquecommand("G92 X0 Y0 Z0");beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_SET_ORIGIN) , BLOCK;enquecommand("G92 X0 Y0 Z0");beepshort(); ) ; break; - case ItemP_preheat: - MENUITEM( lcdprintPGM(" Preheat") , BLOCK;setTargetHotend0(227);setTargetBed(105);beepshort(); ) ; + case ItemP_preheat_pla: + MENUITEM( lcdprintPGM(MSG_PREHEAT_PLA) , BLOCK;setTargetHotend0(PLA_PREHEAT_HOTEND_TEMP);setTargetBed(PLA_PREHEAT_HPB_TEMP);analogWrite(FAN_PIN, PLA_PREHEAT_FAN_SPEED); beepshort(); ) ; + break; + case ItemP_preheat_abs: + MENUITEM( lcdprintPGM(MSG_PREHEAT_ABS) , BLOCK;setTargetHotend0(ABS_PREHEAT_HOTEND_TEMP);setTargetBed(ABS_PREHEAT_HPB_TEMP); analogWrite(FAN_PIN, ABS_PREHEAT_FAN_SPEED); beepshort(); ) ; break; case ItemP_cooldown: - MENUITEM( lcdprintPGM(" Cooldown") , BLOCK;setTargetHotend0(0);setTargetBed(0);beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_COOLDOWN) , BLOCK;setTargetHotend0(0);setTargetBed(0);beepshort(); ) ; break; // case ItemP_extrude: // MENUITEM( lcdprintPGM(" Extrude") , BLOCK;enquecommand("G92 E0");enquecommand("G1 F700 E50");beepshort(); ) ; // break; case ItemP_move: - MENUITEM( lcdprintPGM(" Move Axis \x7E") , BLOCK;status=Sub_PrepareMove;beepshort(); ); + MENUITEM( lcdprintPGM(MSG_MOVE_AXIS) , BLOCK;status=Sub_PrepareMove;beepshort(); ); break; default: break; @@ -533,7 +537,7 @@ void MainMenu::showAxisMove() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(" X:"); - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[X_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[X_AXIS])); } if((activeline!=line) ) @@ -569,7 +573,7 @@ void MainMenu::showAxisMove() oldencoderpos=encoderpos; encoderpos=0; } - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[X_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[X_AXIS])); } } break; @@ -578,7 +582,7 @@ void MainMenu::showAxisMove() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(" Y:"); - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[Y_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[Y_AXIS])); } if((activeline!=line) ) @@ -614,7 +618,7 @@ void MainMenu::showAxisMove() oldencoderpos=encoderpos; encoderpos=0; } - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[Y_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[Y_AXIS])); } } break; @@ -623,7 +627,7 @@ void MainMenu::showAxisMove() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(" Z:"); - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[Z_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[Z_AXIS])); } if((activeline!=line) ) @@ -659,12 +663,12 @@ void MainMenu::showAxisMove() oldencoderpos=encoderpos; encoderpos=0; } - lcd.setCursor(13,line);lcd.print(ftostr32(current_position[Z_AXIS])); + lcd.setCursor(11,line);lcd.print(ftostr52(current_position[Z_AXIS])); } } break; case ItemAM_E: - MENUITEM( lcdprintPGM(" Extrude") , BLOCK;enquecommand("G92 E0");enquecommand("G1 F700 E5");beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_EXTRUDE) , BLOCK;enquecommand("G92 E0");enquecommand("G1 F700 E5");beepshort(); ) ; break; default: break; @@ -690,20 +694,20 @@ void MainMenu::showTune() switch(i) { case ItemT_exit: - MENUITEM( lcdprintPGM(" Main \003") , BLOCK;status=Main_Menu;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_MAIN) , BLOCK;status=Main_Menu;beepshort(); ) ; break; case ItemT_speed: { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Speed:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_SPEED); lcd.setCursor(13,line);lcd.print(ftostr3(feedmultiply)); } if((activeline!=line) ) break; - if(CLICKED) //nalogWrite(FAN_PIN, fanpwm); + if(CLICKED) //AnalogWrite(FAN_PIN, fanpwm); { linechanging=!linechanging; if(linechanging) @@ -731,7 +735,7 @@ void MainMenu::showTune() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002Nozzle:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend0()))); } @@ -765,7 +769,7 @@ void MainMenu::showTune() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002Bed:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_BED); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetBed()))); } @@ -836,7 +840,7 @@ void MainMenu::showTune() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Flow:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_FLOW); lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3])); } @@ -917,13 +921,13 @@ void MainMenu::showControlTemp() switch(i) { case ItemCT_exit: - MENUITEM( lcdprintPGM(" Control \003") , BLOCK;status=Main_Control;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_CONTROL) , BLOCK;status=Main_Control;beepshort(); ) ; break; case ItemCT_nozzle: { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002Nozzle:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_NOZZLE); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetHotend0()))); } @@ -958,7 +962,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002 Min:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_MIN); lcd.setCursor(13,line);lcd.print(ftostr3(autotemp_min)); } @@ -992,7 +996,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002 Max:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_MAX); lcd.setCursor(13,line);lcd.print(ftostr3(autotemp_max)); } @@ -1026,7 +1030,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002 Fact:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_FACTOR); lcd.setCursor(13,line);lcd.print(ftostr32(autotemp_factor)); } @@ -1060,12 +1064,12 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Autotemp:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_AUTOTEMP); lcd.setCursor(13,line); if(autotemp_enabled) - lcdprintPGM("On"); + lcdprintPGM(MSG_ON); else - lcdprintPGM("Off"); + lcdprintPGM(MSG_OFF); } if((activeline!=line) ) @@ -1076,9 +1080,9 @@ void MainMenu::showControlTemp() autotemp_enabled=!autotemp_enabled; lcd.setCursor(13,line); if(autotemp_enabled) - lcdprintPGM("On "); + lcdprintPGM(MSG_ON); else - lcdprintPGM("Off"); + lcdprintPGM(MSG_OFF); BLOCK; } @@ -1089,7 +1093,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" \002Bed:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_BED); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degTargetBed()))); } @@ -1123,7 +1127,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Fan speed:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_FAN_SPEED); lcd.setCursor(13,line);lcd.print(ftostr3(fanpwm)); } @@ -1193,7 +1197,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" PID-I: "); + lcd.setCursor(0,line);lcdprintPGM(MSG_PID_I); lcd.setCursor(13,line);lcd.print(ftostr51(Ki/PID_dT)); } @@ -1228,7 +1232,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" PID-D: "); + lcd.setCursor(0,line);lcdprintPGM(MSG_PID_D); lcd.setCursor(13,line);lcd.print(itostr4(Kd*PID_dT)); } @@ -1265,7 +1269,7 @@ void MainMenu::showControlTemp() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" PID-C: "); + lcd.setCursor(0,line);lcdprintPGM(MSG_PID_C); lcd.setCursor(13,line);lcd.print(itostr3(Kc)); } @@ -1331,13 +1335,13 @@ void MainMenu::showControlMotion() switch(i) { case ItemCM_exit: - MENUITEM( lcdprintPGM(" Control \003") , BLOCK;status=Main_Control;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_CONTROL) , BLOCK;status=Main_Control;beepshort(); ) ; break; case ItemCM_acc: { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Acc:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_ACC); lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcdprintPGM("00"); } @@ -1371,7 +1375,7 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Vxy-jerk: "); + lcd.setCursor(0,line);lcdprintPGM(MSG_VXY_JERK); lcd.setCursor(13,line);lcd.print(itostr3(max_xy_jerk)); } @@ -1410,11 +1414,11 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Vmax "); - if(i==ItemCM_vmaxx)lcdprintPGM("x:"); - if(i==ItemCM_vmaxy)lcdprintPGM("y:"); - if(i==ItemCM_vmaxz)lcdprintPGM("z:"); - if(i==ItemCM_vmaxe)lcdprintPGM("e:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_VMAX); + if(i==ItemCM_vmaxx)lcdprintPGM(MSG_X); + if(i==ItemCM_vmaxy)lcdprintPGM(MSG_Y); + if(i==ItemCM_vmaxz)lcdprintPGM(MSG_Z); + if(i==ItemCM_vmaxe)lcdprintPGM(MSG_E); lcd.setCursor(13,line);lcd.print(itostr3(max_feedrate[i-ItemCM_vmaxx])); } @@ -1450,7 +1454,7 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Vmin:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_VMIN); lcd.setCursor(13,line);lcd.print(itostr3(minimumfeedrate)); } @@ -1485,7 +1489,7 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" VTrav min:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_VTRAV_MIN); lcd.setCursor(13,line);lcd.print(itostr3(mintravelfeedrate)); } @@ -1525,10 +1529,10 @@ void MainMenu::showControlMotion() if(force_lcd_update) { lcd.setCursor(0,line);lcdprintPGM(" Amax "); - if(i==ItemCM_amaxx)lcdprintPGM("x:"); - if(i==ItemCM_amaxy)lcdprintPGM("y:"); - if(i==ItemCM_amaxz)lcdprintPGM("z:"); - if(i==ItemCM_amaxe)lcdprintPGM("e:"); + if(i==ItemCM_amaxx)lcdprintPGM(MSG_X); + if(i==ItemCM_amaxy)lcdprintPGM(MSG_Y); + if(i==ItemCM_amaxz)lcdprintPGM(MSG_Z); + if(i==ItemCM_amaxe)lcdprintPGM(MSG_E); lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemCM_amaxx]/100));lcdprintPGM("00"); } @@ -1562,7 +1566,7 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" A-retract:"); + lcd.setCursor(0,line);lcdprintPGM(MSG_A_RETRACT); lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcdprintPGM("00"); } @@ -1597,8 +1601,8 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" X steps/mm:"); - lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[0])); + lcd.setCursor(0,line);lcdprintPGM(MSG_XSTEPS); + lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[0])); } if((activeline!=line) ) @@ -1609,16 +1613,15 @@ void MainMenu::showControlMotion() linechanging=!linechanging; if(linechanging) { - encoderpos=(int)axis_steps_per_unit[0]; + encoderpos=(int)(axis_steps_per_unit[0]*100.0); } else { - float factor=float(encoderpos)/float(axis_steps_per_unit[0]); + float factor=float(encoderpos)/100.0/float(axis_steps_per_unit[0]); position[X_AXIS]=lround(position[X_AXIS]*factor); //current_position[3]*=factor; - axis_steps_per_unit[X_AXIS]= encoderpos; + axis_steps_per_unit[X_AXIS]= encoderpos/100.0; encoderpos=activeline*lcdslow; - } BLOCK; beepshort(); @@ -1626,8 +1629,8 @@ void MainMenu::showControlMotion() if(linechanging) { if(encoderpos<5) encoderpos=5; - if(encoderpos>9999) encoderpos=9999; - lcd.setCursor(13,line);lcd.print(itostr4(encoderpos)); + if(encoderpos>99999) encoderpos=99999; + lcd.setCursor(11,line);lcd.print(ftostr52(encoderpos/100.0)); } }break; @@ -1635,8 +1638,8 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Y steps/mm:"); - lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[1])); + lcd.setCursor(0,line);lcdprintPGM(MSG_YSTEPS); + lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[1])); } if((activeline!=line) ) @@ -1647,14 +1650,14 @@ void MainMenu::showControlMotion() linechanging=!linechanging; if(linechanging) { - encoderpos=(int)axis_steps_per_unit[1]; + encoderpos=(int)(axis_steps_per_unit[1]*100.0); } else { - float factor=float(encoderpos)/float(axis_steps_per_unit[1]); + float factor=float(encoderpos)/100.0/float(axis_steps_per_unit[1]); position[Y_AXIS]=lround(position[Y_AXIS]*factor); //current_position[3]*=factor; - axis_steps_per_unit[Y_AXIS]= encoderpos; + axis_steps_per_unit[Y_AXIS]= encoderpos/100.0; encoderpos=activeline*lcdslow; } @@ -1665,7 +1668,7 @@ void MainMenu::showControlMotion() { if(encoderpos<5) encoderpos=5; if(encoderpos>9999) encoderpos=9999; - lcd.setCursor(13,line);lcd.print(itostr4(encoderpos)); + lcd.setCursor(11,line);lcd.print(ftostr52(encoderpos/100.0)); } }break; @@ -1673,8 +1676,8 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Z steps/mm:"); - lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[2])); + lcd.setCursor(0,line);lcdprintPGM(MSG_ZSTEPS); + lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[2])); } if((activeline!=line) ) @@ -1685,14 +1688,14 @@ void MainMenu::showControlMotion() linechanging=!linechanging; if(linechanging) { - encoderpos=(int)axis_steps_per_unit[2]; + encoderpos=(int)(axis_steps_per_unit[2]*100.0); } else { - float factor=float(encoderpos)/float(axis_steps_per_unit[2]); + float factor=float(encoderpos)/100.0/float(axis_steps_per_unit[2]); position[Z_AXIS]=lround(position[Z_AXIS]*factor); //current_position[3]*=factor; - axis_steps_per_unit[Z_AXIS]= encoderpos; + axis_steps_per_unit[Z_AXIS]= encoderpos/100.0; encoderpos=activeline*lcdslow; } @@ -1703,7 +1706,7 @@ void MainMenu::showControlMotion() { if(encoderpos<5) encoderpos=5; if(encoderpos>9999) encoderpos=9999; - lcd.setCursor(13,line);lcd.print(itostr4(encoderpos)); + lcd.setCursor(11,line);lcd.print(ftostr52(encoderpos/100.0)); } }break; @@ -1712,8 +1715,8 @@ void MainMenu::showControlMotion() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" E steps/mm:"); - lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3])); + lcd.setCursor(0,line);lcdprintPGM(MSG_ESTEPS); + lcd.setCursor(11,line);lcd.print(ftostr52(axis_steps_per_unit[3])); } if((activeline!=line) ) @@ -1724,14 +1727,14 @@ void MainMenu::showControlMotion() linechanging=!linechanging; if(linechanging) { - encoderpos=(int)axis_steps_per_unit[3]; + encoderpos=(int)(axis_steps_per_unit[3]*100.0); } else { - float factor=float(encoderpos)/float(axis_steps_per_unit[3]); + float factor=float(encoderpos)/100.0/float(axis_steps_per_unit[3]); position[E_AXIS]=lround(position[E_AXIS]*factor); //current_position[3]*=factor; - axis_steps_per_unit[E_AXIS]= encoderpos; + axis_steps_per_unit[E_AXIS]= encoderpos/100.0; encoderpos=activeline*lcdslow; } @@ -1742,7 +1745,7 @@ void MainMenu::showControlMotion() { if(encoderpos<5) encoderpos=5; if(encoderpos>9999) encoderpos=9999; - lcd.setCursor(13,line);lcd.print(itostr4(encoderpos)); + lcd.setCursor(11,line);lcd.print(ftostr52(encoderpos/100.0)); } }break; @@ -1769,19 +1772,19 @@ void MainMenu::showControl() switch(i) { case ItemC_exit: - MENUITEM( lcdprintPGM(" Main \003") , BLOCK;status=Main_Menu;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_MAIN_WIDE) , BLOCK;status=Main_Menu;beepshort(); ) ; break; case ItemC_temp: - MENUITEM( lcdprintPGM(" Temperature \x7E") , BLOCK;status=Sub_TempControl;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_TEMPERATURE_WIDE) , BLOCK;status=Sub_TempControl;beepshort(); ) ; break; case ItemC_move: - MENUITEM( lcdprintPGM(" Motion \x7E") , BLOCK;status=Sub_MotionControl;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_MOTION_WIDE) , BLOCK;status=Sub_MotionControl;beepshort(); ) ; break; case ItemC_store: { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Store EPROM"); + lcd.setCursor(0,line);lcdprintPGM(MSG_STORE_EPROM); } if((activeline==line) && CLICKED) { @@ -1795,7 +1798,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Load EPROM"); + lcd.setCursor(0,line);lcdprintPGM(MSG_LOAD_EPROM); } if((activeline==line) && CLICKED) { @@ -1809,7 +1812,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcdprintPGM(" Restore Failsafe"); + lcd.setCursor(0,line);lcdprintPGM(MSG_RESTORE_FAILSAFE); } if((activeline==line) && CLICKED) { @@ -1856,7 +1859,7 @@ void MainMenu::showSD() switch(i) { case 0: - MENUITEM( lcdprintPGM(" Main \003") , BLOCK;status=Main_Menu;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_MAIN) , BLOCK;status=Main_Menu;beepshort(); ) ; break; // case 1: // { @@ -1887,7 +1890,7 @@ void MainMenu::showSD() // } // }break; case 1: - MENUITEM( lcd.print(" ");card.getWorkDirName();if(card.filename[0]=='/') lcdprintPGM("\004Refresh");else {lcd.print("\005");lcd.print(card.filename);lcd.print("/..");} , BLOCK;card.updir();enforceupdate=true;lineoffset=0;beepshort(); ) ; + MENUITEM( lcd.print(" ");card.getWorkDirName();if(card.filename[0]=='/') lcdprintPGM(MSG_REFRESH);else {lcd.print("\005");lcd.print(card.filename);lcd.print("/..");} , BLOCK;card.updir();enforceupdate=true;lineoffset=0;beepshort(); ) ; break; default: @@ -1974,14 +1977,14 @@ void MainMenu::showMainMenu() switch(line) { case ItemM_watch: - MENUITEM( lcdprintPGM(" Watch \003") , BLOCK;status=Main_Status;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_WATCH) , BLOCK;status=Main_Status;beepshort(); ) ; break; case ItemM_prepare: - MENUITEM( if(!tune) lcdprintPGM(" Prepare \x7E");else lcdprintPGM(" Tune \x7E"); , BLOCK;status=Main_Prepare;beepshort(); ) ; + MENUITEM( if(!tune) lcdprintPGM(MSG_PREPARE);else lcdprintPGM(MSG_TUNE); , BLOCK;status=Main_Prepare;beepshort(); ) ; break; case ItemM_control: - MENUITEM( lcdprintPGM(" Control \x7E") , BLOCK;status=Main_Control;beepshort(); ) ; + MENUITEM( lcdprintPGM(MSG_CONTROL_ARROW) , BLOCK;status=Main_Control;beepshort(); ) ; break; #ifdef SDSUPPORT case ItemM_file: @@ -1996,13 +1999,13 @@ void MainMenu::showMainMenu() #endif { if(card.sdprinting) - lcdprintPGM(" Stop Print \x7E"); + lcdprintPGM(MSG_STOP_PRINT); else - lcdprintPGM(" Card Menu \x7E"); + lcdprintPGM(MSG_CARD_MENU); } else { - lcdprintPGM(" No Card"); + lcdprintPGM(MSG_NO_CARD); } } #ifdef CARDINSERTED @@ -2022,7 +2025,7 @@ void MainMenu::showMainMenu() #endif default: SERIAL_ERROR_START; - SERIAL_ERRORLNPGM("Something is wrong in the MenuStructure."); + SERIAL_ERRORLNPGM(MSG_SERIAL_ERROR_MENU_STRUCTURE); break; } } @@ -2043,12 +2046,12 @@ void MainMenu::update() if(CARDINSERTED) { card.initsd(); - LCD_MESSAGEPGM("Card inserted"); + LCD_MESSAGEPGM(MSG_SD_INSERTED); } else { card.release(); - LCD_MESSAGEPGM("Card removed"); + LCD_MESSAGEPGM(MSG_SD_REMOVED); } } #endif @@ -2223,6 +2226,21 @@ char *ftostr51(const float &x) return conv; } +// convert float to string with +123.45 format +char *ftostr52(const float &x) +{ + int xx=x*100; + conv[0]=(xx>=0)?'+':'-'; + xx=abs(xx); + conv[1]=(xx/10000)%10+'0'; + conv[2]=(xx/1000)%10+'0'; + conv[3]=(xx/100)%10+'0'; + conv[4]='.'; + conv[5]=(xx/10)%10+'0'; + conv[6]=(xx)%10+'0'; + conv[7]=0; + return conv; +} #endif //ULTRA_LCD diff --git a/README.md b/README.md index 11b4be60f0..19bb201281 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,6 @@ -SCUBA82's fork: ------------------ - -The main goal of my fork is porting the brilliant Marlin firmware to GEN7 Boards. -I'm working on a 16MHz GEN7 board and have only tested with this configuration. -But there were reports about successfully running it at 20 MHz. Expect 25% faster moves and maybe some other issues. - -Using lcd and sdcard support on an ATMega644(P) is not possible cause the sketch is way too big for its memory. -I switched to an ATMega1284P which has double size program memory. Unfortunately it's not supported in Arduino IDE out of the box but expect a tutorial on how to compile for it soon. -For the necessary pin breakouts I used Alfons3 design of GEN7 (https://github.com/Alfons3/Generation_7_Electronics) with an additional breakout for pin A0/D31. -I'll publish my desing as soon as possible. - -You have to use different chip fuses to get Marlin running. -The fuses I'm using are lfuse: 0xF7 hfuse: 0xD4 efuse: 0xFD - -For questions take a look into http://forums.reprap.org/read.php?181,118329 or send me an e-mail: christian_thalhammer@gmx.at - - -Expect this fork to be highly experimental. - WARNING: -------- -THIS IS RELEASE CANDIDATE 1 FOR MARLIN 1.0.0 +THIS IS RELEASE CANDIDATE 2 FOR MARLIN 1.0.0 The configuration is now split in two files Configuration.h for the normal settings