heaters: rework max heater value
remove the define USE_MAX_HEATER this will cost only neglabile space when not enabled on AVR.
This commit is contained in:
parent
4b3c6fee7b
commit
fb83d2de57
|
|
@ -234,17 +234,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO14, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -234,17 +234,6 @@ DEFINE_TEMP_SENSOR(extruder, TT_THERMISTOR, AIO3, THERMISTOR_EXTRUDER)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -228,17 +228,6 @@ DEFINE_TEMP_SENSOR(noheater, TT_INTERCOM, AIO0, 0)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -229,17 +229,6 @@ DEFINE_TEMP_SENSOR(extruder, TT_THERMISTOR, AIO5, THERMISTOR_EXTRUDER)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -242,17 +242,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, PIO1_0,THERMISTOR_BED)
|
|||
Pins which don't allow PWM are always operated in on/off mode.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -238,17 +238,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO2, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -239,17 +239,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO0, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -238,17 +238,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -236,17 +236,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO7, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -255,17 +255,6 @@
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -235,17 +235,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO1, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -240,17 +240,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO14, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -238,17 +238,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO11, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -236,17 +236,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -236,17 +236,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -236,17 +236,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO0, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -237,17 +237,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -234,17 +234,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -234,17 +234,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO0, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -236,17 +236,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO6, THERMISTOR_BED)
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
// #define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
|
||||
// name pin invert pwm max_pwm
|
||||
|
|
|
|||
|
|
@ -230,17 +230,6 @@
|
|||
influenced globally with FAST_PWM, see below.
|
||||
*/
|
||||
|
||||
/** \def MAX_PWM_ACTIVE
|
||||
Enable max_pwm value.
|
||||
|
||||
When you have a heater which has very huge power, you can reduce it.
|
||||
For example you have a 40W 12V heater and want to use it at 24V. At 24V
|
||||
the heater has 120W. To reduce it again to 40W set the max_pwm to 25%.
|
||||
|
||||
max_pwm values are allowed between 1 and 100.
|
||||
*/
|
||||
#define MAX_PWM_ACTIVE
|
||||
|
||||
//DEFINE_HEATERS_START
|
||||
//DEFINE_HEATERS_END
|
||||
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ class HeatersPage(wx.Panel, Page):
|
|||
self.font = font
|
||||
self.id = idPg
|
||||
|
||||
self.labels = {'MAX_PWM_ACTIVE':"Activate max. PWM [%]"}
|
||||
|
||||
sz = wx.GridBagSizer()
|
||||
sz.AddSpacer((30, 30), pos = (0, 0))
|
||||
|
||||
|
|
@ -26,13 +24,6 @@ class HeatersPage(wx.Panel, Page):
|
|||
sz.Add(self.lb, pos = (1, 1))
|
||||
sz.AddSpacer((20, 20), pos = (1, 2))
|
||||
|
||||
k = 'MAX_PWM_ACTIVE'
|
||||
cb = self.addCheckBox(k, self.onCheckBox)
|
||||
cb.SetToolTipString("Enable all max. PWM [%] values.")
|
||||
|
||||
sz.Add(cb, pos = (2, 1))
|
||||
sz.AddSpacer((20, 20), pos = (2, 2))
|
||||
|
||||
bsz = wx.BoxSizer(wx.VERTICAL)
|
||||
|
||||
self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size = BSIZESMALL)
|
||||
|
|
|
|||
54
heater-avr.c
54
heater-avr.c
|
|
@ -21,17 +21,9 @@ typedef struct {
|
|||
/// Wether the heater pin signal needs to be inverted.
|
||||
uint8_t invert;
|
||||
volatile uint8_t *heater_pwm; ///< pointer to 8-bit PWM register, eg OCR0A (8-bit) or ORC3L (low byte, 16-bit)
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
uint16_t max_value;
|
||||
#endif
|
||||
uint16_t max_value;
|
||||
} heater_definition_t;
|
||||
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
#define HEATER_MAX_VALUE(max_value) (max_value * 64 + 12) / 25) /* scale 100% = 256 */
|
||||
#else
|
||||
#define HEATER_MAX_VALUE(dummy)
|
||||
#endif
|
||||
|
||||
#undef DEFINE_HEATER_ACTUAL
|
||||
/// \brief helper macro to fill heater definition struct from config.h
|
||||
#define DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, max_value) { \
|
||||
|
|
@ -39,7 +31,7 @@ typedef struct {
|
|||
pin ## _PIN, \
|
||||
invert ? 1 : 0, \
|
||||
pwm ? (pin ## _PWM) : NULL, \
|
||||
HEATER_MAX_VALUE(max_value)\
|
||||
((max_value * 64 + 12) / 25) \
|
||||
},
|
||||
static const heater_definition_t heaters[NUM_HEATERS] =
|
||||
{
|
||||
|
|
@ -225,31 +217,31 @@ void heater_init() {
|
|||
anything done by this function is overwritten by heater_tick above if the heater has an associated temp sensor
|
||||
*/
|
||||
void heater_set(heater_t index, uint8_t value) {
|
||||
if (index >= NUM_HEATERS)
|
||||
return;
|
||||
if (index < NUM_HEATERS) {
|
||||
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
value = (uint8_t)((heaters[index].max_value * value + 128) / 256);
|
||||
#endif
|
||||
heaters_runtime[index].heater_output = value;
|
||||
heaters_runtime[index].heater_output = value;
|
||||
|
||||
if (heaters[index].heater_pwm) {
|
||||
*(heaters[index].heater_pwm) = heaters[index].invert ?
|
||||
(255 - value) : value;
|
||||
if (heaters[index].heater_pwm) {
|
||||
|
||||
value = (uint8_t)((heaters[index].max_value * value) / 256);
|
||||
|
||||
if (DEBUG_PID && (debug_flags & DEBUG_PID))
|
||||
sersendf_P(PSTR("PWM{%u = %u}\n"), index, *heaters[index].heater_pwm);
|
||||
}
|
||||
else {
|
||||
if ((value >= HEATER_THRESHOLD && ! heaters[index].invert) ||
|
||||
(value < HEATER_THRESHOLD && heaters[index].invert))
|
||||
*(heaters[index].heater_port) |= MASK(heaters[index].heater_pin);
|
||||
else
|
||||
*(heaters[index].heater_port) &= ~MASK(heaters[index].heater_pin);
|
||||
}
|
||||
*(heaters[index].heater_pwm) = heaters[index].invert ?
|
||||
(255 - value) : value;
|
||||
|
||||
if (value)
|
||||
power_on();
|
||||
if (DEBUG_PID && (debug_flags & DEBUG_PID))
|
||||
sersendf_P(PSTR("PWM{%u = %u}\n"), index, *heaters[index].heater_pwm);
|
||||
}
|
||||
else {
|
||||
if ((value >= HEATER_THRESHOLD && ! heaters[index].invert) ||
|
||||
(value < HEATER_THRESHOLD && heaters[index].invert))
|
||||
*(heaters[index].heater_port) |= MASK(heaters[index].heater_pin);
|
||||
else
|
||||
*(heaters[index].heater_port) &= ~MASK(heaters[index].heater_pin);
|
||||
}
|
||||
|
||||
if (value)
|
||||
power_on();
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* defined TEACUP_C_INCLUDE && defined __AVR__ */
|
||||
|
|
|
|||
23
heater-lpc.c
23
heater-lpc.c
|
|
@ -51,11 +51,7 @@
|
|||
frequency, so you should bother about PWM_SCALE only of you need frequencies
|
||||
below 3 Hz.
|
||||
*/
|
||||
#ifndef MAX_PWM_ACTIVE
|
||||
#define PWM_SCALE 255
|
||||
#else
|
||||
#define PWM_SCALE 1020
|
||||
#endif
|
||||
#define PWM_SCALE 255
|
||||
|
||||
/** \struct heater_definition_t
|
||||
|
||||
|
|
@ -70,26 +66,18 @@ typedef struct {
|
|||
/// Pointer to the port for non-PWM pins.
|
||||
__IO uint32_t* masked_port;
|
||||
};
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
uint16_t max_value;
|
||||
#endif
|
||||
uint8_t uses_pwm;
|
||||
uint8_t invert;
|
||||
} heater_definition_t;
|
||||
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
#define HEATER_MAX_VALUE(max_value) (max_value * 64 + 12) / 25), /* scale 100% = 256 */
|
||||
#else
|
||||
#define HEATER_MAX_VALUE(dummy)
|
||||
#endif
|
||||
|
||||
#undef DEFINE_HEATER_ACTUAL
|
||||
#define DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, max_value) \
|
||||
{ \
|
||||
{ pwm && pin ## _TIMER ? \
|
||||
&(pin ## _TIMER->MR[pin ## _MATCH]) : \
|
||||
&(pin ## _PORT->MASKED_ACCESS[MASK(pin ## _PIN)]) }, \
|
||||
HEATER_MAX_VALUE(max_value) /*no comma here!*/ \
|
||||
((max_value * 64 + 12) / 25), \
|
||||
pwm && pin ## _TIMER, \
|
||||
invert ? 1 : 0 \
|
||||
},
|
||||
|
|
@ -144,7 +132,7 @@ void heater_init() {
|
|||
*/
|
||||
// Auto-generate pin setup.
|
||||
#undef DEFINE_HEATER_ACTUAL
|
||||
#define DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, max_value) \
|
||||
#define DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, ...) \
|
||||
if (pwm && pin ## _TIMER) { \
|
||||
uint32_t freq; \
|
||||
\
|
||||
|
|
@ -209,11 +197,8 @@ void heater_set(heater_t index, uint8_t value) {
|
|||
uint32_t pwm_value;
|
||||
|
||||
// Remember, we scale, and the timer inverts already.
|
||||
#ifdef MAX_PWM_ACTIVE
|
||||
pwm_value = (uint32_t)((heaters[index].max_value * value) * (PWM_SCALE / 255) / 256);
|
||||
#else
|
||||
pwm_value = (uint32_t)value * (PWM_SCALE / 255);
|
||||
#endif
|
||||
|
||||
if ( ! heaters[index].invert)
|
||||
pwm_value = PWM_SCALE - pwm_value;
|
||||
*heaters[index].match = pwm_value;
|
||||
|
|
|
|||
Loading…
Reference in New Issue