Skip to content

Commit

Permalink
Merge branch 'Marlin_v1' of https://github.com/ErikZalm/Marlin into M…
Browse files Browse the repository at this point in the history
…arlin_v1
  • Loading branch information
bkubicek committed Nov 20, 2011
2 parents b21d519 + 85c8a87 commit eeb4f02
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 85 deletions.
2 changes: 1 addition & 1 deletion Marlin/Configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
// 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 HEATER_1_MAXTEMP 275
//#define BED_MAXTEMP 150


Expand Down
154 changes: 75 additions & 79 deletions Marlin/temperature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,50 +90,12 @@ static unsigned long previous_millis_heater, previous_millis_bed_heater;
#endif //WATCHPERIOD

// Init min and max temp with extreme values to prevent false errors during startup
#ifdef HEATER_0_MINTEMP
#ifdef HEATER_0_USES_AD595
static int minttemp_0 = 0;
#else
static int minttemp_0 = 16383;
#endif
#endif //MINTEMP
#ifdef HEATER_0_MAXTEMP
#ifdef HEATER_0_USES_AD595
static int maxttemp_0 = 16383;
#else
static int maxttemp_0 = 0;
#endif
#endif //MAXTEMP

#ifdef HEATER_1_MINTEMP
#ifdef HEATER_1_USES_AD595
static int minttemp_1 = 0;
#else
static int minttemp_1 = 16383;
#endif
#endif //MINTEMP
#ifdef HEATER_1_MAXTEMP
#ifdef HEATER_1_USES_AD595
static int maxttemp_1 = 16383;
#else
static int maxttemp_1 = 0;
#endif
#endif //MAXTEMP

#ifdef BED_MINTEMP
#ifdef BED_USES_AD595
static int bed_minttemp = 0;
#else
static int bed_minttemp = 16383;
#endif
#endif //BED_MINTEMP
#ifdef BED_MAXTEMP
#ifdef BED_USES_AD595
static int bed_maxttemp = 16383;
#else
static int bed_maxttemp = 0;
#endif
#endif //BED_MAXTEMP
static int minttemp_0 = 0;
static int maxttemp_0 = 16383;
static int minttemp_1 = 0;
static int maxttemp_1 = 16383;
static int bed_minttemp = 0;
static int bed_maxttemp = 16383;

//===========================================================================
//=============================functions ============================
Expand Down Expand Up @@ -198,33 +160,49 @@ void manage_heater()
//SERIAL_ECHOLN(" PIDDEBUG Input "<<pid_input<<" Output "<<pid_output" pTerm "<<pTerm<<" iTerm "<<iTerm<<" dTerm "<<dTerm);
#endif //PID_DEBUG
HeaterPower=pid_output;
analogWrite(HEATER_0_PIN, pid_output);
// Check if temperature is within the correct range
if((current_raw[TEMPSENSOR_HOTEND_0] > minttemp_0) && (current_raw[TEMPSENSOR_HOTEND_0] < maxttemp_0)) {
analogWrite(HEATER_0_PIN, pid_output);
}
else {
analogWrite(HEATER_0_PIN, 0);
}
#endif //PIDTEMP

#ifndef PIDTEMP
if(current_raw[0] >= target_raw[0])
{
WRITE(HEATER_0_PIN,LOW);
}
else
{
WRITE(HEATER_0_PIN,HIGH);
// Check if temperature is within the correct range
if((current_raw[TEMPSENSOR_HOTEND_0] > minttemp_0) && (current_raw[TEMPSENSOR_HOTEND_0] < maxttemp_0)) {
if(current_raw[TEMPSENSOR_HOTEND_0] >= target_raw[TEMPSENSOR_HOTEND_0]) {
WRITE(HEATER_0_PIN,LOW);
}
else {
WRITE(HEATER_0_PIN,HIGH);
}
}
else {
WRITE(HEATER_0_PIN,LOW);
}
#endif

if(millis() - previous_millis_bed_heater < BED_CHECK_INTERVAL)
return;
previous_millis_bed_heater = millis();

#if TEMP_1_PIN > -1
if(current_raw[TEMPSENSOR_BED] >= target_raw[TEMPSENSOR_BED])
{
WRITE(HEATER_1_PIN,LOW);
}
else
{
WRITE(HEATER_1_PIN,HIGH);
// Check if temperature is within the correct range
if((current_raw[TEMPSENSOR_BED] > bed_minttemp) && (current_raw[TEMPSENSOR_BED] < bed_maxttemp)) {
if(current_raw[TEMPSENSOR_BED] >= target_raw[TEMPSENSOR_BED])
{
WRITE(HEATER_1_PIN,LOW);
}
else
{
WRITE(HEATER_1_PIN,HIGH);
}
}
else {
WRITE(HEATER_1_PIN,LOW);
}
#endif
}

Expand Down Expand Up @@ -370,6 +348,34 @@ void tp_init()

// Set analog inputs
ADCSRA = 1<<ADEN | 1<<ADSC | 1<<ADIF | 0x07;
DIDR0 = 0;
#ifdef DIDR2
DIDR2 = 0;
#endif
#if (TEMP_0_PIN > -1)
#if TEMP_0_PIN < 8
DIDR0 |= 1 << TEMP_0_PIN;
#else
DIDR2 |= 1<<(TEMP_0_PIN - 8);
ADCSRB = 1<<MUX5;
#endif
#endif
#if (TEMP_1_PIN > -1)
#if TEMP_1_PIN < 8
DIDR0 |= 1<<TEMP_1_PIN;
#else
DIDR2 |= 1<<(TEMP_1_PIN - 8);
ADCSRB = 1<<MUX5;
#endif
#endif
#if (TEMP_2_PIN > -1)
#if TEMP_2_PIN < 8
DIDR0 |= 1 << TEMP_2_PIN;
#else
DIDR2 = 1<<(TEMP_2_PIN - 8);
ADCSRB = 1<<MUX5;
#endif
#endif

// Use timer0 for temperature measurement
// Interleave temperature interrupt with millies interrupt
Expand Down Expand Up @@ -456,10 +462,7 @@ ISR(TIMER0_COMPB_vect)
switch(temp_state) {
case 0: // Prepare TEMP_0
#if (TEMP_0_PIN > -1)
#if TEMP_0_PIN < 8
DIDR0 = 1 << TEMP_0_PIN;
#else
DIDR2 = 1<<(TEMP_0_PIN - 8);
#if TEMP_0_PIN > 7
ADCSRB = 1<<MUX5;
#endif
ADMUX = ((1 << REFS0) | (TEMP_0_PIN & 0x07));
Expand All @@ -478,10 +481,7 @@ ISR(TIMER0_COMPB_vect)
break;
case 2: // Prepare TEMP_1
#if (TEMP_1_PIN > -1)
#if TEMP_1_PIN < 7
DIDR0 = 1<<TEMP_1_PIN;
#else
DIDR2 = 1<<(TEMP_1_PIN - 8);
#if TEMP_1_PIN > 7
ADCSRB = 1<<MUX5;
#endif
ADMUX = ((1 << REFS0) | (TEMP_1_PIN & 0x07));
Expand All @@ -500,10 +500,7 @@ ISR(TIMER0_COMPB_vect)
break;
case 4: // Prepare TEMP_2
#if (TEMP_2_PIN > -1)
#if TEMP_2_PIN < 7
DIDR0 = 1 << TEMP_2_PIN;
#else
DIDR2 = 1<<(TEMP_2_PIN - 8);
#if TEMP_2_PIN > 7
ADCSRB = 1<<MUX5;
#endif
ADMUX = ((1 << REFS0) | (TEMP_2_PIN & 0x07));
Expand Down Expand Up @@ -556,7 +553,7 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_0_PIN > -1)
if(current_raw[TEMPSENSOR_HOTEND_0] >= maxttemp_0) {
target_raw[TEMPSENSOR_HOTEND_0] = 0;
analogWrite(HEATER_0_PIN, 0);
digitalWrite(HEATER_0_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature extruder 0 switched off. MAXTEMP triggered !!");
kill();
Expand All @@ -567,11 +564,10 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_1_PIN > -1)
if(current_raw[TEMPSENSOR_HOTEND_1] >= maxttemp_1) {
target_raw[TEMPSENSOR_HOTEND_1] = 0;
if(current_raw[2] >= maxttemp_1) {
analogWrite(HEATER_2_PIN, 0);
digitalWrite(HEATER_2_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature extruder 1 switched off. MAXTEMP triggered !!");
kill()
kill();
}
#endif
#endif //MAXTEMP
Expand All @@ -580,7 +576,7 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_0_PIN > -1)
if(current_raw[TEMPSENSOR_HOTEND_0] <= minttemp_0) {
target_raw[TEMPSENSOR_HOTEND_0] = 0;
analogWrite(HEATER_0_PIN, 0);
digitalWrite(HEATER_0_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature extruder 0 switched off. MINTEMP triggered !!");
kill();
Expand All @@ -592,7 +588,7 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_2_PIN > -1)
if(current_raw[TEMPSENSOR_HOTEND_1] <= minttemp_1) {
target_raw[TEMPSENSOR_HOTEND_1] = 0;
analogWrite(HEATER_2_PIN, 0);
digitalWrite(HEATER_2_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature extruder 1 switched off. MINTEMP triggered !!");
kill();
Expand All @@ -604,7 +600,7 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_1_PIN > -1)
if(current_raw[1] <= bed_minttemp) {
target_raw[1] = 0;
WRITE(HEATER_1_PIN, 0);
digitalWrite(HEATER_1_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperatur heated bed switched off. MINTEMP triggered !!");
kill();
Expand All @@ -616,7 +612,7 @@ ISR(TIMER0_COMPB_vect)
#if (HEATER_1_PIN > -1)
if(current_raw[1] >= bed_maxttemp) {
target_raw[1] = 0;
WRITE(HEATER_1_PIN, 0);
digitalWrite(HEATER_1_PIN, 0);
SERIAL_ERROR_START;
SERIAL_ERRORLNPGM("Temperature heated bed switched off. MAXTEMP triggered !!");
kill();
Expand Down
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This RepRap firmware is a mashup between <a href="https://github.com/kliment/Spr

Derived from Sprinter and Grbl by Erik van der Zalm.
Sprinters lead developers are Kliment and caru.
Grbls lead developer is Simen Svale Skogsrud.
Grbls lead developer is Simen Svale Skogsrud. Sonney Jeon (Chamnit) improved some parts of grbl
A fork by bkubicek for the Ultimaker was merged, and further development was aided by him.
Some features have been added by:
Lampmaker, Bradley Feldman, and others...
Expand All @@ -23,7 +23,7 @@ Features:
* Look ahead (Keep the speed high when possible. High cornering speed)
* Interrupt based temperature protection
* preliminary support for Matthew Roberts advance algorithm
* For more info see: http://reprap.org/pipermail/reprap-dev/2011-May/003323.html
For more info see: http://reprap.org/pipermail/reprap-dev/2011-May/003323.html
* Full endstop support
* SD Card support
* SD Card folders (works in pronterface)
Expand All @@ -39,8 +39,6 @@ Features:
* Updated sdcardlib
* Heater power reporting. Useful for PID monitoring.

This firmware is optimized for Ultimaker's gen6 electronics (including the Ultimaker 1.5.x daughterboard and Arduino Mega 2560).

The default baudrate is 250000. This baudrate has less jitter and hence errors than the usual 115200 baud, but is less supported by drivers and host-environments.


Expand Down Expand Up @@ -156,13 +154,16 @@ 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.


Configuring and compilation:
============================


Install the arduino software IDE/toolset v22
http://www.arduino.cc/en/Main/Software

For gen6 and sanguinololu the Sanguino directory in the Marlin dir needs to be copied to the arduino environment.
copy Marlin\sanguino <arduino home>\hardware\Sanguino

Install Ultimaker's RepG 25 build
http://software.ultimaker.com
For SD handling and as better substitute (apart from stl manipulation) download
Expand Down

0 comments on commit eeb4f02

Please sign in to comment.