Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MarlinKimbra
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
MarlinKimbra
Commits
b2569354
Commit
b2569354
authored
Jan 11, 2015
by
MagoKimbra
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix temperature
parent
52727590
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
384 additions
and
107 deletions
+384
-107
temperature.cpp
MarlinKimbra/temperature.cpp
+382
-107
temperature.h
MarlinKimbra/temperature.h
+2
-0
No files found.
MarlinKimbra/temperature.cpp
View file @
b2569354
...
...
@@ -1369,84 +1369,357 @@ ISR(TIMER0_COMPB_vect)
static
unsigned
char
temp_state
=
12
;
static
unsigned
char
pwm_count
=
(
1
<<
SOFT_PWM_SCALE
);
static
unsigned
char
soft_pwm_0
;
#ifndef SINGLENOZZLE
#if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
static
unsigned
char
soft_pwm_1
;
#endif
#if EXTRUDERS > 2
static
unsigned
char
soft_pwm_2
;
#endif
#if EXTRUDERS > 3
static
unsigned
char
soft_pwm_3
;
#endif
#endif // !SINGLENOZZLE
#if HEATER_BED_PIN > -1
#ifdef SLOW_PWM_HEATERS
static
unsigned
char
slow_pwm_count
=
0
;
static
unsigned
char
state_heater_0
=
0
;
static
unsigned
char
state_timer_heater_0
=
0
;
#endif
#ifndef SINGLENOZZLE
#if (EXTRUDERS > 1) || defined(HEATERS_PARALLEL)
static
unsigned
char
soft_pwm_1
;
#ifdef SLOW_PWM_HEATERS
static
unsigned
char
state_heater_1
=
0
;
static
unsigned
char
state_timer_heater_1
=
0
;
#endif
#endif
#if EXTRUDERS > 2
static
unsigned
char
soft_pwm_2
;
#ifdef SLOW_PWM_HEATERS
static
unsigned
char
state_heater_2
=
0
;
static
unsigned
char
state_timer_heater_2
=
0
;
#endif
#endif
#if EXTRUDERS > 3
static
unsigned
char
soft_pwm_3
;
#ifdef SLOW_PWM_HEATERS
static
unsigned
char
state_heater_3
=
0
;
static
unsigned
char
state_timer_heater_3
=
0
;
#endif
#endif
#endif // !SINGLENOZZLE
#if HEATER_BED_PIN > -1
static
unsigned
char
soft_pwm_b
;
#endif
#ifdef SLOW_PWM_HEATERS
static
unsigned
char
state_heater_b
=
0
;
static
unsigned
char
state_timer_heater_b
=
0
;
#endif
#endif
#if defined(FILWIDTH_PIN) &&(FILWIDTH_PIN > -1)
static
unsigned
long
raw_filwidth_value
=
0
;
//added for filament width sensor
#endif
#ifndef SLOW_PWM_HEATERS
/*
* standard PWM modulation
*/
if
(
pwm_count
==
0
){
soft_pwm_0
=
soft_pwm
[
0
];
if
(
soft_pwm_0
>
0
)
{
WRITE
(
HEATER_0_PIN
,
1
);
#ifdef HEATERS_PARALLEL
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
1
);
#endif
#endif
}
else
WRITE
(
HEATER_0_PIN
,
0
);
#ifndef SINGLENOZZLE
#if EXTRUDERS > 1
#ifndef SINGLENOZZLE
#if EXTRUDERS > 1
soft_pwm_1
=
soft_pwm
[
1
];
if
(
soft_pwm_1
>
0
)
WRITE
(
HEATER_1_PIN
,
1
);
else
WRITE
(
HEATER_1_PIN
,
0
);
#endif
#if EXTRUDERS > 2
#endif
#if EXTRUDERS > 2
soft_pwm_2
=
soft_pwm
[
2
];
if
(
soft_pwm_2
>
0
)
WRITE
(
HEATER_2_PIN
,
1
);
else
WRITE
(
HEATER_2_PIN
,
0
);
#endif
#if EXTRUDERS > 3
#endif
#if EXTRUDERS > 3
soft_pwm_3
=
soft_pwm
[
3
];
if
(
soft_pwm_3
>
0
)
WRITE
(
HEATER_3_PIN
,
1
);
else
WRITE
(
HEATER_3_PIN
,
0
);
#endif
#endif // !SINGLENOZZLE
#endif
#endif // !SINGLENOZZLE
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
soft_pwm_b
=
soft_pwm_bed
;
if
(
soft_pwm_b
>
0
)
WRITE
(
HEATER_BED_PIN
,
1
);
else
WRITE
(
HEATER_BED_PIN
,
0
);
#endif
#ifdef FAN_SOFT_PWM
#endif
#ifdef FAN_SOFT_PWM
soft_pwm_fan
=
fanSpeedSoftPwm
/
2
;
if
(
soft_pwm_fan
>
0
)
WRITE
(
FAN_PIN
,
1
);
else
WRITE
(
FAN_PIN
,
0
);
#endif
#endif
}
if
(
soft_pwm_0
<
pwm_count
)
{
WRITE
(
HEATER_0_PIN
,
0
);
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
0
);
#endif
}
#ifndef SINGLENOZZLE
#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
#if EXTRUDERS > 3
if
(
soft_pwm_3
<
pwm_count
)
WRITE
(
HEATER_3_PIN
,
0
);
#endif
#endif // !SINGLENOZZLE
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
WRITE
(
HEATER_0_PIN
,
0
);
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
0
);
#endif
}
#ifndef SINGLENOZZLE
#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
#if EXTRUDERS > 3
if
(
soft_pwm_3
<
pwm_count
)
WRITE
(
HEATER_3_PIN
,
0
);
#endif
#endif // !SINGLENOZZLE
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
if
(
soft_pwm_b
<
pwm_count
)
WRITE
(
HEATER_BED_PIN
,
0
);
#endif
#ifdef FAN_SOFT_PWM
#endif
#ifdef FAN_SOFT_PWM
if
(
soft_pwm_fan
<
pwm_count
)
WRITE
(
FAN_PIN
,
0
);
#endif
#endif
pwm_count
+=
(
1
<<
SOFT_PWM_SCALE
);
pwm_count
&=
0x7f
;
#else //ifndef SLOW_PWM_HEATERS
/*
* SLOW PWM HEATERS
*
* for heaters drived by relay
*/
#ifndef MIN_STATE_TIME
#define MIN_STATE_TIME 16 // MIN_STATE_TIME * 65.5 = time in milliseconds
#endif
if
(
slow_pwm_count
==
0
)
{
// EXTRUDER 0
soft_pwm_0
=
soft_pwm
[
0
];
if
(
soft_pwm_0
>
0
)
{
// turn ON heather only if the minimum time is up
if
(
state_timer_heater_0
==
0
)
{
// if change state set timer
if
(
state_heater_0
==
0
)
{
state_timer_heater_0
=
MIN_STATE_TIME
;
}
state_heater_0
=
1
;
WRITE
(
HEATER_0_PIN
,
1
);
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
1
);
#endif
}
}
else
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_0
==
0
)
{
// if change state set timer
if
(
state_heater_0
==
1
)
{
state_timer_heater_0
=
MIN_STATE_TIME
;
}
state_heater_0
=
0
;
WRITE
(
HEATER_0_PIN
,
0
);
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
0
);
#endif
}
}
#if EXTRUDERS > 1
// EXTRUDER 1
soft_pwm_1
=
soft_pwm
[
1
];
if
(
soft_pwm_1
>
0
)
{
// turn ON heather only if the minimum time is up
if
(
state_timer_heater_1
==
0
)
{
// if change state set timer
if
(
state_heater_1
==
0
)
{
state_timer_heater_1
=
MIN_STATE_TIME
;
}
state_heater_1
=
1
;
WRITE
(
HEATER_1_PIN
,
1
);
}
}
else
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_1
==
0
)
{
// if change state set timer
if
(
state_heater_1
==
1
)
{
state_timer_heater_1
=
MIN_STATE_TIME
;
}
state_heater_1
=
0
;
WRITE
(
HEATER_1_PIN
,
0
);
}
}
#endif
#if EXTRUDERS > 2
// EXTRUDER 2
soft_pwm_2
=
soft_pwm
[
2
];
if
(
soft_pwm_2
>
0
)
{
// turn ON heather only if the minimum time is up
if
(
state_timer_heater_2
==
0
)
{
// if change state set timer
if
(
state_heater_2
==
0
)
{
state_timer_heater_2
=
MIN_STATE_TIME
;
}
state_heater_2
=
1
;
WRITE
(
HEATER_2_PIN
,
1
);
}
}
else
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_2
==
0
)
{
// if change state set timer
if
(
state_heater_2
==
1
)
{
state_timer_heater_2
=
MIN_STATE_TIME
;
}
state_heater_2
=
0
;
WRITE
(
HEATER_2_PIN
,
0
);
}
}
#endif
#if EXTRUDERS > 3
// EXTRUDER 3
soft_pwm_3
=
soft_pwm
[
3
];
if
(
soft_pwm_3
>
0
)
{
// turn ON heather only if the minimum time is up
if
(
state_timer_heater_3
==
0
)
{
// if change state set timer
if
(
state_heater_3
==
0
)
{
state_timer_heater_3
=
MIN_STATE_TIME
;
}
state_heater_3
=
1
;
WRITE
(
HEATER_3_PIN
,
1
);
}
}
else
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_3
==
0
)
{
// if change state set timer
if
(
state_heater_3
==
1
)
{
state_timer_heater_3
=
MIN_STATE_TIME
;
}
state_heater_3
=
0
;
WRITE
(
HEATER_3_PIN
,
0
);
}
}
#endif
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// BED
soft_pwm_b
=
soft_pwm_bed
;
if
(
soft_pwm_b
>
0
)
{
// turn ON heather only if the minimum time is up
if
(
state_timer_heater_b
==
0
)
{
// if change state set timer
if
(
state_heater_b
==
0
)
{
state_timer_heater_b
=
MIN_STATE_TIME
;
}
state_heater_b
=
1
;
WRITE
(
HEATER_BED_PIN
,
1
);
}
}
else
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_b
==
0
)
{
// if change state set timer
if
(
state_heater_b
==
1
)
{
state_timer_heater_b
=
MIN_STATE_TIME
;
}
state_heater_b
=
0
;
WRITE
(
HEATER_BED_PIN
,
0
);
}
}
#endif
}
// if (slow_pwm_count == 0)
// EXTRUDER 0
if
(
soft_pwm_0
<
slow_pwm_count
)
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_0
==
0
)
{
// if change state set timer
if
(
state_heater_0
==
1
)
{
state_timer_heater_0
=
MIN_STATE_TIME
;
}
state_heater_0
=
0
;
WRITE
(
HEATER_0_PIN
,
0
);
#ifdef HEATERS_PARALLEL
WRITE
(
HEATER_1_PIN
,
0
);
#endif
}
}
#if EXTRUDERS > 1
// EXTRUDER 1
if
(
soft_pwm_1
<
slow_pwm_count
)
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_1
==
0
)
{
// if change state set timer
if
(
state_heater_1
==
1
)
{
state_timer_heater_1
=
MIN_STATE_TIME
;
}
state_heater_1
=
0
;
WRITE
(
HEATER_1_PIN
,
0
);
}
}
#endif
#if EXTRUDERS > 2
// EXTRUDER 2
if
(
soft_pwm_2
<
slow_pwm_count
)
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_2
==
0
)
{
// if change state set timer
if
(
state_heater_2
==
1
)
{
state_timer_heater_2
=
MIN_STATE_TIME
;
}
state_heater_2
=
0
;
WRITE
(
HEATER_2_PIN
,
0
);
}
}
#endif
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// BED
if
(
soft_pwm_b
<
slow_pwm_count
)
{
// turn OFF heather only if the minimum time is up
if
(
state_timer_heater_b
==
0
)
{
// if change state set timer
if
(
state_heater_b
==
1
)
{
state_timer_heater_b
=
MIN_STATE_TIME
;
}
state_heater_b
=
0
;
WRITE
(
HEATER_BED_PIN
,
0
);
}
}
#endif
#ifdef FAN_SOFT_PWM
if
(
pwm_count
==
0
){
soft_pwm_fan
=
fanSpeedSoftPwm
/
2
;
if
(
soft_pwm_fan
>
0
)
WRITE
(
FAN_PIN
,
1
);
else
WRITE
(
FAN_PIN
,
0
);
}
if
(
soft_pwm_fan
<
pwm_count
)
WRITE
(
FAN_PIN
,
0
);
#endif
pwm_count
+=
(
1
<<
SOFT_PWM_SCALE
);
pwm_count
&=
0x7f
;
// increment slow_pwm_count only every 64 pwm_count circa 65.5ms
if
((
pwm_count
%
64
)
==
0
)
{
slow_pwm_count
++
;
slow_pwm_count
&=
0x7f
;
// Extruder 0
if
(
state_timer_heater_0
>
0
)
{
state_timer_heater_0
--
;
}
#if EXTRUDERS > 1
// Extruder 1
if
(
state_timer_heater_1
>
0
)
state_timer_heater_1
--
;
#endif
#if EXTRUDERS > 2
// Extruder 2
if
(
state_timer_heater_2
>
0
)
state_timer_heater_2
--
;
#endif
#if defined(HEATER_BED_PIN) && HEATER_BED_PIN > -1
// Bed
if
(
state_timer_heater_b
>
0
)
state_timer_heater_b
--
;
#endif
}
//if ((pwm_count % 64) == 0) {
#endif //ifndef SLOW_PWM_HEATERS
switch
(
temp_state
)
{
case
0
:
// Prepare TEMP_0
#if defined(TEMP_0_PIN) && (TEMP_0_PIN > -1)
...
...
@@ -1590,18 +1863,18 @@ ISR(TIMER0_COMPB_vect)
{
current_temperature_raw
[
0
]
=
raw_temp_0_value
;
#ifndef SINGLENOZZLE
#if EXTRUDERS > 1
current_temperature_raw
[
1
]
=
raw_temp_1_value
;
#endif
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
redundant_temperature_raw
=
raw_temp_1_value
;
#endif
#if EXTRUDERS > 2
current_temperature_raw
[
2
]
=
raw_temp_2_value
;
#endif
#if EXTRUDERS > 3
current_temperature_raw
[
3
]
=
raw_temp_3_value
;
#endif
#if EXTRUDERS > 1
current_temperature_raw
[
1
]
=
raw_temp_1_value
;
#endif
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
redundant_temperature_raw
=
raw_temp_1_value
;
#endif
#if EXTRUDERS > 2
current_temperature_raw
[
2
]
=
raw_temp_2_value
;
#endif
#if EXTRUDERS > 3
current_temperature_raw
[
3
]
=
raw_temp_3_value
;
#endif
#endif // !SINGLENOZZLE
current_temperature_bed_raw
=
raw_temp_bed_value
;
}
...
...
@@ -1636,54 +1909,54 @@ ISR(TIMER0_COMPB_vect)
}
#ifndef SINGLENOZZLE
#if EXTRUDERS > 1
#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
if
(
current_temperature_raw
[
1
]
<=
maxttemp_raw
[
1
])
{
#else
if
(
current_temperature_raw
[
1
]
>=
maxttemp_raw
[
1
])
{
#endif
max_temp_error
(
1
);
}
#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
if
(
current_temperature_raw
[
1
]
>=
minttemp_raw
[
1
])
{
#else
if
(
current_temperature_raw
[
1
]
<=
minttemp_raw
[
1
])
{
#endif
min_temp_error
(
1
);
}
#endif
#if EXTRUDERS > 2
#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
if
(
current_temperature_raw
[
2
]
<=
maxttemp_raw
[
2
])
{
#else
if
(
current_temperature_raw
[
2
]
>=
maxttemp_raw
[
2
])
{
#endif
max_temp_error
(
2
);
}
#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
if
(
current_temperature_raw
[
2
]
>=
minttemp_raw
[
2
])
{
#else
if
(
current_temperature_raw
[
2
]
<=
minttemp_raw
[
2
])
{
#endif
min_temp_error
(
2
);
}
#endif
#if EXTRUDERS > 3
#if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if
(
current_temperature_raw
[
3
]
<=
maxttemp_raw
[
3
])
{
#else
if
(
current_temperature_raw
[
3
]
>=
maxttemp_raw
[
3
])
{
#endif
max_temp_error
(
3
);
}
#if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if
(
current_temperature_raw
[
3
]
>=
minttemp_raw
[
3
])
{
#else
if
(
current_temperature_raw
[
3
]
<=
minttemp_raw
[
3
])
{
#endif
min_temp_error
(
3
);
}
#endif
#if EXTRUDERS > 1
#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
if
(
current_temperature_raw
[
1
]
<=
maxttemp_raw
[
1
])
{
#else
if
(
current_temperature_raw
[
1
]
>=
maxttemp_raw
[
1
])
{
#endif
max_temp_error
(
1
);
}
#if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
if
(
current_temperature_raw
[
1
]
>=
minttemp_raw
[
1
])
{
#else
if
(
current_temperature_raw
[
1
]
<=
minttemp_raw
[
1
])
{
#endif
min_temp_error
(
1
);
}
#endif
#if EXTRUDERS > 2
#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
if
(
current_temperature_raw
[
2
]
<=
maxttemp_raw
[
2
])
{
#else
if
(
current_temperature_raw
[
2
]
>=
maxttemp_raw
[
2
])
{
#endif
max_temp_error
(
2
);
}
#if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
if
(
current_temperature_raw
[
2
]
>=
minttemp_raw
[
2
])
{
#else
if
(
current_temperature_raw
[
2
]
<=
minttemp_raw
[
2
])
{
#endif
min_temp_error
(
2
);
}
#endif
#if EXTRUDERS > 3
#if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if
(
current_temperature_raw
[
3
]
<=
maxttemp_raw
[
3
])
{
#else
if
(
current_temperature_raw
[
3
]
>=
maxttemp_raw
[
3
])
{
#endif
max_temp_error
(
3
);
}
#if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
if
(
current_temperature_raw
[
3
]
>=
minttemp_raw
[
3
])
{
#else
if
(
current_temperature_raw
[
3
]
<=
minttemp_raw
[
3
])
{
#endif
min_temp_error
(
3
);
}
#endif
#endif // !SINGLENOZZLE
/* No bed MINTEMP error? */
...
...
@@ -1744,3 +2017,5 @@ float unscalePID_d(float d)
}
#endif //PIDTEMP
MarlinKimbra/temperature.h
View file @
b2569354
...
...
@@ -71,12 +71,14 @@ extern float current_temperature_bed;
float
scalePID_d
(
float
d
);
float
unscalePID_i
(
float
i
);
float
unscalePID_d
(
float
d
);
#endif
#ifdef PIDTEMPBED
extern
float
bedKp
,
bedKi
,
bedKd
;
#endif
#ifdef BABYSTEPPING
extern
volatile
int
babystepsTodo
[
3
];
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment