New Firmware flavour "MarlinHOH"

After nearly one year of understanding and improvement of the basic printing function I started to activate my second extruder.

I tried some dual nozzle prints at the very beginning, having a lot of trouble with nozzle adjustment, in x-direction as well as in Z direction. I tried some workarounds but finally failed in the first time.

In the meantime I have some upgraded nozzle design (details later), so I had to deal with the nozzle offset only. I thought of an alignment procedure, which helps to adjust the nozzles and gives an easy approach for the offset correction of the nozzles.
This offset correction has to be done within the printer, and the Marlin firmware has the option to do this. Unfortunately I failed by using the implemented way, finally a small modification was necessary.

However, this was the initial reason for a review of the firmware (once again).
So based on my first modification I checked possible improvements and my own expectations for a proper firmware and did some programming work. The results is the firmware flavor "MarlinHOH".
This firmware is implementing the following features:
- correct PID control of all heaters
- Hardware-PCM control for all heaters
- Autotune-procedure for all heaters
- Decoupling of temperature measurement by separate interrupt routine.
- updated SD-Card library with support of long filenames
- changed internal GCODE handling, small support programs can be implemented nearly as-is
- checksum protection of printer parameters: in case of error the failsave settings will be loaded
- the internationalisation of the messages is installed for en/de/fr and can be selected within the menu.
- menu support for nozzle alignment (two heads only)
- time critical tasks now completely interrupt driven.

In parallel I removed subsequently some unused hardware options and, for the SD card handling, the nesting function (at least temporary).

The Internationalization is implemented and I provide two examples for a different language than english yet : german and french. I think that the translations can become a little bit better, but for the beginning it is a good proof of concept. For additional languages see my request below.

When using two extruders the offset handling is implemented as a function of the firmware. The slicer has to provide the tool-commands only (T0, T1), the slicing shall be done without offset between the extruders. Within the firmware the lext extruder is taken as T1, the right one T0. This definition is maintained for the LCD display too.

I tested the program with my own printer: all functions are working with one or two extruder and nowadays a heat bed (my printer is always running with the latest version).
The adaptation for your printer has to be done in the "configuration.h" file:

#define EXTRUDERS <n>    put here your extruder count 1 or 2 and select the proper thermistor type
#define TEMP_SENSOR_BED 0 is disabling the heat bed, by setting a proper thermistor type the heat bed is enabled.

Before installation I recommend to note all optimisations, they will be overridden by the default values in the new firmware. After first switch on of the new firmware you can put the values in manually and store them in the EEPROM. They will maintain unchanged in the next revisions (no further activity necessary).

After installation I strongly recommend a tuning of the PID-Parameter because the settings will differ for each assembly and I have no statistics available for a good starting set.
You need to run "M303 Ex Syyy U" for each extruder, with x the tool number and yyy the target temperature for your material. The resulting parameters must be stored into the eeprom  finally.

For the compilation of the program you need an arduino version of 1.6.5 or higher (tested with Arduino 1.8.3).

The latest source file archive can be downloaded here:
MarlinHOH V0.7a (04.012018)

Changes to 0.7:
- Error handling for heat bed disabled when there is no T-Sensor defined
- Translation errors corrected

Changes to 0.6:
- language selection by menu: en/de/fr
- error handling reviewed
- soft ramp up for heaters implemented (especially for my heated bed)
- small bugfixes.

Actually this version is in between Alpha version: the basic functionality is given, special features are mostly tested. Therefore I would appreciate any feedback on bugs, problems or urgent feature requests.
For the language support I would be happy if anyone would like to have his own language in the menu. Therefore I put in the languages folder a template file (language_INT.h), which can be translated by a contributor in his mother toung.
You can mail me the file to my dedicated email account.
 
Good luck and happy printing.
email address

Older versions are:

MarlinHOH V0.6 (12.12.2017)

As referernce you can find my compiled version (two heads, no bed, Thermistor type 1 for both extruders):
MarlinHOH.hex (v0.6, 2 heads) (15.12.2017)

Changes to 0.5:
- Communication protocol with external controllers like octoprint reviewed and corrected
- EEPROM storage  extended: Pressure advance parameters and language selection will be stored
- GCODE M110 implemented
- small bugfixes.

MarlinHOH V0.5 (21.11.2017)

As referernce you can find my compiled version (two heads, no bed, Thermistor type 1 for both extruders):
MarlinHOH.hex (v0.5, 2 heads) (21.11.2017)

Changes to 0.4:
- data loss on usb-connection prevented (timing issue for RX data, now fully and only interrupt driven)
- Menu selection for extrusion parameters refined (finer resolution)
- Pressure advance mechanism switched to interrupt.
- small bugfixes.

MarlinHOH_V0.4 (21.9.2017)

As referernce you can find my compiled version (two heads, no bed, Thermistor type 1 for both extruders):
MarlinHOH.hex (v0.4, 2 heads) (21.9.2017)

Changes to V0.3:
-Procedure call from gcode files has been disabled (not working with buffered commands as implemented)
-external communication "protocol" has been reviewed and corrected.
-Heater optimisation routine reviewed.
-All messages prepared for internationalisation
-general bug removals.

MarlinHOH_v0.3 (27.8.2017)

As reference you can get my compiled version as reference (two heads, no bed, Thermistor type 1 for both extruders):
MarlinHOH.hex (v0.3, 2 heads) (27.8.2017)