From 7b70caab7c4bdc45490d83730b62c5c2ea31e98e Mon Sep 17 00:00:00 2001 From: Bernhard Kubicek Date: Mon, 7 Nov 2011 22:33:13 +0100 Subject: [PATCH 1/8] made progmem mainly, found one bug in cardreader, added a empty class for cardreader in case no sd support. --- Marlin/EEPROMwrite.h | 79 ++- Marlin/Marlin.h | 6 +- Marlin/Marlin.pde | 147 +++-- Marlin/cardreader.h | 31 +- Marlin/cardreader.pde | 23 +- Marlin/pins.h | 1386 ++++++++++++++++++++--------------------- Marlin/ultralcd.pde | 123 ++-- 7 files changed, 944 insertions(+), 851 deletions(-) diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h index db9f2fde17..ae31bc9ec4 100644 --- a/Marlin/EEPROMwrite.h +++ b/Marlin/EEPROMwrite.h @@ -25,6 +25,19 @@ template int EEPROM_readAnything(int &ee, T& value) } //====================================================================================== +#include + +void serialprintPGM(const char *str) +{ + char ch=pgm_read_byte(str); + while(ch) + { + Serial.print(ch); + ch=pgm_read_byte(++str); + } +} +#define SerialprintPGM(x) serialprintPGM(PSTR(x)) + #define EEPROM_OFFSET 100 @@ -62,7 +75,7 @@ void StoreSettings() char ver2[4]=EEPROM_VERSION; i=EEPROM_OFFSET; EEPROM_writeAnything(i,ver2); // validate data - SERIAL_ECHOLN("Settings Stored"); + SerialprintPGM("echo: Settings Stored\n"); } void RetrieveSettings(bool def=false) @@ -91,7 +104,7 @@ void RetrieveSettings(bool def=false) EEPROM_readAnything(i,Ki); EEPROM_readAnything(i,Kd); - SERIAL_ECHOLN("Stored settings retreived:"); + SerialprintPGM("echo: Stored settings retreived:\n"); } else { @@ -111,21 +124,57 @@ void RetrieveSettings(bool def=false) mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; max_xy_jerk=DEFAULT_XYJERK; max_z_jerk=DEFAULT_ZJERK; - SERIAL_ECHOLN("Using Default settings:"); + SerialprintPGM("echo: Using Default settings:\n"); } - SERIAL_ECHOLN("Steps per unit:"); - SERIAL_ECHOLN(" M92 X" <<_FLOAT(axis_steps_per_unit[0],3) << " Y" << _FLOAT(axis_steps_per_unit[1],3) << " Z" << _FLOAT(axis_steps_per_unit[2],3) << " E" << _FLOAT(axis_steps_per_unit[3],3)); - SERIAL_ECHOLN("Maximum feedrates (mm/s):"); - SERIAL_ECHOLN(" M203 X" <<_FLOAT(max_feedrate[0]/60,2)<<" Y" << _FLOAT(max_feedrate[1]/60,2) << " Z" << _FLOAT(max_feedrate[2]/60,2) << " E" << _FLOAT(max_feedrate[3]/60,2)); - SERIAL_ECHOLN("Maximum Acceleration (mm/s2):"); - SERIAL_ECHOLN(" M201 X" <<_FLOAT(max_acceleration_units_per_sq_second[0],0) << " Y" << _FLOAT(max_acceleration_units_per_sq_second[1],0) << " Z" << _FLOAT(max_acceleration_units_per_sq_second[2],0) << " E" << _FLOAT(max_acceleration_units_per_sq_second[3],0)); - SERIAL_ECHOLN("Acceleration: S=acceleration, T=retract acceleration"); - SERIAL_ECHOLN(" M204 S" <<_FLOAT(acceleration,2) << " T" << _FLOAT(retract_acceleration,2)); - SERIAL_ECHOLN("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)"); - SERIAL_ECHOLN(" M205 S" <<_FLOAT(minimumfeedrate/60,2) << " T" << _FLOAT(mintravelfeedrate/60,2) << " B" << _FLOAT(minsegmenttime,2) << " X" << _FLOAT(max_xy_jerk/60,2) << " Z" << _FLOAT(max_z_jerk/60,2)); + SerialprintPGM("echo: Steps per unit:\n M92 X"); + Serial.print(axis_steps_per_unit[0]); + SerialprintPGM(" Y"); + Serial.print(axis_steps_per_unit[1]); + SerialprintPGM(" Z"); + Serial.print(axis_steps_per_unit[2]); + SerialprintPGM(" E"); + Serial.print(axis_steps_per_unit[3]); + + SerialprintPGM("\nMaximum feedrates (mm/s):\n M203 X" ); + Serial.print(max_feedrate[0]/60); + SerialprintPGM(" Y" ); + Serial.print(max_feedrate[1]/60 ); + SerialprintPGM(" Z" ); + Serial.print(max_feedrate[2]/60 ); + SerialprintPGM(" E" ); + Serial.print(max_feedrate[3]/60); + SerialprintPGM("\nMaximum Acceleration (mm/s2):\n M201 X" ); + Serial.print(max_acceleration_units_per_sq_second[0] ); + SerialprintPGM(" Y" ); + Serial.print(max_acceleration_units_per_sq_second[1] ); + SerialprintPGM(" Z" ); + Serial.print(max_acceleration_units_per_sq_second[2] ); + SerialprintPGM(" E" ); + Serial.print(max_acceleration_units_per_sq_second[3]); + SerialprintPGM("\necho: Acceleration: S=acceleration, T=retract acceleration\n M204 S" ); + Serial.print(acceleration ); + SerialprintPGM(" T" ); + Serial.print(retract_acceleration); + SerialprintPGM("\necho: Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)"); + SerialprintPGM(" M205 S" ); + Serial.print(minimumfeedrate/60 ); + SerialprintPGM(" T" ); + Serial.print(mintravelfeedrate/60 ); + SerialprintPGM(" B" ); + Serial.print(minsegmenttime ); + SerialprintPGM(" X" ); + Serial.print(max_xy_jerk/60 ); + SerialprintPGM(" Z" ); + Serial.print(max_z_jerk/60); + SerialprintPGM("\n" ); #ifdef PIDTEMP - SERIAL_ECHOLN("PID settings:"); - SERIAL_ECHOLN(" M301 P" << _FLOAT(Kp,3) << " I" << _FLOAT(Ki,3) << " D" << _FLOAT(Kd,3)); + SerialprintPGM("PID settings:"); + SerialprintPGM(" M301 P" ); + Serial.print(Kp ); + SerialprintPGM(" I" ); + Serial.print(Ki ); + SerialprintPGM(" D" ); + Serial.print(Kd); #endif } diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 21eadeeb5e..61b56fb97c 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -9,8 +9,10 @@ #include "streaming.h" #define SERIAL_ECHO(x) Serial << "echo: " << x; #define SERIAL_ECHOLN(x) Serial << "echo: "< -1) || defined (HEATER_USES_AD595) tt = degHotend0(); #endif @@ -620,21 +637,21 @@ inline void process_commands() bt = degBed(); #endif #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595) - Serial.print("ok T:"); - Serial.print(tt); + SERIAL_PROTOCOL("ok T:"); + SERIAL_PROTOCOL(tt); #if TEMP_1_PIN > -1 #ifdef PIDTEMP - Serial.print(" B:"); + SERIAL_PROTOCOL(" B:"); #if TEMP_1_PIN > -1 - Serial.println(bt); + SERIAL_PROTOCOLLN(bt); #else - Serial.println(HeaterPower); + SERIAL_PROTOCOLLN(HeaterPower); #endif #else //not PIDTEMP - Serial.println(); + SERIAL_PROTOCOLLN(""); #endif //PIDTEMP #else - Serial.println(); + SERIAL_PROTOCOLLN(""); #endif //TEMP_1_PIN #else SERIAL_ERRORLN("No thermistors - no temp"); @@ -664,8 +681,7 @@ inline void process_commands() #endif //TEMP_RESIDENCY_TIME if( (millis() - codenum) > 1000 ) { //Print Temp Reading every 1 second while heating up/cooling down - Serial.print("T:"); - Serial.println( degHotend0() ); + SERIAL_PROTOCOLLN("T:"<< degHotend0() ); codenum = millis(); } manage_heater(); @@ -694,12 +710,8 @@ inline void process_commands() if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. { float tt=degHotend0(); - Serial.print("T:"); - Serial.println( tt ); - Serial.print("ok T:"); - Serial.print( tt ); - Serial.print(" B:"); - Serial.println( degBed() ); + SERIAL_PROTOCOLLN("T:"< -1) - Serial.print("x_min:"); - Serial.print((READ(X_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("x_min:"); + SERIAL_PROTOCOL(((READ(X_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (X_MAX_PIN > -1) - Serial.print("x_max:"); - Serial.print((READ(X_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("x_max:"); + SERIAL_PROTOCOL(((READ(X_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Y_MIN_PIN > -1) - Serial.print("y_min:"); - Serial.print((READ(Y_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("y_min:"); + SERIAL_PROTOCOL(((READ(Y_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Y_MAX_PIN > -1) - Serial.print("y_max:"); - Serial.print((READ(Y_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("y_max:"); + SERIAL_PROTOCOL(((READ(Y_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Z_MIN_PIN > -1) - Serial.print("z_min:"); - Serial.print((READ(Z_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("z_min:"); + SERIAL_PROTOCOL(((READ(Z_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Z_MAX_PIN > -1) - Serial.print("z_max:"); - Serial.print((READ(Z_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "); + SERIAL_PROTOCOL("z_max:"); + SERIAL_PROTOCOL(((READ(Z_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif - Serial.println(""); + SERIAL_PROTOCOLLN(""); break; //TODO: update for all axis, use for loop case 201: // M201 @@ -885,9 +897,7 @@ inline void process_commands() } else { - Serial.print("echo: Unknown command:\""); - Serial.print(cmdbuffer[bufindr]); - Serial.println("\""); + SERIAL_ECHOLN("Unknown command:\""<=filesize ;}; - inline char get() { int16_t n = file.read(); return (n!=-1)?(char)n:'\n';}; + inline char get() { int16_t n = file.read(); return (n==-1)?'\n':(char)n;}; inline void setIndex(long index) {sdpos = index;file.seekSet(index);}; public: @@ -52,6 +52,35 @@ private: bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware. }; + +#else +class CardReader +{ +public: + inline CardReader(){}; + + inline static void initsd(){}; + inline static void write_command(char *buf){}; + + inline static void checkautostart(bool x) {}; + + inline static void closefile() {}; + inline static void release(){}; + inline static void startFileprint(){}; + inline static void startFilewrite(char *name){}; + inline static void pauseSDPrint(){}; + inline static void getStatus(){}; + + inline static void selectFile(char* name){}; + inline static void getfilename(const uint8_t nr){}; + inline static uint8_t getnrfilenames(){return 0;}; + + + inline static void ls() {}; + inline static bool eof() {return true;}; + inline static char get() {return 0;}; + inline static void setIndex(){}; +}; #endif //SDSUPPORT diff --git a/Marlin/cardreader.pde b/Marlin/cardreader.pde index a49b9999f6..cd4bfeb7ab 100644 --- a/Marlin/cardreader.pde +++ b/Marlin/cardreader.pde @@ -76,17 +76,14 @@ void CardReader::selectFile(char* name) file.close(); if (file.open(&root, name, O_READ)) { - Serial.print("File opened:"); - Serial.print(name); - Serial.print(" Size:"); filesize = file.fileSize(); - Serial.println(filesize); + SERIAL_PROTOCOLLN("File opened:"< Boards' menu. -#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 E_STEP_PIN 12 -#define E_DIR_PIN 16 -#define E_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 TEMP_0_PIN 4 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define HEATER_1_PIN -1 -#define HEATER_2_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) */ - - - -#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. -#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 24 -#define Y_MIN_PIN 25 -#define Y_MAX_PIN 26 - -#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 - -#define E_STEP_PIN 17 -#define E_DIR_PIN 16 -#define E_ENABLE_PIN -1 - -#define SDPOWER -1 -#define SDSS 4 -#define LED_PIN 0 - -#define SD_CARD_WRITE 2 -#define SD_CARD_DETECT 3 -#define SD_CARD_SELECT 4 - -//our RS485 pins -#define TX_ENABLE_PIN 12 -#define RX_ENABLE_PIN 13 - -//pin for controlling the PSU. -#define PS_ON_PIN 14 - -#define FAN_PIN -1 -#define KILL_PIN -1 - -#define HEATER_0_PIN -1 -#define TEMP_0_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 - - - -#endif - -/**************************************************************************************** -* Arduino Mega pin assignment -* -****************************************************************************************/ -#if MOTHERBOARD == 33 -#define MOTHERBOARD 3 -#define RAMPS_V_1_3 -#endif -#if MOTHERBOARD == 3 -#define KNOWN_BOARD 1 - -//////////////////FIX THIS////////////// -#ifndef __AVR_ATmega1280__ - #ifndef __AVR_ATmega2560__ - #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. - #endif -#endif - -// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1 -// #define RAMPS_V_1_3 -// #define RAMPS_V_1_0 - -#ifdef RAMPS_V_1_3 - -#define X_STEP_PIN 54 -#define X_DIR_PIN 55 -#define X_ENABLE_PIN 38 -#define X_MIN_PIN 3 -#define X_MAX_PIN -1 //2 //Max endstops default to disabled "-1", set to commented value to enable. - -#define Y_STEP_PIN 60 -#define Y_DIR_PIN 61 -#define Y_ENABLE_PIN 56 -#define Y_MIN_PIN 14 -#define Y_MAX_PIN -1 //15 - -#define Z_STEP_PIN 46 -#define Z_DIR_PIN 48 -#define Z_ENABLE_PIN 62 -#define Z_MIN_PIN 18 -#define Z_MAX_PIN -1 //19 - -#define E_STEP_PIN 26 -#define E_DIR_PIN 28 -#define E_ENABLE_PIN 24 - -#define SDPOWER -1 -#define SDSS 53 -#define LED_PIN 13 -#define FAN_PIN 9 -#define PS_ON_PIN 12 -#define KILL_PIN -1 - -#define HEATER_0_PIN 10 -#define HEATER_1_PIN 8 -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 13 // ANALOG NUMBERING -#define TEMP_1_PIN 14 // ANALOG NUMBERING -#define TEMP_2_PIN -1 // ANALOG NUMBERING - - -#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default - -#define X_STEP_PIN 26 -#define X_DIR_PIN 28 -#define X_ENABLE_PIN 24 -#define X_MIN_PIN 3 -#define X_MAX_PIN -1 //2 - -#define Y_STEP_PIN 38 -#define Y_DIR_PIN 40 -#define Y_ENABLE_PIN 36 -#define Y_MIN_PIN 16 -#define Y_MAX_PIN -1 //17 - -#define Z_STEP_PIN 44 -#define Z_DIR_PIN 46 -#define Z_ENABLE_PIN 42 -#define Z_MIN_PIN 18 -#define Z_MAX_PIN -1 //19 - -#define E_STEP_PIN 32 -#define E_DIR_PIN 34 -#define E_ENABLE_PIN 30 - -#define SDPOWER 48 -#define SDSS 53 -#define LED_PIN 13 -#define PS_ON_PIN -1 -#define KILL_PIN -1 - - - -#ifdef RAMPS_V_1_0 // RAMPS_V_1_0 - #define HEATER_0_PIN 12 // RAMPS 1.0 - #define HEATER_1_PIN -1 // RAMPS 1.0 - #define FAN_PIN 11 // RAMPS 1.0 - -#else // RAMPS_V_1_1 or RAMPS_V_1_2 - #define HEATER_0_PIN 10 // RAMPS 1.1 - #define HEATER_1_PIN 8 // RAMPS 1.1 - #define FAN_PIN 9 // RAMPS 1.1 -#endif -#define HEATER_2_PIN -1 -#define TEMP_0_PIN 2 // 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!!!!!!!!! -#endif - -// SPI for Max6675 Thermocouple - -#ifndef SDSUPPORT -// these pins are defined in the SD library if building with SD support #define SCK_PIN 52 - #define MISO_PIN 50 - #define MOSI_PIN 51 - #define MAX6675_SS 53 -#else - #define MAX6675_SS 49 -#endif - - -#endif -/**************************************************************************************** -* Duemilanove w/ ATMega328P pin assignment -* -****************************************************************************************/ -#if MOTHERBOARD == 4 -#define KNOWN_BOARD 1 - -#ifndef __AVR_ATmega328P__ -#error Oops! Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu. -#endif - -#define X_STEP_PIN 19 -#define X_DIR_PIN 18 -#define X_ENABLE_PIN -1 -#define X_MIN_PIN 17 -#define X_MAX_PIN -1 - -#define Y_STEP_PIN 10 -#define Y_DIR_PIN 7 -#define Y_ENABLE_PIN -1 -#define Y_MIN_PIN 8 -#define Y_MAX_PIN -1 - -#define Z_STEP_PIN 13 -#define Z_DIR_PIN 3 -#define Z_ENABLE_PIN 2 -#define Z_MIN_PIN 4 -#define Z_MAX_PIN -1 - -#define E_STEP_PIN 11 -#define E_DIR_PIN 12 -#define E_ENABLE_PIN -1 - -#define SDPOWER -1 -#define SDSS -1 -#define LED_PIN -1 -#define FAN_PIN 5 -#define PS_ON_PIN -1 -#define KILL_PIN -1 - -#define HEATER_0_PIN 6 -#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! -#define HEATER_1_PIN -1 -#define HEATER_2_PIN -1 - -#endif - -/**************************************************************************************** -* Gen6 pin assignment -* -****************************************************************************************/ -#if MOTHERBOARD == 5 -#define KNOWN_BOARD 1 - -#ifndef __AVR_ATmega644P__ - #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. -#endif - -//x axis pins - #define X_STEP_PIN 15 - #define X_DIR_PIN 18 - #define X_ENABLE_PIN 19 - #define X_MIN_PIN 20 - #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 25 - #define Y_MAX_PIN -1 - - //z axis pins - #define Z_STEP_PIN 27 - #define Z_DIR_PIN 28 - #define Z_ENABLE_PIN 29 - #define Z_MIN_PIN 30 - #define Z_MAX_PIN -1 - - //extruder pins - #define E_STEP_PIN 4 //Edited @ EJE Electronics 20100715 - #define E_DIR_PIN 2 //Edited @ EJE Electronics 20100715 - #define E_ENABLE_PIN 3 //Added @ EJE Electronics 20100715 - #define TEMP_0_PIN 5 //changed @ rkoeppl 20110410 - #define HEATER_0_PIN 14 //changed @ rkoeppl 20110410 - #define HEATER_1_PIN -1 //changed @ rkoeppl 20110410 - #define HEATER_2_PIN -1 - - #define SDPOWER -1 - #define SDSS 17 - #define LED_PIN -1 //changed @ rkoeppl 20110410 - #define TEMP_1_PIN -1 //changed @ rkoeppl 20110410 - #define TEMP_2_PIN -1 - #define FAN_PIN -1 //changed @ rkoeppl 20110410 - #define PS_ON_PIN -1 //changed @ rkoeppl 20110410 - //our pin for debugging. - - #define DEBUG_PIN 0 - - //our RS485 pins - #define TX_ENABLE_PIN 12 - #define RX_ENABLE_PIN 13 - -#endif - -/**************************************************************************************** -* Sanguinololu pin assignment -* -****************************************************************************************/ -#if MOTHERBOARD == 62 -#define MOTHERBOARD 6 -#define SANGUINOLOLU_V_1_2 -#endif -#if MOTHERBOARD == 6 -#define KNOWN_BOARD 1 -#ifndef __AVR_ATmega644P__ -#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. -#endif - -#define X_STEP_PIN 15 -#define X_DIR_PIN 21 -#define X_MIN_PIN 18 -#define X_MAX_PIN -2 - -#define Y_STEP_PIN 22 -#define Y_DIR_PIN 23 -#define Y_MIN_PIN 19 -#define Y_MAX_PIN -1 - -#define Z_STEP_PIN 3 -#define Z_DIR_PIN 2 -#define Z_MIN_PIN 20 -#define Z_MAX_PIN -1 - -#define E_STEP_PIN 1 -#define E_DIR_PIN 0 - -#define LED_PIN -1 - -#define FAN_PIN -1 - -#define PS_ON_PIN -1 -#define KILL_PIN -1 - -#define HEATER_0_PIN 13 // (extruder) - -#ifdef SANGUINOLOLU_V_1_2 - -#define HEATER_1_PIN 12 // (bed) -#define X_ENABLE_PIN 14 -#define Y_ENABLE_PIN 14 -#define Z_ENABLE_PIN 26 -#define E_ENABLE_PIN 14 - -#else - -#define HEATER_1_PIN 14 // (bed) -#define X_ENABLE_PIN -1 -#define Y_ENABLE_PIN -1 -#define Z_ENABLE_PIN -1 -#define E_ENABLE_PIN -1 - -#endif - -#define TEMP_0_PIN 7 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder) -#define TEMP_1_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) -#define TEMP_2_PIN -1 -#define SDPOWER -1 -#define SDSS 31 -#define HEATER_2_PIN -1 - -#endif - - -#if MOTHERBOARD == 7 -#define KNOWN_BOARD -/***************************************************************** -* Ultimaker pin assignment -******************************************************************/ - -#ifndef __AVR_ATmega1280__ - #ifndef __AVR_ATmega2560__ - #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. - #endif -#endif - -#define X_STEP_PIN 25 -#define X_DIR_PIN 23 -#define X_MIN_PIN 22 -#define X_MAX_PIN 24 -#define X_ENABLE_PIN 27 - -#define Y_STEP_PIN 31 -#define Y_DIR_PIN 33 -#define Y_MIN_PIN 26 -#define Y_MAX_PIN 28 -#define Y_ENABLE_PIN 29 - -#define Z_STEP_PIN 37 -#define Z_DIR_PIN 39 -#define Z_MIN_PIN 30 -#define Z_MAX_PIN 32 -#define Z_ENABLE_PIN 35 - -#define HEATER_1_PIN 4 -#define TEMP_1_PIN 11 - -#define EXTRUDER_0_STEP_PIN 43 -#define EXTRUDER_0_DIR_PIN 45 -#define EXTRUDER_0_ENABLE_PIN 41 -#define HEATER_0_PIN 2 -#define TEMP_0_PIN 8 - -#define EXTRUDER_1_STEP_PIN 49 -#define EXTRUDER_1_DIR_PIN 47 -#define EXTRUDER_1_ENABLE_PIN 51 -#define EXTRUDER_1_HEATER_PIN 3 -#define EXTRUDER_1_TEMPERATURE_PIN 10 -#define HEATER_2_PIN 51 -#define TEMP_2_PIN 3 - - - -#define E_STEP_PIN EXTRUDER_0_STEP_PIN -#define E_DIR_PIN EXTRUDER_0_DIR_PIN -#define E_ENABLE_PIN EXTRUDER_0_ENABLE_PIN - -#define SDPOWER -1 -#define SDSS 53 -#define LED_PIN 13 -#define FAN_PIN 7 -#define PS_ON_PIN 12 -#define KILL_PIN -1 - -#ifdef ULTRA_LCD - - #ifdef NEWPANEL - //arduino pin witch triggers an piezzo beeper - #define BEEPER 18 - - #define LCD_PINS_RS 20 - #define LCD_PINS_ENABLE 17 - #define LCD_PINS_D4 16 - #define LCD_PINS_D5 21 - #define LCD_PINS_D6 5 - #define LCD_PINS_D7 6 - - //buttons are directly attached - #define BTN_EN1 40 - #define BTN_EN2 42 - #define BTN_ENC 19 //the click - - #define BLEN_C 2 - #define BLEN_B 1 - #define BLEN_A 0 - - #define SDCARDDETECT 38 - - //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 18 - - //buttons are attached to a shift register - #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 5 - #define LCD_PINS_D4 6 - #define LCD_PINS_D5 21 - #define LCD_PINS_D6 20 - #define LCD_PINS_D7 19 - - //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 - -#endif - -/**************************************************************************************** -* Teensylu 0.7 pin assingments (ATMEGA90USB) -* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! -****************************************************************************************/ -#if MOTHERBOARD == 8 -#define MOTHERBOARD 8 -#define KNOWN_BOARD 1 - - -#define X_STEP_PIN 0 -#define X_DIR_PIN 1 -#define X_ENABLE_PIN 39 -#define X_MIN_PIN 13 -#define X_MAX_PIN -1 - -#define Y_STEP_PIN 2 -#define Y_DIR_PIN 3 -#define Y_ENABLE_PIN 38 -#define Y_MIN_PIN 14 -#define Y_MAX_PIN -1 - -#define Z_STEP_PIN 4 -#define Z_DIR_PIN 5 -#define Z_ENABLE_PIN 23 -#define Z_MIN_PIN 15 -#define Z_MAX_PIN -1 - -#define E_STEP_PIN 6 -#define E_DIR_PIN 7 -#define E_ENABLE_PIN 19 - - - -#define HEATER_0_PIN 21 // Extruder -#define HEATER_1_PIN 20 // Bed -#define HEATER_2_PIN -1 -#define FAN_PIN 22 // Fan - -#define TEMP_0_PIN 7 // Extruder -#define TEMP_1_PIN 6 // Bed -#define TEMP_2_PIN -1 - -#define SDPOWER -1 -#define SDSS 8 -#define LED_PIN -1 -#define PS_ON_PIN -1 -#define KILL_PIN -1 -#define ALARM_PIN -1 - -#ifndef SDSUPPORT -// these pins are defined in the SD library if building with SD support - #define SCK_PIN 9 - #define MISO_PIN 11 - #define MOSI_PIN 10 -#endif -#endif - -#ifndef KNOWN_BOARD -#error Unknown MOTHERBOARD value in configuration.h -#endif - -//List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those! -#define SENSITIVE_PINS {0, 1, X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, E_STEP_PIN, E_DIR_PIN, E_ENABLE_PIN, LED_PIN, PS_ON_PIN, HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, FAN_PIN, TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN} - +#ifndef PINS_H +#define PINS_H + +/**************************************************************************************** +* 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 E_STEP_PIN 11 +#define E_DIR_PIN 12 +#define E_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 TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define HEATER_1_PIN -1 +#define HEATER_2_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 +* +--------+ +* +****************************************************************************************/ +#if MOTHERBOARD == 1 +#define KNOWN_BOARD 1 + +#ifndef __AVR_ATmega644P__ +#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#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 E_STEP_PIN 12 +#define E_DIR_PIN 16 +#define E_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 TEMP_0_PIN 4 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define HEATER_1_PIN -1 +#define HEATER_2_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) */ + + + +#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. +#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 24 +#define Y_MIN_PIN 25 +#define Y_MAX_PIN 26 + +#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 + +#define E_STEP_PIN 17 +#define E_DIR_PIN 16 +#define E_ENABLE_PIN -1 + +#define SDPOWER -1 +#define SDSS 4 +#define LED_PIN 0 + +#define SD_CARD_WRITE 2 +#define SD_CARD_DETECT 3 +#define SD_CARD_SELECT 4 + +//our RS485 pins +#define TX_ENABLE_PIN 12 +#define RX_ENABLE_PIN 13 + +//pin for controlling the PSU. +#define PS_ON_PIN 14 + +#define FAN_PIN -1 +#define KILL_PIN -1 + +#define HEATER_0_PIN -1 +#define TEMP_0_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define HEATER_1_PIN -1 +#define HEATER_2_PIN -1 + + + +#endif + +/**************************************************************************************** +* Arduino Mega pin assignment +* +****************************************************************************************/ +#if MOTHERBOARD == 33 +#define MOTHERBOARD 3 +#define RAMPS_V_1_3 +#endif +#if MOTHERBOARD == 3 +#define KNOWN_BOARD 1 + +//////////////////FIX THIS////////////// +#ifndef __AVR_ATmega1280__ + #ifndef __AVR_ATmega2560__ + #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. + #endif +#endif + +// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1 +// #define RAMPS_V_1_3 +// #define RAMPS_V_1_0 + +#ifdef RAMPS_V_1_3 + +#define X_STEP_PIN 54 +#define X_DIR_PIN 55 +#define X_ENABLE_PIN 38 +#define X_MIN_PIN 3 +#define X_MAX_PIN -1 //2 //Max endstops default to disabled "-1", set to commented value to enable. + +#define Y_STEP_PIN 60 +#define Y_DIR_PIN 61 +#define Y_ENABLE_PIN 56 +#define Y_MIN_PIN 14 +#define Y_MAX_PIN -1 //15 + +#define Z_STEP_PIN 46 +#define Z_DIR_PIN 48 +#define Z_ENABLE_PIN 62 +#define Z_MIN_PIN 18 +#define Z_MAX_PIN -1 //19 + +#define E_STEP_PIN 26 +#define E_DIR_PIN 28 +#define E_ENABLE_PIN 24 + +#define SDPOWER -1 +#define SDSS 53 +#define LED_PIN 13 +#define FAN_PIN 9 +#define PS_ON_PIN 12 +#define KILL_PIN -1 + +#define HEATER_0_PIN 10 +#define HEATER_1_PIN 8 +#define HEATER_2_PIN -1 +#define TEMP_0_PIN 13 // ANALOG NUMBERING +#define TEMP_1_PIN 14 // ANALOG NUMBERING +#define TEMP_2_PIN -1 // ANALOG NUMBERING + + +#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default + +#define X_STEP_PIN 26 +#define X_DIR_PIN 28 +#define X_ENABLE_PIN 24 +#define X_MIN_PIN 3 +#define X_MAX_PIN -1 //2 + +#define Y_STEP_PIN 38 +#define Y_DIR_PIN 40 +#define Y_ENABLE_PIN 36 +#define Y_MIN_PIN 16 +#define Y_MAX_PIN -1 //17 + +#define Z_STEP_PIN 44 +#define Z_DIR_PIN 46 +#define Z_ENABLE_PIN 42 +#define Z_MIN_PIN 18 +#define Z_MAX_PIN -1 //19 + +#define E_STEP_PIN 32 +#define E_DIR_PIN 34 +#define E_ENABLE_PIN 30 + +#define SDPOWER 48 +#define SDSS 53 +#define LED_PIN 13 +#define PS_ON_PIN -1 +#define KILL_PIN -1 + + + +#ifdef RAMPS_V_1_0 // RAMPS_V_1_0 + #define HEATER_0_PIN 12 // RAMPS 1.0 + #define HEATER_1_PIN -1 // RAMPS 1.0 + #define FAN_PIN 11 // RAMPS 1.0 + +#else // RAMPS_V_1_1 or RAMPS_V_1_2 + #define HEATER_0_PIN 10 // RAMPS 1.1 + #define HEATER_1_PIN 8 // RAMPS 1.1 + #define FAN_PIN 9 // RAMPS 1.1 +#endif +#define HEATER_2_PIN -1 +#define TEMP_0_PIN 2 // 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!!!!!!!!! +#endif + +// SPI for Max6675 Thermocouple + +#ifndef SDSUPPORT +// these pins are defined in the SD library if building with SD support #define SCK_PIN 52 + #define MISO_PIN 50 + #define MOSI_PIN 51 + #define MAX6675_SS 53 +#else + #define MAX6675_SS 49 +#endif + + +#endif +/**************************************************************************************** +* Duemilanove w/ ATMega328P pin assignment +* +****************************************************************************************/ +#if MOTHERBOARD == 4 +#define KNOWN_BOARD 1 + +#ifndef __AVR_ATmega328P__ +#error Oops! Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu. +#endif + +#define X_STEP_PIN 19 +#define X_DIR_PIN 18 +#define X_ENABLE_PIN -1 +#define X_MIN_PIN 17 +#define X_MAX_PIN -1 + +#define Y_STEP_PIN 10 +#define Y_DIR_PIN 7 +#define Y_ENABLE_PIN -1 +#define Y_MIN_PIN 8 +#define Y_MAX_PIN -1 + +#define Z_STEP_PIN 13 +#define Z_DIR_PIN 3 +#define Z_ENABLE_PIN 2 +#define Z_MIN_PIN 4 +#define Z_MAX_PIN -1 + +#define E_STEP_PIN 11 +#define E_DIR_PIN 12 +#define E_ENABLE_PIN -1 + +#define SDPOWER -1 +#define SDSS -1 +#define LED_PIN -1 +#define FAN_PIN 5 +#define PS_ON_PIN -1 +#define KILL_PIN -1 + +#define HEATER_0_PIN 6 +#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! +#define HEATER_1_PIN -1 +#define HEATER_2_PIN -1 + +#endif + +/**************************************************************************************** +* Gen6 pin assignment +* +****************************************************************************************/ +#if MOTHERBOARD == 5 +#define KNOWN_BOARD 1 + +#ifndef __AVR_ATmega644P__ + #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#endif + +//x axis pins + #define X_STEP_PIN 15 + #define X_DIR_PIN 18 + #define X_ENABLE_PIN 19 + #define X_MIN_PIN 20 + #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 25 + #define Y_MAX_PIN -1 + + //z axis pins + #define Z_STEP_PIN 27 + #define Z_DIR_PIN 28 + #define Z_ENABLE_PIN 29 + #define Z_MIN_PIN 30 + #define Z_MAX_PIN -1 + + //extruder pins + #define E_STEP_PIN 4 //Edited @ EJE Electronics 20100715 + #define E_DIR_PIN 2 //Edited @ EJE Electronics 20100715 + #define E_ENABLE_PIN 3 //Added @ EJE Electronics 20100715 + #define TEMP_0_PIN 5 //changed @ rkoeppl 20110410 + #define HEATER_0_PIN 14 //changed @ rkoeppl 20110410 + #define HEATER_1_PIN -1 //changed @ rkoeppl 20110410 + #define HEATER_2_PIN -1 + + #define SDPOWER -1 + #define SDSS 17 + #define LED_PIN -1 //changed @ rkoeppl 20110410 + #define TEMP_1_PIN -1 //changed @ rkoeppl 20110410 + #define TEMP_2_PIN -1 + #define FAN_PIN -1 //changed @ rkoeppl 20110410 + #define PS_ON_PIN -1 //changed @ rkoeppl 20110410 + //our pin for debugging. + + #define DEBUG_PIN 0 + + //our RS485 pins + #define TX_ENABLE_PIN 12 + #define RX_ENABLE_PIN 13 + +#endif + +/**************************************************************************************** +* Sanguinololu pin assignment +* +****************************************************************************************/ +#if MOTHERBOARD == 62 +#define MOTHERBOARD 6 +#define SANGUINOLOLU_V_1_2 +#endif +#if MOTHERBOARD == 6 +#define KNOWN_BOARD 1 +#ifndef __AVR_ATmega644P__ +#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. +#endif + +#define X_STEP_PIN 15 +#define X_DIR_PIN 21 +#define X_MIN_PIN 18 +#define X_MAX_PIN -2 + +#define Y_STEP_PIN 22 +#define Y_DIR_PIN 23 +#define Y_MIN_PIN 19 +#define Y_MAX_PIN -1 + +#define Z_STEP_PIN 3 +#define Z_DIR_PIN 2 +#define Z_MIN_PIN 20 +#define Z_MAX_PIN -1 + +#define E_STEP_PIN 1 +#define E_DIR_PIN 0 + +#define LED_PIN -1 + +#define FAN_PIN -1 + +#define PS_ON_PIN -1 +#define KILL_PIN -1 + +#define HEATER_0_PIN 13 // (extruder) + +#ifdef SANGUINOLOLU_V_1_2 + +#define HEATER_1_PIN 12 // (bed) +#define X_ENABLE_PIN 14 +#define Y_ENABLE_PIN 14 +#define Z_ENABLE_PIN 26 +#define E_ENABLE_PIN 14 + +#else + +#define HEATER_1_PIN 14 // (bed) +#define X_ENABLE_PIN -1 +#define Y_ENABLE_PIN -1 +#define Z_ENABLE_PIN -1 +#define E_ENABLE_PIN -1 + +#endif + +#define TEMP_0_PIN 7 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder) +#define TEMP_1_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) +#define TEMP_2_PIN -1 +#define SDPOWER -1 +#define SDSS 31 +#define HEATER_2_PIN -1 + +#endif + + +#if MOTHERBOARD == 7 +#define KNOWN_BOARD +/***************************************************************** +* Ultimaker pin assignment +******************************************************************/ + +#ifndef __AVR_ATmega1280__ + #ifndef __AVR_ATmega2560__ + #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. + #endif +#endif + +#define X_STEP_PIN 25 +#define X_DIR_PIN 23 +#define X_MIN_PIN 22 +#define X_MAX_PIN 24 +#define X_ENABLE_PIN 27 + +#define Y_STEP_PIN 31 +#define Y_DIR_PIN 33 +#define Y_MIN_PIN 26 +#define Y_MAX_PIN 28 +#define Y_ENABLE_PIN 29 + +#define Z_STEP_PIN 37 +#define Z_DIR_PIN 39 +#define Z_MIN_PIN 30 +#define Z_MAX_PIN 32 +#define Z_ENABLE_PIN 35 + +#define HEATER_1_PIN 4 +#define TEMP_1_PIN 11 + +#define EXTRUDER_0_STEP_PIN 43 +#define EXTRUDER_0_DIR_PIN 45 +#define EXTRUDER_0_ENABLE_PIN 41 +#define HEATER_0_PIN 2 +#define TEMP_0_PIN 8 + +#define EXTRUDER_1_STEP_PIN 49 +#define EXTRUDER_1_DIR_PIN 47 +#define EXTRUDER_1_ENABLE_PIN 51 +#define EXTRUDER_1_HEATER_PIN 3 +#define EXTRUDER_1_TEMPERATURE_PIN 10 +#define HEATER_2_PIN 51 +#define TEMP_2_PIN 3 + + + +#define E_STEP_PIN EXTRUDER_0_STEP_PIN +#define E_DIR_PIN EXTRUDER_0_DIR_PIN +#define E_ENABLE_PIN EXTRUDER_0_ENABLE_PIN + +#define SDPOWER -1 +#define SDSS 53 +#define LED_PIN 13 +#define FAN_PIN 7 +#define PS_ON_PIN 12 +#define KILL_PIN -1 + +#ifdef ULTRA_LCD + + #ifdef NEWPANEL + //arduino pin witch triggers an piezzo beeper + #define BEEPER 18 + + #define LCD_PINS_RS 20 + #define LCD_PINS_ENABLE 17 + #define LCD_PINS_D4 16 + #define LCD_PINS_D5 21 + #define LCD_PINS_D6 5 + #define LCD_PINS_D7 6 + + //buttons are directly attached + #define BTN_EN1 40 + #define BTN_EN2 42 + #define BTN_ENC 19 //the click + + #define BLEN_C 2 + #define BLEN_B 1 + #define BLEN_A 0 + + #define SDCARDDETECT 38 + + //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 18 + + //buttons are attached to a shift register + #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 5 + #define LCD_PINS_D4 6 + #define LCD_PINS_D5 21 + #define LCD_PINS_D6 20 + #define LCD_PINS_D7 19 + + //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 + +#endif + +/**************************************************************************************** +* Teensylu 0.7 pin assingments (ATMEGA90USB) +* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! +****************************************************************************************/ +#if MOTHERBOARD == 8 +#define MOTHERBOARD 8 +#define KNOWN_BOARD 1 + + +#define X_STEP_PIN 0 +#define X_DIR_PIN 1 +#define X_ENABLE_PIN 39 +#define X_MIN_PIN 13 +#define X_MAX_PIN -1 + +#define Y_STEP_PIN 2 +#define Y_DIR_PIN 3 +#define Y_ENABLE_PIN 38 +#define Y_MIN_PIN 14 +#define Y_MAX_PIN -1 + +#define Z_STEP_PIN 4 +#define Z_DIR_PIN 5 +#define Z_ENABLE_PIN 23 +#define Z_MIN_PIN 15 +#define Z_MAX_PIN -1 + +#define E_STEP_PIN 6 +#define E_DIR_PIN 7 +#define E_ENABLE_PIN 19 + + + +#define HEATER_0_PIN 21 // Extruder +#define HEATER_1_PIN 20 // Bed +#define HEATER_2_PIN -1 +#define FAN_PIN 22 // Fan + +#define TEMP_0_PIN 7 // Extruder +#define TEMP_1_PIN 6 // Bed +#define TEMP_2_PIN -1 + +#define SDPOWER -1 +#define SDSS 8 +#define LED_PIN -1 +#define PS_ON_PIN -1 +#define KILL_PIN -1 +#define ALARM_PIN -1 + +#ifndef SDSUPPORT +// these pins are defined in the SD library if building with SD support + #define SCK_PIN 9 + #define MISO_PIN 11 + #define MOSI_PIN 10 +#endif +#endif + +#ifndef KNOWN_BOARD +#error Unknown MOTHERBOARD value in configuration.h +#endif + +//List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those! +#define SENSITIVE_PINS {0, 1, X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, E_STEP_PIN, E_DIR_PIN, E_ENABLE_PIN, LED_PIN, PS_ON_PIN, HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, FAN_PIN, TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN} + #endif diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 981aa81470..91d1a54a80 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -42,6 +42,19 @@ static long previous_millis_buttons=0; static MainMenu menu; +#include + +void lcdProgMemprint(const char *str) +{ + char ch=pgm_read_byte(str); + while(ch) + { + lcd.print(ch); + ch=pgm_read_byte(++str); + } +} +#define lcdprintPGM(x) lcdProgMemprint(PSTR(x)) + //=========================================================================== //=============================functions ============================ @@ -264,9 +277,9 @@ void MainMenu::showStatus() feedmultiplychanged=false; encoderpos=feedmultiply; clear(); - lcd.setCursor(0,0);lcd.print("\002123/567\001 "); + lcd.setCursor(0,0);lcdprintPGM("\002123/567\001 "); #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 - lcd.setCursor(10,0);lcd.print("B123/567\001 "); + lcd.setCursor(10,0);lcdprintPGM("B123/567\001 "); #endif } @@ -311,7 +324,7 @@ void MainMenu::showStatus() if(starttime!=oldtime) { - lcd.print(itostr2(time/60));lcd.print("h ");lcd.print(itostr2(time%60));lcd.print("m"); + lcd.print(itostr2(time/60));lcdprintPGM("h ");lcd.print(itostr2(time%60));lcdprintPGM("m"); oldtime=time; } } @@ -320,7 +333,7 @@ void MainMenu::showStatus() if((currentz!=oldzpos)||force_lcd_update) { lcd.setCursor(10,1); - lcd.print("Z:");lcd.print(itostr31(currentz)); + lcdprintPGM("Z:");lcd.print(itostr31(currentz)); oldzpos=currentz; } static int oldfeedmultiply=0; @@ -339,7 +352,7 @@ void MainMenu::showStatus() { oldfeedmultiply=curfeedmultiply; lcd.setCursor(0,2); - lcd.print(itostr3(curfeedmultiply));lcd.print("% "); + lcd.print(itostr3(curfeedmultiply));lcdprintPGM("% "); } if(messagetext[0]!='\0') { @@ -353,9 +366,9 @@ void MainMenu::showStatus() if(force_lcd_update) //initial display of content { encoderpos=feedmultiply; - lcd.setCursor(0,0);lcd.print("\002123/567\001 "); + lcd.setCursor(0,0);lcdprintPGM("\002123/567\001 "); #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 - lcd.setCursor(10,0);lcd.print("B123/567\001 "); + lcd.setCursor(10,0);lcdprintPGM("B123/567\001 "); #endif } @@ -405,7 +418,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Prepare"); + lcd.setCursor(0,line);lcdprintPGM(" Prepare"); } if((activeline==line) && CLICKED) { @@ -418,7 +431,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Auto Home"); + lcd.setCursor(0,line);lcdprintPGM(" Auto Home"); } if((activeline==line) && CLICKED) { @@ -431,7 +444,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Set Origin"); + lcd.setCursor(0,line);lcdprintPGM(" Set Origin"); } if((activeline==line) && CLICKED) @@ -445,7 +458,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Preheat"); + lcd.setCursor(0,line);lcdprintPGM(" Preheat"); } if((activeline==line) && CLICKED) { @@ -458,7 +471,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Extrude"); + lcd.setCursor(0,line);lcdprintPGM(" Extrude"); } if((activeline==line) && CLICKED) { @@ -472,7 +485,7 @@ void MainMenu::showPrepare() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Disable Steppers"); + lcd.setCursor(0,line);lcdprintPGM(" Disable Steppers"); } if((activeline==line) && CLICKED) { @@ -541,7 +554,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Control"); + lcd.setCursor(0,line);lcdprintPGM(" Control"); } if((activeline==line) && CLICKED) { @@ -554,7 +567,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" \002Nozzle:"); + lcd.setCursor(0,line);lcdprintPGM(" \002Nozzle:"); lcd.setCursor(13,line);lcd.print(ftostr3(intround(degHotend0()))); } @@ -588,7 +601,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Fan speed:"); + lcd.setCursor(0,line);lcdprintPGM(" Fan speed:"); lcd.setCursor(13,line);lcd.print(ftostr3(fanpwm)); } @@ -625,8 +638,8 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Acc:"); - lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcd.print("00"); + lcd.setCursor(0,line);lcdprintPGM(" Acc:"); + lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcdprintPGM("00"); } if((activeline==line) ) @@ -650,7 +663,7 @@ void MainMenu::showControl() { if(encoderpos<5) encoderpos=5; if(encoderpos>990) encoderpos=990; - lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00"); + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00"); } } }break; @@ -658,7 +671,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Vxy-jerk: "); + lcd.setCursor(0,line);lcdprintPGM(" Vxy-jerk: "); lcd.setCursor(13,line);lcd.print(itostr3(max_xy_jerk/60)); } @@ -692,7 +705,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" PID-P: "); + lcd.setCursor(0,line);lcdprintPGM(" PID-P: "); lcd.setCursor(13,line);lcd.print(itostr4(Kp)); } @@ -726,7 +739,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" PID-I: "); + lcd.setCursor(0,line);lcdprintPGM(" PID-I: "); lcd.setCursor(13,line);lcd.print(ftostr51(Ki)); } @@ -760,7 +773,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" PID-D: "); + lcd.setCursor(0,line);lcdprintPGM(" PID-D: "); lcd.setCursor(13,line);lcd.print(itostr4(Kd)); } @@ -797,7 +810,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" PID-C: "); + lcd.setCursor(0,line);lcdprintPGM(" PID-C: "); lcd.setCursor(13,line);lcd.print(itostr3(Kc)); } @@ -834,11 +847,11 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Vmax "); - if(i==ItemC_vmaxx)lcd.print("x:"); - if(i==ItemC_vmaxy)lcd.print("y:"); - if(i==ItemC_vmaxz)lcd.print("z:"); - if(i==ItemC_vmaxe)lcd.print("e:"); + lcd.setCursor(0,line);lcdprintPGM(" Vmax "); + if(i==ItemC_vmaxx)lcdprintPGM("x:"); + if(i==ItemC_vmaxy)lcdprintPGM("y:"); + if(i==ItemC_vmaxz)lcdprintPGM("z:"); + if(i==ItemC_vmaxe)lcdprintPGM("e:"); lcd.setCursor(13,line);lcd.print(itostr3(max_feedrate[i-ItemC_vmaxx]/60)); } @@ -873,7 +886,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Vmin:"); + lcd.setCursor(0,line);lcdprintPGM(" Vmin:"); lcd.setCursor(13,line);lcd.print(itostr3(minimumfeedrate/60)); } @@ -907,7 +920,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" VTrav min:"); + lcd.setCursor(0,line);lcdprintPGM(" VTrav min:"); lcd.setCursor(13,line);lcd.print(itostr3(mintravelfeedrate/60)); } @@ -945,12 +958,12 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Amax "); - if(i==ItemC_amaxx)lcd.print("x:"); - if(i==ItemC_amaxy)lcd.print("y:"); - if(i==ItemC_amaxz)lcd.print("z:"); - if(i==ItemC_amaxe)lcd.print("e:"); - lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemC_amaxx]/100));lcd.print("00"); + lcd.setCursor(0,line);lcdprintPGM(" Amax "); + if(i==ItemC_amaxx)lcdprintPGM("x:"); + if(i==ItemC_amaxy)lcdprintPGM("y:"); + if(i==ItemC_amaxz)lcdprintPGM("z:"); + if(i==ItemC_amaxe)lcdprintPGM("e:"); + lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemC_amaxx]/100));lcdprintPGM("00"); } if((activeline==line) ) @@ -974,7 +987,7 @@ void MainMenu::showControl() { if(encoderpos<1) encoderpos=1; if(encoderpos>990) encoderpos=990; - lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00"); + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00"); } } }break; @@ -982,8 +995,8 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" A-retract:"); - lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcd.print("00"); + lcd.setCursor(0,line);lcdprintPGM(" A-retract:"); + lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcdprintPGM("00"); } if((activeline==line) ) @@ -1008,7 +1021,7 @@ void MainMenu::showControl() { if(encoderpos<10) encoderpos=10; if(encoderpos>990) encoderpos=990; - lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00"); + lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00"); } } }break; @@ -1016,7 +1029,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Esteps/mm:"); + lcd.setCursor(0,line);lcdprintPGM(" Esteps/mm:"); lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3])); } @@ -1053,7 +1066,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Store EPROM"); + lcd.setCursor(0,line);lcdprintPGM(" Store EPROM"); } if((activeline==line) && CLICKED) { @@ -1067,7 +1080,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Load EPROM"); + lcd.setCursor(0,line);lcdprintPGM(" Load EPROM"); } if((activeline==line) && CLICKED) { @@ -1081,7 +1094,7 @@ void MainMenu::showControl() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" Restore Failsafe"); + lcd.setCursor(0,line);lcdprintPGM(" Restore Failsafe"); } if((activeline==line) && CLICKED) { @@ -1165,7 +1178,7 @@ void MainMenu::showSD() { if(force_lcd_update) { - lcd.setCursor(0,line);lcd.print(" File"); + lcd.setCursor(0,line);lcdprintPGM(" File"); } if((activeline==line) && CLICKED) { @@ -1185,11 +1198,11 @@ void MainMenu::showSD() if(true) #endif { - lcd.print(" \004Refresh"); + lcdprintPGM(" \004Refresh"); } else { - lcd.print(" \004Insert Card"); + lcdprintPGM(" \004Insert Card"); } } @@ -1210,7 +1223,7 @@ void MainMenu::showSD() { card.getfilename(i-2); //Serial.print("Filenr:");Serial.println(i-2); - lcd.setCursor(0,line);lcd.print(" ");lcd.print(card.filename); + lcd.setCursor(0,line);lcdprintPGM(" ");lcd.print(card.filename); } if((activeline==line) && CLICKED) { @@ -1292,7 +1305,7 @@ void MainMenu::showMainMenu() { case ItemM_watch: { - if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Watch \x7E");} + if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Watch \x7E");} if((activeline==line)&&CLICKED) { BLOCK; @@ -1302,7 +1315,7 @@ void MainMenu::showMainMenu() } break; case ItemM_prepare: { - if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Prepare \x7E");} + if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Prepare \x7E");} if((activeline==line)&&CLICKED) { BLOCK; @@ -1313,7 +1326,7 @@ void MainMenu::showMainMenu() case ItemM_control: { - if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Control \x7E");} + if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Control \x7E");} if((activeline==line)&&CLICKED) { BLOCK; @@ -1334,13 +1347,13 @@ void MainMenu::showMainMenu() #endif { if(card.sdprinting) - lcd.print(" Stop Print \x7E"); + lcdprintPGM(" Stop Print \x7E"); else - lcd.print(" Card Menu \x7E"); + lcdprintPGM(" Card Menu \x7E"); } else { - lcd.print(" No Card"); + lcdprintPGM(" No Card"); } } #ifdef CARDINSERTED From ab154d55927776add58c878f7de94e82b07bee1c Mon Sep 17 00:00:00 2001 From: Bernhard Kubicek Date: Wed, 9 Nov 2011 20:27:15 +0100 Subject: [PATCH 2/8] project progmem finished: total change with ultipanel: 2456 byte free ram initial. now: 4374 ram. --- Marlin/EEPROMwrite.h | 214 ++++++++++++++++++++--------------------- Marlin/Marlin.h | 49 ++++++++-- Marlin/Marlin.pde | 124 +++++++++++++++--------- Marlin/cardreader.h | 4 +- Marlin/cardreader.pde | 38 +++++--- Marlin/stepper.cpp | 4 +- Marlin/temperature.cpp | 23 +++-- Marlin/ultralcd.h | 1 + Marlin/ultralcd.pde | 17 +++- Marlin/watchdog.pde | 7 +- 10 files changed, 294 insertions(+), 187 deletions(-) diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h index ae31bc9ec4..fcb3d8d391 100644 --- a/Marlin/EEPROMwrite.h +++ b/Marlin/EEPROMwrite.h @@ -25,18 +25,9 @@ template int EEPROM_readAnything(int &ee, T& value) } //====================================================================================== -#include +#define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);} + -void serialprintPGM(const char *str) -{ - char ch=pgm_read_byte(str); - while(ch) - { - Serial.print(ch); - ch=pgm_read_byte(++str); - } -} -#define SerialprintPGM(x) serialprintPGM(PSTR(x)) #define EEPROM_OFFSET 100 @@ -48,8 +39,9 @@ void serialprintPGM(const char *str) // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. #define EEPROM_VERSION "V04" -void StoreSettings() +inline void StoreSettings() { +#ifdef EEPROM_SETTINGS char ver[4]= "000"; int i=EEPROM_OFFSET; EEPROM_writeAnything(i,ver); // invalidate data first @@ -75,107 +67,115 @@ void StoreSettings() char ver2[4]=EEPROM_VERSION; i=EEPROM_OFFSET; EEPROM_writeAnything(i,ver2); // validate data - SerialprintPGM("echo: Settings Stored\n"); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Settings Stored"); +#endif //EEPROM_SETTINGS } -void RetrieveSettings(bool def=false) +inline void RetrieveSettings(bool def=false) { // if def=true, the default values will be used - int i=EEPROM_OFFSET; - char stored_ver[4]; - char ver[4]=EEPROM_VERSION; - EEPROM_readAnything(i,stored_ver); //read stored version - // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); - if ((!def)&&(strncmp(ver,stored_ver,3)==0)) - { // version number match - EEPROM_readAnything(i,axis_steps_per_unit); - EEPROM_readAnything(i,max_feedrate); - EEPROM_readAnything(i,max_acceleration_units_per_sq_second); - EEPROM_readAnything(i,acceleration); - EEPROM_readAnything(i,retract_acceleration); - EEPROM_readAnything(i,minimumfeedrate); - EEPROM_readAnything(i,mintravelfeedrate); - EEPROM_readAnything(i,minsegmenttime); - EEPROM_readAnything(i,max_xy_jerk); - EEPROM_readAnything(i,max_z_jerk); - #ifndef PIDTEMP - float Kp,Ki,Kd; - #endif - EEPROM_readAnything(i,Kp); - EEPROM_readAnything(i,Ki); - EEPROM_readAnything(i,Kd); + #ifdef EEPROM_SETTINGS + int i=EEPROM_OFFSET; + char stored_ver[4]; + char ver[4]=EEPROM_VERSION; + EEPROM_readAnything(i,stored_ver); //read stored version + // SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]"); + if ((!def)&&(strncmp(ver,stored_ver,3)==0)) + { // version number match + EEPROM_readAnything(i,axis_steps_per_unit); + EEPROM_readAnything(i,max_feedrate); + EEPROM_readAnything(i,max_acceleration_units_per_sq_second); + EEPROM_readAnything(i,acceleration); + EEPROM_readAnything(i,retract_acceleration); + EEPROM_readAnything(i,minimumfeedrate); + EEPROM_readAnything(i,mintravelfeedrate); + EEPROM_readAnything(i,minsegmenttime); + EEPROM_readAnything(i,max_xy_jerk); + EEPROM_readAnything(i,max_z_jerk); + #ifndef PIDTEMP + float Kp,Ki,Kd; + #endif + EEPROM_readAnything(i,Kp); + EEPROM_readAnything(i,Ki); + EEPROM_readAnything(i,Kd); - SerialprintPGM("echo: Stored settings retreived:\n"); - } - else - { - float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT; - float tmp2[]=DEFAULT_MAX_FEEDRATE; - long tmp3[]=DEFAULT_MAX_ACCELERATION; - for (short i=0;i<4;i++) - { - axis_steps_per_unit[i]=tmp1[i]; - max_feedrate[i]=tmp2[i]; - max_acceleration_units_per_sq_second[i]=tmp3[i]; + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Stored settings retreived:"); } - acceleration=DEFAULT_ACCELERATION; - retract_acceleration=DEFAULT_RETRACT_ACCELERATION; - minimumfeedrate=DEFAULT_MINIMUMFEEDRATE; - minsegmenttime=DEFAULT_MINSEGMENTTIME; - mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; - max_xy_jerk=DEFAULT_XYJERK; - max_z_jerk=DEFAULT_ZJERK; - SerialprintPGM("echo: Using Default settings:\n"); - } - SerialprintPGM("echo: Steps per unit:\n M92 X"); - Serial.print(axis_steps_per_unit[0]); - SerialprintPGM(" Y"); - Serial.print(axis_steps_per_unit[1]); - SerialprintPGM(" Z"); - Serial.print(axis_steps_per_unit[2]); - SerialprintPGM(" E"); - Serial.print(axis_steps_per_unit[3]); - - SerialprintPGM("\nMaximum feedrates (mm/s):\n M203 X" ); - Serial.print(max_feedrate[0]/60); - SerialprintPGM(" Y" ); - Serial.print(max_feedrate[1]/60 ); - SerialprintPGM(" Z" ); - Serial.print(max_feedrate[2]/60 ); - SerialprintPGM(" E" ); - Serial.print(max_feedrate[3]/60); - SerialprintPGM("\nMaximum Acceleration (mm/s2):\n M201 X" ); - Serial.print(max_acceleration_units_per_sq_second[0] ); - SerialprintPGM(" Y" ); - Serial.print(max_acceleration_units_per_sq_second[1] ); - SerialprintPGM(" Z" ); - Serial.print(max_acceleration_units_per_sq_second[2] ); - SerialprintPGM(" E" ); - Serial.print(max_acceleration_units_per_sq_second[3]); - SerialprintPGM("\necho: Acceleration: S=acceleration, T=retract acceleration\n M204 S" ); - Serial.print(acceleration ); - SerialprintPGM(" T" ); - Serial.print(retract_acceleration); - SerialprintPGM("\necho: Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)"); - SerialprintPGM(" M205 S" ); - Serial.print(minimumfeedrate/60 ); - SerialprintPGM(" T" ); - Serial.print(mintravelfeedrate/60 ); - SerialprintPGM(" B" ); - Serial.print(minsegmenttime ); - SerialprintPGM(" X" ); - Serial.print(max_xy_jerk/60 ); - SerialprintPGM(" Z" ); - Serial.print(max_z_jerk/60); - SerialprintPGM("\n" ); - #ifdef PIDTEMP - SerialprintPGM("PID settings:"); - SerialprintPGM(" M301 P" ); - Serial.print(Kp ); - SerialprintPGM(" I" ); - Serial.print(Ki ); - SerialprintPGM(" D" ); - Serial.print(Kd); + else + { + float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT; + float tmp2[]=DEFAULT_MAX_FEEDRATE; + long tmp3[]=DEFAULT_MAX_ACCELERATION; + for (short i=0;i<4;i++) + { + axis_steps_per_unit[i]=tmp1[i]; + max_feedrate[i]=tmp2[i]; + max_acceleration_units_per_sq_second[i]=tmp3[i]; + } + acceleration=DEFAULT_ACCELERATION; + retract_acceleration=DEFAULT_RETRACT_ACCELERATION; + minimumfeedrate=DEFAULT_MINIMUMFEEDRATE; + minsegmenttime=DEFAULT_MINSEGMENTTIME; + mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE; + max_xy_jerk=DEFAULT_XYJERK; + max_z_jerk=DEFAULT_ZJERK; + SERIAL_ECHO_START; + SERIAL_ECHOLN("Using Default settings:"); + } + #ifdef EEPROM_CHITCHAT + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Steps per unit:"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M92 X",axis_steps_per_unit[0]); + SERIAL_ECHOPAIR(" Y",axis_steps_per_unit[1]); + SERIAL_ECHOPAIR(" Z",axis_steps_per_unit[2]); + SERIAL_ECHOPAIR(" E",axis_steps_per_unit[3]); + SERIAL_ECHOLN(""); + + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M203 X",max_feedrate[0]/60); + SERIAL_ECHOPAIR(" Y",max_feedrate[1]/60 ); + SERIAL_ECHOPAIR(" Z", max_feedrate[2]/60 ); + SERIAL_ECHOPAIR(" E", max_feedrate[3]/60); + SERIAL_ECHOLN(""); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M201 X" ,max_acceleration_units_per_sq_second[0] ); + SERIAL_ECHOPAIR(" Y" , max_acceleration_units_per_sq_second[1] ); + SERIAL_ECHOPAIR(" Z" ,max_acceleration_units_per_sq_second[2] ); + SERIAL_ECHOPAIR(" E" ,max_acceleration_units_per_sq_second[3]); + SERIAL_ECHOLN(""); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M204 S",acceleration ); + SERIAL_ECHOPAIR(" T" ,retract_acceleration); + SERIAL_ECHOLN(""); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M205 S",minimumfeedrate/60 ); + SERIAL_ECHOPAIR(" T" ,mintravelfeedrate/60 ); + SERIAL_ECHOPAIR(" B" ,minsegmenttime ); + SERIAL_ECHOPAIR(" X" ,max_xy_jerk/60 ); + SERIAL_ECHOPAIR(" Z" ,max_z_jerk/60); + SERIAL_ECHOLN(""); + #ifdef PIDTEMP + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("PID settings:"); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR(" M301 P",Kp ); + SERIAL_ECHOPAIR(" I" ,Ki ); + SERIAL_ECHOPAIR(" D" ,Kd); + SERIAL_ECHOLN(""); + #endif #endif + + #endif //EEPROM_SETTINGS } #endif diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 61b56fb97c..99cd8021b3 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -5,14 +5,49 @@ // Licence: GPL #include #include "fastio.h" - #include "streaming.h" -#define SERIAL_ECHO(x) Serial << "echo: " << x; -#define SERIAL_ECHOLN(x) Serial << "echo: "< + +//#define SERIAL_ECHO(x) Serial << "echo: " << x; +//#define SERIAL_ECHOLN(x) Serial << "echo: "<= (MAX_CMD_SIZE - 1)) + int16_t n=card.get(); + serial_char = (char)n; + if(serial_char == '\n' || serial_char == '\r' || serial_char == ':' || serial_count >= (MAX_CMD_SIZE - 1)||n==-1) { if(card.eof()){ card.sdprinting = false; - SERIAL_PROTOCOL("Done printing file"); + SERIAL_PROTOCOLLNPGM("Done printing file"); stoptime=millis(); char time[30]; unsigned long t=(stoptime-starttime)/1000; @@ -377,6 +391,7 @@ inline void get_command() min=t/60; sec=t%60; sprintf(time,"%i min, %i sec",min,sec); + SERIAL_ECHO_START; SERIAL_ECHOLN(time); LCD_MESSAGE(time); card.checkautostart(true); @@ -398,6 +413,7 @@ inline void get_command() if(!comment_mode) cmdbuffer[bufindw][serial_count++] = serial_char; } } + #endif //SDSUPPORT } @@ -473,6 +489,7 @@ inline void process_commands() previous_millis_cmd = millis(); return; case 4: // G4 dwell + LCD_MESSAGEPGM("DWELL..."); codenum = 0; if(code_seen('P')) codenum = code_value(); // milliseconds to wait if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait @@ -533,13 +550,14 @@ inline void process_commands() #ifdef SDSUPPORT case 20: // M20 - list SD card - SERIAL_PROTOCOLLN("Begin file list"); + SERIAL_PROTOCOLLNPGM("Begin file list"); card.ls(); - SERIAL_PROTOCOLLN("End file list"); + SERIAL_PROTOCOLLNPGM("End file list"); break; case 21: // M21 - init SD card card.initsd(); + break; case 22: //M22 - release SD card card.release(); @@ -592,7 +610,8 @@ inline void process_commands() min=t/60; sec=t%60; sprintf(time,"%i min, %i sec",min,sec); - SERIAL_ERRORLN(time); + SERIAL_ECHO_START; + SERIAL_ECHOLN(time); LCD_MESSAGE(time); } break; @@ -637,7 +656,7 @@ inline void process_commands() bt = degBed(); #endif #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595) - SERIAL_PROTOCOL("ok T:"); + SERIAL_PROTOCOLPGM("ok T:"); SERIAL_PROTOCOL(tt); #if TEMP_1_PIN > -1 #ifdef PIDTEMP @@ -654,13 +673,14 @@ inline void process_commands() SERIAL_PROTOCOLLN(""); #endif //TEMP_1_PIN #else - SERIAL_ERRORLN("No thermistors - no temp"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("No thermistors - no temp"); #endif return; break; case 109: {// M109 - Wait for extruder heater to reach target. - LCD_MESSAGE("Heating..."); + LCD_MESSAGEPGM("Heating..."); if (code_seen('S')) setTargetHotend0(code_value()); setWatch(); @@ -681,7 +701,8 @@ inline void process_commands() #endif //TEMP_RESIDENCY_TIME if( (millis() - codenum) > 1000 ) { //Print Temp Reading every 1 second while heating up/cooling down - SERIAL_PROTOCOLLN("T:"<< degHotend0() ); + SERIAL_PROTOCOLPGM("T:"); + SERIAL_PROTOCOLLN( degHotend0() ); codenum = millis(); } manage_heater(); @@ -697,12 +718,13 @@ inline void process_commands() } #endif //TEMP_RESIDENCY_TIME } - LCD_MESSAGE("Heating done."); + LCD_MESSAGEPGM("Heating done."); starttime=millis(); } break; case 190: // M190 - Wait bed for heater to reach target. #if TEMP_1_PIN > -1 + LCD_MESSAGEPGM("Bed Heating."); if (code_seen('S')) setTargetBed(code_value()); codenum = millis(); while(isHeatingBed()) @@ -710,12 +732,17 @@ inline void process_commands() if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. { float tt=degHotend0(); - SERIAL_PROTOCOLLN("T:"< -1) - SERIAL_PROTOCOL("x_min:"); + SERIAL_PROTOCOLPGM("x_min:"); SERIAL_PROTOCOL(((READ(X_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (X_MAX_PIN > -1) - SERIAL_PROTOCOL("x_max:"); + SERIAL_PROTOCOLPGM("x_max:"); SERIAL_PROTOCOL(((READ(X_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Y_MIN_PIN > -1) - SERIAL_PROTOCOL("y_min:"); + SERIAL_PROTOCOLPGM("y_min:"); SERIAL_PROTOCOL(((READ(Y_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Y_MAX_PIN > -1) - SERIAL_PROTOCOL("y_max:"); + SERIAL_PROTOCOLPGM("y_max:"); SERIAL_PROTOCOL(((READ(Y_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Z_MIN_PIN > -1) - SERIAL_PROTOCOL("z_min:"); + SERIAL_PROTOCOLPGM("z_min:"); SERIAL_PROTOCOL(((READ(Z_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif #if (Z_MAX_PIN > -1) - SERIAL_PROTOCOL("z_max:"); + SERIAL_PROTOCOLPGM("z_max:"); SERIAL_PROTOCOL(((READ(Z_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ")); #endif SERIAL_PROTOCOLLN(""); @@ -897,7 +925,10 @@ inline void process_commands() } else { - SERIAL_ECHOLN("Unknown command:\""< -1) pinMode(PS_ON_PIN,INPUT); - SERIAL_ERRORLN("Printer halted. kill() called !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Printer halted. kill() called !!"); + LCD_MESSAGEPGM("KILLED. "); while(1); // Wait for reset } diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index 03696fa616..b3f514f61f 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -30,8 +30,8 @@ public: inline void ls() {root.ls();}; - inline bool eof() { sdpos = file.curPosition();return sdpos>=filesize ;}; - inline char get() { int16_t n = file.read(); return (n==-1)?'\n':(char)n;}; + inline bool eof() { return sdpos>=filesize ;}; + inline int16_t get() { sdpos = file.curPosition();return (int16_t)file.read();}; inline void setIndex(long index) {sdpos = index;file.seekSet(index);}; public: diff --git a/Marlin/cardreader.pde b/Marlin/cardreader.pde index cd4bfeb7ab..605af11bf5 100644 --- a/Marlin/cardreader.pde +++ b/Marlin/cardreader.pde @@ -29,20 +29,24 @@ void CardReader::initsd() if (!card.init(SPI_FULL_SPEED,SDSS)) { //if (!card.init(SPI_HALF_SPEED,SDSS)) - SERIAL_ECHOLN("SD init fail"); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("SD init fail"); } else if (!volume.init(&card)) { - SERIAL_ERRORLN("volume.init failed"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("volume.init failed"); } else if (!root.openRoot(&volume)) { - SERIAL_ERRORLN("openRoot failed"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("openRoot failed"); } else { cardOK = true; - SERIAL_ECHOLN("SD card ok"); + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("SD card ok"); } #endif //SDSS } @@ -77,13 +81,16 @@ void CardReader::selectFile(char* name) if (file.open(&root, name, O_READ)) { filesize = file.fileSize(); - SERIAL_PROTOCOLLN("File opened:"<= maxttemp_0) { target_raw[TEMPSENSOR_HOTEND_0] = 0; analogWrite(HEATER_0_PIN, 0); - SERIAL_ERRORLN("Temperature extruder 0 switched off. MAXTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperature extruder 0 switched off. MAXTEMP triggered !!"); kill(); } #endif @@ -507,7 +509,8 @@ ISR(TIMER0_COMPB_vect) target_raw[TEMPSENSOR_HOTEND_1] = 0; if(current_raw[2] >= maxttemp_1) { analogWrite(HEATER_2_PIN, 0); - SERIAL_ERRORLN("Temperature extruder 1 switched off. MAXTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperature extruder 1 switched off. MAXTEMP triggered !!"); kill() } #endif @@ -518,7 +521,8 @@ ISR(TIMER0_COMPB_vect) if(current_raw[TEMPSENSOR_HOTEND_0] <= minttemp_0) { target_raw[TEMPSENSOR_HOTEND_0] = 0; analogWrite(HEATER_0_PIN, 0); - SERIAL_ERRORLN("Temperature extruder 0 switched off. MINTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperature extruder 0 switched off. MINTEMP triggered !!"); kill(); } #endif @@ -529,7 +533,8 @@ ISR(TIMER0_COMPB_vect) if(current_raw[TEMPSENSOR_HOTEND_1] <= minttemp_1) { target_raw[TEMPSENSOR_HOTEND_1] = 0; analogWrite(HEATER_2_PIN, 0); - SERIAL_ERRORLN("Temperature extruder 1 switched off. MINTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperature extruder 1 switched off. MINTEMP triggered !!"); kill(); } #endif @@ -540,7 +545,8 @@ ISR(TIMER0_COMPB_vect) if(current_raw[1] <= bed_minttemp) { target_raw[1] = 0; WRITE(HEATER_1_PIN, 0); - SERIAL_ERRORLN("Temperatur heated bed switched off. MINTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperatur heated bed switched off. MINTEMP triggered !!"); kill(); } #endif @@ -551,7 +557,8 @@ ISR(TIMER0_COMPB_vect) if(current_raw[1] >= bed_maxttemp) { target_raw[1] = 0; WRITE(HEATER_1_PIN, 0); - SERIAL_ERRORLN("Temperature heated bed switched off. MAXTEMP triggered !!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!"); kill(); } #endif diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 0822e502b0..4c725329df 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -83,6 +83,7 @@ #define LCD_MESSAGE(x) lcd_status(x); + #define LCD_MESSAGEPGM(x) lcd_statuspgm(PSTR(x)); #define LCD_STATUS lcd_status() #else //no lcd #define LCD_STATUS diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 91d1a54a80..59edb34702 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -67,6 +67,18 @@ void lcd_status(const char* message) strncpy(messagetext,message,LCD_WIDTH); } +void lcd_statuspgm(const char* message) +{ + char ch=pgm_read_byte(message); + char *target=messagetext; + while(ch) + { + *target=ch; + target++; + ch=pgm_read_byte(++message); + } +} + inline void clear() { lcd.clear(); @@ -105,7 +117,7 @@ void lcd_init() lcd.createChar(2,Thermometer); lcd.createChar(3,uplevel); lcd.createChar(4,refresh); - LCD_MESSAGE(fillto(LCD_WIDTH,"UltiMarlin ready.")); + LCD_MESSAGEPGM("UltiMarlin ready."); } @@ -1369,7 +1381,8 @@ void MainMenu::showMainMenu() }break; #endif default: - SERIAL_ERRORLN("Something is wrong in the MenuStructure."); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Something is wrong in the MenuStructure."); break; } } diff --git a/Marlin/watchdog.pde b/Marlin/watchdog.pde index 167bc633d3..9cf710a0c7 100644 --- a/Marlin/watchdog.pde +++ b/Marlin/watchdog.pde @@ -41,10 +41,11 @@ ISR(WDT_vect) { #ifdef RESET_MANUAL - LCD_MESSAGE("Please Reset!"); - SERIAL_ERRORLN("Something is wrong, please turn off the printer."); + LCD_MESSAGEPGM("Please Reset!"); + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("Something is wrong, please turn off the printer."); #else - LCD_MESSAGE("Timeout, resetting!"); + LCD_MESSAGEPGM("Timeout, resetting!"); #endif //disable watchdog, it will survife reboot. WDTCSR |= (1< Date: Wed, 9 Nov 2011 20:28:40 +0100 Subject: [PATCH 3/8] beautified the config. ordered it into thematic sections. --- Marlin/Configuration.h | 276 ++++++++++++++++++++++++----------------- 1 file changed, 160 insertions(+), 116 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index a0d46bfed7..f44c858b9a 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1,10 +1,13 @@ #ifndef __CONFIGURATION_H #define __CONFIGURATION_H -//#define DEBUG_STEPS -#define MM_PER_ARC_SEGMENT 1 -#define N_ARC_CORRECTION 25 + +// This determines the communication speed of the printer +//#define BAUDRATE 250000 +#define BAUDRATE 115200 +//#define BAUDRATE 230400 + // BASIC SETTINGS: select your board type, thermistor type, axis scaling, and endstop configuration @@ -17,7 +20,9 @@ // Teensylu = 8 #define MOTHERBOARD 7 - +//=========================================================================== +//=============================Thermal Settings ============================ +//=========================================================================== //// Thermistor settings: // 1 is 100k thermistor @@ -40,49 +45,103 @@ //#define BED_USES_THERMISTOR //#define BED_USES_AD595 -#define HEATER_CHECK_INTERVAL 50 -#define BED_CHECK_INTERVAL 5000 +#define HEATER_CHECK_INTERVAL 50 //ms +#define BED_CHECK_INTERVAL 5000 //ms + +//// Experimental watchdog and minimal temp +// The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature +// If the temperature has not increased at the end of that period, the target temperature is set to zero. It can be reset with another M104/M109 +/// CURRENTLY NOT IMPLEMENTED AND UNUSEABLE +//#define WATCHPERIOD 5000 //5 seconds + +// Actual temperature must be close to target for this long before M109 returns success +//#define TEMP_RESIDENCY_TIME 20 // (seconds) +//#define TEMP_HYSTERESIS 5 // (C°) range of +/- temperatures considered "close" to the target one + +//// The minimal temperature defines the temperature below which the heater will not be enabled +#define HEATER_0_MINTEMP 5 +//#define HEATER_1_MINTEMP 5 +//#define BED_MINTEMP 5 -//// Endstop Settings +// When temperature exceeds max temp, your heater will be switched off. +// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! +// You should use MINTEMP for thermistor short/failure protection. +#define HEATER_0_MAXTEMP 275 +//#define_HEATER_1_MAXTEMP 275 +//#define BED_MAXTEMP 150 + + + +// PID settings: +// Uncomment the following line to enable PID support. + +#define PIDTEMP +#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_MAX 255 // limits current to nozzle; 255=full current + #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term + #define K1 0.95 //smoothing factor withing the PID + #define PID_dT 0.1 //sampling period of the PID + + //To develop some PID settings for your machine, you can initiall follow + // the Ziegler-Nichols method. + // set Ki and Kd to zero. + // heat with a defined Kp and see if the temperature stabilizes + // ideally you do this graphically with repg. + // the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde + // PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain + // usually further manual tunine is necessary. + + #define PID_CRITIAL_GAIN 3000 + #define PID_SWING_AT_CRITIAL 45 //seconds + + #define PID_PI //no differentail term + //#define PID_PID //normal PID + + #ifdef PID_PID + //PID according to Ziegler-Nichols method + #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN) + #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT) + #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) + #endif + + #ifdef PID_PI + //PI according to Ziegler-Nichols method + #define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2) + #define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT) + #define DEFAULT_Kd (0) + #endif + + // 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. + #define PID_ADD_EXTRUSION_RATE + #ifdef PID_ADD_EXTRUSION_RATE + #define DEFAULT_Kc (5) //heatingpower=Kc*(e_speed) + #endif +#endif // PIDTEMP + + + + + + + + + +//=========================================================================== +//=============================Mechanical Settings=========================== +//=========================================================================== + + +// Endstop Settings #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 ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops. // For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false -// This determines the communication speed of the printer -#define BAUDRATE 250000 -//#define BAUDRATE 115200 -//#define BAUDRATE 230400 - -// Comment out (using // at the start of the line) to disable SD support: - -// #define ULTRA_LCD //any lcd - -#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 -#else //no panel but just lcd - #ifdef ULTRA_LCD - #define LCD_WIDTH 16 - #define LCD_HEIGHT 2 - #endif -#endif - - -//#define SDSUPPORT // Enable SD Card Support in Hardware Console - - - -const int dropsegments=5; //everything with this number of steps will be ignored as move - -//// ADVANCED SETTINGS - to tweak parameters - -#include "thermistortables.h" // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 #define X_ENABLE_ON 0 @@ -141,88 +200,33 @@ const int dropsegments=5; //everything with this number of steps will be ignore #define DEFAULT_ZJERK 10.0*60 + + +//=========================================================================== +//=============================Additional Features=========================== +//=========================================================================== + +// EEPROM +// the microcontroller can store settings in the EEPROM, e.g. max velocity... +// M500 - stores paramters in EEPROM +// 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 +//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 + + // The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature -//this enables the watchdog interrupt. +// this enables the watchdog interrupt. #define USE_WATCHDOG -//you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: +// you cannot reboot on a mega2560 due to a bug in he bootloader. Hence, you have to reset manually, and this is done hereby: #define RESET_MANUAL - -#define WATCHDOG_TIMEOUT 4 +#define WATCHDOG_TIMEOUT 4 //seconds -//// Experimental watchdog and minimal temp -// The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature -// If the temperature has not increased at the end of that period, the target temperature is set to zero. It can be reset with another M104/M109 -/// CURRENTLY NOT IMPLEMENTED AND UNUSEABLE -//#define WATCHPERIOD 5000 //5 seconds - -// Actual temperature must be close to target for this long before M109 returns success -//#define TEMP_RESIDENCY_TIME 20 // (seconds) -//#define TEMP_HYSTERESIS 5 // (C°) range of +/- temperatures considered "close" to the target one - -//// The minimal temperature defines the temperature below which the heater will not be enabled -#define HEATER_0_MINTEMP 5 -//#define HEATER_1_MINTEMP 5 -//#define BED_MINTEMP 5 - - -// When temperature exceeds max temp, your heater will be switched off. -// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure! -// You should use MINTEMP for thermistor short/failure protection. -#define HEATER_0_MAXTEMP 275 -//#define_HEATER_1_MAXTEMP 275 -//#define BED_MAXTEMP 150 - -/// PID settings: -// Uncomment the following line to enable PID support. - -#define PIDTEMP -#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_MAX 255 // limits current to nozzle; 255=full current - #define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term - #define K1 0.95 //smoothing factor withing the PID - #define PID_dT 0.1 //sampling period of the PID - - //To develop some PID settings for your machine, you can initiall follow - // the Ziegler-Nichols method. - // set Ki and Kd to zero. - // heat with a defined Kp and see if the temperature stabilizes - // ideally you do this graphically with repg. - // the PID_CRITIAL_GAIN should be the Kp at which temperature oscillatins are not dampned out/decreas in amplitutde - // PID_SWING_AT_CRITIAL is the time for a full period of the oscillations at the critical Gain - // usually further manual tunine is necessary. - - #define PID_CRITIAL_GAIN 3000 - #define PID_SWING_AT_CRITIAL 45 //seconds - - #define PID_PI //no differentail term - //#define PID_PID //normal PID - - #ifdef PID_PID - //PID according to Ziegler-Nichols method - #define DEFAULT_Kp (0.6*PID_CRITIAL_GAIN) - #define DEFAULT_Ki (2*Kp/PID_SWING_AT_CRITIAL*PID_dT) - #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) - #endif - - #ifdef PID_PI - //PI according to Ziegler-Nichols method - #define DEFAULT_Kp (PID_CRITIAL_GAIN/2.2) - #define DEFAULT_Ki (1.2*Kp/PID_SWING_AT_CRITIAL*PID_dT) - #define DEFAULT_Kd (0) - #endif - - // 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. - #define PID_ADD_EXTRUSION_RATE - #ifdef PID_ADD_EXTRUSION_RATE - #define DEFAULT_Kc (5) //heatingpower=Kc*(e_speed) - #endif -#endif // PIDTEMP // extruder advance constant (s2/mm3) // @@ -243,6 +247,42 @@ const int dropsegments=5; //everything with this number of steps will be ignore #endif // ADVANCE + +//LCD and SD support +//#define ULTRA_LCD //general lcd support, also 16x2 +//#define SDSUPPORT // Enable SD Card Support in Hardware Console + +#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 +#else //no panel but just lcd + #ifdef ULTRA_LCD + #define LCD_WIDTH 16 + #define LCD_HEIGHT 2 + #endif +#endif + +// A debugging feature to compare calculated vs performed steps, to see if steps are lost by the software. +//#define DEBUG_STEPS + + +// Arc interpretation settings: +#define MM_PER_ARC_SEGMENT 1 +#define N_ARC_CORRECTION 25 + + +const int dropsegments=0; //everything with less than this number of steps will be ignored as move and joined with the next movement + +//=========================================================================== +//=============================Buffers ============================ +//=========================================================================== + + + // The number of linear motions that can be in the plan at any give time. // THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering. #if defined SDSUPPORT @@ -251,8 +291,12 @@ const int dropsegments=5; //everything with this number of steps will be ignore #define BLOCK_BUFFER_SIZE 16 // maximize block buffer #endif + //The ASCII buffer for recieving from the serial: #define MAX_CMD_SIZE 96 #define BUFSIZE 4 + +#include "thermistortables.h" + #endif //__CONFIGURATION_H From ba8a53a40fa0adaa947b536639bab998cc872feb Mon Sep 17 00:00:00 2001 From: Bernhard Kubicek Date: Wed, 9 Nov 2011 20:30:41 +0100 Subject: [PATCH 4/8] Streaming.h is gone. It conflicted with PROGMEM. And saving memory is more important than nicer code, imho --- Marlin/Marlin.h | 1 - Marlin/Marlin.pde | 1 - Marlin/streaming.h | 84 ------------------------------------------ Marlin/temperature.cpp | 1 - 4 files changed, 87 deletions(-) delete mode 100644 Marlin/streaming.h diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 99cd8021b3..1e36b61e88 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -5,7 +5,6 @@ // Licence: GPL #include #include "fastio.h" -#include "streaming.h" #include //#define SERIAL_ECHO(x) Serial << "echo: " << x; diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 7b67cfcf5b..dee095d84f 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -32,7 +32,6 @@ #include "pins.h" #include "Marlin.h" #include "ultralcd.h" -#include "streaming.h" #include "planner.h" #include "stepper.h" #include "temperature.h" diff --git a/Marlin/streaming.h b/Marlin/streaming.h deleted file mode 100644 index 1a6afe73d9..0000000000 --- a/Marlin/streaming.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -Streaming.h - Arduino library for supporting the << streaming operator -Copyright (c) 2010 Mikal Hart. All rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef ARDUINO_STREAMING -#define ARDUINO_STREAMING - -//#include - -#define STREAMING_LIBRARY_VERSION 4 - -// Generic template -template -inline Print &operator <<(Print &stream, T arg) -{ stream.print(arg); return stream; } - -struct _BASED -{ - long val; - int base; - _BASED(long v, int b): val(v), base(b) - {} -}; - -#define _HEX(a) _BASED(a, HEX) -#define _DEC(a) _BASED(a, DEC) -#define _OCT(a) _BASED(a, OCT) -#define _BIN(a) _BASED(a, BIN) -#define _BYTE(a) _BASED(a, BYTE) - -// Specialization for class _BASED -// Thanks to Arduino forum user Ben Combee who suggested this -// clever technique to allow for expressions like -// Serial << _HEX(a); - -inline Print &operator <<(Print &obj, const _BASED &arg) -{ obj.print(arg.val, arg.base); return obj; } - -#if ARDUINO >= 18 -// Specialization for class _FLOAT -// Thanks to Michael Margolis for suggesting a way -// to accommodate Arduino 0018's floating point precision -// feature like this: -// Serial << _FLOAT(gps_latitude, 6); // 6 digits of precision - -struct _FLOAT -{ - float val; - int digits; - _FLOAT(double v, int d): val(v), digits(d) - {} -}; - -inline Print &operator <<(Print &obj, const _FLOAT &arg) -{ obj.print(arg.val, arg.digits); return obj; } -#endif - -// Specialization for enum _EndLineCode -// Thanks to Arduino forum user Paul V. who suggested this -// clever technique to allow for expressions like -// Serial << "Hello!" << endl; - -enum _EndLineCode { endl }; - -inline Print &operator <<(Print &obj, _EndLineCode arg) -{ obj.println(); return obj; } - -#endif - diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 87d9ee5434..83c173b28c 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -34,7 +34,6 @@ #include "pins.h" #include "Marlin.h" #include "ultralcd.h" -#include "streaming.h" #include "temperature.h" #include "watchdog.h" From 36958ee30576dd282a373c8b1da6ad8d9d22eb7b Mon Sep 17 00:00:00 2001 From: Bernhard Kubicek Date: Wed, 9 Nov 2011 22:09:16 +0100 Subject: [PATCH 5/8] minor changes and first not-well working version of autotemp --- Marlin/Configuration.h | 12 +++++++++++- Marlin/EEPROMwrite.h | 1 - Marlin/Marlin.h | 3 +++ Marlin/Marlin.pde | 3 +-- Marlin/planner.cpp | 35 +++++++++++++++++++++++++++++++++++ Marlin/planner.h | 4 +++- Marlin/ultralcd.pde | 4 +++- 7 files changed, 56 insertions(+), 6 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index f44c858b9a..8661ae438e 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -119,7 +119,7 @@ // if Kc is choosen well, the additional required power due to increased melting should be compensated. #define PID_ADD_EXTRUSION_RATE #ifdef PID_ADD_EXTRUSION_RATE - #define DEFAULT_Kc (5) //heatingpower=Kc*(e_speed) + #define DEFAULT_Kc (3) //heatingpower=Kc*(e_speed) #endif #endif // PIDTEMP @@ -275,6 +275,16 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the #define N_ARC_CORRECTION 25 +//automatic temperature: just for testing, this is very dangerous, keep disabled! +// not working yet. +//Erik: the settings currently depend dramatically on skeinforge39 or 41. +//#define AUTOTEMP +#define AUTOTEMP_MIN 190 +#define AUTOTEMP_MAX 260 +#define AUTOTEMP_FACTOR 1000. //current target temperature= min+largest buffered espeeds)*FACTOR + + + const int dropsegments=0; //everything with less than this number of steps will be ignored as move and joined with the next movement //=========================================================================== diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h index fcb3d8d391..3d8a0b2b9e 100644 --- a/Marlin/EEPROMwrite.h +++ b/Marlin/EEPROMwrite.h @@ -25,7 +25,6 @@ template int EEPROM_readAnything(int &ee, T& value) } //====================================================================================== -#define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);} diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index 1e36b61e88..e14471264f 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -35,6 +35,9 @@ const char echomagic[] PROGMEM ="echo:"; #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x) #define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x) +#define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);} + + //things to write to serial from Programmemory. saves 400 to 2k of RAM. #define SerialprintPGM(x) serialprintPGM(PSTR(x)) inline void serialprintPGM(const char *str) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index dee095d84f..672591a72d 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -211,7 +211,6 @@ void setup() { Serial.begin(BAUDRATE); SERIAL_ECHO_START; - SERIAL_ECHOPGM("Marlin "); SERIAL_ECHOLN(version_string); SERIAL_PROTOCOLLNPGM("start"); SERIAL_ECHO_START; @@ -785,8 +784,8 @@ inline void process_commands() } else { - LCD_MESSAGEPGM("Free move."); st_synchronize(); + LCD_MESSAGEPGM("Free move."); disable_x(); disable_y(); disable_z(); diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp index 34e29ff535..863b116a5b 100644 --- a/Marlin/planner.cpp +++ b/Marlin/planner.cpp @@ -84,6 +84,10 @@ unsigned long axis_steps_per_sqr_second[NUM_AXIS]; // The current position of the tool in absolute steps long position[4]; //rescaled from extern when axis_steps_per_unit are changed by gcode +#ifdef AUTOTEMP +float high_e_speed=0; +#endif + //=========================================================================== //=============================private variables ============================ @@ -363,6 +367,34 @@ block_t *plan_get_current_block() { return(block); } +#ifdef AUTOTEMP +void getHighESpeed() +{ + if(degTargetHotend0()+2high) + { + high=se; + } + block_index = (block_index+1) & (BLOCK_BUFFER_SIZE - 1); + } + high_e_speed=high*axis_steps_per_unit[E_AXIS]/(1000000.0); //so it is independent of the esteps/mm. before + + float g=AUTOTEMP_MIN+high_e_speed*AUTOTEMP_FACTOR; + float t=constrain(AUTOTEMP_MIN,g,AUTOTEMP_MAX); + setTargetHotend0(t); + SERIAL_ECHO_START; + SERIAL_ECHOPAIR("highe",high_e_speed); + SERIAL_ECHOPAIR(" t",t); + SERIAL_ECHOLN(""); +} +#endif + void check_axes_activity() { unsigned char x_active = 0; unsigned char y_active = 0; @@ -581,6 +613,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa memcpy(position, target, sizeof(target)); // position[] = target[] planner_recalculate(); + #ifdef AUTOTEMP + getHighESpeed(); + #endif st_wake_up(); } diff --git a/Marlin/planner.h b/Marlin/planner.h index 79f54d879f..c5bc5b8aaf 100644 --- a/Marlin/planner.h +++ b/Marlin/planner.h @@ -89,5 +89,7 @@ extern float max_xy_jerk; //speed than can be stopped at once, if i understand c extern float max_z_jerk; extern float mintravelfeedrate; extern unsigned long axis_steps_per_sqr_second[NUM_AXIS]; - +#ifdef AUTOTEMP +extern float high_e_speed; +#endif #endif diff --git a/Marlin/ultralcd.pde b/Marlin/ultralcd.pde index 59edb34702..d95167166d 100644 --- a/Marlin/ultralcd.pde +++ b/Marlin/ultralcd.pde @@ -71,10 +71,12 @@ void lcd_statuspgm(const char* message) { char ch=pgm_read_byte(message); char *target=messagetext; - while(ch) + uint8_t cnt=0; + while(ch &&cnt Date: Sat, 12 Nov 2011 20:37:28 +0100 Subject: [PATCH 6/8] re-enabled heaterpower as storage for the current storage of the heater PWM duty cycle. the M301 now returns the current PID settings of the machine. M105 returns heating pwm duty cylce as "@:" --- Marlin/Marlin.pde | 52 +++++++++++++++++++++++------------------- Marlin/temperature.cpp | 1 + 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde index 672591a72d..4c1ece07e3 100644 --- a/Marlin/Marlin.pde +++ b/Marlin/Marlin.pde @@ -647,33 +647,24 @@ inline void process_commands() break; case 105: // M105 //SERIAL_ECHOLN(freeMemory()); - #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595) - tt = degHotend0(); - #endif - #if TEMP_1_PIN > -1 - bt = degBed(); - #endif + #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595) SERIAL_PROTOCOLPGM("ok T:"); - SERIAL_PROTOCOL(tt); + SERIAL_PROTOCOL( degHotend0()); #if TEMP_1_PIN > -1 - #ifdef PIDTEMP - SERIAL_PROTOCOL(" B:"); - #if TEMP_1_PIN > -1 - SERIAL_PROTOCOLLN(bt); - #else - SERIAL_PROTOCOLLN(HeaterPower); - #endif - #else //not PIDTEMP - SERIAL_PROTOCOLLN(""); - #endif //PIDTEMP - #else - SERIAL_PROTOCOLLN(""); - #endif //TEMP_1_PIN - #else - SERIAL_ERROR_START; - SERIAL_ERRORLNPGM("No thermistors - no temp"); + SERIAL_PROTOCOLPGM(" B:"); + SERIAL_PROTOCOL(degBed()); + #endif //TEMP_1_PIN + #else + SERIAL_ERROR_START; + SERIAL_ERRORLNPGM("No thermistors - no temp"); #endif + #ifdef PIDTEMP + SERIAL_PROTOCOLPGM(" @:"); + SERIAL_PROTOCOL( HeaterPower); + + #endif + SERIAL_PROTOCOLLN(""); return; break; case 109: @@ -901,6 +892,21 @@ inline void process_commands() if(code_seen('P')) Kp = code_value(); if(code_seen('I')) Ki = code_value()*PID_dT; if(code_seen('D')) Kd = code_value()/PID_dT; + #ifdef PID_ADD_EXTRUSION_RATE + if(code_seen('C')) Kc = code_value(); + #endif + SERIAL_PROTOCOL("ok p:"); + SERIAL_PROTOCOL(Kp); + SERIAL_PROTOCOL(" i:"); + SERIAL_PROTOCOL(Ki/PID_dT); + SERIAL_PROTOCOL(" d:"); + SERIAL_PROTOCOL(Kd*PID_dT); + #ifdef PID_ADD_EXTRUSION_RATE + SERIAL_PROTOCOL(" c:"); + SERIAL_PROTOCOL(Kc*PID_dT); + #endif + SERIAL_PROTOCOLLN(""); + break; #endif //PIDTEMP case 500: // Store settings in EEPROM diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 83c173b28c..0772cb324f 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -156,6 +156,7 @@ void manage_heater() pTerm+=Kc*current_block->speed_e; //additional heating if extrusion speed is high #endif pid_output = constrain(pTerm + iTerm - dTerm, 0, PID_MAX); + HeaterPower=pid_output; } #endif //PID_OPENLOOP #ifdef PID_DEBUG From ff592b056ad492632a810e6c77a7d063b6ce05e3 Mon Sep 17 00:00:00 2001 From: Bernhard Kubicek Date: Sun, 13 Nov 2011 00:48:55 +0100 Subject: [PATCH 7/8] heater power repair. --- Marlin/temperature.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index 0772cb324f..8ea8ee008f 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -156,12 +156,13 @@ void manage_heater() pTerm+=Kc*current_block->speed_e; //additional heating if extrusion speed is high #endif pid_output = constrain(pTerm + iTerm - dTerm, 0, PID_MAX); - HeaterPower=pid_output; + } #endif //PID_OPENLOOP #ifdef PID_DEBUG //SERIAL_ECHOLN(" PIDDEBUG Input "< Date: Sun, 13 Nov 2011 19:58:09 +0100 Subject: [PATCH 8/8] added a m400, that finished all moves, and the mechanism so that if an endstop is hit it the ISR, the steps_to_be_taken are stored, and some current_block data that will be deleted in the next move If the normal loop() then finds such an event, the position is calculated (floats would have taken too long in the ISR) A serial message is generated. --- Marlin/Marlin.h | 2 ++ Marlin/Marlin.pde | 20 +++++++++++++++--- Marlin/stepper.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++- Marlin/stepper.h | 7 +++++++ 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index e14471264f..440a44a579 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -6,6 +6,7 @@ #include #include "fastio.h" #include +#include "Configuration.h" //#define SERIAL_ECHO(x) Serial << "echo: " << x; //#define SERIAL_ECHOLN(x) Serial << "echo: "<1 200->2 int saved_feedmultiply; volatile bool feedmultiplychanged=false; +float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; + //=========================================================================== //=============================private variables============================= //=========================================================================== const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'}; static float destination[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; -static float current_position[NUM_AXIS] = { 0.0, 0.0, 0.0, 0.0}; static float offset[3] = {0.0, 0.0, 0.0}; static bool home_all_axis = true; static float feedrate = 1500.0, next_feedrate, saved_feedrate; @@ -211,7 +213,7 @@ void setup() { Serial.begin(BAUDRATE); SERIAL_ECHO_START; - SERIAL_ECHOLN(version_string); + SERIAL_ECHOLNPGM(VERSION_STRING); SERIAL_PROTOCOLLNPGM("start"); SERIAL_ECHO_START; SERIAL_ECHOPGM("Free Memory:"); @@ -269,6 +271,7 @@ void loop() //check heater every n milliseconds manage_heater(); manage_inactivity(1); + checkHitEndstops(); LCD_STATUS; } @@ -443,20 +446,25 @@ inline bool code_seen(char code) destination[LETTER##_AXIS] = 1.5 * LETTER##_MAX_LENGTH * LETTER##_HOME_DIR; \ feedrate = homing_feedrate[LETTER##_AXIS]; \ prepare_move(); \ + 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] = -5 * LETTER##_HOME_DIR;\ prepare_move(); \ + st_synchronize();\ \ destination[LETTER##_AXIS] = 10 * LETTER##_HOME_DIR;\ feedrate = homing_feedrate[LETTER##_AXIS]/2 ; \ prepare_move(); \ + 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]);\ destination[LETTER##_AXIS] = current_position[LETTER##_AXIS];\ feedrate = 0.0;\ + st_synchronize();\ + endstops_hit_on_purpose();\ } inline void process_commands() @@ -522,6 +530,7 @@ inline void process_commands() feedrate = saved_feedrate; feedmultiply = saved_feedmultiply; previous_millis_cmd = millis(); + endstops_hit_on_purpose(); break; case 90: // G90 relative_mode = false; @@ -909,6 +918,11 @@ inline void process_commands() break; #endif //PIDTEMP + case 400: // finish all moves + { + st_synchronize(); + } + break; case 500: // Store settings in EEPROM { StoreSettings(); diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index d5d41b1736..23066ef320 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -33,12 +33,14 @@ #include "speed_lookuptable.h" + //=========================================================================== //=============================public variables ============================ //=========================================================================== block_t *current_block; // A pointer to the block currently being traced + //=========================================================================== //=============================private variables ============================ //=========================================================================== @@ -62,7 +64,9 @@ static long acceleration_time, deceleration_time; static unsigned short acc_step_rate; // needed for deccelaration start point static char step_loops; - +volatile long endstops_trigsteps[3]={0,0,0}; +volatile long endstops_stepsTotal,endstops_stepsDone; +static volatile bool endstops_hit=false; // if DEBUG_STEPS is enabled, M114 can be used to compare two methods of determining the X,Y,Z position of the printer. // for debugging purposes only, should be disabled by default @@ -152,9 +156,49 @@ asm volatile ( \ #define DISABLE_STEPPER_DRIVER_INTERRUPT() TIMSK1 &= ~(1<step_event_count; + endstops_stepsDone=stepstaken; + endstops_trigsteps[0]=current_block->steps_x; + endstops_trigsteps[1]=current_block->steps_y; + endstops_trigsteps[2]=current_block->steps_z; + endstops_hit=true; +} +void checkHitEndstops() +{ + if( !endstops_hit) + return; + float endstops_triggerpos[3]={0,0,0}; + float ratiodone=endstops_stepsDone/float(endstops_stepsTotal); //ratio of current_block thas was performed + + endstops_triggerpos[0]=current_position[0]-(endstops_trigsteps[0]*ratiodone)/float(axis_steps_per_unit[0]); + endstops_triggerpos[1]=current_position[1]-(endstops_trigsteps[1]*ratiodone)/float(axis_steps_per_unit[1]); + endstops_triggerpos[2]=current_position[2]-(endstops_trigsteps[2]*ratiodone)/float(axis_steps_per_unit[2]); + SERIAL_ECHO_START; + SERIAL_ECHOPGM("endstops hit: "); + SERIAL_ECHOPAIR(" X:",endstops_triggerpos[0]); + SERIAL_ECHOPAIR(" Y:",endstops_triggerpos[1]); + SERIAL_ECHOPAIR(" Z:",endstops_triggerpos[2]); + SERIAL_ECHOLN(""); + endstops_hit=false; +} +void endstops_hit_on_purpose() +{ + endstops_hit=false; +} // __________________________ // /| |\ _________________ ^ @@ -296,6 +340,7 @@ ISR(TIMER1_COMPA_vect) #endif #if X_MIN_PIN > -1 if(READ(X_MIN_PIN) != ENDSTOPS_INVERTING) { + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -307,6 +352,7 @@ ISR(TIMER1_COMPA_vect) #endif #if X_MAX_PIN > -1 if((READ(X_MAX_PIN) != ENDSTOPS_INVERTING) && (current_block->steps_x >0)){ + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -319,6 +365,7 @@ ISR(TIMER1_COMPA_vect) #endif #if Y_MIN_PIN > -1 if(READ(Y_MIN_PIN) != ENDSTOPS_INVERTING) { + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -330,6 +377,7 @@ ISR(TIMER1_COMPA_vect) #endif #if Y_MAX_PIN > -1 if((READ(Y_MAX_PIN) != ENDSTOPS_INVERTING) && (current_block->steps_y >0)){ + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -342,6 +390,7 @@ ISR(TIMER1_COMPA_vect) #endif #if Z_MIN_PIN > -1 if(READ(Z_MIN_PIN) != ENDSTOPS_INVERTING) { + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif @@ -353,6 +402,7 @@ ISR(TIMER1_COMPA_vect) #endif #if Z_MAX_PIN > -1 if((READ(Z_MAX_PIN) != ENDSTOPS_INVERTING) && (current_block->steps_z >0)){ + endstops_triggered(step_events_completed); step_events_completed = current_block->step_event_count; } #endif diff --git a/Marlin/stepper.h b/Marlin/stepper.h index fb649692d3..ecbc713e36 100644 --- a/Marlin/stepper.h +++ b/Marlin/stepper.h @@ -39,6 +39,13 @@ void st_wake_up(); extern volatile long count_position[NUM_AXIS]; extern volatile int count_direction[NUM_AXIS]; #endif + +void checkHitEndstops(); //call from somwhere to create an serial error message with the locations the endstops where hit, in case they were triggered +void endstops_hit_on_purpose(); //avoid creation of the message, i.e. after homeing and before a routine call of checkHitEndstops(); + + extern block_t *current_block; // A pointer to the block currently being traced + + #endif