Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
// sim_heater.cpp
#include "config.h"
#ifdef SIM_HEATER
#include "sim_heater.h"
#include <inttypes.h>
#include "adc.h"
#include "sim_nozzle.h"
#include "sim_bed.h"
#define SIM_HEATER_MULTI 5 // time multiply
#define SIM_HEATER_DELAY 0.05F // cycle delay in ms
extern "C"
{
uint8_t sim_heater_flags = 0x00;
#define _OV(v) v
const short _heater_table[][2] =
{
{ _OV( 23), 300 },
{ _OV( 25), 295 },
{ _OV( 27), 290 },
{ _OV( 28), 285 },
{ _OV( 31), 280 },
{ _OV( 33), 275 },
{ _OV( 35), 270 },
{ _OV( 38), 265 },
{ _OV( 41), 260 },
{ _OV( 44), 255 },
{ _OV( 48), 250 },
{ _OV( 52), 245 },
{ _OV( 56), 240 },
{ _OV( 61), 235 },
{ _OV( 66), 230 },
{ _OV( 71), 225 },
{ _OV( 78), 220 },
{ _OV( 84), 215 },
{ _OV( 92), 210 },
{ _OV( 100), 205 },
{ _OV( 109), 200 },
{ _OV( 120), 195 },
{ _OV( 131), 190 },
{ _OV( 143), 185 },
{ _OV( 156), 180 },
{ _OV( 171), 175 },
{ _OV( 187), 170 },
{ _OV( 205), 165 },
{ _OV( 224), 160 },
{ _OV( 245), 155 },
{ _OV( 268), 150 },
{ _OV( 293), 145 },
{ _OV( 320), 140 },
{ _OV( 348), 135 },
{ _OV( 379), 130 },
{ _OV( 411), 125 },
{ _OV( 445), 120 },
{ _OV( 480), 115 },
{ _OV( 516), 110 },
{ _OV( 553), 105 },
{ _OV( 591), 100 },
{ _OV( 628), 95 },
{ _OV( 665), 90 },
{ _OV( 702), 85 },
{ _OV( 737), 80 },
{ _OV( 770), 75 },
{ _OV( 801), 70 },
{ _OV( 830), 65 },
{ _OV( 857), 60 },
{ _OV( 881), 55 },
{ _OV( 903), 50 },
{ _OV( 922), 45 },
{ _OV( 939), 40 },
{ _OV( 954), 35 },
{ _OV( 966), 30 },
{ _OV( 977), 25 },
{ _OV( 985), 20 },
{ _OV( 993), 15 },
{ _OV( 999), 10 },
{ _OV(1004), 5 },
{ _OV(1008), 0 },
{ _OV(1012), -5 },
{ _OV(1016), -10 },
{ _OV(1020), -15 }
};
int sim_heater_temp2val(float temp)
{
int i;
int v0;
int v1;
int t0;
int t1;
int cnt = sizeof(_heater_table) / (2 * sizeof(short));
for (i = 1; i < cnt; i++)
{
v0 = _heater_table[i - 1][0];
v1 = _heater_table[i][0];
t0 = _heater_table[i - 1][1];
t1 = _heater_table[i][1];
//if ((t0 <= temp) && (t1 >= temp))
if ((t1 <= temp) && (t0 >= temp))
return v0 + (temp - t0) * (v1 - v0) / (t1 - t0);
}
return -1;
}
void sim_heater_init(void)
{
sim_nozzle_init();
sim_bed_init();
sim_heater_flags = 0x03;
}
void sim_heater_cycle(void)
{
if (sim_heater_flags == 0) return;
float temp;
int val;
#ifdef SIM_HEATER_NOZZLE_ADC
if (adc_sim_msk & (1 << SIM_HEATER_NOZZLE_ADC))
{
temp = sim_nozzle_cycle(SIM_HEATER_MULTI*SIM_HEATER_DELAY) - 273.15F;
val = (4 * sim_heater_temp2val(temp));
adc_sim_val[SIM_HEATER_NOZZLE_ADC] = val;
}
#endif //SIM_HEATER_NOZZLE_ADC
#ifdef SIM_HEATER_BED_ADC
if (adc_sim_msk & (1 << SIM_HEATER_BED_ADC))
{
temp = sim_bed_cycle(SIM_HEATER_MULTI*SIM_HEATER_DELAY) - 273.15F;
val = (4 * sim_heater_temp2val(temp));
adc_sim_val[SIM_HEATER_BED_ADC] = val;
}
#endif //SIM_HEATER_BED_ADC
}
} // extern "C"
#endif //SIM_HEATER
efe9a7c8eThis file is pinned to the selected release. Download the original to open it in your design tool.