summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Sprinter/Sprinter.h42
-rw-r--r--Sprinter/Sprinter.pde165
2 files changed, 136 insertions, 71 deletions
diff --git a/Sprinter/Sprinter.h b/Sprinter/Sprinter.h
index 1a324a0..10318ae 100644
--- a/Sprinter/Sprinter.h
+++ b/Sprinter/Sprinter.h
@@ -33,6 +33,34 @@ int analog2tempu(int raw, const short table[][2], int numtemps, int source);
#define temp2analogBed( c ) temp2analogu((c),bedtemptable,BNUMTEMPS,BEDSOURCE)
#define analog2temp( c ) analog2tempu((c),temptable,NUMTEMPS,HEATERSOURCE)
#define analog2tempBed( c ) analog2tempu((c),bedtemptable,BNUMTEMPS,BEDSOURCE)
+#if X_ENABLE_PIN > -1
+#define enable_x() digitalWrite(X_ENABLE_PIN, X_ENABLE_ON)
+#define disable_x() digitalWrite(X_ENABLE_PIN,!X_ENABLE_ON)
+#else
+#define enable_x() ;
+#define disable_x() ;
+#endif
+#if Y_ENABLE_PIN > -1
+#define enable_y() digitalWrite(Y_ENABLE_PIN, Y_ENABLE_ON)
+#define disable_y() digitalWrite(Y_ENABLE_PIN,!Y_ENABLE_ON)
+#else
+#define enable_y() ;
+#define disable_y() ;
+#endif
+#if Z_ENABLE_PIN > -1
+#define enable_z() digitalWrite(Z_ENABLE_PIN, Z_ENABLE_ON)
+#define disable_z() digitalWrite(Z_ENABLE_PIN,!Z_ENABLE_ON)
+#else
+#define enable_z() ;
+#define disable_z() ;
+#endif
+#if E_ENABLE_PIN > -1
+#define enable_e() digitalWrite(E_ENABLE_PIN, E_ENABLE_ON)
+#define disable_e() digitalWrite(E_ENABLE_PIN,!E_ENABLE_ON)
+#else
+#define enable_e() ;
+#define disable_e() ;
+#endif
void FlushSerialRequestResend();
void ClearToSend();
@@ -40,18 +68,6 @@ void ClearToSend();
void get_coordinates();
void prepare_move();
void linear_move(unsigned long x_steps_remaining, unsigned long y_steps_remaining, unsigned long z_steps_remaining, unsigned long e_steps_remaining);
-void disable_x();
-void disable_y();
-void disable_z();
-void disable_e();
-void enable_x();
-void enable_y();
-void enable_z();
-void enable_e();
-void do_x_step();
-void do_y_step();
-void do_z_step();
-void do_e_step();
-
+void do_step(int axis);
void kill(byte debug);
diff --git a/Sprinter/Sprinter.pde b/Sprinter/Sprinter.pde
index cc31668..a2ea948 100644
--- a/Sprinter/Sprinter.pde
+++ b/Sprinter/Sprinter.pde
@@ -57,6 +57,7 @@
//Stepper Movement Variables
+
char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
bool move_direction[NUM_AXIS];
const int STEP_PIN[NUM_AXIS] = {X_STEP_PIN, Y_STEP_PIN, Z_STEP_PIN, E_STEP_PIN};
@@ -64,19 +65,11 @@ unsigned long axis_previous_micros[NUM_AXIS];
unsigned long previous_micros = 0, previous_millis_heater, previous_millis_bed_heater;
unsigned long move_steps_to_take[NUM_AXIS];
#ifdef RAMP_ACCELERATION
- unsigned long axis_max_interval[] = {100000000.0 / (max_start_speed_units_per_second[0] * axis_steps_per_unit[0]),
- 100000000.0 / (max_start_speed_units_per_second[1] * axis_steps_per_unit[1]),
- 100000000.0 / (max_start_speed_units_per_second[2] * axis_steps_per_unit[2]),
- 100000000.0 / (max_start_speed_units_per_second[3] * axis_steps_per_unit[3])}; //TODO: refactor all things like this in a function, or move to setup()
- // in a for loop
- unsigned long max_interval;
- unsigned long axis_steps_per_sqr_second[] = {max_acceleration_units_per_sq_second[0] * axis_steps_per_unit[0],
- max_acceleration_units_per_sq_second[1] * axis_steps_per_unit[1], max_acceleration_units_per_sq_second[2] * axis_steps_per_unit[2],
- max_acceleration_units_per_sq_second[3] * axis_steps_per_unit[3]};
- unsigned long axis_travel_steps_per_sqr_second[] = {max_travel_acceleration_units_per_sq_second[0] * axis_steps_per_unit[0],
- max_travel_acceleration_units_per_sq_second[1] * axis_steps_per_unit[1], max_travel_acceleration_units_per_sq_second[2] * axis_steps_per_unit[2],
- max_travel_acceleration_units_per_sq_second[3] * axis_steps_per_unit[3]};
- unsigned long steps_per_sqr_second, plateau_steps;
+unsigned long axis_max_interval[NUM_AXIS];
+unsigned long axis_steps_per_sqr_second[NUM_AXIS];
+unsigned long axis_travel_steps_per_sqr_second[NUM_AXIS];
+unsigned long max_interval;
+unsigned long steps_per_sqr_second, plateau_steps;
#endif
boolean acceleration_enabled = false, accelerating = false;
unsigned long interval;
@@ -211,51 +204,116 @@ void setup()
fromsd[i] = false;
}
- //Initialize Step Pins
- for(int i=0; i < NUM_AXIS; i++) if(STEP_PIN[i] > -1) pinMode(STEP_PIN[i],OUTPUT);
//Initialize Dir Pins
- if(X_DIR_PIN > -1) pinMode(X_DIR_PIN,OUTPUT);
- if(Y_DIR_PIN > -1) pinMode(Y_DIR_PIN,OUTPUT);
- if(Z_DIR_PIN > -1) pinMode(Z_DIR_PIN,OUTPUT);
- if(E_DIR_PIN > -1) pinMode(E_DIR_PIN,OUTPUT);
-
- //Steppers default to disabled.
- if(X_ENABLE_PIN > -1) if(!X_ENABLE_ON) digitalWrite(X_ENABLE_PIN,HIGH);
- if(Y_ENABLE_PIN > -1) if(!Y_ENABLE_ON) digitalWrite(Y_ENABLE_PIN,HIGH);
- if(Z_ENABLE_PIN > -1) if(!Z_ENABLE_ON) digitalWrite(Z_ENABLE_PIN,HIGH);
- if(E_ENABLE_PIN > -1) if(!E_ENABLE_ON) digitalWrite(E_ENABLE_PIN,HIGH);
-
- //endstop pullups
+ #if X_DIR_PIN > -1
+ pinMode(X_DIR_PIN,OUTPUT);
+ #endif
+ #if Y_DIR_PIN > -1
+ pinMode(Y_DIR_PIN,OUTPUT);
+ #endif
+ #if Z_DIR_PIN > -1
+ pinMode(Z_DIR_PIN,OUTPUT);
+ #endif
+ #if E_DIR_PIN > -1
+ pinMode(E_DIR_PIN,OUTPUT);
+ #endif
+
+ //Initialize Enable Pins - steppers default to disabled.
+
+ #if (X_ENABLE_PIN > -1)
+ pinMode(X_ENABLE_PIN,OUTPUT);
+ if(!X_ENABLE_ON) digitalWrite(X_ENABLE_PIN,HIGH);
+ #endif
+ #if (Y_ENABLE_PIN > -1)
+ pinMode(Y_ENABLE_PIN,OUTPUT);
+ if(!Y_ENABLE_ON) digitalWrite(Y_ENABLE_PIN,HIGH);
+ #endif
+ #if (Z_ENABLE_PIN > -1)
+ pinMode(Z_ENABLE_PIN,OUTPUT);
+ if(!Z_ENABLE_ON) digitalWrite(Z_ENABLE_PIN,HIGH);
+ #endif
+ #if (E_ENABLE_PIN > -1)
+ pinMode(E_ENABLE_PIN,OUTPUT);
+ if(!E_ENABLE_ON) digitalWrite(E_ENABLE_PIN,HIGH);
+ #endif
+
+ //endstops and pullups
#ifdef ENDSTOPPULLUPS
- if(X_MIN_PIN > -1) { pinMode(X_MIN_PIN,INPUT); digitalWrite(X_MIN_PIN,HIGH);}
- if(Y_MIN_PIN > -1) { pinMode(Y_MIN_PIN,INPUT); digitalWrite(Y_MIN_PIN,HIGH);}
- if(Z_MIN_PIN > -1) { pinMode(Z_MIN_PIN,INPUT); digitalWrite(Z_MIN_PIN,HIGH);}
- if(X_MAX_PIN > -1) { pinMode(X_MAX_PIN,INPUT); digitalWrite(X_MAX_PIN,HIGH);}
- if(Y_MAX_PIN > -1) { pinMode(Y_MAX_PIN,INPUT); digitalWrite(Y_MAX_PIN,HIGH);}
- if(Z_MAX_PIN > -1) { pinMode(Z_MAX_PIN,INPUT); digitalWrite(Z_MAX_PIN,HIGH);}
+ #if X_MIN_PIN > -1
+ pinMode(X_MIN_PIN,INPUT);
+ digitalWrite(X_MIN_PIN,HIGH);
+ #endif
+ #if X_MAX_PIN > -1
+ pinMode(X_MAX_PIN,INPUT);
+ digitalWrite(X_MAX_PIN,HIGH);
+ #endif
+ #if Y_MIN_PIN > -1
+ pinMode(Y_MIN_PIN,INPUT);
+ digitalWrite(Y_MIN_PIN,HIGH);
+ #endif
+ #if Y_MAX_PIN > -1
+ pinMode(Y_MAX_PIN,INPUT);
+ digitalWrite(Y_MAX_PIN,HIGH);
+ #endif
+ #if Z_MIN_PIN > -1
+ pinMode(Z_MIN_PIN,INPUT);
+ digitalWrite(Z_MIN_PIN,HIGH);
+ #endif
+ #if Z_MAX_PIN > -1
+ pinMode(Z_MAX_PIN,INPUT);
+ digitalWrite(Z_MAX_PIN,HIGH);
+ #endif
+ #else
+ #if X_MIN_PIN > -1
+ pinMode(X_MIN_PIN,INPUT);
+ #endif
+ #if X_MAX_PIN > -1
+ pinMode(X_MAX_PIN,INPUT);
+ #endif
+ #if Y_MIN_PIN > -1
+ pinMode(Y_MIN_PIN,INPUT);
+ #endif
+ #if Y_MAX_PIN > -1
+ pinMode(Y_MAX_PIN,INPUT);
+ #endif
+ #if Z_MIN_PIN > -1
+ pinMode(Z_MIN_PIN,INPUT);
#endif
- //Initialize Enable Pins
- if(X_ENABLE_PIN > -1) pinMode(X_ENABLE_PIN,OUTPUT);
- if(Y_ENABLE_PIN > -1) pinMode(Y_ENABLE_PIN,OUTPUT);
- if(Z_ENABLE_PIN > -1) pinMode(Z_ENABLE_PIN,OUTPUT);
- if(E_ENABLE_PIN > -1) pinMode(E_ENABLE_PIN,OUTPUT);
-
- if(HEATER_0_PIN > -1) pinMode(HEATER_0_PIN,OUTPUT);
- if(HEATER_1_PIN > -1) pinMode(HEATER_1_PIN,OUTPUT);
+ #if Z_MAX_PIN > -1
+ pinMode(Z_MAX_PIN,INPUT);
+ #endif
+ #endif
+
+ #if (HEATER_0_PIN > -1)
+ pinMode(HEATER_0_PIN,OUTPUT);
+ #endif
+ #if (HEATER_1_PIN > -1)
+ pinMode(HEATER_1_PIN,OUTPUT);
+ #endif
+
+//Initialize Step Pins
+ for(int i=0; i < NUM_AXIS; i++){
+ if(STEP_PIN[i] > -1) pinMode(STEP_PIN[i],OUTPUT);
+ #ifdef RAMP_ACCELERATION
+ axis_max_interval[i] = 100000000.0 / (max_start_speed_units_per_second[i] * axis_steps_per_unit[i]);
+ axis_steps_per_sqr_second[i] = max_acceleration_units_per_sq_second[i] * axis_steps_per_unit[i];
+ axis_travel_steps_per_sqr_second[i] = max_travel_acceleration_units_per_sq_second[i] * axis_steps_per_unit[i];
+ #endif
+ }
#ifdef HEATER_USES_MAX6675
- digitalWrite(SCK_PIN,0);
pinMode(SCK_PIN,OUTPUT);
-
- digitalWrite(MOSI_PIN,1);
+ digitalWrite(SCK_PIN,0);
+
pinMode(MOSI_PIN,OUTPUT);
-
- digitalWrite(MISO_PIN,1);
+ digitalWrite(MOSI_PIN,1);
+
pinMode(MISO_PIN,INPUT);
-
- digitalWrite(MAX6675_SS,1);
+ digitalWrite(MISO_PIN,1);
+
pinMode(MAX6675_SS,OUTPUT);
+ digitalWrite(MAX6675_SS,1);
#endif
#ifdef SDSUPPORT
@@ -682,7 +740,7 @@ inline void process_commands()
Serial.println();
#endif
#else
- Serial.println("No thermistors - no temp");
+ #error No temperature source available
#endif
return;
//break;
@@ -1150,15 +1208,6 @@ inline void do_step(int axis) {
digitalWrite(STEP_PIN[axis], LOW);
}
-inline void disable_x() { if(X_ENABLE_PIN > -1) digitalWrite(X_ENABLE_PIN,!X_ENABLE_ON); }
-inline void disable_y() { if(Y_ENABLE_PIN > -1) digitalWrite(Y_ENABLE_PIN,!Y_ENABLE_ON); }
-inline void disable_z() { if(Z_ENABLE_PIN > -1) digitalWrite(Z_ENABLE_PIN,!Z_ENABLE_ON); }
-inline void disable_e() { if(E_ENABLE_PIN > -1) digitalWrite(E_ENABLE_PIN,!E_ENABLE_ON); }
-inline void enable_x() { if(X_ENABLE_PIN > -1) digitalWrite(X_ENABLE_PIN, X_ENABLE_ON); }
-inline void enable_y() { if(Y_ENABLE_PIN > -1) digitalWrite(Y_ENABLE_PIN, Y_ENABLE_ON); }
-inline void enable_z() { if(Z_ENABLE_PIN > -1) digitalWrite(Z_ENABLE_PIN, Z_ENABLE_ON); }
-inline void enable_e() { if(E_ENABLE_PIN > -1) digitalWrite(E_ENABLE_PIN, E_ENABLE_ON); }
-
#define HEAT_INTERVAL 250
#ifdef HEATER_USES_MAX6675
unsigned long max6675_previous_millis = 0;