Bug in first layer calibration? Or Pinda broken?
Hi,
I think since the last beta, the first layer calibration is quite impossible for me to get right.
The problem is: each time I run the first layer calibration, I have to raise live Z. So I started with 700, was to flat. So I repeat and set to 680, to flat again. So I repeat and maybe got lucky with 660. So I repeat again with 660, and now the layer is to flat again. The game goes on and on.
So am I insane, is my PINDA broken (but it does read temperature and it triggers) or is my Pinda protector (that I also installed around the time I updated to the b143) a bad idea? But before I had the protector the Nefertiti print got very uneven on the upper head layers and started scratching the PINDA so maybe it is damaged. How can I find out if the PINDA is fully working?
I already did temperature calibration and PID calibration.
Does someone else have problems to get a constant first layer?
Regards!
Re: Bug in first layer calibration? Or Pinda broken?
Oh I see a pattern: the warmer the pinda the more squished the layers. And when I let the thing cool down, the layer is way too high!
Re: Bug in first layer calibration? Or Pinda broken?
Does the problem exist without the pinda protector?
Re: Bug in first layer calibration? Or Pinda broken?
Yes the problem is there without PINDA protector.
I reflashed firmware, did a factory reset, reflashed again. Still the problem is there and it is massive.
In this picture, on the left there is a little bit too squished first layer calibration square - on the right, there is the square with the same live adjust Z settings. Between both calibration runs, I move Z to ca 10cm and let the printer cool down to room temperature. At the first run it was printing just before, so it was warm/hot.
Is there a way to see if the temperature calibration table is present on my EINSY? Maybe it got erased in the EEPROM or something like this.
Re: Bug in first layer calibration? Or Pinda broken?
I measured PINDAs resistance to make sure the kOhms are somewhat in a sane range - seem so. Also the PINDA shows a sane temperature in the menu
So I really think my EINSY has f***t up somehow its temperature z level axis compensation table. How can I set this table to factory defaults? I looked shortly into the firmware and it seems that the table is stored in EEPROM. But the commands M502 M500 seem NOT to restore this table - so that could be a bug.
Any advice on how to factory reset my EINSY fully greatly appreciated!
I am mean: when the hardware seems OK it has to be software, right? Or is my EINSY broken?
Re: Bug in first layer calibration? Or Pinda broken?
Does someone know how to run Debug gcodes? I found this one which looks EXACTLY like the one which would save my day.
void dcode_8()
{
printf_P(PSTR("D8 - Read/Write PINDA\n"));
uint8_t cal_status = calibration_status_pinda();
float temp_pinda = current_temperature_pinda;
float offset_z = temp_compensation_pinda_thermistor_offset(temp_pinda);
if ((strchr_pointer[1+1] == '?') || (strchr_pointer[1+1] == 0))
{
printf_P(PSTR("cal_status=%d\n"), cal_status?1:0);
for (uint8_t i = 0; i < 6; i++)
{
uint16_t offs = 0;
if (i > 0) offs = eeprom_read_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + (i - 1));
float foffs = ((float)offs) / axis_steps_per_unit[Z_AXIS];
offs = 1000 * foffs;
printf_P(PSTR("temp_pinda=%dC temp_shift=%dum\n"), 35 + i * 5, offs);
}
}
else if (strchr_pointer[1+1] == '!')
{
cal_status = 1;
eeprom_write_byte((uint8_t*)EEPROM_CALIBRATION_STATUS_PINDA, cal_status);
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 0, 8); //40C - 20um - 8usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 1, 24); //45C - 60um - 24usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 2, 48); //50C - 120um - 48usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 3, 80); //55C - 200um - 80usteps
eeprom_write_word(((uint16_t*)EEPROM_PROBE_TEMP_SHIFT) + 4, 120); //60C - 300um - 120usteps
}
else
{
if (code_seen('P')) // Pinda temperature [C]
temp_pinda = code_value();
offset_z = temp_compensation_pinda_thermistor_offset(temp_pinda);
if (code_seen('Z')) // Z Offset [mm]
{
offset_z = code_value();
}
}
printf_P(PSTR("temp_pinda=%d offset_z=%d.%03d\n"), (int)temp_pinda, (int)offset_z, ((int)(1000 * offset_z) % 1000));
}
But a "D8 ?" gives me an "Unkown syntax"
Re: Bug in first layer calibration? Or Pinda broken?
If you look in Marlin_main.cpp you see that the part that calls dcode_8 is wrapped in a preprocessor macro:
#ifdef DEBUG_DCODES
else if (code_seen('D')) // D codes (debug)
{
switch((int)code_value())
{
case -1: // D-1 - Endless loop
dcode__1(); break;
case 0: // D0 - Reset
dcode_0(); break;
case 1: // D1 - Clear EEPROM
dcode_1(); break;
case 2: // D2 - Read/Write RAM
dcode_2(); break;
case 3: // D3 - Read/Write EEPROM
dcode_3(); break;
case 4: // D4 - Read/Write PIN
dcode_4(); break;
case 5: // D5 - Read/Write FLASH
// dcode_5(); break;
break;
case 6: // D6 - Read/Write external FLASH
dcode_6(); break;
case 7: // D7 - Read/Write Bootloader
dcode_7(); break;
case 8: // D8 - Read/Write PINDA
dcode_8(); break;
case 10: // D10 - XYZ calibration = OK
dcode_10(); break;
case 12: //D12 - Reset failstat counters
dcode_12(); break;
case 2130: // D9125 - TMC2130
dcode_2130(); break;
case 9125: // D9125 - PAT9125
dcode_9125(); break;
}
}
#endif //DEBUG_DCODES
The DEBUG_DCODES macro is defined in Configuration_prusa.h.
I'm guessing they build the official release of the firmware with this macro disabled? So you need to rebuild firmware with the DEBUG_DCODES macro defined, and then reflash to that custom firmware for the dcodes to work.
I think?
Re: Bug in first layer calibration? Or Pinda broken?
Yes I plan to compile my firmware tonight!
Thanks for pointing the location where to enable the flag
Re: Bug in first layer calibration? Or Pinda broken?
Please see this post where I propose a bugfix firmware that seems to solve this issue for me!
🙂