Merged multiple extruder support.

Soft PWM. (Sanguinololu can also have PID temperature control)
Interrupt save WRITE for addresses > 0x0FF
master
Erik van der Zalm 13 years ago
parent 3664ed6aad
commit e017228569

@ -4,11 +4,11 @@
// This determines the communication speed of the printer // This determines the communication speed of the printer
//#define BAUDRATE 250000 #define BAUDRATE 250000
#define BAUDRATE 115200 //#define BAUDRATE 115200
//#define BAUDRATE 230400 //#define BAUDRATE 230400
#define EXTRUDERS 2 #define EXTRUDERS 1
// Frequency limit // Frequency limit
// See nophead's blog for more info // See nophead's blog for more info
@ -32,7 +32,7 @@
// Sanguinololu 1.2 and above = 62 // Sanguinololu 1.2 and above = 62
// Ultimaker = 7, // Ultimaker = 7,
// Teensylu = 8 // Teensylu = 8
#define MOTHERBOARD 33 #define MOTHERBOARD 7
//=========================================================================== //===========================================================================
//=============================Thermal Settings ============================ //=============================Thermal Settings ============================
@ -46,16 +46,21 @@
// 5 is ParCan supplied 104GT-2 100K // 5 is ParCan supplied 104GT-2 100K
// 6 is EPCOS 100k // 6 is EPCOS 100k
// 7 is 100k Honeywell thermistor 135-104LAG-J01 // 7 is 100k Honeywell thermistor 135-104LAG-J01
#define THERMISTORHEATER_0 1
#define THERMISTORHEATER_1 1 //#define THERMISTORHEATER_0 3
#define HEATER_0_USES_THERMISTOR //#define THERMISTORHEATER_1 1
#define HEATER_1_USES_THERMISTOR //#define THERMISTORHEATER_2 1
//#define HEATER_0_USES_AD595
//#define HEATER_0_USES_THERMISTOR
//#define HEATER_1_USES_THERMISTOR
//#define HEATER_2_USES_THERMISTOR
#define HEATER_0_USES_AD595
//#define HEATER_1_USES_AD595 //#define HEATER_1_USES_AD595
//#define HEATER_2_USES_AD595
// Select one of these only to define how the bed temp is read. // Select one of these only to define how the bed temp is read.
#define THERMISTORBED 1 //#define THERMISTORBED 1
#define BED_USES_THERMISTOR //#define BED_USES_THERMISTOR
//#define BED_USES_AD595 //#define BED_USES_AD595
#define BED_CHECK_INTERVAL 5000 //ms #define BED_CHECK_INTERVAL 5000 //ms
@ -73,7 +78,8 @@
//// The minimal temperature defines the temperature below which the heater will not be enabled //// The minimal temperature defines the temperature below which the heater will not be enabled
#define HEATER_0_MINTEMP 5 #define HEATER_0_MINTEMP 5
//#define HEATER_1_MINTEMP 5 //#define HEATER_1_MINTEMP 5
#define BED_MINTEMP 5 //#define HEATER_2_MINTEMP 5
//#define BED_MINTEMP 5
// When temperature exceeds max temp, your heater will be switched off. // When temperature exceeds max temp, your heater will be switched off.
@ -81,7 +87,8 @@
// You should use MINTEMP for thermistor short/failure protection. // You should use MINTEMP for thermistor short/failure protection.
#define HEATER_0_MAXTEMP 275 #define HEATER_0_MAXTEMP 275
//#define HEATER_1_MAXTEMP 275 //#define HEATER_1_MAXTEMP 275
#define BED_MAXTEMP 150 //#define HEATER_2_MAXTEMP 275
//#define BED_MAXTEMP 150
// Wait for Cooldown // Wait for Cooldown
@ -92,21 +99,17 @@
// Heating is finished if a temperature close to this degree shift is reached // Heating is finished if a temperature close to this degree shift is reached
#define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree #define HEATING_EARLY_FINISH_DEG_OFFSET 1 //Degree
// PID settings: // PID settings:
// Uncomment the following line to enable PID support. // Uncomment the following line to enable PID support.
#define PIDTEMP #define PIDTEMP
#define PID_MAX 255 // limits current to nozzle; 255=full current
#ifdef PIDTEMP #ifdef PIDTEMP
#if MOTHERBOARD == 62
#error Sanguinololu does not support PID, sorry. Please disable it.
#endif
//#define PID_DEBUG // Sends debug data to the serial port. //#define PID_DEBUG // Sends debug data to the serial port.
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in % //#define PID_OPENLOOP 1 // Puts PID in open loop. M104 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 PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
#define K1 0.95 //smoothing factor withing the PID #define K1 0.95 //smoothing factor withing the PID
#define PID_dT 0.1 //sampling period of the PID #define PID_dT 0.128 //sampling period of the PID
//To develop some PID settings for your machine, you can initiall follow //To develop some PID settings for your machine, you can initiall follow
// the Ziegler-Nichols method. // the Ziegler-Nichols method.
@ -130,14 +133,14 @@
// #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT) // #define DEFAULT_Kd (PID_SWING_AT_CRITIAL/8./PID_dT)
// Ultitmaker // Ultitmaker
// #define DEFAULT_Kp 22.2 #define DEFAULT_Kp 22.2
// #define DEFAULT_Ki (1.25*PID_dT) #define DEFAULT_Ki (1.25*PID_dT)
// #define DEFAULT_Kd (99/PID_dT) #define DEFAULT_Kd (99/PID_dT)
// Makergear // Makergear
#define DEFAULT_Kp 7.0 // #define DEFAULT_Kp 7.0
#define DEFAULT_Ki 0.1 // #define DEFAULT_Ki 0.1
#define DEFAULT_Kd 12 // #define DEFAULT_Kd 12
// Mendel Parts V9 on 12V // Mendel Parts V9 on 12V
// #define DEFAULT_Kp 63.0 // #define DEFAULT_Kp 63.0
@ -170,12 +173,12 @@
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors #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. // The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. const bool X_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. const bool Y_ENDSTOPS_INVERTING = true; // set to true to invert the logic of the endstops.
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops. const bool Z_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 // For optos H21LOB set to true, for Mendel-Parts newer optos TCST2103 set to false
//#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing #define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
#define X_ENABLE_ON 0 #define X_ENABLE_ON 0
@ -186,7 +189,7 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
// Disables axis when it's not being used. // Disables axis when it's not being used.
#define DISABLE_X false #define DISABLE_X false
#define DISABLE_Y false #define DISABLE_Y false
#define DISABLE_Z true #define DISABLE_Z false
#define DISABLE_E false // For all extruders #define DISABLE_E false // For all extruders
// Inverting axis direction // Inverting axis direction
@ -195,11 +198,11 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
//#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true //#define INVERT_Z_DIR false // for Mendel set to false, for Orca set to true
//#define INVERT_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders //#define INVERT_E*_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false, used for all extruders
#define INVERT_X_DIR false // for Mendel set to false, for Orca set to true #define INVERT_X_DIR true // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false #define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true #define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR true // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
//// ENDSTOP SETTINGS: //// ENDSTOP SETTINGS:
@ -208,15 +211,15 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
#define Y_HOME_DIR -1 #define Y_HOME_DIR -1
#define Z_HOME_DIR -1 #define Z_HOME_DIR -1
#define min_software_endstops false //If true, axis won't move to coordinates less than zero. #define min_software_endstops true //If true, axis won't move to coordinates less than zero.
#define max_software_endstops false //If true, axis won't move to coordinates greater than the defined lengths below. #define max_software_endstops true //If true, axis won't move to coordinates greater than the defined lengths below.
#define X_MAX_LENGTH 210 #define X_MAX_LENGTH 205
#define Y_MAX_LENGTH 210 #define Y_MAX_LENGTH 205
#define Z_MAX_LENGTH 210 #define Z_MAX_LENGTH 200
//// MOVEMENT SETTINGS //// MOVEMENT SETTINGS
#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
#define HOMING_FEEDRATE {30*60, 30*60, 2*60, 0} // set the homing speeds (mm/min) #define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)
//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again: //homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
#define X_HOME_RETRACT_MM 5 #define X_HOME_RETRACT_MM 5
@ -230,9 +233,9 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
// default settings // default settings
//#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker #define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200*8/3,760*1.1} // default steps per unit for ultimaker
//#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 67} //sells mendel with v9 extruder //#define DEFAULT_AXIS_STEPS_PER_UNIT {40, 40, 3333.92, 360} //sells mendel with v9 extruder
#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder //#define DEFAULT_AXIS_STEPS_PER_UNIT {80.3232, 80.8900, 2284.7651, 757.2218} // SAE Prusa w/ Wade extruder
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec) #define DEFAULT_MAX_FEEDRATE {500, 500, 5, 45} // (mm/sec)
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot. #define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
@ -283,10 +286,10 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
// hooke's law says: force = k * distance // hooke's law says: force = k * distance
// bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant // bernoulli's priniciple says: v ^ 2 / 2 + g . h + pressure / density = constant
// so: v ^ 2 is proportional to number of steps we advance the extruder // so: v ^ 2 is proportional to number of steps we advance the extruder
//#define ADVANCE #define ADVANCE
#ifdef ADVANCE #ifdef ADVANCE
#define EXTRUDER_ADVANCE_K .3 #define EXTRUDER_ADVANCE_K .0
#define D_FILAMENT 2.85 #define D_FILAMENT 2.85
#define STEPS_MM_E 836 #define STEPS_MM_E 836
@ -298,10 +301,10 @@ const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of t
//LCD and SD support //LCD and SD support
//#define ULTRA_LCD //general lcd support, also 16x2 //#define ULTRA_LCD //general lcd support, also 16x2
#define SDSUPPORT // Enable SD Card Support in Hardware Console //#define SDSUPPORT // Enable SD Card Support in Hardware Console
#define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers? #define SD_FINISHED_STEPPERRELEASE true //if sd support and the file is finished: disable steppers?
//#define ULTIPANEL #define ULTIPANEL
#ifdef ULTIPANEL #ifdef ULTIPANEL
//#define NEWPANEL //enable this if you have a click-encoder panel //#define NEWPANEL //enable this if you have a click-encoder panel
#define SDSUPPORT #define SDSUPPORT

@ -57,8 +57,6 @@ const prog_char echomagic[] PROGMEM ="echo:";
#define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);} #define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);}
// Macro for getting current active extruder
#define ACTIVE_EXTRUDER (active_extruder)
//things to write to serial from Programmemory. saves 400 to 2k of RAM. //things to write to serial from Programmemory. saves 400 to 2k of RAM.
#define SerialprintPGM(x) serialprintPGM(MYPGM(x)) #define SerialprintPGM(x) serialprintPGM(MYPGM(x))

@ -465,16 +465,16 @@ FORCE_INLINE bool code_seen(char code)
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); \ plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); \
destination[LETTER##_AXIS] = 1.5 * LETTER##_MAX_LENGTH * LETTER##_HOME_DIR; \ destination[LETTER##_AXIS] = 1.5 * LETTER##_MAX_LENGTH * LETTER##_HOME_DIR; \
feedrate = homing_feedrate[LETTER##_AXIS]; \ feedrate = homing_feedrate[LETTER##_AXIS]; \
prepare_move(); \ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \
\ \
current_position[LETTER##_AXIS] = 0;\ current_position[LETTER##_AXIS] = 0;\
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\ plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\
destination[LETTER##_AXIS] = -LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\ destination[LETTER##_AXIS] = -LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\
prepare_move(); \ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \
\ \
destination[LETTER##_AXIS] = 2*LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\ destination[LETTER##_AXIS] = 2*LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\
feedrate = homing_feedrate[LETTER##_AXIS]/2 ; \ feedrate = homing_feedrate[LETTER##_AXIS]/2 ; \
prepare_move(); \ plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate/60, active_extruder); \
\ \
current_position[LETTER##_AXIS] = (LETTER##_HOME_DIR == -1) ? 0 : LETTER##_MAX_LENGTH;\ 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]);\ plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\
@ -541,6 +541,7 @@ FORCE_INLINE void process_commands()
if( code_seen(axis_codes[0]) && code_seen(axis_codes[1]) ) //first diagonal move if( code_seen(axis_codes[0]) && code_seen(axis_codes[1]) ) //first diagonal move
{ {
current_position[X_AXIS] = 0; current_position[Y_AXIS] = 0; current_position[X_AXIS] = 0; current_position[Y_AXIS] = 0;
plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
destination[X_AXIS] = 1.5 * X_MAX_LENGTH * X_HOME_DIR; destination[X_AXIS] = 1.5 * X_MAX_LENGTH * X_HOME_DIR;
destination[Y_AXIS] = 1.5 * Y_MAX_LENGTH * Y_HOME_DIR; destination[Y_AXIS] = 1.5 * Y_MAX_LENGTH * Y_HOME_DIR;
@ -723,7 +724,7 @@ FORCE_INLINE void process_commands()
if (code_seen('S')) setTargetBed(code_value()); if (code_seen('S')) setTargetBed(code_value());
break; break;
case 105 : // M105 case 105 : // M105
tmp_extruder = ACTIVE_EXTRUDER; tmp_extruder = active_extruder;
if(code_seen('T')) { if(code_seen('T')) {
tmp_extruder = code_value(); tmp_extruder = code_value();
if(tmp_extruder >= EXTRUDERS) { if(tmp_extruder >= EXTRUDERS) {
@ -743,6 +744,10 @@ FORCE_INLINE void process_commands()
#else #else
SERIAL_ERROR_START; SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("No thermistors - no temp"); SERIAL_ERRORLNPGM("No thermistors - no temp");
#endif
#ifdef PIDTEMP
SERIAL_PROTOCOLPGM(" @:");
SERIAL_PROTOCOL(getHeaterPower(tmp_extruder));
#endif #endif
SERIAL_PROTOCOLLN(""); SERIAL_PROTOCOLLN("");
return; return;
@ -788,24 +793,26 @@ FORCE_INLINE void process_commands()
while((residencyStart == -1) || while((residencyStart == -1) ||
(residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) { (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) {
#else #else
while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) { while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
#endif //TEMP_RESIDENCY_TIME #endif //TEMP_RESIDENCY_TIME
if( (millis() - codenum) > 1000 ) if( (millis() - codenum) > 1000 )
{ //Print Temp Reading and remaining time every 1 second while heating up/cooling down { //Print Temp Reading and remaining time every 1 second while heating up/cooling down
SERIAL_PROTOCOLPGM("T:"); SERIAL_PROTOCOLPGM("T:");
SERIAL_PROTOCOLLN( degHotend(tmp_extruder) ); SERIAL_PROTOCOL( degHotend(tmp_extruder) );
SERIAL_PROTOCOLPGM(" E:"); SERIAL_PROTOCOLPGM(" E:");
SERIAL_PROTOCOLLN( (int)tmp_extruder ); SERIAL_PROTOCOLLN( (int)tmp_extruder );
SERIAL_PROTOCOLPGM(" W:"); #ifdef TEMP_RESIDENCY_TIME
if(residencyStart > -1) SERIAL_PROTOCOLPGM(" W:");
{ if(residencyStart > -1)
codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000); {
SERIAL_PROTOCOLLN( codenum ); codenum = TEMP_RESIDENCY_TIME - ((millis() - residencyStart) / 1000);
} SERIAL_PROTOCOLLN( codenum );
else }
{ else
SERIAL_PROTOCOLLN( "?" ); {
} SERIAL_PROTOCOLLN( "?" );
}
#endif
codenum = millis(); codenum = millis();
} }
manage_heater(); manage_heater();
@ -834,11 +841,11 @@ FORCE_INLINE void process_commands()
{ {
if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up. if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
{ {
float tt=degHotend(ACTIVE_EXTRUDER); float tt=degHotend(active_extruder);
SERIAL_PROTOCOLPGM("T:"); SERIAL_PROTOCOLPGM("T:");
SERIAL_PROTOCOL(tt); SERIAL_PROTOCOL(tt);
SERIAL_PROTOCOLPGM(" E:"); SERIAL_PROTOCOLPGM(" E:");
SERIAL_PROTOCOLLN( (int)tmp_extruder ); SERIAL_PROTOCOLLN( (int)active_extruder );
SERIAL_PROTOCOLPGM(" B:"); SERIAL_PROTOCOLPGM(" B:");
SERIAL_PROTOCOLLN(degBed()); SERIAL_PROTOCOLLN(degBed());
codenum = millis(); codenum = millis();
@ -1191,6 +1198,7 @@ void manage_inactivity(byte debug)
void kill() void kill()
{ {
cli(); // Stop interrupts
disable_heater(); disable_heater();
disable_x(); disable_x();
@ -1207,4 +1215,4 @@ void kill()
while(1); // Wait for reset while(1); // Wait for reset
} }

File diff suppressed because it is too large Load Diff

@ -1,738 +1,737 @@
#ifndef PINS_H #ifndef PINS_H
#define PINS_H #define PINS_H
/**************************************************************************************** /****************************************************************************************
* Arduino pin assignment * Arduino pin assignment
* *
* ATMega168 * ATMega168
* +-\/-+ * +-\/-+
* PC6 1| |28 PC5 (AI 5 / D19) * PC6 1| |28 PC5 (AI 5 / D19)
* (D 0) PD0 2| |27 PC4 (AI 4 / D18) * (D 0) PD0 2| |27 PC4 (AI 4 / D18)
* (D 1) PD1 3| |26 PC3 (AI 3 / D17) * (D 1) PD1 3| |26 PC3 (AI 3 / D17)
* (D 2) PD2 4| |25 PC2 (AI 2 / D16) * (D 2) PD2 4| |25 PC2 (AI 2 / D16)
* PWM+ (D 3) PD3 5| |24 PC1 (AI 1 / D15) * PWM+ (D 3) PD3 5| |24 PC1 (AI 1 / D15)
* (D 4) PD4 6| |23 PC0 (AI 0 / D14) * (D 4) PD4 6| |23 PC0 (AI 0 / D14)
* VCC 7| |22 GND * VCC 7| |22 GND
* GND 8| |21 AREF * GND 8| |21 AREF
* PB6 9| |20 AVCC * PB6 9| |20 AVCC
* PB7 10| |19 PB5 (D 13) * PB7 10| |19 PB5 (D 13)
* PWM+ (D 5) PD5 11| |18 PB4 (D 12) * PWM+ (D 5) PD5 11| |18 PB4 (D 12)
* PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM * PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM
* (D 7) PD7 13| |16 PB2 (D 10) PWM * (D 7) PD7 13| |16 PB2 (D 10) PWM
* (D 8) PB0 14| |15 PB1 (D 9) PWM * (D 8) PB0 14| |15 PB1 (D 9) PWM
* +----+ * +----+
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 0 #if MOTHERBOARD == 0
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega168__ #ifndef __AVR_ATmega168__
#error Oops! Make sure you have 'Arduino Diecimila' selected from the boards menu. #error Oops! Make sure you have 'Arduino Diecimila' selected from the boards menu.
#endif #endif
#define X_STEP_PIN 2 #define X_STEP_PIN 2
#define X_DIR_PIN 3 #define X_DIR_PIN 3
#define X_ENABLE_PIN -1 #define X_ENABLE_PIN -1
#define X_MIN_PIN 4 #define X_MIN_PIN 4
#define X_MAX_PIN 9 #define X_MAX_PIN 9
#define Y_STEP_PIN 10 #define Y_STEP_PIN 10
#define Y_DIR_PIN 7 #define Y_DIR_PIN 7
#define Y_ENABLE_PIN -1 #define Y_ENABLE_PIN -1
#define Y_MIN_PIN 8 #define Y_MIN_PIN 8
#define Y_MAX_PIN 13 #define Y_MAX_PIN 13
#define Z_STEP_PIN 19 #define Z_STEP_PIN 19
#define Z_DIR_PIN 18 #define Z_DIR_PIN 18
#define Z_ENABLE_PIN 5 #define Z_ENABLE_PIN 5
#define Z_MIN_PIN 17 #define Z_MIN_PIN 17
#define Z_MAX_PIN 16 #define Z_MAX_PIN 16
#define E0_STEP_PIN 11 #define E0_STEP_PIN 11
#define E0_DIR_PIN 12 #define E0_DIR_PIN 12
#define E0_ENABLE_PIN -1 #define E0_ENABLE_PIN -1
#define SDPOWER -1 #define SDPOWER -1
#define SDSS -1 #define SDSS -1
#define LED_PIN -1 #define LED_PIN -1
#define FAN_PIN -1 #define FAN_PIN -1
#define PS_ON_PIN 15 #define PS_ON_PIN 15
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN 6 #define HEATER_0_PIN 6
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_1_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_2_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define HEATER_BED_PIN -1 #define HEATER_BED_PIN -1
#define TEMP_BED_PIN -1 #define TEMP_BED_PIN -1
#endif #endif
/**************************************************************************************** /****************************************************************************************
* Sanguino/RepRap Motherboard with direct-drive extruders * Sanguino/RepRap Motherboard with direct-drive extruders
* *
* ATMega644P * ATMega644P
* *
* +---\/---+ * +---\/---+
* (D 0) PB0 1| |40 PA0 (AI 0 / D31) * (D 0) PB0 1| |40 PA0 (AI 0 / D31)
* (D 1) PB1 2| |39 PA1 (AI 1 / D30) * (D 1) PB1 2| |39 PA1 (AI 1 / D30)
* INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29) * INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D29)
* PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28) * PWM (D 3) PB3 4| |37 PA3 (AI 3 / D28)
* PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27) * PWM (D 4) PB4 5| |36 PA4 (AI 4 / D27)
* MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26) * MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D26)
* MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25) * MISO (D 6) PB6 7| |34 PA6 (AI 6 / D25)
* SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24) * SCK (D 7) PB7 8| |33 PA7 (AI 7 / D24)
* RST 9| |32 AREF * RST 9| |32 AREF
* VCC 10| |31 GND * VCC 10| |31 GND
* GND 11| |30 AVCC * GND 11| |30 AVCC
* XTAL2 12| |29 PC7 (D 23) * XTAL2 12| |29 PC7 (D 23)
* XTAL1 13| |28 PC6 (D 22) * XTAL1 13| |28 PC6 (D 22)
* RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI * RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
* TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO * TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
* INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS * INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
* INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK * INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
* PWM (D 12) PD4 18| |23 PC1 (D 17) SDA * PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
* PWM (D 13) PD5 19| |22 PC0 (D 16) SCL * PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
* PWM (D 14) PD6 20| |21 PD7 (D 15) PWM * PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
* +--------+ * +--------+
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 1 #if MOTHERBOARD == 1
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega644P__ #ifndef __AVR_ATmega644P__
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
#endif #endif
#define X_STEP_PIN 15 #define X_STEP_PIN 15
#define X_DIR_PIN 18 #define X_DIR_PIN 18
#define X_ENABLE_PIN 19 #define X_ENABLE_PIN 19
#define X_MIN_PIN 20 #define X_MIN_PIN 20
#define X_MAX_PIN 21 #define X_MAX_PIN 21
#define Y_STEP_PIN 23 #define Y_STEP_PIN 23
#define Y_DIR_PIN 22 #define Y_DIR_PIN 22
#define Y_ENABLE_PIN 19 #define Y_ENABLE_PIN 19
#define Y_MIN_PIN 25 #define Y_MIN_PIN 25
#define Y_MAX_PIN 26 #define Y_MAX_PIN 26
#define Z_STEP_PIN 29 #define Z_STEP_PIN 29
#define Z_DIR_PIN 30 #define Z_DIR_PIN 30
#define Z_ENABLE_PIN 31 #define Z_ENABLE_PIN 31
#define Z_MIN_PIN 2 #define Z_MIN_PIN 2
#define Z_MAX_PIN 1 #define Z_MAX_PIN 1
#define E0_STEP_PIN 12 #define E0_STEP_PIN 12
#define E0_DIR_PIN 16 #define E0_DIR_PIN 16
#define E0_ENABLE_PIN 3 #define E0_ENABLE_PIN 3
#define SDPOWER -1 #define SDPOWER -1
#define SDSS -1 #define SDSS -1
#define LED_PIN 0 #define LED_PIN 0
#define FAN_PIN -1 #define FAN_PIN -1
#define PS_ON_PIN -1 #define PS_ON_PIN -1
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN 14 #define HEATER_0_PIN 14
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define TEMP_0_PIN 4 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_0_PIN 4 //D27 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_1_PIN -1 #define TEMP_1_PIN -1
#define TEMP_2_PIN -1 #define TEMP_2_PIN -1
#define HEATER_BED_PIN -1 #define HEATER_BED_PIN -1
#define TEMP_BED_PIN -1 #define TEMP_BED_PIN -1
/* Unused (1) (2) (3) 4 5 6 7 8 9 10 11 12 13 (14) (15) (16) 17 (18) (19) (20) (21) (22) (23) 24 (25) (26) (27) 28 (29) (30) (31) */ /* 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 #endif
/**************************************************************************************** /****************************************************************************************
* RepRap Motherboard ****---NOOOOOO RS485/EXTRUDER CONTROLLER!!!!!!!!!!!!!!!!!---******* * RepRap Motherboard ****---NOOOOOO RS485/EXTRUDER CONTROLLER!!!!!!!!!!!!!!!!!---*******
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 2 #if MOTHERBOARD == 2
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega644P__ #ifndef __AVR_ATmega644P__
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
#endif #endif
#define X_STEP_PIN 15 #define X_STEP_PIN 15
#define X_DIR_PIN 18 #define X_DIR_PIN 18
#define X_ENABLE_PIN 19 #define X_ENABLE_PIN 19
#define X_MIN_PIN 20 #define X_MIN_PIN 20
#define X_MAX_PIN 21 #define X_MAX_PIN 21
#define Y_STEP_PIN 23 #define Y_STEP_PIN 23
#define Y_DIR_PIN 22 #define Y_DIR_PIN 22
#define Y_ENABLE_PIN 24 #define Y_ENABLE_PIN 24
#define Y_MIN_PIN 25 #define Y_MIN_PIN 25
#define Y_MAX_PIN 26 #define Y_MAX_PIN 26
#define Z_STEP_PINN 27 #define Z_STEP_PINN 27
#define Z_DIR_PINN 28 #define Z_DIR_PINN 28
#define Z_ENABLE_PIN 29 #define Z_ENABLE_PIN 29
#define Z_MIN_PIN 30 #define Z_MIN_PIN 30
#define Z_MAX_PIN 31 #define Z_MAX_PIN 31
#define E0_STEP_PIN 17 #define E0_STEP_PIN 17
#define E0_DIR_PIN 16 #define E0_DIR_PIN 16
#define E0_ENABLE_PIN -1 #define E0_ENABLE_PIN -1
#define SDPOWER -1 #define SDPOWER -1
#define SDSS 4 #define SDSS 4
#define LED_PIN 0 #define LED_PIN 0
#define SD_CARD_WRITE 2 #define SD_CARD_WRITE 2
#define SD_CARD_DETECT 3 #define SD_CARD_DETECT 3
#define SD_CARD_SELECT 4 #define SD_CARD_SELECT 4
//our RS485 pins //our RS485 pins
#define TX_ENABLE_PIN 12 #define TX_ENABLE_PIN 12
#define RX_ENABLE_PIN 13 #define RX_ENABLE_PIN 13
//pin for controlling the PSU. //pin for controlling the PSU.
#define PS_ON_PIN 14 #define PS_ON_PIN 14
#define FAN_PIN -1 #define FAN_PIN -1
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN -1 #define HEATER_0_PIN -1
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define TEMP_0_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_0_PIN -1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_1_PIN -1 #define TEMP_1_PIN -1
#define TEMP_2_PIN -1 #define TEMP_2_PIN -1
#define HEATER_BED_PIN -1 #define HEATER_BED_PIN -1
#define TEMP_BED_PIN -1 #define TEMP_BED_PIN -1
#endif #endif
/**************************************************************************************** /****************************************************************************************
* Arduino Mega pin assignment * Arduino Mega pin assignment
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 33 #if MOTHERBOARD == 33
#define MOTHERBOARD 3 #define MOTHERBOARD 3
#define RAMPS_V_1_3 #define RAMPS_V_1_3
#endif #endif
#if MOTHERBOARD == 3 #if MOTHERBOARD == 3
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
//////////////////FIX THIS////////////// //////////////////FIX THIS//////////////
#ifndef __AVR_ATmega1280__ #ifndef __AVR_ATmega1280__
#ifndef __AVR_ATmega2560__ #ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
#endif #endif
#endif #endif
// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1 // 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_3
// #define RAMPS_V_1_0 // #define RAMPS_V_1_0
#ifdef RAMPS_V_1_3 #ifdef RAMPS_V_1_3
#define X_STEP_PIN 54 #define X_STEP_PIN 54
#define X_DIR_PIN 55 #define X_DIR_PIN 55
#define X_ENABLE_PIN 38 #define X_ENABLE_PIN 38
#define X_MIN_PIN 3 #define X_MIN_PIN 3
#define X_MAX_PIN 2 //2 //Max endstops default to disabled "-1", set to commented value to enable. #define X_MAX_PIN 2 //2 //Max endstops default to disabled "-1", set to commented value to enable.
#define Y_STEP_PIN 60 #define Y_STEP_PIN 60
#define Y_DIR_PIN 61 #define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56 #define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14 #define Y_MIN_PIN 14
#define Y_MAX_PIN 15 //15 #define Y_MAX_PIN 15 //15
#define Z_STEP_PIN 46 #define Z_STEP_PIN 46
#define Z_DIR_PIN 48 #define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62 #define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18 #define Z_MIN_PIN 18
#define Z_MAX_PIN 19 //19 #define Z_MAX_PIN 19 //19
#define E0_STEP_PIN 26 #define E0_STEP_PIN 26
#define E0_DIR_PIN 28 #define E0_DIR_PIN 28
#define E0_ENABLE_PIN 24 #define E0_ENABLE_PIN 24
#define E1_STEP_PIN 36 #define E1_STEP_PIN 36
#define E1_DIR_PIN 34 #define E1_DIR_PIN 34
#define E1_ENABLE_PIN 30 #define E1_ENABLE_PIN 30
#define SDPOWER -1 #define SDPOWER -1
#define SDSS 53 #define SDSS 53
#define LED_PIN 13 #define LED_PIN 13
#define FAN_PIN 4 #define FAN_PIN 4
#define PS_ON_PIN 12 #define PS_ON_PIN 12
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN 10 // EXTRUDER 1 #define HEATER_0_PIN 10 // EXTRUDER 1
#define HEATER_1_PIN 9 // EXTRUDER 2 #define HEATER_1_PIN 9 // EXTRUDER 2
#define HEATER_2_PIN -1 // EXTRUDER 2 #define HEATER_2_PIN -1 // EXTRUDER 2
#define TEMP_0_PIN 13 // ANALOG NUMBERING #define TEMP_0_PIN 13 // ANALOG NUMBERING
#define TEMP_1_PIN 15 // ANALOG NUMBERING #define TEMP_1_PIN 15 // ANALOG NUMBERING
#define TEMP_2_PIN -1 // ANALOG NUMBERING #define TEMP_2_PIN -1 // ANALOG NUMBERING
#define HEATER_BED_PIN 8 // BED #define HEATER_BED_PIN 8 // BED
#define TEMP_BED_PIN 14 // ANALOG NUMBERING #define TEMP_BED_PIN 14 // ANALOG NUMBERING
#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default #else // RAMPS_V_1_1 or RAMPS_V_1_2 as default
#define X_STEP_PIN 26 #define X_STEP_PIN 26
#define X_DIR_PIN 28 #define X_DIR_PIN 28
#define X_ENABLE_PIN 24 #define X_ENABLE_PIN 24
#define X_MIN_PIN 3 #define X_MIN_PIN 3
#define X_MAX_PIN -1 //2 #define X_MAX_PIN -1 //2
#define Y_STEP_PIN 38 #define Y_STEP_PIN 38
#define Y_DIR_PIN 40 #define Y_DIR_PIN 40
#define Y_ENABLE_PIN 36 #define Y_ENABLE_PIN 36
#define Y_MIN_PIN 16 #define Y_MIN_PIN 16
#define Y_MAX_PIN -1 //17 #define Y_MAX_PIN -1 //17
#define Z_STEP_PIN 44 #define Z_STEP_PIN 44
#define Z_DIR_PIN 46 #define Z_DIR_PIN 46
#define Z_ENABLE_PIN 42 #define Z_ENABLE_PIN 42
#define Z_MIN_PIN 18 #define Z_MIN_PIN 18
#define Z_MAX_PIN -1 //19 #define Z_MAX_PIN -1 //19
#define E0_STEP_PIN 32 #define E0_STEP_PIN 32
#define E0_DIR_PIN 34 #define E0_DIR_PIN 34
#define E0_ENABLE_PIN 30 #define E0_ENABLE_PIN 30
#define SDPOWER 48 #define SDPOWER 48
#define SDSS 53 #define SDSS 53
#define LED_PIN 13 #define LED_PIN 13
#define PS_ON_PIN -1 #define PS_ON_PIN -1
#define KILL_PIN -1 #define KILL_PIN -1
#ifdef RAMPS_V_1_0 // RAMPS_V_1_0 #ifdef RAMPS_V_1_0 // RAMPS_V_1_0
#define HEATER_0_PIN 12 // RAMPS 1.0 #define HEATER_0_PIN 12 // RAMPS 1.0
#define HEATER_BED_PIN -1 // RAMPS 1.0 #define HEATER_BED_PIN -1 // RAMPS 1.0
#define FAN_PIN 11 // RAMPS 1.0 #define FAN_PIN 11 // RAMPS 1.0
#else // RAMPS_V_1_1 or RAMPS_V_1_2 #else // RAMPS_V_1_1 or RAMPS_V_1_2
#define HEATER_0_PIN 10 // RAMPS 1.1 #define HEATER_0_PIN 10 // RAMPS 1.1
#define HEATER_BED_PIN 8 // RAMPS 1.1 #define HEATER_BED_PIN 8 // RAMPS 1.1
#define FAN_PIN 9 // RAMPS 1.1 #define FAN_PIN 9 // RAMPS 1.1
#endif #endif
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define TEMP_0_PIN 2 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_0_PIN 2 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_1_PIN -1 #define TEMP_1_PIN -1
#define TEMP_2_PIN -1 #define TEMP_2_PIN -1
#define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_BED_PIN 1 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#endif #endif
// SPI for Max6675 Thermocouple // SPI for Max6675 Thermocouple
#ifndef SDSUPPORT #ifndef SDSUPPORT
// these pins are defined in the SD library if building with SD support #define SCK_PIN 52 // these pins are defined in the SD library if building with SD support #define SCK_PIN 52
#define MISO_PIN 50 #define MISO_PIN 50
#define MOSI_PIN 51 #define MOSI_PIN 51
#define MAX6675_SS 53 #define MAX6675_SS 53
#else #else
#define MAX6675_SS 49 #define MAX6675_SS 49
#endif #endif
#endif #endif
/**************************************************************************************** /****************************************************************************************
* Duemilanove w/ ATMega328P pin assignment * Duemilanove w/ ATMega328P pin assignment
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 4 #if MOTHERBOARD == 4
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega328P__ #ifndef __AVR_ATmega328P__
#error Oops! Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu.
#endif #endif
#define X_STEP_PIN 19 #define X_STEP_PIN 19
#define X_DIR_PIN 18 #define X_DIR_PIN 18
#define X_ENABLE_PIN -1 #define X_ENABLE_PIN -1
#define X_MIN_PIN 17 #define X_MIN_PIN 17
#define X_MAX_PIN -1 #define X_MAX_PIN -1
#define Y_STEP_PIN 10 #define Y_STEP_PIN 10
#define Y_DIR_PIN 7 #define Y_DIR_PIN 7
#define Y_ENABLE_PIN -1 #define Y_ENABLE_PIN -1
#define Y_MIN_PIN 8 #define Y_MIN_PIN 8
#define Y_MAX_PIN -1 #define Y_MAX_PIN -1
#define Z_STEP_PIN 13 #define Z_STEP_PIN 13
#define Z_DIR_PIN 3 #define Z_DIR_PIN 3
#define Z_ENABLE_PIN 2 #define Z_ENABLE_PIN 2
#define Z_MIN_PIN 4 #define Z_MIN_PIN 4
#define Z_MAX_PIN -1 #define Z_MAX_PIN -1
#define E0_STEP_PIN 11 #define E0_STEP_PIN 11
#define E0_DIR_PIN 12 #define E0_DIR_PIN 12
#define E0_ENABLE_PIN -1 #define E0_ENABLE_PIN -1
#define SDPOWER -1 #define SDPOWER -1
#define SDSS -1 #define SDSS -1
#define LED_PIN -1 #define LED_PIN -1
#define FAN_PIN 5 #define FAN_PIN 5
#define PS_ON_PIN -1 #define PS_ON_PIN -1
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN 6 #define HEATER_0_PIN 6
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! #define TEMP_0_PIN 0 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
#define TEMP_1_PIN -1 #define TEMP_1_PIN -1
#define TEMP_2_PIN -1 #define TEMP_2_PIN -1
#define HEATER_BED_PIN -1 #define HEATER_BED_PIN -1
#define TEMP_BED_PIN -1 #define TEMP_BED_PIN -1
#endif #endif
/**************************************************************************************** /****************************************************************************************
* Gen6 pin assignment * Gen6 pin assignment
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 5 #if MOTHERBOARD == 5
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega644P__ #ifndef __AVR_ATmega644P__
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
#endif #endif
//x axis pins //x axis pins
#define X_STEP_PIN 15 #define X_STEP_PIN 15
#define X_DIR_PIN 18 #define X_DIR_PIN 18
#define X_ENABLE_PIN 19 #define X_ENABLE_PIN 19
#define X_MIN_PIN 20 #define X_MIN_PIN 20
#define X_MAX_PIN -1 #define X_MAX_PIN -1
//y axis pins //y axis pins
#define Y_STEP_PIN 23 #define Y_STEP_PIN 23
#define Y_DIR_PIN 22 #define Y_DIR_PIN 22
#define Y_ENABLE_PIN 24 #define Y_ENABLE_PIN 24
#define Y_MIN_PIN 25 #define Y_MIN_PIN 25
#define Y_MAX_PIN -1 #define Y_MAX_PIN -1
//z axis pins //z axis pins
#define Z_STEP_PIN 27 #define Z_STEP_PIN 27
#define Z_DIR_PIN 28 #define Z_DIR_PIN 28
#define Z_ENABLE_PIN 29 #define Z_ENABLE_PIN 29
#define Z_MIN_PIN 30 #define Z_MIN_PIN 30
#define Z_MAX_PIN -1 #define Z_MAX_PIN -1
//extruder pins //extruder pins
#define E0_STEP_PIN 4 //Edited @ EJE Electronics 20100715 #define E0_STEP_PIN 4 //Edited @ EJE Electronics 20100715
#define E0_DIR_PIN 2 //Edited @ EJE Electronics 20100715 #define E0_DIR_PIN 2 //Edited @ EJE Electronics 20100715
#define E0_ENABLE_PIN 3 //Added @ EJE Electronics 20100715 #define E0_ENABLE_PIN 3 //Added @ EJE Electronics 20100715
#define TEMP_0_PIN 5 //changed @ rkoeppl 20110410 #define TEMP_0_PIN 5 //changed @ rkoeppl 20110410
#define TEMP_1_PIN -1 //changed @ rkoeppl 20110410 #define TEMP_1_PIN -1 //changed @ rkoeppl 20110410
#define TEMP_2_PIN -1 //changed @ rkoeppl 20110410 #define TEMP_2_PIN -1 //changed @ rkoeppl 20110410
#define HEATER_0_PIN 14 //changed @ rkoeppl 20110410 #define HEATER_0_PIN 14 //changed @ rkoeppl 20110410
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#define HEATER_BED_PIN -1 //changed @ rkoeppl 20110410 #define HEATER_BED_PIN -1 //changed @ rkoeppl 20110410
#define TEMP_BED_PIN -1 //changed @ rkoeppl 20110410 #define TEMP_BED_PIN -1 //changed @ rkoeppl 20110410
#define SDPOWER -1 #define SDPOWER -1
#define SDSS 17 #define SDSS 17
#define LED_PIN -1 //changed @ rkoeppl 20110410 #define LED_PIN -1 //changed @ rkoeppl 20110410
#define FAN_PIN -1 //changed @ rkoeppl 20110410 #define FAN_PIN -1 //changed @ rkoeppl 20110410
#define PS_ON_PIN -1 //changed @ rkoeppl 20110410 #define PS_ON_PIN -1 //changed @ rkoeppl 20110410
//our pin for debugging. //our pin for debugging.
#define DEBUG_PIN 0 #define DEBUG_PIN 0
//our RS485 pins //our RS485 pins
#define TX_ENABLE_PIN 12 #define TX_ENABLE_PIN 12
#define RX_ENABLE_PIN 13 #define RX_ENABLE_PIN 13
#endif #endif
/**************************************************************************************** /****************************************************************************************
* Sanguinololu pin assignment * Sanguinololu pin assignment
* *
****************************************************************************************/ ****************************************************************************************/
#if MOTHERBOARD == 62 #if MOTHERBOARD == 62
#define MOTHERBOARD 6 #define MOTHERBOARD 6
#define SANGUINOLOLU_V_1_2 #define SANGUINOLOLU_V_1_2
#endif #endif
#if MOTHERBOARD == 6 #if MOTHERBOARD == 6
#define KNOWN_BOARD 1 #define KNOWN_BOARD 1
#ifndef __AVR_ATmega644P__ #ifndef __AVR_ATmega644P__
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
#endif #endif
#define X_STEP_PIN 15 #define X_STEP_PIN 15
#define X_DIR_PIN 21 #define X_DIR_PIN 21
#define X_MIN_PIN 18 #define X_MIN_PIN 18
#define X_MAX_PIN -2 #define X_MAX_PIN -2
#define Y_STEP_PIN 22 #define Y_STEP_PIN 22
#define Y_DIR_PIN 23 #define Y_DIR_PIN 23
#define Y_MIN_PIN 19 #define Y_MIN_PIN 19
#define Y_MAX_PIN -1 #define Y_MAX_PIN -1
#define Z_STEP_PIN 3 #define Z_STEP_PIN 3
#define Z_DIR_PIN 2 #define Z_DIR_PIN 2
#define Z_MIN_PIN 20 #define Z_MIN_PIN 20
#define Z_MAX_PIN -1 #define Z_MAX_PIN -1
#define E0_STEP_PIN 1 #define E0_STEP_PIN 1
#define E0_DIR_PIN 0 #define E0_DIR_PIN 0
#define LED_PIN -1 #define LED_PIN -1
#define FAN_PIN -1 #define FAN_PIN -1
#define PS_ON_PIN -1 #define PS_ON_PIN -1
#define KILL_PIN -1 #define KILL_PIN -1
#define HEATER_0_PIN 13 // (extruder) #define HEATER_0_PIN 13 // (extruder)
#define HEATER_1_PIN -1 #define HEATER_1_PIN -1
#define HEATER_2_PIN -1 #define HEATER_2_PIN -1
#ifdef SANGUINOLOLU_V_1_2 #ifdef SANGUINOLOLU_V_1_2
#define HEATER_BED_PIN 12 // (bed) #define HEATER_BED_PIN 12 // (bed)
#define X_ENABLE_PIN 14 #define X_ENABLE_PIN 14
#define Y_ENABLE_PIN 14 #define Y_ENABLE_PIN 14
#define Z_ENABLE_PIN 26 #define Z_ENABLE_PIN 26
#define E0_ENABLE_PIN 14 #define E0_ENABLE_PIN 14
#else #else
#define HEATER_BED_PIN 14 // (bed) #define HEATER_BED_PIN 14 // (bed)
#define X_ENABLE_PIN -1 #define X_ENABLE_PIN -1
#define Y_ENABLE_PIN -1 #define Y_ENABLE_PIN -1
#define Z_ENABLE_PIN -1 #define Z_ENABLE_PIN -1
#define E0_ENABLE_PIN -1 #define E0_ENABLE_PIN -1
#endif #endif
#define TEMP_0_PIN 7 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder) #define TEMP_0_PIN 7 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
#define TEMP_1_PIN -1 #define TEMP_1_PIN -1
#define TEMP_2_PIN -1 #define TEMP_2_PIN -1
#define TEMP_BED_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed) #define TEMP_BED_PIN 6 // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
#define SDPOWER -1 #define SDPOWER -1
#define SDSS 31 #define SDSS 31
#endif #endif
#if MOTHERBOARD == 7 #if MOTHERBOARD == 7
#define KNOWN_BOARD #define KNOWN_BOARD
/***************************************************************** /*****************************************************************
* Ultimaker pin assignment * Ultimaker pin assignment
******************************************************************/ ******************************************************************/
#ifndef __AVR_ATmega1280__ #ifndef __AVR_ATmega1280__
#ifndef __AVR_ATmega2560__ #ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu. #error Oops! Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
#endif #endif
#endif #endif
#define X_STEP_PIN 25 #define X_STEP_PIN 25
#define X_DIR_PIN 23 #define X_DIR_PIN 23
#define X_MIN_PIN 22 #define X_MIN_PIN 22
#define X_MAX_PIN 24 #define X_MAX_PIN 24
#define X_ENABLE_PIN 27 #define X_ENABLE_PIN 27
#define Y_STEP_PIN 31 #define Y_STEP_PIN 31
#define Y_DIR_PIN 33 #define Y_DIR_PIN 33
#define Y_MIN_PIN 26 #define Y_MIN_PIN 26
#define Y_MAX_PIN 28 #define Y_MAX_PIN 28
#define Y_ENABLE_PIN 29 #define Y_ENABLE_PIN 29
#define Z_STEP_PIN 37 #define Z_STEP_PIN 37
#define Z_DIR_PIN 39 #define Z_DIR_PIN 39
#define Z_MIN_PIN 30 #define Z_MIN_PIN 30
#define Z_MAX_PIN 32 #define Z_MAX_PIN 32
#define Z_ENABLE_PIN 35 #define Z_ENABLE_PIN 35
#define HEATER_BED_PIN 4 #define HEATER_BED_PIN 4
#define TEMP_BED_PIN 11 #define TEMP_BED_PIN 11
#define EXTRUDER_0_STEP_PIN 43 #define HEATER_0_PIN 2
#define EXTRUDER_0_DIR_PIN 45 #define TEMP_0_PIN 8
#define EXTRUDER_0_ENABLE_PIN 41
#define HEATER_0_PIN 2 #define EXTRUDER_1_HEATER_PIN 3
#define TEMP_0_PIN 8 #define EXTRUDER_1_TEMPERATURE_PIN 10
#define HEATER_1_PIN 51
#define EXTRUDER_1_STEP_PIN 49 #define TEMP_1_PIN 3
#define EXTRUDER_1_DIR_PIN 47
#define EXTRUDER_1_ENABLE_PIN 51 #define HEATER_2_PIN -1
#define EXTRUDER_1_HEATER_PIN 3 #define TEMP_2_PIN -1
#define EXTRUDER_1_TEMPERATURE_PIN 10
#define HEATER_1_PIN 51 #define E0_STEP_PIN 43
#define TEMP_1_PIN 3 #define E0_DIR_PIN 45
#define E0_ENABLE_PIN 41
#define E1_STEP_PIN 49
#define E0_STEP_PIN EXTRUDER_0_STEP_PIN #define E1_DIR_PIN 47
#define E0_DIR_PIN EXTRUDER_0_DIR_PIN #define E1_ENABLE_PIN 51
#define E0_ENABLE_PIN EXTRUDER_0_ENABLE_PIN
#define SDPOWER -1
#define SDPOWER -1 #define SDSS 53
#define SDSS 53 #define LED_PIN 13
#define LED_PIN 13 #define FAN_PIN 7
#define FAN_PIN 7 #define PS_ON_PIN 12
#define PS_ON_PIN 12 #define KILL_PIN -1
#define KILL_PIN -1
#ifdef ULTRA_LCD
#ifdef ULTRA_LCD
#ifdef NEWPANEL
#ifdef NEWPANEL //arduino pin witch triggers an piezzo beeper
//arduino pin witch triggers an piezzo beeper #define BEEPER 18
#define BEEPER 18
#define LCD_PINS_RS 20
#define LCD_PINS_RS 20 #define LCD_PINS_ENABLE 17
#define LCD_PINS_ENABLE 17 #define LCD_PINS_D4 16
#define LCD_PINS_D4 16 #define LCD_PINS_D5 21
#define LCD_PINS_D5 21 #define LCD_PINS_D6 5
#define LCD_PINS_D6 5 #define LCD_PINS_D7 6
#define LCD_PINS_D7 6
//buttons are directly attached
//buttons are directly attached #define BTN_EN1 40
#define BTN_EN1 40 #define BTN_EN2 42
#define BTN_EN2 42 #define BTN_ENC 19 //the click
#define BTN_ENC 19 //the click
#define BLEN_C 2
#define BLEN_C 2 #define BLEN_B 1
#define BLEN_B 1 #define BLEN_A 0
#define BLEN_A 0
#define SDCARDDETECT 38
#define SDCARDDETECT 38
//encoder rotation values
//encoder rotation values #define encrot0 0
#define encrot0 0 #define encrot1 2
#define encrot1 2 #define encrot2 3
#define encrot2 3 #define encrot3 1
#define encrot3 1 #else //old style panel with shift register
#else //old style panel with shift register //arduino pin witch triggers an piezzo beeper
//arduino pin witch triggers an piezzo beeper #define BEEPER 18
#define BEEPER 18
//buttons are attached to a shift register
//buttons are attached to a shift register #define SHIFT_CLK 38
#define SHIFT_CLK 38 #define SHIFT_LD 42
#define SHIFT_LD 42 #define SHIFT_OUT 40
#define SHIFT_OUT 40 #define SHIFT_EN 17
#define SHIFT_EN 17
#define LCD_PINS_RS 16
#define LCD_PINS_RS 16 #define LCD_PINS_ENABLE 5
#define LCD_PINS_ENABLE 5 #define LCD_PINS_D4 6
#define LCD_PINS_D4 6 #define LCD_PINS_D5 21
#define LCD_PINS_D5 21 #define LCD_PINS_D6 20
#define LCD_PINS_D6 20 #define LCD_PINS_D7 19
#define LCD_PINS_D7 19
//encoder rotation values
//encoder rotation values #define encrot0 0
#define encrot0 0 #define encrot1 2
#define encrot1 2 #define encrot2 3
#define encrot2 3 #define encrot3 1
#define encrot3 1
//bits in the shift register that carry the buttons for:
//bits in the shift register that carry the buttons for: // left up center down right red
// left up center down right red #define BL_LE 7
#define BL_LE 7 #define BL_UP 6
#define BL_UP 6 #define BL_MI 5
#define BL_MI 5 #define BL_DW 4
#define BL_DW 4 #define BL_RI 3
#define BL_RI 3 #define BL_ST 2
#define BL_ST 2
#define BLEN_B 1
#define BLEN_B 1 #define BLEN_A 0
#define BLEN_A 0 #endif
#endif #endif //ULTRA_LCD
#endif //ULTRA_LCD
#endif
#endif
/****************************************************************************************
/**************************************************************************************** * Teensylu 0.7 pin assingments (ATMEGA90USB)
* Teensylu 0.7 pin assingments (ATMEGA90USB) * Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE! ****************************************************************************************/
****************************************************************************************/ #if MOTHERBOARD == 8
#if MOTHERBOARD == 8 #define MOTHERBOARD 8
#define MOTHERBOARD 8 #define KNOWN_BOARD 1
#define KNOWN_BOARD 1
#define X_STEP_PIN 0
#define X_STEP_PIN 0 #define X_DIR_PIN 1
#define X_DIR_PIN 1 #define X_ENABLE_PIN 39
#define X_ENABLE_PIN 39 #define X_MIN_PIN 13
#define X_MIN_PIN 13 #define X_MAX_PIN -1
#define X_MAX_PIN -1
#define Y_STEP_PIN 2
#define Y_STEP_PIN 2 #define Y_DIR_PIN 3
#define Y_DIR_PIN 3 #define Y_ENABLE_PIN 38
#define Y_ENABLE_PIN 38 #define Y_MIN_PIN 14
#define Y_MIN_PIN 14 #define Y_MAX_PIN -1
#define Y_MAX_PIN -1
#define Z_STEP_PIN 4
#define Z_STEP_PIN 4 #define Z_DIR_PIN 5
#define Z_DIR_PIN 5 #define Z_ENABLE_PIN 23
#define Z_ENABLE_PIN 23 #define Z_MIN_PIN 15
#define Z_MIN_PIN 15 #define Z_MAX_PIN -1
#define Z_MAX_PIN -1
#define E0_STEP_PIN 6
#define E0_STEP_PIN 6 #define E0_DIR_PIN 7
#define E0_DIR_PIN 7 #define E0_ENABLE_PIN 19
#define E0_ENABLE_PIN 19
#define HEATER_0_PIN 21 // Extruder
#define HEATER_0_PIN 21 // Extruder #define HEATER_1_PIN -1
#define HEATER_1_PIN -1 #define HEATER_2_PIN -1
#define HEATER_2_PIN -1 #define HEATER_BED_PIN 20 // Bed
#define HEATER_BED_PIN 20 // Bed #define FAN_PIN 22 // Fan
#define FAN_PIN 22 // Fan
#define TEMP_0_PIN 7 // Extruder
#define TEMP_0_PIN 7 // Extruder #define TEMP_1_PIN -1
#define TEMP_1_PIN -1 #define TEMP_2_PIN -1
#define TEMP_2_PIN -1 #define TEMP_BED_PIN 6 // Bed
#define TEMP_BED_PIN 6 // Bed
#define SDPOWER -1
#define SDPOWER -1 #define SDSS 8
#define SDSS 8 #define LED_PIN -1
#define LED_PIN -1 #define PS_ON_PIN -1
#define PS_ON_PIN -1 #define KILL_PIN -1
#define KILL_PIN -1 #define ALARM_PIN -1
#define ALARM_PIN -1
#ifndef SDSUPPORT
#ifndef SDSUPPORT // these pins are defined in the SD library if building with SD support
// these pins are defined in the SD library if building with SD support #define SCK_PIN 9
#define SCK_PIN 9 #define MISO_PIN 11
#define MISO_PIN 11 #define MOSI_PIN 10
#define MOSI_PIN 10 #endif
#endif #endif
#endif
#ifndef KNOWN_BOARD
#ifndef KNOWN_BOARD #error Unknown MOTHERBOARD value in configuration.h
#error Unknown MOTHERBOARD value in configuration.h #endif
#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!
//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 _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN
#define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN #if EXTRUDERS == 3
#if EXTRUDERS == 3 #define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN
#define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN #define _E2_PINS E2_STEP_PIN, E2_DIR_PIN, E2_ENABLE_PIN
#define _E2_PINS E2_STEP_PIN, E2_DIR_PIN, E2_ENABLE_PIN #elif EXTRUDERS == 2
#elif EXTRUDERS == 2 #define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN
#define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN #define _E2_PINS -1
#define _E2_PINS -1 #elif EXTRUDERS == 1
#elif EXTRUDERS == 1 #define _E1_PINS -1
#define _E1_PINS -1 #define _E2_PINS -1
#define _E2_PINS -1 #else
#else #error Unsupported number of extruders
#error Unsupported number of extruders #endif
#endif #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, LED_PIN, PS_ON_PIN, \
#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, LED_PIN, PS_ON_PIN, \ HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, \
HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, \ HEATER_BED_PIN, FAN_PIN, \
HEATER_BED_PIN, FAN_PIN, \ _E0_PINS, _E1_PINS, _E2_PINS, \
_E0_PINS, _E1_PINS, _E2_PINS, \ TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN, TEMP_BED_PIN }
TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN, TEMP_BED_PIN }
#endif #endif

@ -191,8 +191,8 @@ void calculate_trapezoid_for_block(block_t *block, float entry_factor, float exi
} }
#ifdef ADVANCE #ifdef ADVANCE
long initial_advance = block->advance*entry_factor*entry_factor; volatile long initial_advance = block->advance*entry_factor*entry_factor;
long final_advance = block->advance*exit_factor*exit_factor; volatile long final_advance = block->advance*exit_factor*exit_factor;
#endif // ADVANCE #endif // ADVANCE
// block->accelerate_until = accelerate_steps; // block->accelerate_until = accelerate_steps;

@ -57,7 +57,7 @@ volatile static unsigned long step_events_completed; // The number of step event
static long advance_rate, advance, final_advance = 0; static long advance_rate, advance, final_advance = 0;
static long old_advance = 0; static long old_advance = 0;
#endif #endif
static long e_steps; static long e_steps[3];
static unsigned char busy = false; // TRUE when SIG_OUTPUT_COMPARE1A is being serviced. Used to avoid retriggering that handler. static unsigned char busy = false; // TRUE when SIG_OUTPUT_COMPARE1A is being serviced. Used to avoid retriggering that handler.
static long acceleration_time, deceleration_time; static long acceleration_time, deceleration_time;
//static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate; //static unsigned long accelerate_until, decelerate_after, acceleration_rate, initial_rate, final_rate, nominal_rate;
@ -266,7 +266,7 @@ FORCE_INLINE void trapezoid_generator_reset() {
advance = current_block->initial_advance; advance = current_block->initial_advance;
final_advance = current_block->final_advance; final_advance = current_block->final_advance;
// Do E steps + advance steps // Do E steps + advance steps
e_steps += ((advance >>8) - old_advance); e_steps[current_block->active_extruder] += ((advance >>8) - old_advance);
old_advance = advance >>8; old_advance = advance >>8;
#endif #endif
deceleration_time = 0; deceleration_time = 0;
@ -303,8 +303,8 @@ ISR(TIMER1_COMPA_vect)
counter_z = counter_x; counter_z = counter_x;
counter_e = counter_x; counter_e = counter_x;
step_events_completed = 0; step_events_completed = 0;
// #ifdef ADVANCE // #ifdef ADVANCE
e_steps = 0; // e_steps[current_block->active_extruder] = 0;
// #endif // #endif
} }
else { else {
@ -418,11 +418,11 @@ ISR(TIMER1_COMPA_vect)
#ifndef ADVANCE #ifndef ADVANCE
if ((out_bits & (1<<E_AXIS)) != 0) { // -direction if ((out_bits & (1<<E_AXIS)) != 0) { // -direction
NORM_E_DIR(); REV_E_DIR();
count_direction[E_AXIS]=-1; count_direction[E_AXIS]=-1;
} }
else { // +direction else { // +direction
REV_E_DIR(); NORM_E_DIR();
count_direction[E_AXIS]=-1; count_direction[E_AXIS]=-1;
} }
#endif //!ADVANCE #endif //!ADVANCE
@ -437,10 +437,10 @@ ISR(TIMER1_COMPA_vect)
if (counter_e > 0) { if (counter_e > 0) {
counter_e -= current_block->step_event_count; counter_e -= current_block->step_event_count;
if ((out_bits & (1<<E_AXIS)) != 0) { // - direction if ((out_bits & (1<<E_AXIS)) != 0) { // - direction
e_steps--; e_steps[current_block->active_extruder]--;
} }
else { else {
e_steps++; e_steps[current_block->active_extruder]++;
} }
} }
#endif //ADVANCE #endif //ADVANCE
@ -503,7 +503,7 @@ ISR(TIMER1_COMPA_vect)
} }
//if(advance > current_block->advance) advance = current_block->advance; //if(advance > current_block->advance) advance = current_block->advance;
// Do E steps + advance steps // Do E steps + advance steps
e_steps += ((advance >>8) - old_advance); e_steps[current_block->active_extruder] += ((advance >>8) - old_advance);
old_advance = advance >>8; old_advance = advance >>8;
#endif #endif
@ -532,7 +532,7 @@ ISR(TIMER1_COMPA_vect)
} }
if(advance < final_advance) advance = final_advance; if(advance < final_advance) advance = final_advance;
// Do E steps + advance steps // Do E steps + advance steps
e_steps += ((advance >>8) - old_advance); e_steps[current_block->active_extruder] += ((advance >>8) - old_advance);
old_advance = advance >>8; old_advance = advance >>8;
#endif //ADVANCE #endif //ADVANCE
} }
@ -557,20 +557,50 @@ ISR(TIMER1_COMPA_vect)
old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz) old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
OCR0A = old_OCR0A; OCR0A = old_OCR0A;
// Set E direction (Depends on E direction + advance) // Set E direction (Depends on E direction + advance)
for(unsigned char i=0; i<4;) { for(unsigned char i=0; i<4;i++) {
WRITE_E_STEP(LOW); if (e_steps[0] != 0) {
if (e_steps == 0) break; WRITE(E0_STEP_PIN, LOW);
i++; if (e_steps[0] < 0) {
if (e_steps < 0) { WRITE(E0_DIR_PIN, INVERT_E0_DIR);
WRITE_E_DIR(INVERT_E_DIR); e_steps[0]++;
e_steps++; WRITE(E0_STEP_PIN, HIGH);
WRITE_E_STEP(HIGH); }
} else if (e_steps[0] > 0) {
else if (e_steps > 0) { WRITE(E0_DIR_PIN, !INVERT_E0_DIR);
WRITE_E_DIR(!INVERT_E_DIR); e_steps[0]--;
e_steps--; WRITE(E0_STEP_PIN, HIGH);
WRITE_E_STEP(HIGH); }
}
#if EXTRUDERS > 1
if (e_steps[1] != 0) {
WRITE(E1_STEP_PIN, LOW);
if (e_steps[1] < 0) {
WRITE(E1_DIR_PIN, INVERT_E1_DIR);
e_steps[1]++;
WRITE(E1_STEP_PIN, HIGH);
}
else if (e_steps[1] > 0) {
WRITE(E1_DIR_PIN, !INVERT_E1_DIR);
e_steps[1]--;
WRITE(E1_STEP_PIN, HIGH);
}
}
#endif
#if EXTRUDERS > 2
if (e_steps[2] != 0) {
WRITE(E2_STEP_PIN, LOW);
if (e_steps[2] < 0) {
WRITE(E2_DIR_PIN, INVERT_E2_DIR);
e_steps[2]++;
WRITE(E2_STEP_PIN, HIGH);
}
else if (e_steps[2] > 0) {
WRITE(E2_DIR_PIN, !INVERT_E2_DIR);
e_steps[2]--;
WRITE(E2_STEP_PIN, HIGH);
}
} }
#endif
} }
} }
#endif // ADVANCE #endif // ADVANCE
@ -712,7 +742,9 @@ void st_init()
TCCR0A &= ~(1<<WGM01); TCCR0A &= ~(1<<WGM01);
TCCR0A &= ~(1<<WGM00); TCCR0A &= ~(1<<WGM00);
#endif #endif
e_steps = 0; e_steps[0] = 0;
e_steps[1] = 0;
e_steps[2] = 0;
TIMSK0 |= (1<<OCIE0A); TIMSK0 |= (1<<OCIE0A);
#endif //ADVANCE #endif //ADVANCE

@ -23,6 +23,21 @@
#include "planner.h" #include "planner.h"
#if EXTRUDERS > 2
#define WRITE_E_STEP(v) { if(current_block->active_extruder == 2) { WRITE(E2_STEP_PIN, v); } else { if(current_block->active_extruder == 1) { WRITE(E1_STEP_PIN, v); } else { WRITE(E0_STEP_PIN, v); }}}
#define NORM_E_DIR() { if(current_block->active_extruder == 2) { WRITE(!E2_DIR_PIN, INVERT_E2_DIR); } else { if(current_block->active_extruder == 1) { WRITE(!E1_DIR_PIN, INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, !INVERT_E0_DIR); }}}
#define REV_E_DIR() { if(current_block->active_extruder == 2) { WRITE(E2_DIR_PIN, INVERT_E2_DIR); } else { if(current_block->active_extruder == 1) { WRITE(E1_DIR_PIN, INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, INVERT_E0_DIR); }}}
#elif EXTRUDERS > 1
#define WRITE_E_STEP(v) { if(current_block->active_extruder == 1) { WRITE(E1_STEP_PIN, v); } else { WRITE(E0_STEP_PIN, v); }}
#define NORM_E_DIR() { if(current_block->active_extruder == 1) { WRITE(E1_DIR_PIN, !INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, !INVERT_E0_DIR); }}
#define REV_E_DIR() { if(current_block->active_extruder == 1) { WRITE(E1_DIR_PIN, INVERT_E1_DIR); } else { WRITE(E0_DIR_PIN, INVERT_E0_DIR); }}
#else
#define WRITE_E_STEP(v) WRITE(E0_STEP_PIN, v)
#define NORM_E_DIR() WRITE(E0_DIR_PIN, !INVERT_E0_DIR)
#define REV_E_DIR() WRITE(E0_DIR_PIN, INVERT_E0_DIR)
#endif
// Initialize and start the stepper motor subsystem // Initialize and start the stepper motor subsystem
void st_init(); void st_init();

@ -26,7 +26,6 @@
It has preliminary support for Matthew Roberts advance algorithm It has preliminary support for Matthew Roberts advance algorithm
http://reprap.org/pipermail/reprap-dev/2011-May/003323.html http://reprap.org/pipermail/reprap-dev/2011-May/003323.html
This firmware is optimized for gen6 electronics.
*/ */
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
@ -82,6 +81,7 @@ static unsigned long previous_millis_bed_heater;
// static float pid_output[EXTRUDERS]; // static float pid_output[EXTRUDERS];
static bool pid_reset[EXTRUDERS]; static bool pid_reset[EXTRUDERS];
#endif //PIDTEMP #endif //PIDTEMP
static unsigned char soft_pwm[EXTRUDERS];
#ifdef WATCHPERIOD #ifdef WATCHPERIOD
static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all static int watch_raw[EXTRUDERS] = { -1000 }; // the first value used for all
@ -140,6 +140,10 @@ void updatePID()
#endif #endif
} }
int getHeaterPower(int heater) {
return soft_pwm[heater];
}
void manage_heater() void manage_heater()
{ {
#ifdef USE_WATCHDOG #ifdef USE_WATCHDOG
@ -198,15 +202,16 @@ void manage_heater()
} }
#endif #endif
// Check if temperature is within the correct range // Check if temperature is within the correct range
if((current_raw[e] > minttemp[e]) && (current_raw[e] < maxttemp[e])) if((current_raw[e] > minttemp[e]) && (current_raw[e] < maxttemp[e]))
{ {
analogWrite(heater_pin_map[e], pid_output); //analogWrite(heater_pin_map[e], pid_output);
} soft_pwm[e] = (int)pid_output >> 1;
else { }
analogWrite(heater_pin_map[e], 0); else {
} //analogWrite(heater_pin_map[e], 0);
soft_pwm[e] = 0;
}
} // End extruder for loop } // End extruder for loop
if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL) if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)
@ -418,7 +423,6 @@ void tp_init()
DIDR0 |= 1 << TEMP_0_PIN; DIDR0 |= 1 << TEMP_0_PIN;
#else #else
DIDR2 |= 1<<(TEMP_0_PIN - 8); DIDR2 |= 1<<(TEMP_0_PIN - 8);
ADCSRB = 1<<MUX5;
#endif #endif
#endif #endif
#if (TEMP_1_PIN > -1) #if (TEMP_1_PIN > -1)
@ -426,7 +430,6 @@ void tp_init()
DIDR0 |= 1<<TEMP_1_PIN; DIDR0 |= 1<<TEMP_1_PIN;
#else #else
DIDR2 |= 1<<(TEMP_1_PIN - 8); DIDR2 |= 1<<(TEMP_1_PIN - 8);
ADCSRB = 1<<MUX5;
#endif #endif
#endif #endif
#if (TEMP_2_PIN > -1) #if (TEMP_2_PIN > -1)
@ -434,7 +437,6 @@ void tp_init()
DIDR0 |= 1 << TEMP_2_PIN; DIDR0 |= 1 << TEMP_2_PIN;
#else #else
DIDR2 = 1<<(TEMP_2_PIN - 8); DIDR2 = 1<<(TEMP_2_PIN - 8);
ADCSRB = 1<<MUX5;
#endif #endif
#endif #endif
#if (TEMP_BED_PIN > -1) #if (TEMP_BED_PIN > -1)
@ -442,7 +444,6 @@ void tp_init()
DIDR0 |= 1<<TEMP_BED_PIN; DIDR0 |= 1<<TEMP_BED_PIN;
#else #else
DIDR2 |= 1<<(TEMP_BED_PIN - 8); DIDR2 |= 1<<(TEMP_BED_PIN - 8);
ADCSRB = 1<<MUX5;
#endif #endif
#endif #endif
@ -506,6 +507,7 @@ void disable_heater()
{ {
#if TEMP_0_PIN > -1 #if TEMP_0_PIN > -1
target_raw[0]=0; target_raw[0]=0;
soft_pwm[0]=0;
#if HEATER_0_PIN > -1 #if HEATER_0_PIN > -1
digitalWrite(HEATER_0_PIN,LOW); digitalWrite(HEATER_0_PIN,LOW);
#endif #endif
@ -513,6 +515,7 @@ void disable_heater()
#if TEMP_1_PIN > -1 #if TEMP_1_PIN > -1
target_raw[1]=0; target_raw[1]=0;
soft_pwm[1]=0;
#if HEATER_1_PIN > -1 #if HEATER_1_PIN > -1
digitalWrite(HEATER_1_PIN,LOW); digitalWrite(HEATER_1_PIN,LOW);
#endif #endif
@ -520,6 +523,7 @@ void disable_heater()
#if TEMP_2_PIN > -1 #if TEMP_2_PIN > -1
target_raw[2]=0; target_raw[2]=0;
soft_pwm[2]=0;
#if HEATER_2_PIN > -1 #if HEATER_2_PIN > -1
digitalWrite(HEATER_2_PIN,LOW); digitalWrite(HEATER_2_PIN,LOW);
#endif #endif
@ -533,6 +537,26 @@ void disable_heater()
#endif #endif
} }
void max_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0);
SERIAL_ERROR_START;
SERIAL_ERRORLN(e);
SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
}
void min_temp_error(uint8_t e) {
digitalWrite(heater_pin_map[e], 0);
SERIAL_ERROR_START;
SERIAL_ERRORLN(e);
SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
}
void bed_max_temp_error(void) {
digitalWrite(HEATER_BED_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
}
// Timer 0 is shared with millies // Timer 0 is shared with millies
ISR(TIMER0_COMPB_vect) ISR(TIMER0_COMPB_vect)
{ {
@ -543,6 +567,33 @@ ISR(TIMER0_COMPB_vect)
static unsigned long raw_temp_2_value = 0; static unsigned long raw_temp_2_value = 0;
static unsigned long raw_temp_bed_value = 0; static unsigned long raw_temp_bed_value = 0;
static unsigned char temp_state = 0; static unsigned char temp_state = 0;
static unsigned char pwm_count = 1;
static unsigned char soft_pwm_0;
static unsigned char soft_pwm_1;
static unsigned char soft_pwm_2;
if(pwm_count == 0){
soft_pwm_0 = soft_pwm[0];
if(soft_pwm_0 > 0) WRITE(HEATER_0_PIN,1);
#if EXTRUDERS > 1
soft_pwm_1 = soft_pwm[1];
if(soft_pwm_1 > 0) WRITE(HEATER_1_PIN,1);
#endif
#if EXTRUDERS > 2
soft_pwm_2 = soft_pwm[2];
if(soft_pwm_2 > 0) WRITE(HEATER_2_PIN,1);
#endif
}
if(soft_pwm_0 <= pwm_count) WRITE(HEATER_0_PIN,0);
#if EXTRUDERS > 1
if(soft_pwm_1 <= pwm_count) WRITE(HEATER_1_PIN,0);
#endif
#if EXTRUDERS > 2
if(soft_pwm_2 <= pwm_count) WRITE(HEATER_2_PIN,0);
#endif
pwm_count++;
pwm_count &= 0x7f;
switch(temp_state) { switch(temp_state) {
case 0: // Prepare TEMP_0 case 0: // Prepare TEMP_0
@ -628,10 +679,10 @@ ISR(TIMER0_COMPB_vect)
temp_state = 0; temp_state = 0;
temp_count++; temp_count++;
break; break;
default: // default:
SERIAL_ERROR_START; // SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temp measurement error!"); // SERIAL_ERRORLNPGM("Temp measurement error!");
break; // break;
} }
if(temp_count >= 16) // 8 ms * 16 = 128ms. if(temp_count >= 16) // 8 ms * 16 = 128ms.
@ -671,21 +722,15 @@ ISR(TIMER0_COMPB_vect)
raw_temp_2_value = 0; raw_temp_2_value = 0;
raw_temp_bed_value = 0; raw_temp_bed_value = 0;
for(int e = 0; e < EXTRUDERS; e++) { for(unsigned char e = 0; e < EXTRUDERS; e++) {
if(current_raw[e] >= maxttemp[e]) { if(current_raw[e] >= maxttemp[e]) {
target_raw[e] = 0; target_raw[e] = 0;
digitalWrite(heater_pin_map[e], 0); max_temp_error(e);
SERIAL_ERROR_START; kill();;
SERIAL_ERRORLN((int)e);
SERIAL_ERRORLNPGM(": Extruder switched off. MAXTEMP triggered !");
kill();
} }
if(current_raw[e] <= minttemp[e]) { if(current_raw[e] <= minttemp[e]) {
target_raw[e] = 0; target_raw[e] = 0;
digitalWrite(heater_pin_map[e], 0); min_temp_error(e);
SERIAL_ERROR_START;
SERIAL_ERRORLN(e);
SERIAL_ERRORLNPGM(": Extruder switched off. MINTEMP triggered !");
kill(); kill();
} }
} }
@ -693,9 +738,7 @@ ISR(TIMER0_COMPB_vect)
#if defined(BED_MAXTEMP) && (HEATER_BED_PIN > -1) #if defined(BED_MAXTEMP) && (HEATER_BED_PIN > -1)
if(current_raw_bed >= bed_maxttemp) { if(current_raw_bed >= bed_maxttemp) {
target_raw_bed = 0; target_raw_bed = 0;
digitalWrite(HEATER_BED_PIN, 0); bed_max_temp_error();
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
kill(); kill();
} }
#endif #endif

@ -1,143 +1,144 @@
/* /*
temperature.h - temperature controller temperature.h - temperature controller
Part of Marlin Part of Marlin
Copyright (c) 2011 Erik van der Zalm Copyright (c) 2011 Erik van der Zalm
Grbl is free software: you can redistribute it and/or modify Grbl is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
Grbl is distributed in the hope that it will be useful, Grbl is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with Grbl. If not, see <http://www.gnu.org/licenses/>. along with Grbl. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef temperature_h #ifndef temperature_h
#define temperature_h #define temperature_h
#include "Marlin.h" #include "Marlin.h"
#include "fastio.h" #include "fastio.h"
#ifdef PID_ADD_EXTRUSION_RATE #ifdef PID_ADD_EXTRUSION_RATE
#include "stepper.h" #include "stepper.h"
#endif #endif
// public functions // public functions
void tp_init(); //initialise the heating void tp_init(); //initialise the heating
void manage_heater(); //it is critical that this is called periodically. void manage_heater(); //it is critical that this is called periodically.
//low leven conversion routines //low leven conversion routines
// do not use this routines and variables outsie of temperature.cpp // do not use this routines and variables outsie of temperature.cpp
int temp2analog(int celsius, uint8_t e); int temp2analog(int celsius, uint8_t e);
int temp2analogBed(int celsius); int temp2analogBed(int celsius);
float analog2temp(int raw, uint8_t e); float analog2temp(int raw, uint8_t e);
float analog2tempBed(int raw); float analog2tempBed(int raw);
extern int target_raw[EXTRUDERS]; extern int target_raw[EXTRUDERS];
extern int heatingtarget_raw[EXTRUDERS]; extern int heatingtarget_raw[EXTRUDERS];
extern int current_raw[EXTRUDERS]; extern int current_raw[EXTRUDERS];
extern int target_raw_bed; extern int target_raw_bed;
extern int current_raw_bed; extern int current_raw_bed;
extern float Kp,Ki,Kd,Kc; extern float Kp,Ki,Kd,Kc;
#ifdef PIDTEMP #ifdef PIDTEMP
extern float pid_setpoint[EXTRUDERS]; extern float pid_setpoint[EXTRUDERS];
#endif #endif
#ifdef WATCHPERIOD #ifdef WATCHPERIOD
extern int watch_raw[EXTRUDERS] ; extern int watch_raw[EXTRUDERS] ;
extern unsigned long watchmillis; extern unsigned long watchmillis;
#endif #endif
//high level conversion routines, for use outside of temperature.cpp //high level conversion routines, for use outside of temperature.cpp
//inline so that there is no performance decrease. //inline so that there is no performance decrease.
//deg=degreeCelsius //deg=degreeCelsius
FORCE_INLINE float degHotend(uint8_t extruder) { FORCE_INLINE float degHotend(uint8_t extruder) {
return analog2temp(current_raw[extruder], extruder); return analog2temp(current_raw[extruder], extruder);
}; };
FORCE_INLINE float degBed() { FORCE_INLINE float degBed() {
return analog2tempBed(current_raw_bed); return analog2tempBed(current_raw_bed);
}; };
FORCE_INLINE float degTargetHotend(uint8_t extruder) { FORCE_INLINE float degTargetHotend(uint8_t extruder) {
return analog2temp(target_raw[extruder], extruder); return analog2temp(target_raw[extruder], extruder);
}; };
FORCE_INLINE float degTargetBed() { FORCE_INLINE float degTargetBed() {
return analog2tempBed(target_raw_bed); return analog2tempBed(target_raw_bed);
}; };
FORCE_INLINE void setTargetHotend(const float &celsius, uint8_t extruder) { FORCE_INLINE void setTargetHotend(const float &celsius, uint8_t extruder) {
target_raw[extruder] = temp2analog(celsius, extruder); target_raw[extruder] = temp2analog(celsius, extruder);
#ifdef PIDTEMP #ifdef PIDTEMP
pid_setpoint[extruder] = celsius; pid_setpoint[extruder] = celsius;
#endif //PIDTEMP #endif //PIDTEMP
}; };
FORCE_INLINE void setTargetBed(const float &celsius) { FORCE_INLINE void setTargetBed(const float &celsius) {
target_raw_bed = temp2analogBed(celsius); target_raw_bed = temp2analogBed(celsius);
}; };
FORCE_INLINE bool isHeatingHotend(uint8_t extruder){ FORCE_INLINE bool isHeatingHotend(uint8_t extruder){
return target_raw[extruder] > current_raw[extruder]; return target_raw[extruder] > current_raw[extruder];
}; };
FORCE_INLINE bool isHeatingBed() { FORCE_INLINE bool isHeatingBed() {
return target_raw_bed > current_raw_bed; return target_raw_bed > current_raw_bed;
}; };
FORCE_INLINE bool isCoolingHotend(uint8_t extruder) { FORCE_INLINE bool isCoolingHotend(uint8_t extruder) {
return target_raw[extruder] < current_raw[extruder]; return target_raw[extruder] < current_raw[extruder];
}; };
FORCE_INLINE bool isCoolingBed() { FORCE_INLINE bool isCoolingBed() {
return target_raw_bed < current_raw_bed; return target_raw_bed < current_raw_bed;
}; };
#define degHotend0() degHotend(0) #define degHotend0() degHotend(0)
#define degTargetHotend0() degTargetHotend(0) #define degTargetHotend0() degTargetHotend(0)
#define setTargetHotend0(_celsius) setTargetHotend((_celsius), 0) #define setTargetHotend0(_celsius) setTargetHotend((_celsius), 0)
#define isHeatingHotend0() isHeatingHotend(0) #define isHeatingHotend0() isHeatingHotend(0)
#define isCoolingHotend0() isCoolingHotend(0) #define isCoolingHotend0() isCoolingHotend(0)
#if EXTRUDERS > 1 #if EXTRUDERS > 1
#define degHotend1() degHotend(1) #define degHotend1() degHotend(1)
#define degTargetHotend1() degTargetHotend(1) #define degTargetHotend1() degTargetHotend(1)
#define setTargetHotend1(_celsius) setTargetHotend((_celsius), 1) #define setTargetHotend1(_celsius) setTargetHotend((_celsius), 1)
#define isHeatingHotend1() isHeatingHotend(1) #define isHeatingHotend1() isHeatingHotend(1)
#define isCoolingHotend1() isCoolingHotend(1) #define isCoolingHotend1() isCoolingHotend(1)
#endif #endif
#if EXTRUDERS > 2 #if EXTRUDERS > 2
#define degHotend2() degHotend(2) #define degHotend2() degHotend(2)
#define degTargetHotend2() degTargetHotend(2) #define degTargetHotend2() degTargetHotend(2)
#define setTargetHotend2(_celsius) setTargetHotend((_celsius), 2) #define setTargetHotend2(_celsius) setTargetHotend((_celsius), 2)
#define isHeatingHotend2() isHeatingHotend(2) #define isHeatingHotend2() isHeatingHotend(2)
#define isCoolingHotend2() isCoolingHotend(2) #define isCoolingHotend2() isCoolingHotend(2)
#endif #endif
#if EXTRUDERS > 3 #if EXTRUDERS > 3
#error Invalid number of extruders #error Invalid number of extruders
#endif #endif
FORCE_INLINE void autotempShutdown(){ FORCE_INLINE void autotempShutdown(){
#ifdef AUTOTEMP #ifdef AUTOTEMP
if(autotemp_enabled) if(autotemp_enabled)
{ {
autotemp_enabled=false; autotemp_enabled=false;
if(degTargetHotend(ACTIVE_EXTRUDER)>autotemp_min) if(degTargetHotend(ACTIVE_EXTRUDER)>autotemp_min)
setTargetHotend(0,ACTIVE_EXTRUDER); setTargetHotend(0,ACTIVE_EXTRUDER);
} }
#endif #endif
} }
void disable_heater(); int getHeaterPower(int heater);
void setWatch(); void disable_heater();
void updatePID(); void setWatch();
void updatePID();
#endif
#endif

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save